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

PlanRequests/hour
Free10
Pro100
Max1.000
Ultra10.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-Afterseconds until the window resets
  • X-RateLimit-Limityour current hourly limit
  • X-RateLimit-ResetUnix 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.