ZingaShop

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?