TF Fiscal
Documentação

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:

CapacidadeEndpointO que devolve
Consulta de CNPJGET /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 CPFGET /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)

  1. Credencial da aplicação: solicite uma aplicação e receba o app_secret. Ele é exibido apenas uma vez; guarde-o com segurança.
  2. Assinatura da API: a plataforma concede à sua aplicação acesso aos endpoints necessários (a chave de escopo é o caminho do endpoint).

Endpoints

EndpointFinalidade
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:

json
{ "code": 10016003, "message": "CPF not found" }
CampoTipoDescrição
codeintegerCódigo de erro da plataforma
messagestringExplicaçã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:

json
{ "success": false, "errorType": 1, "code": 10009005, "message": "API not subscribed, please subscribe before calling" }
CampoTipoDescrição
successbooleanfalse em todo erro
errorTypeinteger1 erro de API, 2 rejeição da SEFAZ, 3 falha de sistema, 4 falha de validação de campos
codeintegerCódigo de erro da plataforma
messagestringExplicação legível, localizada

Nota: seu tratamento de erros precisa aceitar as duas formas. Uma regra robusta: interprete o corpo como JSON, leia code de qualquer uma das formas e trate success=false ou HTTP >= 400 como falha.

Códigos de erro de negócio

codeHTTPResponsávelSignificadoAção
10016000400ChamadorFormato de CPF inválido (11 dígitos obrigatórios)Verifique caracteres de formatação indevidos ou comprimento errado
10016001400ChamadorDígitos verificadores do CPF inválidosValide localmente com o algoritmo mod-11 para evitar chamadas inúteis
10016002400ChamadorData de nascimento inválida (DDMMYYYY válido obrigatório)Observe a ordem dia-mês-ano e que a data precisa existir
10016003400ChamadorCPF não encontradoO CPF não existe ou o CPF e a data de nascimento não coincidem (propositalmente indistinguíveis)
10016004451Terceiro (bloqueio legal upstream)LGPD: menor de 16 anos (Lei Felca), titular com menos de 16 anosDados legalmente retidos; não repita
10016005422Terceiro (bloqueio legal upstream)LGPD: menor de idade, titular com 16 a 17 anosDados legalmente retidos; não repita
10016006428Terceiro (bloqueio legal upstream)LGPD: idade nao verificavel - informe a data de nascimento para completar a verificacao, idade não verificávelA plataforma já reverificou uma vez com a data de nascimento; não repita
10016010400ChamadorFormato de CNPJ inválido (14 dígitos obrigatórios)Verifique caracteres de formatação indevidos
10016011400ChamadorDígitos verificadores do CNPJ inválidosValide localmente com o algoritmo mod-11
10016012400ChamadorCNPJ não encontradoNão existe esse CNPJ no cadastro oficial
10016020503Terceiro (upstream indisponível)Fonte de dados upstream temporariamente indisponívelRepita 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

HTTPcodeSignificadoAção
40110009000Cabeçalhos de assinatura ausentes (token / sign / timestamp)Os três cabeçalhos são obrigatórios
40110009001Timestamp inválido ou desvio de relógio acima de ±300 sSincronize o relógio (NTP); gere o timestamp a cada requisição
40110009002Token inválidoConfira o app_secret
40110009003Assinatura divergenteVeja a lista em Solução de problemas
40310009004Aplicação desativadaContate a plataforma
40310009015Aplicação não vigente (aguardando aprovação ou rejeitada)Aguarde a aprovação
40310009014Conta do integrador desativadaContate a plataforma
40310009005API não assinadaSolicite a assinatura do endpoint
42910009006Limite de taxa excedidoRepita 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

HTTPCenárioForma do corpo
200Consulta realizadaDados simples
400Parâmetro inválido / registro não encontrado{code, message} simples
401Falha de autenticaçãoEnvelope da plataforma
403Aplicação desativada / não vigente / não assinadaEnvelope da plataforma
422Titular do CPF com 16 a 17 anos (bloqueio legal upstream, 10016005){code, message} simples, sem campos pessoais
428Idade do CPF não verificável (bloqueio legal upstream, 10016006){code, message} simples, sem campos pessoais
429Limite de taxa excedidoEnvelope da plataforma
451Titular do CPF com menos de 16 anos (bloqueio legal upstream, 10016004){code, message} simples, sem campos pessoais
500Falha do lado da plataforma (10001000){code, message} simples, contate a plataforma
503Fonte 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

  1. Obtenha o app_secret e confirme que os dois endpoints estão assinados.
  2. Chame com um CNPJ real: HTTP 200, ni ecoa a entrada, situacaoCadastral.codigo é 2.
  3. Chame com um CPF real + data de nascimento: HTTP 200, nascimento ecoa a entrada.
  4. Caso negativo: CPF correto com data de nascimento errada devolve 400 + 10016003 (mesmo código de não encontrado).
  5. Caso negativo: CNPJ / CPF com dígitos verificadores errados devolve 400 + 10016011 / 10016001 (rejeitado localmente, não cobrado).
  6. Caso negativo: data de nascimento como 1997-01-09 ou 31021997 devolve 400 + 10016002.
  7. Caminhos de falha: chame com sign errado (401 + 10009003); chame um endpoint não assinado (403 + 10009005).
  8. 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:

  1. Uma requisição GET não concatenou o corpo como a string vazia "" (usou um objeto vazio ou texto de espaço reservado);
  2. path sem o prefixo /openapi, ou incluindo a query string;
  3. O segmento da data de nascimento ficou de fora da assinatura do CPF; as duas variáveis de caminho precisam ser assinadas;
  4. sign enviado em maiúsculas (deve ser hex minúsculo);
  5. O timestamp usado na concatenação difere do cabeçalho (gerado de novo entre os dois);
  6. 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.