Skip to main content
To protect the platform, the infrastructure in front of https://qwoty.app can reject requests that arrive in bursts, with an HTTP 429 Too Many Requests response. The API does not expose a quota you can query, so your integration must expect 429 responses and retry. Contractual usage limits per plan are described in the Fair use policy.

What to expect

  • A 429 can be returned by any endpoint, typically when many requests are sent in a very short time.
  • Do not rely on rate-limit headers (such as X-RateLimit-* or Retry-After): they are not guaranteed to be present. If a Retry-After header is present, wait at least that long.
  • A 429 means the request was not processed. It is safe to send it again later.

Retry with exponential backoff

When you receive a 429 (or a 5xx), wait before retrying, and double the wait after each failed attempt. Add a little randomness (jitter) so that parallel workers don’t retry at the same moment, and stop after a few attempts.
JavaScript
Python
Only retry 429 and 5xx. Other 4xx errors will fail again until you fix the request (see Error handling).

Avoid bursts

  • Send requests sequentially or with a small, fixed concurrency (a few requests in parallel), rather than firing hundreds at once.
  • Spread bulk jobs over time. For large imports, process records in batches with a short pause between batches. For a one-off initial load of products and prices, consider the CSV import in the app instead (see Data migration).
  • Use list endpoints. Fetch a list once (for example List Products with limit, or List Prices with limit and offset) instead of one GET per object.
  • Cache what rarely changes, such as catalogs, categories and payment terms.
  • React to webhooks instead of polling. See Webhooks.

Need more throughput?

If your use case requires sustained high volumes, contact support@qwoty.io and describe the expected request rate.
Last modified on October 27, 2026