Quantas chamadas por dia a sua integração pode fazer em cada rota, como saber o quanto ainda resta
e o que acontece quando o teto é atingido.Nem toda rota tem quota#
A quota é opt-in por rota: só vale onde há uma política cadastrada, e cada política vale para um
par método + caminho. Rota sem política cadastrada não tem teto — e é a situação da grande maioria
dos endpoints da API pública hoje.Hoje há duas rotas com quota, as duas aberturas de solicitação:| Rota | Quota padrão |
|---|
POST /api/v1/fgts/applications | 100 chamadas por dia |
POST /api/v1/clt/applications | 100 chamadas por dia |
São as duas portas de entrada da originação, e as chamadas mais caras da plataforma: a do FGTS
dispara cotação em todas as bancarizadoras elegíveis ao mesmo tempo, e a do CLT abre a verificação
do consentimento na Dataprev. As duas têm baldes separados — gastar as 100 do FGTS não tira nada
do CLT.Acompanhar o que você já abriu não consome quota. GET /applications/{id},
GET /applications/{id}/status, o KYC, o aceite e as demais rotas seguem sem teto — o polling do
fluxo de originação não é penalizado. Se uma rota nova passar a ter quota, ela aparece nesta tabela
antes de entrar em vigor.A quota é por parceiro, e o dia vira à meia-noite#
O contador é do parceiro, não da chave de API: se você opera com mais de uma chave, todas somam
no mesmo balde. E o dia é o dia civil no fuso de Brasília (America/Sao_Paulo) — à meia-noite o
saldo volta cheio, sem janela deslizante e sem carregar sobra de um dia para o outro.Como saber quanto resta#
Toda resposta de uma rota com quota traz três headers:| Header | O que diz |
|---|
DailyQuota-Limit | seu teto do dia nessa rota |
DailyQuota-Remaining | quantas chamadas ainda restam |
DailyQuota-Reset | segundos até o saldo voltar cheio |
DailyQuota-Reset é uma duração, não um horário. É de propósito: um instante só faz sentido
junto do relógio e do fuso de quem o lê, e relógio de máquina dessincronizado produziria uma conta
errada em silêncio. Some os segundos ao seu próprio relógio se precisar de uma hora.Os três headers estão expostos no CORS, então uma integração que roda no browser também os lê.Se os headers não vierem em alguma resposta, trate como ausência de informação, e não como quota
zerada: a plataforma prefere deixar a chamada passar sem contabilizar a publicar um número em que
não confia.Quando o teto é atingido#
A chamada seguinte responde 429, e não chega a ser processada — nada é criado do outro lado.{
"error": {
"code": "QUOTA_EXCEEDED",
"message": "Você atingiu a quota diária de 100 chamadas em POST /api/v1/fgts/applications. Para ampliar o limite, fale com o suporte da Unno.",
"correlation_id": "0f1c2d3e-4a5b-6c7d-8e9f-0a1b2c3d4e5f"
}
}
Retry-After traz os segundos que faltam para a virada do dia. Repetir antes disso só devolve outro
429: diferente de RATE_LIMIT_EXCEEDED, que é transitório e passa em segundos, QUOTA_EXCEEDED
não se resolve esperando um pouco — ou você espera a virada, ou o teto precisa subir.Os dois códigos chegam com o mesmo status. Distinga pelo error.code, nunca pelo 429 sozinho.Uma falha nossa não consome sua quota: se a plataforma responder 5xx, a chamada é devolvida ao seu
saldo do dia.Bloqueio não é quota esgotada#
Existe um segundo desfecho, e ele não é 429:{
"error": {
"code": "ACCESS_BLOCKED",
"message": "O acesso da sua empresa a POST /api/v1/fgts/applications está bloqueado. Entre em contato com o seu contato comercial na Unno.",
"correlation_id": "0f1c2d3e-4a5b-6c7d-8e9f-0a1b2c3d4e5f"
}
}
ACCESS_BLOCKED é uma decisão administrativa sobre a sua empresa naquela rota, não um teto
atingido. Não vem com Retry-After nem com headers de quota, porque não há prazo a informar: a
virada do dia não o desfaz e repetir a chamada não muda nada. O caminho é falar com o seu contato
comercial.Distinga sempre pelo error.code, nunca pelo status sozinho:| Código | Status | O que fazer |
|---|
RATE_LIMIT_EXCEEDED | 429 | Transitório, de segundos. Respeite o Retry-After e repita. |
QUOTA_EXCEEDED | 429 | Sua franquia do dia acabou. Volta na virada; para ampliar, fale com o comercial. |
ACCESS_BLOCKED | 403 | Acesso bloqueado. Não repita — fale com o comercial. |
Precisa de mais#
O teto de 100/dia é o padrão, não um limite técnico — quotas maiores são cadastradas por parceiro e
negociadas com o comercial. Se o seu volume projetado passa do padrão, fale com o seu contato
comercial antes de ir para produção; o ajuste vale para o parceiro inteiro e entra em vigor em
poucos minutos, sem nova chave e sem mudança nenhuma na sua integração.Para uma necessidade pontual — uma carga de migração, um teste de volume — a liberação pode ser
temporária, com data de início e fim combinadas.O que fazer na sua integração#
Três hábitos evitam a maior parte dos incidentes de quota:1.
Leia DailyQuota-Remaining e alarme no seu lado quando cruzar um limiar seu (10%, por
exemplo). Descobrir o teto pelo 429 é descobrir tarde demais.
2.
Não repita a mesma abertura em laço. Reenvio automático depois de um 429 gasta o saldo do
dia seguinte assim que ele abre. Trate QUOTA_EXCEEDED como parada, não como retentativa.
3.
Cuidado com a retentativa por timeout. Idempotency-Key impede que ela abra uma segunda
solicitação, mas não a isenta da quota: o contador fica na borda da plataforma e é decrementado
antes de a chave ser conferida. Continue usando a chave — ela é o que protege o seu cliente de
uma duplicata — só não conte com ela para economizar saldo.
Modificado em 2026-09-01 17:32:30