Limits PRO
Limits keep the API fast for every store. They are per store, so more keys don't mean more requests.
| What | Limit |
|---|---|
| Reads | 600 per minute (10 per second) |
| Changes | 120 per minute |
| Deliveries | 60 per minute and 5,000 per day |
| Reports | 20 per minute |
| All requests | 200,000 per day |
| At the same time | 5 requests |
| Page size | 50 by default, up to 200 |
| Batch | 500 items per request |
| Request body | 64 KB |
Each route in the reference shows which limit it uses. Daily limits reset at 00:00 UTC. When your store reaches one, you get a single IM in Second Life.
See where you stand
Every answer carries three headers for the limit that route uses:
| Header | Meaning |
|---|---|
X-RateLimit-Limit | The limit per minute. |
X-RateLimit-Remaining | Requests left in this minute. |
X-RateLimit-Reset | Seconds until the minute resets. |
GET /me shows today's totals in usage.
When you reach a limit
The answer is 429, with how long to wait in the Retry-After header and in the body:
{
"error": {
"code": "RATE_LIMITED",
"message": "Limit of 20 reports per minute reached.",
"retry_after": 37,
"request_id": "req_62csqsmw6e1r86"
}
}Wait that long and try again:
async function withRetry(makeRequest, tries = 4) {
for (let i = 0; ; i++) {
const res = await makeRequest()
if (res.status !== 429 || i === tries - 1) return res
const wait = Number(res.headers.get('retry-after') ?? 5)
await new Promise((done) => setTimeout(done, wait * 1000))
}
}import time
def with_retry(make_request, tries=4):
for i in range(tries):
res = make_request()
if res.status_code != 429 or i == tries - 1:
return res
time.sleep(int(res.headers.get("Retry-After", 5)))// LSL can't read the headers: the wait is in the body too
if (status == 429)
llSetTimerEvent((float)llJsonGetValue(body, ["error", "retry_after"]));Staying under the limits
- Ask for bigger pages. One request with
limit=200beats four withlimit=50. - Use batches.
PATCH /productschanges up to 500 products for the price of one request. - Don't ask again for what you already know. Remember a license check for a while instead of checking on every touch.
- Let Fasty tell you. To react to sales, webhooks push each one to you, with no requests at all.
Wrong keys
Sending a wrong key 30 times in 15 minutes blocks that address for 15 minutes, for any key. If you see 429 on every request, check your key first.
Second Life's own limit
An LSL script has one more limit, set by Second Life itself: one object can send about 25 requests every 20 seconds. See Using the API from LSL.