Pular para o conteúdo principal
A Didit aplica várias camadas de limite de requisições para manter a API estável e, ao mesmo tempo, permitir picos de tráfego saudáveis. Os limites são aplicados por identificador: sua 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:
  1. Cabeçalho x-api-key → contador por chave.
  2. Primeiro salto de X-Forwarded-For → contador por IP.
  3. REMOTE_ADDR → contador por IP.
As chamadas a seguir ignoram totalmente o limite de requisições:
  • A DIDIT_WEBAPP_API_KEY interna (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 pelo HealthMiddleware antes 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.
O código também define FREE_SESSION_RATE_LIMIT = 10 e PAID_SESSION_RATE_LIMIT = 600. Essas constantes não são aplicadas atualmente ao POST /v3/session/: esse endpoint usa o limite único de 600/min do session-v2-create para todas as aplicações. Não planeje sua capacidade com base em um limite do plano gratuito por fluxo de verificação (workflow) até que ele esteja documentado como ativo.

Formato da resposta 429

Quando você excede o limite de qualquer escopo, recebe um HTTP 429 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-After como 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 recebam 429 ao 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-key entre 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, uma api_key separada) 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 chame GET /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 sua application e as taxas esperadas, tanto a sustentada quanto a de pico. Os ajustes de limite são configurados por aplicação.
Última modificação em 1 de novembro de 2026