When you’re throttled
Rate-limited requests return HTTP429 with the body {"message": "Rate limit exceeded"}. Back off before retrying and add jitter to smooth bursts.
A query over the cost, depth, or alias limits is rejected with HTTP 400 instead, with GRAPHQL_VALIDATION_FAILED in the GraphQL errors array. Retrying won’t help: remove fields or split the query. Rate limits lists the limits and how query cost is counted.
Best practices
- Ask for less. Trim your selection set to the fields you actually use.
- Fetch lists in pages. A query that returns 20 items costs the same as one that returns a single item, and far less than 20 separate requests.
- Use webhooks instead of polling. See Configure App Widget for webhook setup.
- Retry with exponential backoff and jitter — never in a tight loop.
- Refresh access tokens ahead of expiry to avoid 401 → mint-token → retry cycles under load.