Consulta cadastral
Consultas ao cadastro oficial brasileiro por número de contribuinte: consulta de CNPJ e consulta de CPF com data de nascimento, modelo de erros, proteção de dados e checklist de integração.
Visão geral
Consulte dados cadastrais oficiais brasileiros pelo número de identificação do contribuinte:
| Capacidade | Endpoint | O que devolve |
|---|---|---|
| Consulta de CNPJ | GET /openapi/v3/consultas/cnpj/{cnpj} | Dados cadastrais da empresa para um número de 14 dígitos: razão social, nome fantasia, situação cadastral, natureza jurídica, CNAE, endereço registrado, contatos, capital social |
| Consulta de CPF | GET /openapi/v3/consultas/cpf/{cpf}/{nascimento} | Dados cadastrais da pessoa física para um número de 11 dígitos mais a data de nascimento: nome, situação cadastral, data de nascimento |
Os dois endpoints são GET: o corpo assinado é a string vazia e todas as variáveis de caminho (CNPJ / CPF / data de nascimento) fazem parte do caminho assinado, veja Autenticação. As respostas são objetos simples (sem envelope da plataforma); erros de negócio são um objeto simples {code, message}.
Por que o CPF exige data de nascimento
A fonte upstream valida CPF e data de nascimento como um par (semântica da Receita Federal); o CPF sozinho não devolve nada. Um par divergente e um CPF inexistente devolvem o mesmo código de erro: são propositalmente indistinguíveis, caso contrário o endpoint se tornaria uma ferramenta para descobrir a data de nascimento de terceiros.
Pré-requisitos (uma única vez)
- Credencial da aplicação: solicite uma aplicação e receba o
app_secret. Ele é exibido apenas uma vez; guarde-o com segurança. - Assinatura da API: a plataforma concede à sua aplicação acesso aos endpoints necessários (a chave de escopo é o caminho do endpoint).
Endpoints
| Endpoint | Finalidade |
|---|---|
GET /openapi/v3/consultas/cnpj/{cnpj} | Dados cadastrais da empresa pelo CNPJ |
GET /openapi/v3/consultas/cpf/{cpf}/{nascimento} | Dados cadastrais da pessoa física pelo CPF e data de nascimento, com as faixas etárias da LGPD |
Modelo de erros
Duas formas de erro
Erros de negócio, de requisição e da fonte upstream (HTTP 400 / 422 / 428 / 451 / 503) são devolvidos como objeto simples:
{ "code": 10016003, "message": "CPF not found" }
| Campo | Tipo | Descrição |
|---|---|---|
| code | integer | Código de erro da plataforma |
| message | string | Explicação legível, localizada no idioma da requisição |
Erros da camada de autenticação (HTTP 401 / 403 / 429) são produzidos pelo gateway da plataforma antes de a requisição chegar à API e usam o envelope da plataforma:
{ "success": false, "errorType": 1, "code": 10009005, "message": "API not subscribed, please subscribe before calling" }
| Campo | Tipo | Descrição |
|---|---|---|
| success | boolean | false em todo erro |
| errorType | integer | 1 erro de API, 2 rejeição da SEFAZ, 3 falha de sistema, 4 falha de validação de campos |
| code | integer | Código de erro da plataforma |
| message | string | Explicação legível, localizada |
Nota: seu tratamento de erros precisa aceitar as duas formas. Uma regra robusta: interprete o corpo como JSON, leia
codede qualquer uma das formas e tratesuccess=falseou HTTP >= 400 como falha.
Códigos de erro de negócio
| code | HTTP | Responsável | Significado | Ação |
|---|---|---|---|---|
| 10016000 | 400 | Chamador | Formato de CPF inválido (11 dígitos obrigatórios) | Verifique caracteres de formatação indevidos ou comprimento errado |
| 10016001 | 400 | Chamador | Dígitos verificadores do CPF inválidos | Valide localmente com o algoritmo mod-11 para evitar chamadas inúteis |
| 10016002 | 400 | Chamador | Data de nascimento inválida (DDMMYYYY válido obrigatório) | Observe a ordem dia-mês-ano e que a data precisa existir |
| 10016003 | 400 | Chamador | CPF não encontrado | O CPF não existe ou o CPF e a data de nascimento não coincidem (propositalmente indistinguíveis) |
| 10016004 | 451 | Terceiro (bloqueio legal upstream) | LGPD: menor de 16 anos (Lei Felca), titular com menos de 16 anos | Dados legalmente retidos; não repita |
| 10016005 | 422 | Terceiro (bloqueio legal upstream) | LGPD: menor de idade, titular com 16 a 17 anos | Dados legalmente retidos; não repita |
| 10016006 | 428 | Terceiro (bloqueio legal upstream) | LGPD: idade nao verificavel - informe a data de nascimento para completar a verificacao, idade não verificável | A plataforma já reverificou uma vez com a data de nascimento; não repita |
| 10016010 | 400 | Chamador | Formato de CNPJ inválido (14 dígitos obrigatórios) | Verifique caracteres de formatação indevidos |
| 10016011 | 400 | Chamador | Dígitos verificadores do CNPJ inválidos | Valide localmente com o algoritmo mod-11 |
| 10016012 | 400 | Chamador | CNPJ não encontrado | Não existe esse CNPJ no cadastro oficial |
| 10016020 | 503 | Terceiro (upstream indisponível) | Fonte de dados upstream temporariamente indisponível | Repita com backoff exponencial (inicie em 1 s, dobre até 30 s, adicione jitter); se persistir, contate a plataforma |
Erros de formato e de dígito verificador são rejeitados localmente pela plataforma e nunca chegam à fonte upstream: não consomem cota nem são cobrados.
Convenção de responsabilidade: 10016000 a 10016003 e 10016010 a 10016012 são problemas do chamador; 10016004 a 10016006 são bloqueios legais de terceiros; 10016020 é indisponibilidade de terceiro; HTTP 500 + 10001000 é falha da plataforma.
Cobrança: 10016003 (não encontrado / data de nascimento divergente), 10016004 (menos de 16 anos) e 10016005 (16 a 17 anos) são cobrados por chamada; 10016006 (idade não verificável), 10016020 (upstream indisponível) e os erros de formato / dígito verificador rejeitados localmente não são cobrados. As faixas etárias estão detalhadas na página Consulta de CPF.
Erros de autenticação e autorização
| HTTP | code | Significado | Ação |
|---|---|---|---|
| 401 | 10009000 | Cabeçalhos de assinatura ausentes (token / sign / timestamp) | Os três cabeçalhos são obrigatórios |
| 401 | 10009001 | Timestamp inválido ou desvio de relógio acima de ±300 s | Sincronize o relógio (NTP); gere o timestamp a cada requisição |
| 401 | 10009002 | Token inválido | Confira o app_secret |
| 401 | 10009003 | Assinatura divergente | Veja a lista em Solução de problemas |
| 403 | 10009004 | Aplicação desativada | Contate a plataforma |
| 403 | 10009015 | Aplicação não vigente (aguardando aprovação ou rejeitada) | Aguarde a aprovação |
| 403 | 10009014 | Conta do integrador desativada | Contate a plataforma |
| 403 | 10009005 | API não assinada | Solicite a assinatura do endpoint |
| 429 | 10009006 | Limite de taxa excedido | Repita com backoff exponencial (inicie em 1 s, dobre até 30 s, adicione jitter) |
Orientação de repetição: 401 e 403 são erros de configuração; repetir sem corrigir é inútil e pode disparar o limite de taxa. 429 e 503 (10016020) podem ser repetidos com backoff. 422 / 428 / 451 são bloqueios legais; repetir é inútil. Para 500, contate a plataforma com o timestamp e o caminho da requisição que falhou.
Referência rápida de status HTTP
| HTTP | Cenário | Forma do corpo |
|---|---|---|
| 200 | Consulta realizada | Dados simples |
| 400 | Parâmetro inválido / registro não encontrado | {code, message} simples |
| 401 | Falha de autenticação | Envelope da plataforma |
| 403 | Aplicação desativada / não vigente / não assinada | Envelope da plataforma |
| 422 | Titular do CPF com 16 a 17 anos (bloqueio legal upstream, 10016005) | {code, message} simples, sem campos pessoais |
| 428 | Idade do CPF não verificável (bloqueio legal upstream, 10016006) | {code, message} simples, sem campos pessoais |
| 429 | Limite de taxa excedido | Envelope da plataforma |
| 451 | Titular do CPF com menos de 16 anos (bloqueio legal upstream, 10016004) | {code, message} simples, sem campos pessoais |
| 500 | Falha do lado da plataforma (10001000) | {code, message} simples, contate a plataforma |
| 503 | Fonte de dados upstream indisponível (10016020) | {code, message} simples, repita com backoff |
Proteção de dados
O CPF é dado pessoal de pessoa natural e está sujeito à LGPD (Lei 13.709/2018):
- A plataforma não persiste os resultados das consultas de CPF; toda consulta vai à fonte em tempo real.
- Valores completos de CPF nunca entram nos logs da aplicação; são mascarados.
- As variáveis de caminho no log de chamadas passam por HMAC antes do armazenamento; nenhum texto em claro é retido.
- A fonte upstream retém legalmente os dados de menores de idade; a plataforma repassa os status 451 / 422 / 428 sem alteração e não armazena nada. 451 / 422 são cobrados por chamada, 428 não; veja Menores de idade e verificação de idade na página Consulta de CPF.
Espera-se que os chamadores observem o mesmo princípio da necessidade mínima: consulte apenas quando houver base legal de negócio (como a emissão de notas) e não retenha dados pessoais além do que o negócio exige.
Localização das respostas
O campo message segue o idioma da requisição: o cabeçalho Language (en / pt / es / zh) tem precedência, depois Accept-Language (aceita pt-BR e valores q). Sem cabeçalho de idioma, as respostas usam português (pt) por padrão.
Para decisões programáticas use sempre o code numérico e valores enumerados como situacao.codigo; nunca compare textos descritivos. O message das faixas de bloqueio da LGPD é o texto legal em português e não é traduzido.
Checklist de integração
- Obtenha o
app_secrete confirme que os dois endpoints estão assinados. - Chame com um CNPJ real: HTTP 200,
niecoa a entrada,situacaoCadastral.codigoé2. - Chame com um CPF real + data de nascimento: HTTP 200,
nascimentoecoa a entrada. - Caso negativo: CPF correto com data de nascimento errada devolve 400 +
10016003(mesmo código de não encontrado). - Caso negativo: CNPJ / CPF com dígitos verificadores errados devolve 400 +
10016011/10016001(rejeitado localmente, não cobrado). - Caso negativo: data de nascimento como
1997-01-09ou31021997devolve 400 +10016002. - Caminhos de falha: chame com
signerrado (401 +10009003); chame um endpoint não assinado (403 +10009005). - Compatibilidade do parser: garanta que seu cliente trata 422 / 428 / 451 / 503 como falha e lê o corpo simples
{code, message}(esses status não podem ser disparados com dados de teste; só aparecem em produção com CPFs reais de menores).
Solução de problemas
A assinatura nunca confere (401, 10009003)?
Verifique, por ordem de frequência:
- Uma requisição GET não concatenou o corpo como a string vazia
""(usou um objeto vazio ou texto de espaço reservado); pathsem o prefixo/openapi, ou incluindo a query string;- O segmento da data de nascimento ficou de fora da assinatura do CPF; as duas variáveis de caminho precisam ser assinadas;
signenviado em maiúsculas (deve ser hex minúsculo);- O
timestampusado na concatenação difere do cabeçalho (gerado de novo entre os dois); - Um CNPJ formatado cuja
/dividiu o caminho.
Recalcule primeiro os valores fixos do exemplo de assinatura em Autenticação; quando sua implementação local conferir, passe a inspecionar os parâmetros da requisição real.
O CNPJ devolve 404 ou não roteia?
O parâmetro CNPJ aceita somente 14 dígitos. A / dentro de 40.673.061/0001-34 é tratada como separador de caminho, então a requisição nunca chega ao endpoint.
CPF encontrado, mas o fluxo de negócio parece errado?
Verifique situacao.codigo primeiro: qualquer valor diferente de 0 significa que o CPF não está em situação regular (falecido, suspenso, pendente de regularização, ...). Os dados são válidos; a decisão de negócio é sua.
Desvio de relógio (401, 10009001)?
O relógio do seu servidor difere do nosso em mais de 300 segundos. Use NTP e nunca armazene nem reutilize timestamps entre requisições.
