Open the panel

Limits PRO ​

Limits keep the API fast for every store. They are per store, so more keys don't mean more requests.

WhatLimit
Reads600 per minute (10 per second)
Changes120 per minute
Deliveries60 per minute and 5,000 per day
Reports20 per minute
All requests200,000 per day
At the same time5 requests
Page size50 by default, up to 200
Batch500 items per request
Request body64 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:

HeaderMeaning
X-RateLimit-LimitThe limit per minute.
X-RateLimit-RemainingRequests left in this minute.
X-RateLimit-ResetSeconds 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:

json
{
  "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:

js
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))
  }
}
python
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
// 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=200 beats four with limit=50.
  • Use batches. PATCH /products changes 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.