Créditos, franquia e rate limit
Quanto custa cada operação em créditos, como funciona a franquia mensal com hard cap, o que acontece nos limites de requisições por minuto e como ler GET /v1/usage.
Tudo custa em créditos, e você sabe o custo antes de chamar: a consulta basic custa 1, a full 6, a busca 1 por empresa retornada, e erros custam 0. Cada plano dá uma franquia mensal e um limite de requisições por minuto; quando a franquia acaba a API para de responder com 402, e nada é cobrado sem uma ação sua.
Pesos por operação
| Operação | Créditos |
|---|---|
GET /v1/cnpjs/{cnpj}?profile=basic |
1 |
GET /v1/cnpjs/{cnpj}?profile=full |
6 |
GET /v1/cnpjs (busca) |
1 por empresa retornada, até 20 por página; página vazia custa 0 |
POST /v1/filters/generate |
1 por chamada |
GET /v1/usage |
0 |
GET /v1/status |
0, sem chave |
GET /v1/demo |
0, sem chave |
| Qualquer erro (4xx, 5xx) | 0 |
Só respostas 200 são cobradas. Uma consulta full a uma empresa com pedido de remoção ativo (meta.suppressed: true) custa 1 crédito, porque os contatos não são entregues.
Franquia por plano
| Plano | Créditos por mês | Requisições por minuto | Busca |
|---|---|---|---|
| Free | 60 | 3 | não |
| Starter | 15000 | 30 | sim |
| Pro | 100000 | 120 | sim |
| Business | 500000 | 300 | sim |
| Scale | 3000000 | 600 | sim |
A franquia renova no primeiro dia do mês-calendário e não acumula: crédito não usado em um mês não passa para o seguinte. No Free a chave nasce com 15 créditos e a verificação do e-mail libera os 60 do mês. Preços e a calculadora de custo estão em /precos; a mesma tabela em Markdown está em /pricing.md.
Quando a franquia acaba
Hard cap: a API responde 402 quota_exceeded e o header X-Credits-Reset diz quando a franquia renova. Não há cobrança por excedente nem recarga automática. Para continuar antes do reset, o assinante pago compra um pacote avulso, consumido depois da franquia, do mais antigo para o mais novo, com validade de 12 meses:
| Pacote | Preço | Créditos |
|---|---|---|
| Pacote 8 mil | R$ 50 | 8000 |
| Pacote 35 mil | R$ 200 | 35000 |
| Pacote 100 mil | R$ 500 | 100000 |
O Free não compra pacote; precisa assinar. Upgrade é imediato, cobra a diferença proporcional; downgrade vale no próximo ciclo. Pagamento por cartão ou PIX, com NFS-e em toda cobrança.
Rate limit
O limite de requisições por minuto é por conta: todas as chaves da conta somam no mesmo contador. Não há limite de concorrência nem de burst separado no v0. Ao exceder, a API responde 429 rate_limited com Retry-After em segundos; espere esse tempo e repita. Nas respostas 200 de consulta, busca e geração de filtro, X-RateLimit-Limit e X-RateLimit-Remaining mostram o limite do plano e o que sobra na janela corrente.
Os endpoints sem chave, GET /v1/status e GET /v1/demo, têm um limite próprio por endereço IP, porque não há conta para contar. Eles servem a páginas públicas e a testes, não a produção.
Headers das respostas
Declarados no contrato para as respostas 200 de consulta, busca e geração de filtro; Retry-After acompanha 429 e 503.
| Header | Conteúdo |
|---|---|
X-Request-Id |
Identificador da chamada, o mesmo de meta.request_id |
X-Credits-Charged |
Créditos desta chamada |
X-Credits-Remaining |
Créditos restantes na franquia mais pacotes |
X-Credits-Reset |
Quando a franquia renova |
X-RateLimit-Limit |
Requisições por minuto do plano |
X-RateLimit-Remaining |
Requisições restantes na janela corrente |
Retry-After |
Só em 429 e 503: segundos até tentar de novo |
Consultar o uso
GET /v1/usage custa 0 créditos e devolve a franquia, o consumo do ciclo, os pacotes, o limite de requisições por minuto e a data do reset. O portal mostra os mesmos números, com o débito de cada chamada por request_id.
curl
curl "https://api.cnpj.ia.br/v1/usage" \
-H "Authorization: Bearer $CNPJIA_KEY"
Campos da resposta, como o contrato os declara (sem envelope data):
| Campo | Tipo |
|---|---|
plan |
free ou starter ou pro ou business ou scale |
credits_allowance |
integer |
credits_used |
integer |
credits_remaining |
integer |
packs |
array de sku, credits_remaining, expires_at |
rpm |
integer |
search_enabled |
boolean |
cycle_reset_at |
string (date-time) |
Desempenho
A latência por endpoint passa a ser publicada em status.cnpj.ia.br quando houver medição em produção. Até lá, nenhuma página das docs afirma número de latência, disponibilidade ou SLA.
Perguntas frequentes
Se eu ultrapassar a franquia, vou pagar excedente?
Não. A franquia tem hard cap: acabou, a API responde 402 quota_exceeded até o reset ou até você comprar um pacote avulso. Nenhuma cobrança acontece sem uma ação sua.
Crédito não usado passa para o mês seguinte?
O da franquia, não: ela renova no primeiro dia do mês-calendário e o saldo anterior zera. Os pacotes avulsos são diferentes: valem doze meses e só são consumidos depois da franquia.
O rate limit é por chave ou por conta?
Por conta. Todas as chaves da conta somam no mesmo contador de requisições por minuto. Criar mais chaves organiza o consumo, mas não multiplica o limite; para mais requisições por minuto, o caminho é o plano.
Erros e 404 consomem crédito?
Não. Só respostas 200 são cobradas. Um 404 not_found, um 429 rate_limited ou um 504 upstream_timeout deixam o saldo como estava.
Qual é a latência da API?
Ainda não publicamos número. A medição por endpoint em produção vai para a status page quando existir; até lá as docs não afirmam latência, disponibilidade nem SLA.