Rate limits
Usage limits per plan
We apply rate limit per API key, in a 1-hour rolling window. Direct uploads to R2 with presigned URLs do NOT count against this limit — only /v1/* endpoint calls count.
Limits per plan
| Plan | Requests/hour | ||
|---|---|---|---|
| Free | 10 | — | |
| Pro | 100 | — | |
| Max | 1.000 | — | |
| Ultra | 10.000 | — |
When you exceed the limit
http
HTTP/1.1 429 Too Many Requests
Retry-After: 1847
X-RateLimit-Limit: 100
X-RateLimit-Reset: 1780201234
{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded (100 requests/hour). Retry in 1847s.",
"retry_after_seconds": 1847
}
}Response headers
On every 429 response we include these headers so you can implement backoff correctly:
Retry-After— seconds until the window resetsX-RateLimit-Limit— your current hourly limitX-RateLimit-Reset— Unix timestamp when it resets
Best practices
- Cache GET /v1/me responses — do not call it before every operation.
- For batch uploads, parallelize with a semaphore (e.g. 10 concurrent).
- If you need >10,000 requests/hour sustained, contact us: we set up an enterprise agreement.