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/hourNotes
Free100Enough to evaluate and integrate.
Pro1.000Covers most imaging centers.
Clinic5.000For PMS or marketplace integrations.
Ultra10.000Standard ceiling. Above this request Enterprise.
Enterprise> 10,000 (custom)Custom agreement + dedicated SLA. Email soporte@cbcthub.com.
Sandbox keys (cbct_test_*) use a separate bucket with 1,000 req/h, independent of plan. They do not consume your production quota.

You can see real-time consumption per key at /dashboard/api/usage (hourly chart, calls per endpoint and recent 429s).

When you exceed the limit

http
HTTP/1.1 429 Too Many Requests
Retry-After: 1847
X-RateLimit-Limit: 1000
X-RateLimit-Reset: 1780201234

{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit exceeded (1000 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 a custom Enterprise agreement.