Rate limits
Limites de uso por plano
Aplicamos rate limit por API key, em uma janela móvel de 1 hora. Os uploads diretos ao R2 com URLs pré-assinadas NÃO contam contra esse limite — só as chamadas aos endpoints /v1/* contam.
Limites por plano
| Plano | Requests/hora | Notas | |
|---|---|---|---|
| Free | 100 | — | Suficiente para avaliar e integrar. |
| Pro | 1.000 | — | Cobre a maioria dos centros de radiologia. |
| Clínica | 5.000 | — | Para integrações com PMS ou marketplaces. |
| Ultra | 10.000 | — | Teto padrão. Acima disso solicite Enterprise. |
| Enterprise | > 10.000 (sob medida) | — | Acordo sob medida + SLA dedicado. Escreva para soporte@cbcthub.com. |
As keys de sandbox (cbct_test_*) usam um bucket separado com 1.000 req/h, independente do plano. Não consomem sua cota de produção.
Você pode ver o consumo em tempo real de cada key em /dashboard/api/usage (gráfico por hora, chamadas por endpoint e 429 recentes).
Quando você excede o limite
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
}
}Headers de resposta
Em cada resposta 429 incluímos esses headers para você implementar backoff corretamente:
Retry-After— segundos até a janela ser resetadaX-RateLimit-Limit— seu limite atual por horaX-RateLimit-Reset— timestamp Unix de quando reseta
Boas práticas
- Faça cache da resposta de GET /v1/me — não chame antes de cada operação.
- Para upload em massa, paralelize com um semáforo (ex.: 10 concorrentes).
- Se você precisar de >10.000 requests/hora sustentado, fale conosco: montamos um acordo Enterprise sob medida.