x-api-key ou, se não for enviada nenhuma chave de API, o endereço IP do seu cliente. Cada âmbito mantém um contador independente, com uma janela deslizante de 60 segundos.
Identificador e exceções
O middleware escolhe um identificador de limitação de pedidos por esta 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 pela consola do Didit). - Endpoints protegidos pela permissão
IsValidSession(tráfego de sessões incorporadas e do SDK). GET /system/healthcheck(servido peloHealthMiddlewareantes desta pilha).- Webhooks de fornecedores: Stripe, triagem AML, retornos de chamada de verificação facial e alterações a listas KYC.
Limites globais
Cada pedido autenticado é também agrupado por método HTTP num âmbito genérico, para que qualquer nova rota herde um valor por defeito razoável:
As criações de transações e a ingestão de eventos contam para
ingest-write em vez de generic-write: uma integração de ingestão de grande volume obtém 600 pedidos por minuto por chave de API sem consumir o orçamento das suas outras escritas.
Os limites específicos de endpoints (secção seguinte) aplicam-se para além do limite global. O primeiro âmbito a exceder o respetivo contador é o que devolve 429.
Limites específicos de endpoints
O middleware define âmbitos mais restritivos para as rotas de maior impacto:GET /v3/session/<id>/decision/ é servido por SessionV3RetrieveView e não está no âmbito session-decision. Está sujeito apenas ao teto de 600/min de generic-get. O limite de 100/min aplica-se apenas aos caminhos de decisão v1 e v2.Formato da resposta 429
Ao exceder qualquer âmbito, recebe um429 HTTP com este corpo e estes cabeçalhos:
Os cabeçalhos
X-RateLimit-* só são enviados na resposta 429; as respostas bem-sucedidas não os incluem atualmente. Use o valor de Retry-After (ou X-RateLimit-Reset - now) como atraso antes da próxima tentativa.
Orientações para clientes
- Respeite
Retry-Aftercomo o mínimo do seu tempo de espera. Sobre esse mínimo, aplique um backoff exponencial com variação aleatória (jitter) (5s → 10s → 20s → 40s ± random), para que dois clientes que recebam429ao mesmo tempo não se sincronizem. - Deixe de tentar novamente após um limite reduzido (por exemplo, 5 tentativas). Devolva o erro ao seu chamador e alerte a sua equipa: respostas 429 persistentes costumam indicar um ciclo descontrolado, e não um pico pontual.
- Use um identificador por carga de trabalho. Partilhar um
x-api-keyentre vários backends junta-os no mesmo contador, o que pode fazer com que um vizinho ruidoso deixe os restantes sem recursos. Crie uma aplicação separada (e, por conseguinte, umapi_keyseparado) por ambiente, marca ou cliente; veja Registo programático. - Guarde em cache as leituras de decisão. Os endpoints
/decision/não foram concebidos para ciclos de polling apertados. Se precisar de atualizações em tempo real, use Webhooks e chameGET /v3/session/<id>/decision/apenas para preenchimento retroativo ou auditoria. - Gere os PDF offline. A geração de PDF está limitada pela CPU (limite de 50/min). Acione-a a partir de uma fila depois de a sessão atingir um estado final, e não em cada visualização de página.
Cliente de exemplo com tratamento de 429
Precisa de mais capacidade?
Se 600 sessões por minuto não forem suficientes, por exemplo para um lançamento de marketing ou um preenchimento retroativo, envie um e-mail para support@didit.me com o UUID da suaapplication e as taxas esperadas, sustentadas e de pico. As substituições são configuradas por aplicação.