x-api-key ou, se nenhuma chave de API for enviada, o endereço IP do seu cliente. Cada escopo mantém um contador independente com uma janela deslizante de 60 segundos.
Identificador e isenções
O middleware escolhe o identificador do limite de requisições nesta ordem:- Cabeçalho
x-api-key→ contador por chave. - Primeiro salto de
X-Forwarded-For→ contador por IP. REMOTE_ADDR→ contador por IP.
- A
DIDIT_WEBAPP_API_KEYinterna (usada apenas pelo console da Didit). - Endpoints protegidos pela permissão
IsValidSession(o tráfego de sessões incorporadas e de SDK). GET /system/healthcheck(atendido peloHealthMiddlewareantes desta pilha).- Webhooks de provedores: Stripe, análise AML, callbacks de verificação facial e alterações de listas de KYC.
Limites globais
Toda requisição autenticada também é agrupada por método HTTP em um escopo genérico, para que qualquer rota nova herde um padrão razoável:
Os limites específicos específicos de cada endpoint (próxima seção) se aplicam além do limite global. O primeiro escopo que exceder seu contador é o que retorna
429.
Limites específicos por endpoint
O middleware define escopos mais rígidos para as rotas de maior impacto:GET /v3/session/<id>/decision/ é atendido pela SessionV3RetrieveView e não faz parte do escopo session-decision. Ele está sujeito apenas ao teto de 600/min do generic-get. O limite de 100/min para decisões se aplica aos endpoints de decisão v1 e v2.Formato da resposta 429
Quando você excede o limite de qualquer escopo, recebe um HTTP429 com este corpo e estes cabeçalhos:
Os cabeçalhos
X-RateLimit-* são emitidos apenas na resposta 429: hoje, as respostas bem-sucedidas não os incluem. Use o valor de Retry-After (ou X-RateLimit-Reset - now) como o intervalo de espera antes da próxima tentativa.
Orientações para o cliente
- Respeite o
Retry-Aftercomo o valor mínimo para o backoff. Sobre ele, aplique um backoff exponencial com jitter (5s → 10s → 20s → 40s ± random) para que dois clientes que recebam429ao mesmo tempo não se sincronizem. - Pare de tentar novamente após um limite baixo (por exemplo, 5 tentativas). Repasse o erro a seu chamador e alerte sua equipe: 429s persistentes geralmente indicam um loop descontrolado, não um pico passageiro.
- Use um identificador por carga de trabalho. Compartilhar uma
x-api-keyentre vários backends coloca todos no mesmo contador, o que pode fazer com que uma aplicação que consome muitos recursos esgote a capacidade dos demais. Crie uma aplicação separada (e, portanto, umaapi_keyseparada) por ambiente, marca ou cliente. Consulte Registro programático. - Armazene em cache as leituras de decisão. Os endpoints
/decision/não foram projetados para loops de polling intensos; se você precisa de atualizações em tempo real, use Webhooks e chameGET /v3/session/<id>/decision/apenas para preenchimento retroativo ou auditoria. - Gere PDFs de forma assíncrona. A renderização de PDF consome muita CPU (teto de 50/min). Dispare-a a partir de uma fila depois que a sessão atingir um status final, e não a cada visualização de página.
Exemplo de cliente que trata 429
Precisa de mais capacidade?
Se 600 sessões por minuto não forem suficientes, por exemplo em um lançamento de marketing ou em um backfill, envie um e-mail para support@didit.me com o UUID da suaapplication e as taxas esperadas, tanto a sustentada quanto a de pico. Os ajustes de limite são configurados por aplicação.