API Rate Limits
Every request to the Discovery API is counted against a rate limit. This document explains what the limits are, which API version you have to be on to get the higher ones, how to tell how much budget you have left, and what to do when you run out.
Overview
Rate limits used to be simple and low: 60 requests per minute per user, on every version of the API.
The latest API version raises that substantially. If you are calling the latest version, you now get:
- 1,000 requests per minute per user, and
- 1,000 requests per minute per tenant, shared by everyone in your organization.
Both limits are enforced at the same time. Older API versions are unchanged at 60 requests per minute.
Limits by API version
| API version | Limit |
|---|---|
2026-07-01 (latest) |
1,000/min per user and 1,000/min per tenant |
2024-01-01 (v1) |
60/min per user |
2018-01-01 (beta) |
60/min per user |
To get the higher limit you must call the latest (2026-07-01) version. Pointing an existing integration at /api/2026-07-01/... instead of /api/v1/... or /api/beta/... is the entire upgrade as far as rate limiting is concerned — there is nothing to request or enable.
The beta version (/api/beta ) is scheduled to be sunset on January 1, 2027. Integrations still on beta should be moved to the current version before then.
How the 1,000 is shared
On the latest version, two counters run at once — yours and your organization's — and a request is refused as soon as either is full. Because both ceilings are 1,000, one integration can spend the organization's entire budget, or several can share it. Nothing reserves a share for anyone: whoever spends it first has it.
There is no per-token budget. Counters are keyed to the user who owns the token, so a second token for the same user adds no capacity. To give integrations separate counters, give them separate users.
Exceptions
Still limited to 60/min per IP, because no token means no user or tenant to budget for:
- Signed download URLs — report CSVs, invoice PDFs, document downloads.
- Any unauthenticated request.
The MCP surface used by AI clients has its own separate 60/min limit.
Handling limits in your client
Every response carries X-RateLimit-Limit and X-RateLimit-Remaining . When both counters are in play, these report whichever has the least room left — so X-RateLimit-Remaining is always what you can actually still spend.
Exceeding a limit returns 429 Too Many Requests with a Retry-After header.
- Treat 429 as retriable: sleep for
Retry-Afterseconds, then retry. Windows reset 60 seconds after a counter's first request, not at the top of each clock minute, so readRetry-Afterrather than waiting for:00.
Requests are counted, not weighed
Every request costs exactly one, however much data it returns. So the cheapest thing you can do is ask for more per request:
- Use
?include=to pull related data in one call, instead of fetching a list and then making one request per row. That N+1 pattern is what actually exhausts a 1,000/minute budget. - Raise
?per_page=when paginating. The current version defaults to 15 and allows up to 200, turning a 3,000-record export from 200 requests into 15.
Heavy requests are still slower to serve and receive — they just don't cost extra against the limit.
If you have additional questions or need more in depth information, please feel free to send us a message using the help beacon in the lower right-hand corner.