Skip to main content

Rate limiting

Two separate rate limits apply depending on which endpoint you are calling. Both assume an authenticated client — see Authentication for getting and caching a token.

Token endpoint

The POST /oauth/token endpoint allows 100 requests per hour per client_id. Token caching is the primary mitigation — a correctly cached token needs at most one token request per hour.

A 429 response from the token endpoint:

{
"error": "too_many_requests",
"error_description": "Rate limit exceeded for OAuth token requests. Maximum 100 requests per hour allowed. Try again in 420 seconds."
}

The error_description includes the number of seconds until the window resets. Wait that duration before retrying.

GraphQL API

The GraphQL endpoint allows 3600 requests per hour per IP address. Every response includes rate limit headers:

HeaderDescription
X-RateLimit-LimitMaximum requests allowed in the current window
X-RateLimit-RemainingRequests remaining before the limit is hit
X-RateLimit-ResetUnix timestamp when the window resets

A 429 from the GraphQL endpoint is a plain HTTP response — not a GraphQL error envelope:

HTTP 429 Too Many Requests

Too many requests from this IP, please try again later

Do not attempt to parse it as a GraphQL response.

Handling 429 responses

  1. Check X-RateLimit-Reset — wait until that Unix timestamp before retrying.
  2. If the header is absent, use exponential backoff starting at 1 second.
  3. Monitor X-RateLimit-Remaining proactively and slow down requests before hitting zero.
  4. Never retry immediately on a 429 — the request will fail again.