ZingaShopSign in

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 in Retry-After (or use exponential backoff) before retrying.
  • Batch where possible. Prefer paging with a larger limit over 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()
Was this helpful?