In short
Retry-After. Retry 503 with backoff; retry 500 on reads, and on writes only with an Idempotency-Key.X-Request-Id of a failing request when you contact support.rate_limit_per_min.| Header | Meaning |
|---|---|
X-RateLimit-Limit | Requests allowed per minute |
X-RateLimit-Remaining | Requests left in the current window |
X-RateLimit-Reset | When the window resets, in Unix seconds |
Over the limit, requests get 429 RATE_LIMITED with a Retry-After header: the number of seconds until the next window, never longer than the window itself. Repeated failed authentication from one IP address is throttled separately.
| Response | Retry? | How |
|---|---|---|
| 429 RATE_LIMITED | Yes | Wait for Retry-After, then retry. Safe on every operation. |
| 503 SERVICE_UNAVAILABLE | Yes | We were briefly out of capacity. Wait the seconds in Retry-After, then retry with exponential backoff and jitter. |
| 500 INTERNAL_ERROR | Reads, yes | Retry reads with backoff. Before retrying a write, check whether it landed, or send it with Idempotency-Key where the operation accepts one. |
| Any other 4xx | No | The request will fail the same way. Fix it first. |
A request whose database work runs longer than about 15 seconds is stopped and returns 500 INTERNAL_ERROR. If a read keeps hitting that limit, narrow its filters or ask for a smaller page.
request_id, once you give up.Every response carries an X-Request-Id header that we generate, starting with req_, and every error repeats it in the body as request_id. Quote it in any support request. If you send your own X-Request-Id header, we log it next to ours so you can join your logs to our records, but responses always carry the id we generated.
limit accepts 1 to 200 and defaults to 50. A larger value is refused with 400, not silently clamped.offset accepts 0 to 10,000. Past that, use updated_since or narrower filters instead of paging deeper. See Lots and incremental sync.has_more to decide whether to fetch the next page.