A API aplica um limite de requisições por janela de tempo para proteger o serviço contra abuso e garantir disponibilidade. Quando o limite é atingido, novas requisições recebem HTTP 429 Too Many Requests até a janela ser liberada.
Limite padrão
- 60 requisições por 60 segundos por origem.
- Janela deslizante (sliding window): cada requisição é registrada com o seu instante e expira após 60s.
- Endpoints específicos podem ter limites próprios — consulte a referência do endpoint.
Como a origem é identificada
A chave de limitação é resolvida automaticamente, do mais específico para o mais genérico:
- Empresa (
audience: "empresa") — quando háTokenválido no header e ele resolve para uma empresa cadastrada. É o cenário recomendado — o limite é aplicado por empresa, independentemente do IP de origem. - Token (
audience: "token") — quando háTokenno header mas ele não resolve para uma empresa (token inválido/desconhecido). O bucket usa um hash do token. - Usuário (
audience: "user") — quando a requisição está autenticada por sessão (painel web), semToken. - IP (
audience: "ip") — fallback quando não há nenhuma das opções acima.
Sempre envie o header Token para garantir que o limite seja contabilizado por empresa, e não pelo IP de saída do seu servidor (que pode ser compartilhado).
Headers de resposta
Toda resposta da API inclui os headers de telemetria do limite:
| Header | Descrição |
|---|---|
X-RateLimit-Limit | Limite máximo da janela atual. |
X-RateLimit-Remaining | Quantas requisições ainda podem ser feitas antes do limite. |
X-RateLimit-Reset | Timestamp Unix (em segundos, UTC) em que a janela será totalmente liberada. |
Retry-After | Apenas em 429. Segundos a aguardar antes de tentar novamente. |
Resposta quando o limite é excedido
Status: 429 Too Many Requests
Code
Headers acompanhando o 429:
Code
Como tratar o 429 no seu cliente
A regra de ouro: sempre respeite o Retry-After. Não tente reenviar imediatamente — você só vai prolongar o bloqueio.
Estratégia recomendada:
- Ao receber
429, leia o headerRetry-After(em segundos). - Aguarde esse tempo antes da próxima requisição àquele recurso.
- Para requisições em lote, considere espaçar emissões (ex.: ao emitir 1000 NF-e, distribua ao longo do minuto em vez de disparar tudo de uma vez).
- Implemente backoff exponencial com jitter caso o
Retry-Afteresteja ausente: 1s, 2s, 4s, 8s… com até ±20% de variação aleatória.
Exemplo (C#)
Code
Exemplo (Node.js)
Code
Boas práticas
- Monitore
X-RateLimit-Remainingem respostas de sucesso. Se esse valor estiver consistentemente baixo, distribua melhor a carga. - Não use múltiplos tokens para contornar o limite — todos os tokens da mesma empresa caem no mesmo bucket (
audience: "empresa"). - Cache local de consultas (ex.:
Status,ConsultarNFe) reduz chamadas redundantes. - Webhooks ao invés de polling: configure webhooks para receber atualizações ao invés de consultar a API repetidamente.
Precisa de um limite maior?
Empresas com volume alto podem solicitar um aumento de limite. Entre em contato pelo suporte informando:
- Token ou CNPJ da empresa.
- Volume médio e de pico esperado (req/min).
- Tipo de operação (emissão, consulta, eventos, etc.).

