Limites de requisições
A Certivant aplica um limite de requisições por minuto baseado no plano — aprenda a ler os cabeçalhos de limite, a tratar respostas 429, a repetir chamadas corretamente e a projetar a sua integração para ficar abaixo do limite.
A Certivant aplica um limite de requisições da API por minuto para proteger a plataforma contra clientes descontrolados e vizinhos barulhentos. Fique abaixo do limite e você nunca verá throttling; ultrapassá-lo resulta em um 429 com cabeçalhos que informam exatamente quando tentar novamente.
O limite
O seu teto por minuto é definido pelo seu plano. O operador da plataforma também pode conceder um limite personalizado por cliente, que é sempre limitado ao teto do plano. O número efetivo é o que o cabeçalho X-RateLimit-Limit informa em cada resposta — leia-o em vez de fixar um valor no código.
| Taxa | Baseada no plano (veja os padrões abaixo). Informada em X-RateLimit-Limit |
| Janela | Janela fixa de 60 segundos |
| Backend | Redis (INCR + EXPIRE) |
| Medição | Por chave de API. Cada chave é medida de forma independente em relação ao teto do seu plano |
| Endpoints públicos | Sujeitos a um limite por IP mais baixo (60/min) para evitar abusos |
Limites padrão por plano
| Nível do plano | Teto padrão |
|---|---|
| Free / Launch / Starter | 60 requisições por minuto |
| Pro / Scale / Growth | 300 requisições por minuto |
| Enterprise | 600 requisições por minuto |
Estes são os valores padrão — o operador da plataforma pode ajustar o teto por plano e conceder à sua organização um limite personalizado mais alto (até o teto do plano). Você pode ver o limite efetivo da sua organização, somente para leitura, no painel em KYC → Desenvolvedor.
Se você precisar de um teto mais alto para o tráfego de produção, peça ao seu contato de conta (ou, em implantações self-hosted, ao operador da plataforma) para elevar o teto do seu plano ou o seu limite personalizado.
Cabeçalhos de resposta (em toda resposta autenticada)
Toda resposta de sucesso inclui o estado atual do limite de requisições:
| Cabeçalho | Tipo | Significado |
|---|---|---|
X-RateLimit-Limit | inteiro | Máximo de requisições por janela — o teto efetivo do seu plano |
X-RateLimit-Remaining | inteiro | Requisições restantes na janela atual |
X-RateLimit-Reset | inteiro | Segundos até a janela voltar ao limite total |
HTTP/1.1 200 OK
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 117
X-RateLimit-Reset: 42
Content-Type: application/json
{ "data": [...], "pagination": {...} }
Leia esses cabeçalhos no seu cliente para desacelerar de forma proativa — não espere por um 429 se você já vê X-RateLimit-Remaining: 3.
A resposta 429
Ao ultrapassar o limite, a próxima requisição retorna:
HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 18
Content-Type: application/json
{
"success": false,
"error": {
"code": "RATE_LIMITED",
"message": "Rate limit exceeded. Max 120 requests per 60s. Retry in 18s."
}
}
X-RateLimit-Reset informa exatamente quanto tempo esperar. Use-o em vez de adivinhar.
Estratégia de novas tentativas
O manipulador correto mais simples:
async function withRateLimit<T>(fn: () => Promise<Response>): Promise<T> {
while (true) {
const res = await fn();
if (res.status !== 429) {
if (!res.ok) throw await readError(res);
return res.json() as Promise<T>;
}
const retryAfterSec = Number(res.headers.get("X-RateLimit-Reset") ?? 60);
await sleep(retryAfterSec * 1000 + 100); // pad by 100ms for clock skew
}
}
Três propriedades a manter:
- Respeite o
X-RateLimit-Reset. Um intervalo menor apenas bate no limite de novo. - Adicione cerca de 100 ms de folga para compensar a diferença de relógio entre a sua máquina e a borda da Certivant.
- Limite suas tentativas se a requisição não for crítica. Insistir por 5 minutos em uma listagem não urgente desperdiça recursos dos dois lados.
Como projetar para respeitar o limite
| Padrão | Efeito no limite de requisições |
|---|---|
Use webhooks em vez de consultar GET /requests/:id (polling) | Reduz o volume de requisições em cerca de 99% nas integrações típicas |
Agrupe as listagens com limit=100 em vez de limit=20 | 5 vezes menos chamadas para os mesmos dados |
Armazene em cache as respostas de GET por janelas curtas (5–30 s) | Reduz leituras duplicadas |
| Use chaves separadas para cargas de trabalho com muita leitura e com muita escrita | Cada chave é medida de forma independente em relação ao teto do seu plano |
| Tire os jobs de longa duração do seu manipulador de webhooks | Evita rajadas de chamadas quando chega uma pilha de eventos |
A maior economia vem de usar webhooks. A principal causa de chamados de suporte do tipo "estou atingindo o limite de requisições" são integrações que fazem polling para detectar mudanças de estado — não faça isso; configure webhooks no lugar.
Comportamento em rajadas
O limite é aplicado como uma janela fixa: a primeira requisição inicia um contador de 60 segundos, e cada requisição conta contra o seu teto até que a janela seja reiniciada. Distribua o tráfego contínuo de forma uniforme, em vez de disparar todo o orçamento do minuto nos primeiros segundos.
Se você tiver um padrão de rajada conhecido (por exemplo, um job em lote diário que processa 500 registros), espace as chamadas:
for (const record of records) {
await processOne(record);
await sleep(500); // 2 req/s — comfortably under typical ceilings
}
O que acontece quando o Redis está inacessível
Se a instância do Redis usada para os limites de requisições estiver temporariamente inacessível, a Certivant falha aberta — ela não bloqueia o seu tráfego. Você verá respostas 2xx normais, sem os cabeçalhos X-RateLimit-*. Quando o Redis voltar, a aplicação normal do limite será retomada. Isso significa que uma falha do Redis do nosso lado não interrompe a sua integração.
A entrega de webhooks é separada
O limite de requisições se aplica às suas chamadas de saída para a Certivant. As entregas de webhook de entrada, da Certivant para o seu endpoint, não consomem nenhuma cota. Não existe um "limite de webhooks" com o qual você precise se preocupar.
Endpoints públicos
Os endpoints que não exigem chave de API (GET /api/status, GET /api/kyc/public/status, os endpoints de envio de formulário) têm um limite de requisições por IP separado, de 60 requisições por minuto. Esse limite se aplica ao endereço IP de quem chama, e não a uma chave de API. Ele é definido de forma conservadora porque esses endpoints são acessíveis sem autenticação; se a sua interface voltada ao solicitante estiver atingindo esse limite, direcione as chamadas pelo seu próprio backend, para que compartilhem um IP sob o seu controle.
Erros
Todos os códigos de erro da API da Certivant explicados — formato da resposta, correspondência com códigos HTTP, orientações de tratamento por código e um wrapper robusto de novas tentativas que você pode incluir na sua integração.
Esquemas e enumerações
Tipos TypeScript canônicos para cada esquema compartilhado da Certivant — status das requisições, tipos de documento, tipos de verificação, formato da pontuação de risco, campos do solicitante e da entidade KYB, envelope do webhook e paginação.