Skip to main content

Rate Limits and Errors

GIFQ API rate limits, the error model, and every HTTP status code you'll encounter.

This reference covers how the GIFQ API throttles requests and how it reports errors, so your integration can retry cleanly and surface useful messages.

Rate limiting

Each API token is throttled at 10 requests per second. Tokens are independent — traffic on one integration does not affect another.

If a request lacks an X-Api-Token header, it falls back to IP-based throttling under the same limit. Authenticate every request from your application.

Exceeding the limit returns HTTP 429 with a Retry-After header indicating how many seconds to wait. Read the header and pause for that duration. Do not implement a custom backoff that ignores it.

Error model

Errors return a JSON body with a message field and status: "error". Failed order creations additionally return a request_id — keep it. If you need support, that ID is the fastest way for the team to find your exact request.

Status codes you'll see

  • 200 / 201 — success.

  • 400 — malformed request, or an out-of-range pagination page. Restart from page 1 if pagination drifts out of range.

  • 401 — missing or invalid X-Api-Token.

  • 422 — an order or payout could not be created. Causes include validation errors, insufficient balance, or catalog drift (a product changed between read and order). Includes a request_id.

  • 429 — rate limited. Honor the Retry-After header.

Pagination edge case

List endpoints use a page query parameter with an optional limit (default 10, max 20). Requesting a page beyond total-pages returns HTTP 400. Iterate until current-page equals total-pages, and restart from page 1 if you hit an out-of-range error.

Handling errors well

  • Use idempotency on orders. Pass a unique reference per order so a retry after a network blip doesn't double-charge.

  • Respect Retry-After. It's the contract for backing off cleanly under load.

  • Log the request_id on every 422 so support can trace failures fast.

Did this answer your question?