Skip to main content

How quotas work

Every API key has a daily quota that resets at midnight UTC. Every request to /api/v1/* counts as one.

Rate limit headers

Every response includes three headers:
The rate_limit field in the response body contains the same information:

Handling 429 responses

When you exceed your quota:
No Retry-After header is sent on a 429 — use X-RateLimit-Reset, as the examples below do.Until July 2026 the API did send Retry-After, carrying the ISO-8601 reset timestamp. That violates RFC 9110 — which permits only delay-seconds or an HTTP-date — so retry adapters that read the header automatically (urllib3 Retry, axios-retry) could not parse it. It was removed rather than converted: the quota resets at midnight UTC, so the only correct delay-seconds value ranges up to 86400, and those same adapters would honour it by sleeping for hours.If your client reads Retry-After, switch it to X-RateLimit-Reset and apply your own backoff policy.

Planning your quota

The underlying GEX data updates every 15 minutes (Lambda capture). Polling more often than that doesn’t yield new data. A typical trading bot pattern:
  • term-oi for BTC + ETH every 15 min = 2 × 4 = 8 req/hour
  • by-strike-enhanced for 2-3 expirations every 15 min = ~10 req/hour
  • Discovery endpoints (rare, cached locally) = 1-2 req/day
Total: ~430 req/day for a busy bot — comfortably within the 500/day Pro quota.

Running out of quota?

  • Cache responses locally. The data only changes every 15 min.
  • Use the virtual all exchange instead of calling each exchange separately.
  • Reduce polling frequency to once every 30 min if you don’t need sub-15-min latency.
  • Contact us at admin@gammaflip.io if you need a higher custom limit.