rate_limit_per_min set at creation.
- The budget belongs to the key (an app install token, an agent key, or the account for a
user JWT). It is shared by every Agent Gateway route,
/api/v1/agent/v1/*and/api/v1/agent/2026-08/*, whichever engine serves the route. - The window is fixed: it starts with your first request and resets 60 seconds later.
- Every call counts as one request, however much it returns or changes. Batch endpoints are the
way to do more per request:
GET /products?include=variants&limit=250reads 250 products with their variants, andPOST /products/variants/bulk_updatewrites 250 variants. - The unauthenticated
GET /healthprobe is exempt.
Headers
Every authenticated response, including a429, carries:
A
429 also carries Retry-After (seconds) and the body error_code: RATE_LIMIT_ERROR.
Pacing
Read the headers instead of guessing:- Keep a small reserve. When
RateLimit-Remainingdrops below about 10% of the limit, waitRateLimit-Resetseconds before the next non-urgent call. - Spread background work (syncs, bulk jobs) over the window rather than bursting, so interactive calls from the same install still get through.
- Use the batch endpoints and
fields=to cut the number of calls. - On
429, wait exactlyRetry-Afterseconds, then retry. Writes carry an Idempotency-Key, so retrying a429’d write with the same key is safe.