Rate Limiting¶
The API enforces rate limits to protect platform stability. Limits are applied per OAuth2 application.
How It Works¶
Application-Level Rate Limit¶
Every OAuth2 application has a configurable rate limit. This is a global bucket -- all requests to any endpoint count toward the same limit.
View-Level Rate Limit¶
Some endpoints enforce a stricter per-endpoint limit in addition to the application-level limit. When configured, each (application, endpoint) pair gets its own counter. Both limits must pass for a request to succeed.
Response Headers¶
Every response includes rate-limit headers reflecting the most constrained active limit:
| Header | Description |
|---|---|
X-RateLimit-Limit |
Maximum requests allowed in the current window |
X-RateLimit-Remaining |
Requests remaining in the current window |
X-RateLimit-Reset |
Seconds until the window resets |
Rate Limit Exceeded (429)¶
When the rate limit is exceeded, the API responds with HTTP 429 and a Retry-After header:
{
"errors": [
{
"status": "429",
"detail": "Request was throttled. Expected available in 42 seconds.",
"source": {"pointer": "/data"}
}
]
}
Headers on 429 responses:
Best Practices¶
- Monitor headers: check
X-RateLimit-Remainingto throttle requests client-side before hitting the limit - Respect
Retry-After: always wait the indicated time before retrying after a 429 - Exponential backoff: use exponential backoff when retrying after rate-limit errors
- Request only what you need: use pagination with reasonable page sizes and filter results to reduce the number of API calls