Rate Limits
Rate limits protegem a plataforma e garantem qualidade de serviço para todos os tenants. Aplicamos três camadas independentes, e a primeira que estourar responde 429:
- Por chave de API: janela por minuto, com o limite definido na própria key
- Por IP e por tenant: defesa contra abuso, contada em janela de 1 hora
- Por endpoint: controle granular em endpoints caros (emissão de relatório, coleta de fingerprint, operações administrativas)
Limite da sua chave
Seção intitulada “Limite da sua chave”O limite da superfície de API key é por chave e por minuto, e é definido no momento em que a key é criada, no console, em Desenvolvedores, API Keys, campo rate_limit_per_min. O valor aceito vai de 1 a 60.000 requisições por minuto. Key criada sem esse campo cai no default do servidor, que é 60 requisições por minuto.
Tetos de infraestrutura aplicados acima da sua chave, em janela de 1 hora:
| Camada | Limite | Observação |
|---|---|---|
| Por IP | 5.000 req/h | Vale para toda a API |
| Por tenant | 100.000 req/h | Vale para toda a API |
| Login e autenticação | 1.000 req/h por IP | Janela separada, protege /auth/* |
Endpoints caros têm um teto próprio por hora, aplicado antes do handler. Exemplos medidos: emissão de relatório regulatório, 50 por hora; coleta de fingerprint e operações administrativas, 600 por hora. Esses endpoints respondem 429 com Retry-After: 3600.
Headers de quota
Seção intitulada “Headers de quota”Os headers de quota não aparecem em toda resposta. Eles são emitidos apenas pelas rotas que passam por um limitador que os escreve:
| Header | Onde aparece | Significado |
|---|---|---|
X-RateLimit-Limit |
Superfície de API key, busca de clientes, rate limit por ator e endpoints com teto horário | Limite da janela daquele limitador |
X-RateLimit-Remaining |
Mesmas rotas acima | Quantas chamadas restam na janela corrente |
X-RateLimit-Reset |
Busca de clientes e rate limit por ator | Duração da janela em segundos (por exemplo 60), e não um unix timestamp |
Na superfície de API key (/api/v1/vasp/*), a resposta traz:
X-RateLimit-Limit: 600X-RateLimit-Remaining: 587Os limitadores por IP e por tenant que valem para toda a API não emitem headers de quota: eles só se manifestam no 429 com Retry-After.
Resposta 429
Seção intitulada “Resposta 429”O envelope do 429 depende de qual camada disparou. Trate sempre pelo status HTTP e pelo header Retry-After, que estão presentes nos dois casos.
Superfície de API key:
HTTP/1.1 429 Too Many RequestsRetry-After: 60Content-Type: application/json{ "success": false, "error": { "code": "api_key_rate_limit_exceeded", "message": "API key rate limit exceeded" }}Limitador por IP, por tenant ou por endpoint:
HTTP/1.1 429 Too Many RequestsRetry-After: 3600Content-Type: application/json{ "success": false, "error": "Too many requests. Please try again later.", "retry_after": 3600}Boas práticas
Seção intitulada “Boas práticas”1. Respeite Retry-After
Seção intitulada “1. Respeite Retry-After”Não chute o backoff: use o header. Ele vem em segundos e reflete a janela real do limitador que disparou.
2. Use Idempotency-Key onde a rota suporta
Seção intitulada “2. Use Idempotency-Key onde a rota suporta”curl -X POST https://api.crypto.sentinexrisk.com/api/v1/vasp/screenings \ -H "Idempotency-Key: txn_12345_attempt_1" \ -H "X-API-Key: $SENTINEX_API_KEY" \ -H "Content-Type: application/json" \ -d @payload.jsonO suporte a Idempotency-Key é por rota, não global. Ver Idempotência para a lista do que foi medido.
3. Webhook em vez de polling
Seção intitulada “3. Webhook em vez de polling”Não fique batendo GET /vasp/alerts?status=OPEN. Assine alert.created e receba push (ver Webhooks).
4. Cache no seu lado, sem depender de header nosso
Seção intitulada “4. Cache no seu lado, sem depender de header nosso”A API não emite ETag e não emite Cache-Control: max-age em rota de leitura: onde há header de cache, ele é no-store ou no-cache. Se você quiser cachear leitura pouco volátil, faça isso no seu serviço com um TTL escolhido por você, ciente de que o dado pode ter mudado.
Aumentar limite
Seção intitulada “Aumentar limite”- Ajuste o
rate_limit_per_minda key no console, em Desenvolvedores, API Keys - Para elevar os tetos de IP, tenant ou endpoint, ou para picos programados:
dev-support@sentinexrisk.comcom (a) RPS desejado, (b) janela de pico, (c) justificativa
Ambiente de testes
Seção intitulada “Ambiente de testes”O sandbox público ainda está em provisionamento e não tem hostname dedicado publicado. Para teste funcional, use a chave de ambiente de teste (snxc_test_...) fornecida pelo suporte, com o limite por minuto acordado gravado na própria chave.