Rate limits
Rate limits
The API is rate limited to protect the platform and keep it responsive for
everyone.
The limit
By default, requests are limited to 120 requests per 60-second window per
client IP address. When you exceed it, the API responds with:
HTTP/1.1 429 Too Many Requests
Retry-After: 60
{ "detail": "rate_limit_exceeded" }
The Retry-After header tells you how many seconds to wait before retrying.
Handling 429s
- Back off and retry. When you receive a
429, pause for the number of
seconds inRetry-After(or use exponential backoff) before retrying. - Batch where possible. Prefer paging with a larger
limitover many small
requests, and adjust inventory or prices in as few calls as the endpoint
allows. - Spread bulk work. For large imports or syncs, add a small delay between
requests so you stay under the window.
Background operations
Some operations return 202 Accepted and run in the background rather than
counting against a tight synchronous budget — for example triggering a
sales-channel sync or sending a message. Poll the
relevant status endpoint (or listen on a webhook) instead of holding the request
open.
A resilient client
A minimal robust pattern:
import time, requests
def call(method, url, **kw):
for attempt in range(5):
r = requests.request(method, url, **kw)
if r.status_code != 429:
return r
time.sleep(int(r.headers.get("Retry-After", 60)))
r.raise_for_status()