Overview
The API enforces two independent rate limits to ensure fair usage and system stability. Both must pass for a request to proceed.
| Limit | Value |
|---|---|
| Requests per minute | 500 per API key |
| Request timeout | 60 seconds |
| Complexity budget | 750 points per API key, refills every 15 seconds |
| Max query complexity | 750 points per query |
Request rate limit
Each API key can make up to 500 requests per minute. This limit applies regardless of query complexity, every request counts as one.
Response headers
Every response includes request rate limit headers:
| Header | Description | Example |
|---|---|---|
X-RateLimit-Remaining | Requests remaining in the current window | 487 |
X-RateLimit-Reset | When the rate limit window resets (RFC 1123) | Sun, 02 Mar 2026 15:30:45 UTC |
Complexity rate limit
In addition to the request limit, each API key has a complexity budget. Every query has a complexity score based on the fields and nesting depth you request. The more data your query asks for, the higher its cost.
- Your budget starts at 750 points and refills fully every 15 seconds (50 points per second).
- Each query consumes points equal to its complexity score, with a minimum cost of one point.
- Queries with a complexity score above 750 are rejected before execution.
How complexity is calculated
Complexity is determined by static analysis of your query before it runs. Deeper nesting and more fields increase the score. The X-Complexity-Cost header on every response tells you what your query cost.
Response headers
Every response includes complexity rate limit headers:
| Header | Description | Example |
|---|---|---|
X-Complexity-Cost | Complexity score consumed by this query | 46 |
X-Complexity-Remaining | Points remaining in your complexity budget | 704 |
X-Complexity-Limit | Maximum budget capacity | 750 |
X-Complexity-Reset | When the next complexity point restores (RFC 1123) | Sun, 02 Mar 2026 15:30:45 UTC |
Handling rate limits
When you receive a 429 Too Many Requests response, you have exceeded either the request limit or the complexity budget.
- Check the
Retry-Afterheader to determine when to retry - Back off and retry after the indicated time
- Do not retry immediately, repeated 429s will not reset the window
When throttled by the complexity budget, the response body includes a GraphQL error:
{
"errors": [
{
"message": "Complexity budget exhausted. Try a less complex query or wait for your budget to restore.",
"extensions": {
"code": "THROTTLED"
}
}
]
}Best practices
- Batch related data into a single query. GraphQL lets you request multiple fields in one request, use this to reduce your request count.
- Request only the fields you need. Smaller queries have lower complexity scores so you can make more of them before exhausting your budget.
- Monitor your headers. Watch
X-RateLimit-RemainingandX-Complexity-Remainingto slow down before hitting limits rather than reacting to 429s. - Avoid deeply nested queries. Nesting increases complexity quickly so if you need data from multiple levels consider breaking it into separate queries.
Need help?
If you run into any issues or have questions, please reach out to our Support Engineering team by opening a ticket via the Dashboard: https://dashboard.meter.com/support