Documentação da API

A API REST do CFO entrega dados de empresas do Brasil (dados abertos do governo federal) em JSON ou CSV, filtrados como na consulta web. Base de produção:

https://cfo.com.br/api
Para usar a API você precisa de uma conta liberada e de uma chave. Solicitar acesso · Entrar · gere suas chaves no painel.

Início rápido

Toda chamada é um GET com sua chave no header e os filtros na query string.

curl "https://cfo.com.br/api?resource=empresas&uf=SP&cnae=6201&dias=30&per_page=50" \
  -H "Authorization: Bearer cfo_live_SUA_CHAVE"

Autenticação

Envie a chave de uma destas formas (em ordem de preferência):

Authorization: Bearer <chave>Header padrão (recomendado).cfo_live_…
X-Api-Key: <chave>Header alternativo.
?api_key=<chave>Query string (evite em produção — vaza em logs).

A chave aparece uma única vez na criação (guardamos só o hash). Perdeu? Gere outra no painel. Revogar uma chave a invalida na hora.

Limites & quota

Seu plano tem quatro réguas mensais, cada uma com contador próprio (numa conta com operadores, o pool é do contrato — compartilhado entre todos os logins):

Toda resposta traz os headers das três réguas de consumo:

X-RateLimit-Limit: 2000        # buscas/mês (ou "unlimited")
X-RateLimit-Remaining: 1987    # buscas restantes neste mês
X-RateLimit-Reset: 1751337600  # unix ts da virada do mês
X-Leads-Limit: 10000           # leads/mês
X-Leads-Remaining: 9958        # leads restantes
X-Empresas-Limit: 1000         # empresas com dossiê/mês
X-Empresas-Remaining: 993      # empresas restantes

GET?resource=empresas

Lista paginada de estabelecimentos pelos filtros. Período default = últimos 30 dias de abertura (use dias=0 para qualquer período). Consome 1 busca. E-mail e telefone saem mascarados por padrão — reveal=1 revela os contatos da página consumindo leads do plano (1 por empresa; linha já aberta pela janela de 30 dias não consome de novo).

Parâmetros

ParâmetroDescriçãoExemplo
diasAberta nos últimos N dias. 0 = qualquer período.30
de / ateIntervalo de data de abertura (YYYY-MM-DD). Tem prioridade sobre dias.2026-05-01
cnpjCNPJ exato (14 caracteres). Tem prioridade sobre os demais filtros. Aceita numérico legado ou o novo formato alfanumérico (12 alfanuméricos + 2 dígitos); pontuação é ignorada.12.ABC.345/0001-90
ufUnidade federativa (2 letras).SP
cidadeNome do município (busca parcial).Campinas
cnaeCódigo (prefixo) ou descrição da atividade. Aceita o formato oficial com pontuação (4711-3/02) ou só os dígitos (4711302).4711-3/02 / mercado
sitSituação cadastral (ver tabela). Default 2 (ativa).2
termoTexto na razão social / nome fantasia. Aceita dois operadores: termo=sócio:NOME devolve as empresas em que a pessoa é sócia (prefixo no nome do QSA); termo=marca:TEXTO devolve as titulares da marca no INPI (inclui a ponte titular pessoa física → sócio).sócio:JOAO / marca:NATURA
matriz1 = só matrizes.1
meionly = só MEI · exclude = exclui MEI.only
aeronavesim = proprietária/operadora de aeronave · prop = só proprietária · oper = só operadora. Conta apenas aeronave vigente (matrícula ativa no RAB) — matrícula cancelada não entra (a empresa teve, não tem). Fonte: ANAC/RAB.sim
bndessim = empresa que captou financiamento BNDES (operações não-automáticas).sim
finepsim = empresa com projeto/contrato FINEP.sim
pncpsim = empresa fornecedora do governo (contrato público no PNCP).sim
obrasim = empresa com obra em andamento no Cadastro Nacional de Obras (CNO/Receita Federal). Só conta obra ativa — obra encerrada/paralisada não entra. Vale como filtro seletivo para dias=0.sim
dividasim = com dívida ativa da União (PGFN). Dado aberto; indício, não prova. Vale como filtro seletivo para dias=0.sim
sancaosim = com sanção vigente em CEIS/CNEP (CGU). Dado aberto; indício, não prova. Vale como filtro seletivo para dias=0.sim
parcelamentosim = com parcelamento de débitos direto na Receita (regularização em curso — não é dívida ativa exigível). Dado aberto; snapshot mensal, não informa se está em dia. Vale como filtro seletivo para dias=0.sim
balancosim = publica demonstrações contábeis na Central de Balanços (gov.br/SERPRO). Sinal de transparência/porte, não de saúde financeira. Dado aberto. Vale como filtro seletivo para dias=0.sim
semalertasim = sem nenhum sinal negativo no rollup (sem dívida ativa e sem sanção). Como casa quase a base inteira, não habilita sozinho o período aberto (dias=0) — combine com uf, cnae etc.sim
capmin / capmaxFaixa de capital social (R$).100000
cepde / cepateIntervalo de CEP (prefixo).01000000
emailEmpresas com este e-mail de contato exato. Indício de escritório/portal/contador comum — indício, não prova de vínculo. Vale como filtro seletivo para dias=0.[email protected]
ddd + telEmpresas com este telefone exato (os dois juntos: ddd e tel). Mesmo indício de contato compartilhado. Vale para dias=0.ddd=11&tel=999990000
numeroNúmero do logradouro exato — combine com cepde=cepate= (mesmo CEP) para achar empresas no mesmo endereço/prédio. Ignora S/N. Vale para dias=0.100
reveal1 = revela os contatos das linhas desta página consumindo leads do plano (1 por empresa). Sem saldo suficiente, revela até onde alcança na ordem das linhas (resposta 200; o resto sai com contato_mascarado: "cota").1
pagePágina (1-based).2
per_pageRegistros por página (limitado pela sua conta).100
formatjson (default) ou csv.csv

Exemplos — empresas em que uma pessoa é sócia, empresas titulares de uma marca, e construtoras com obra ativa:

curl "https://cfo.com.br/api?resource=empresas&termo=s%C3%B3cio:JOAO%20DA%20SILVA&dias=0" \
  -H "Authorization: Bearer cfo_live_SUA_CHAVE"
curl "https://cfo.com.br/api?resource=empresas&termo=marca:NATURA&dias=0" \
  -H "Authorization: Bearer cfo_live_SUA_CHAVE"
curl "https://cfo.com.br/api?resource=empresas&cnae=4120&obra=sim&uf=SP&dias=0" \
  -H "Authorization: Bearer cfo_live_SUA_CHAVE"

Resposta

{
  "meta": {
    "total": 458, "total_capped": false,
    "page": 1, "per_page": 50, "returned": 50,
    "total_pages": 10, "capped": false,
    "fonte": "dados abertos do governo federal",
    "quota": { "limit": 2000, "remaining": 1987 }
  },
  "data": [
    {
      "cnpj": "12.345.678/0001-90",
      "cnpj_raw": "12345678000190",
      "razao_social": "EXEMPLO TECNOLOGIA LTDA",
      "nome_fantasia": "Exemplo",
      "matriz": true,
      "situacao": { "codigo": 2, "descricao": "Ativa" },
      "data_inicio": "2026-06-02",
      "cnae_principal": { "codigo": "6201501", "descricao": "Desenvolvimento de programas..." },
      "porte": { "codigo": "01", "descricao": "Micro (ME)" },
      "capital_social": 50000.0,
      "endereco": { "logradouro": "RUA EXEMPLO", "numero": "100", "bairro": "Centro",
                    "municipio": "São Paulo", "uf": "SP", "cep": "01000000" },
      "contato": { "telefone": "(11) 9****-**00", "email": "con***@exe***.com.br" },
      "contato_mascarado": "janela"
    }
  ]
}

Contatos: linha mascarada traz contato_mascarado com o motivo — "janela" (empresa fora da sua janela de 30 dias; use reveal=1) ou "cota" (saldo de leads do mês esgotado). Linha com contato aberto (revelada agora ou dentro da janela) não traz o campo. A máscara é aplicada no servidor — o contato completo não trafega em linha mascarada. Em CSV, linhas mascaradas geram um aviso no rodapé do arquivo.

Em buscas muito amplas (período aberto ou busca por termo) o total é capado: a partir de ~2.000 ele deixa de ser exato e vira um piso — leia como “2.000+”. Nesse caso total_capped vem true e a lista traz os registros mais recentes. É uma proteção anti-DoS (evita COUNT sobre a base inteira), não um erro. Refine os filtros para uma contagem exata.

GET?resource=empresa&cnpj=…

Detalhe completo de um CNPJ: cadastro, endereço, Simples/MEI e quadro societário. Consome 1 empresa com dossiê (régua própria, não busca) — e só na primeira consulta da empresa no mês: reabrir o mesmo CNPJ dentro do mês-calendário é grátis para o contrato inteiro. Consultar também abre a janela de 30 dias da empresa (downloads via resource=dl e contato aberto na lista). O cnpj tem 14 caracteres — aceita o numérico legado ou o novo formato alfanumérico (12 alfanuméricos + 2 dígitos, RFB IN 2.229/2024, válido a partir de jul/2026); pontuação é ignorada.

curl "https://cfo.com.br/api?resource=empresa&cnpj=12345678000190" \
  -H "Authorization: Bearer cfo_live_SUA_CHAVE"

Retorna { "data": { … , "simples": {…}, "socios": [ … ], "sinais": {…} } }. CPF de sócio pessoa física vem mascarado na origem (padrão da RFB). Cada sócio traz tipo, nome, documento (CNPJ da sócia PJ; CPF mascarado da PF), qualificacao, faixa_etaria e data_entrada.

O endereco aqui é mais completo que o da busca: além de logradouro/número/bairro/município/UF/CEP, traz complemento e codigo_ibge — o código IBGE do município com 7 dígitos, pronto para uso fiscal (ex.: campo cMun do DPS na emissão de NFS-e).

codigo_ibge pode vir null, e isso não é falha de consulta: (a) o estabelecimento é no exterior — a RFB o registra com o município 9707 EXTERIOR, que não tem contrapartida no IBGE porque não há município brasileiro (é o caso de 172,5 mil estabelecimentos, quase todos matrizes de empresas estrangeiras); ou (b) o código de município veio malformado na origem da RFB e não corresponde a nenhum município (47 estabelecimentos em toda a base, ~0,00006%). Nos demais o campo sempre resolve: o de-para RFB→IBGE cobre os 5.571 municípios, sincronizado mensalmente da API de localidades do IBGE.

cnae_secundario: lista (possivelmente vazia) de { "codigo", "descricao" } com todas as atividades secundárias registradas na RFB.

regime_tributario: objeto { "regime", "fonte", "ano_referencia" }. Para optantes, regime é "MEI" ou "Simples Nacional" (opção vigente na base do CNPJ; ano_referencia nulo). Para não-optantes, vem a forma de tributação declarada na ECF (dado aberto da RFB): "Lucro Real", "Lucro Presumido", "Lucro Arbitrado" ou imune/isenta — com ano_referencia do último ano-calendário publicado (defasagem típica de ~2 anos, ex.: em 2026 a referência é 2024). Empresa não-optante sem ECF publicada recebe o rótulo genérico "Lucro Presumido ou Real (não optante do Simples; sem ECF pública)".

Bloco sinais (KYC · dado aberto)

Presente só quando a empresa tem algum sinal (negativo ou positivo — inclui registro no INPI ou no cadastro do BCB). Camada de compliance/KYC agregada dos dados abertos do governo federal. Leitura honesta: cada item é indício, não prova, é auditável na fonte, e traz fonte + data. Não há score nem nota — só a contagem e os itens; a decisão é de quem consulta. Sanção com prazo já vencido vem com vigente: false (histórico, não alerta ativo).

"sinais": {
  "aviso": "Indício, não prova. Dado aberto/auditável...; sem score.",
  "contagem": { "negativos": 1, "positivos": 0 },
  "negativos": {
    "divida_ativa": false, "divida_ativa_valor": null, "divida_ajuizada": false,
    "inidonea_ceis": true, "punida_cnep": false,
    "sancao_vigente": true, "sancao_multa": null,
    "sancoes": [
      { "cadastro": "CEIS", "categoria": "Impedimento...", "orgao": "...",
        "processo": "27222/2021", "data_inicio": "2022-06-20",
        "data_final": "2027-06-20", "valor_multa": null, "vigente": true }
    ],
    "dividas": [
      { "tipo_debito": "NAO_PREV", "situacao": "Em cobrança",
        "receita_principal": "...", "data_inscricao": "2021-03-10",
        "ajuizado": false, "valor": 12345.67 }
    ]
  },
  "parcelamento_rfb": {
    "total": 2, "saldo_devedor": 18234.56,
    "itens": [
      { "programa": "especial_sn", "modalidade": "RELP-SN",
        "adesao": "2022-05-01", "qtde_parcelas": 77, "fim_estimado": "2028-10-01",
        "valor_parcelado": 22412.08, "saldo_devedor": 5907.79 }
    ]
  },
  "positivos": {
    "bndes": false, "bndes_total": null, "finep": false,
    "fornecedor_gov": false, "pncp_total": null, "aeronave": false,
    "cvm": false, "anp": false,
    "inpi": { "marcas": 567, "patentes": 5, "desenhos_industriais": 0, "softwares": 24 },
    "bcb":  { "tipo": "Banco Múltiplo", "situacao": "Autorizada em Atividade", "pix": true },
    "dominios": 12, "veiculos": null, "obras": 8
  },
  "fontes": ["CGU/Portal da Transparência (CEIS/CNEP)", "PGFN (Dívida Ativa)", "BNDES", "FINEP", "PNCP", "ANAC/RAB", "CVM", "ANP", "INPI", "BCB (entidades supervisionadas/Pix)", "ANM/SIGMINE (títulos minerários)", "ANM/CFEM (royalty mineral)", "Portal da Transparência (emendas parlamentares)", "Transferegov/SICONV (convênios)", "SIASG/Compras.gov.br (fornecedor federal)", "RFB — Parcelamentos de débitos"],
  "atualizado": "2026-07-01 22:23:11"
}

Sanções (CEIS/CNEP) vêm da CGU/Portal da Transparência; dívidas vêm da PGFN (Dívida Ativa da União). Cada lista traz até 50 itens, os mais relevantes primeiro. inpi resume marcas, patentes, desenhos industriais e programas de computador em nome da empresa (titular/depositante; fonte INPI) — null quando não há registro. bcb indica entidade do cadastro de supervisionadas do Banco Central (a situacao é a do cadastro e inclui autorizações encerradas) e se é participante do Pix/SPI — null quando fora do cadastro. Ausência de sinal ≠ idoneidade comprovada — significa apenas que nada foi encontrado nas bases abertas.

GET?resource=screening&cnpjs=…

Triagem KYC em lote: até 50 CNPJs por chamada, com os sinais agregados de cada um (alertas + capacidade). Aceita GET ou POST (form ou JSON). Cada item da lista pode ser o CNPJ completo de 14 caracteres (numérico ou alfanumérico; pontuação é ignorada) ou só a raiz de 8 (cnpj_basico) — a leitura é sempre por raiz, com razão social e situação da matriz.

curl "https://cfo.com.br/api?resource=screening&cnpjs=53113791000122,11396646000156" \
  -H "Authorization: Bearer cfo_live_SUA_CHAVE"

# ou POST com JSON (lista como array):
curl "https://cfo.com.br/api?resource=screening" \
  -H "Authorization: Bearer cfo_live_SUA_CHAVE" -H "Content-Type: application/json" \
  -d '{"cnpjs": ["53113791000122", "11396646000156"]}'

Custo: 1 empresa (régua de dossiês) por CNPJ encontrado e novo no mês — CNPJ não encontrado não conta, e CNPJ já consumido no mês do contrato (por screening ou por resource=empresa) não conta de novo: re-screening do mesmo portfólio dentro do mês custa 0. O campo meta.custo_empresas informa quantos foram cobrados na chamada. Se o saldo mensal não comportar os CNPJs novos do lote, a chamada retorna 429 empresa_quota_exceeded e nada é cobrado (o lote é negado inteiro — divida-o ou aguarde a virada).

Resposta

Uma entrada por CNPJ enviado, na mesma ordem. CNPJ inexistente na base (ou item inválido) vem como { "cnpj": "…", "found": false }. Empresa existente sem nenhum sinal vem com found: true e todos os flags false / contagens 0.

{
  "meta": {
    "aviso": "Indício, não prova. Dado aberto/auditável do governo federal; sanção vale pela vigência...; sem score.",
    "solicitados": 2, "encontrados": 2, "custo_empresas": 2,
    "fontes": ["CGU/Portal da Transparência (CEIS/CNEP)", "PGFN (Dívida Ativa)", "BNDES", "FINEP", "PNCP", "ANAC/RAB", "CVM", "ANP", "INPI", "BCB (entidades supervisionadas/Pix)", "ANM/SIGMINE (títulos minerários)", "ANM/CFEM (royalty mineral)", "Portal da Transparência (emendas parlamentares)", "Transferegov/SICONV (convênios)", "SIASG/Compras.gov.br (fornecedor federal)", "RFB — Parcelamentos de débitos"],
    "quota": { "limit": 2000, "remaining": 1987 },
    "empresas": { "limit": 1000, "remaining": 991 }
  },
  "data": [
    {
      "cnpj": "53113791000122",
      "cnpj_basico": "53113791",
      "found": true,
      "razao_social": "TOTVS S.A.",
      "situacao_cadastral": { "codigo": 2, "descricao": "Ativa" },
      "alertas": {
        "divida_ativa": { "flag": true, "valor": 30235487.48, "ajuizada": true },
        "ceis_vigente": false,
        "cnep_vigente": false,
        "sancao_multa": null
      },
      "capacidade": { "bndes": true, "finep": true, "gov": true, "aeronave": false,
                      "cvm": true, "anp": false, "inpi": true, "bcb": false },
      "neg_count": 1,
      "pos_count": 5
    },
    {
      "cnpj": "11396646000156",
      "cnpj_basico": "11396646",
      "found": true,
      "razao_social": "MARMORARIA NACIONAL COMERCIO DE ARTEFATOS DE CIMENTO E SERVICOS DE MAO DE OBRA LTDA",
      "situacao_cadastral": { "codigo": 2, "descricao": "Ativa" },
      "alertas": {
        "divida_ativa": { "flag": false, "valor": null, "ajuizada": false },
        "ceis_vigente": false,
        "cnep_vigente": true,
        "sancao_multa": 6865.99
      },
      "capacidade": { "bndes": false, "finep": false, "gov": false, "aeronave": false,
                      "cvm": false, "anp": false, "inpi": false, "bcb": false },
      "neg_count": 1,
      "pos_count": 0
    }
  ]
}
CampoLeitura
alertas.divida_ativaDívida ativa da União (PGFN): flag, valor total inscrito (R$) e se há débito ajuizada (executado judicialmente).
alertas.ceis_vigente / cnep_vigenteSanção vigente hoje no CEIS (inidôneas/impedidas) / CNEP (Lei Anticorrupção), da CGU. Sanção com prazo já vencido não acende esses flags — é histórico, não alerta ativo (o histórico aparece no resource=empresa).
alertas.sancao_multaValor de multa associado a sanção CNEP, quando houver (R$).
capacidadeSinais positivos/capacidade: financiamento BNDES, contrato FINEP, fornecedora do governo (gov, via PNCP), aeronave vigente no RAB, registro CVM, autorização ANP, propriedade intelectual no INPI e cadastro de supervisionada ativa do BCB.
neg_count / pos_countContagem transparente de alertas ativos e de sinais positivos. Não há score nem nota — a decisão é de quem consulta.

O screening é o resumo (flags do rollup, reconstruído a cada carga das fontes). Para o detalhe auditável — sanções item a item com órgão/processo/vigência, dívidas por natureza, marcas/patentes INPI, situação BCB/Pix e quadro societário — consulte resource=empresa de cada CNPJ que acender alerta. Ausência de sinal ≠ idoneidade comprovada: significa apenas que nada foi encontrado nas bases abertas na data da última carga.

GET?resource=dl&recurso=…&cnpj=…

Baixa uma seção detalhada de uma empresa que você consultou nos últimos 30 dias — no site ou pela API (resource=empresa). Não consome consulta: o acesso já foi pago pela consulta, e o consumo é unificado site + API (consultou no site hoje, baixa pela API amanhã). Se a empresa não estiver na janela de 30 dias, retorna 403 not_consulted.

recursomarcas, dominios, veiculos, obras, aeronaves, contratos, grupo, divida, sancoes, ibama. cnpj = 14 caracteres (numérico ou alfanumérico; pontuação ignorada). format=json (padrão) ou csv.

curl "https://cfo.com.br/api?resource=dl&recurso=marcas&cnpj=12345678000190" \
  -H "Authorization: Bearer cfo_live_SUA_CHAVE"

Retorna { "recurso": "marcas", "cnpj": "…", "count": N, "data": [ {…}, … ] } (até 50.000 linhas por seção). Com &format=csv devolve um CSV (mesmas colunas do download do site). Fluxo: consulte a empresa (site ou resource=empresa) → por 30 dias baixe qualquer seção dela por aqui, sem nova cobrança; consultar de novo renova a janela.

GET?resource=meta

Introspecção: limites e uso da sua conta + horizonte dos dados. Não consome quota.

curl "https://cfo.com.br/api?resource=meta" -H "Authorization: Bearer cfo_live_SUA_CHAVE"

POST?resource=rotate_key

Rotaciona a própria chave: autentica com a chave atual e devolve uma nova. Não consome quota. Serve para trocar o segredo periodicamente ou reagir a uma suspeita de vazamento sem passar pelo painel.

# corte imediato (default): a chave antiga morre no mesmo instante
curl -X POST "https://cfo.com.br/api?resource=rotate_key" \
  -H "Authorization: Bearer cfo_live_SUA_CHAVE_ATUAL"

# com carência: a antiga continua valendo por 30 min (troca sem downtime)
curl -X POST "https://cfo.com.br/api?resource=rotate_key" \
  -H "Authorization: Bearer cfo_live_SUA_CHAVE_ATUAL" \
  -d "grace_minutes=30"
{
  "data": {
    "api_key": "cfo_live_a1b2c3…",          // única vez que a chave aparece
    "key_prefix": "cfo_live_a1b2c3…",
    "label": "producao",
    "rotated_at": "2026-08-05T21:30:00-03:00",
    "anterior": {
      "key_prefix": "cfo_live_9f8e7d…",
      "grace_minutes": 30,
      "valida_ate": "2026-08-05T22:00:00-03:00"   // null quando grace_minutes=0
    },
    "aviso": "Guarde agora: a chave não será exibida de novo…"
  }
}

grace_minutes (opcional, 0–1440): quanto tempo a chave anterior ainda funciona depois da rotação.

A chave em carência aparece no painel com o selo “expira dd/mm hh:mm” em vez de “ativa”, e pode ser revogada antes da hora pelo botão Revogar. Valor fora da faixa (ou não inteiro) devolve 400.

Guarde a resposta. O servidor só armazena o hash — se você perder o corpo desta chamada, não há como recuperar a chave; crie outra pelo painel (você não perde o acesso à conta, só àquela chave).

Só POST. Em GET a resposta traria o segredo numa requisição que costuma ser registrada em log/histórico/proxy, e um prefetch poderia disparar rotação sem intenção — por isso GET devolve 405. Limite de 5 rotações por hora por conta (429 acima disso), como proteção contra laço de integração. O label da chave é preservado.

Precisa de troca sem downtime (duas chaves válidas ao mesmo tempo)? Crie a segunda chave pelo painel, migre os serviços e revogue a antiga — o limite de chaves ativas do seu plano se aplica.

Auditoria. Toda rotação fica registrada: aparece no histórico da conta (aba Auditoria do painel) como apikey_rotacionada, com data, IP de origem e os prefixos da chave revogada e da nova — e também no log de chamadas da API. O segredo nunca é gravado: só o prefixo (primeiros caracteres) e o hash SHA-256.

Exportar CSV

Adicione format=csv para receber um arquivo (UTF-8 com BOM, separador ;, pronto pro Excel). O streaming permite páginas grandes — respeitando o teto da sua conta.

curl -L "https://cfo.com.br/api?resource=empresas&uf=RS&dias=60&per_page=1000&format=csv" \
  -H "Authorization: Bearer cfo_live_SUA_CHAVE" -o empresas.csv

Exemplos em código

const r = await fetch(
  "https://cfo.com.br/api?resource=empresas&uf=SP&cnae=6201&dias=30",
  { headers: { Authorization: "Bearer cfo_live_SUA_CHAVE" } }
);
const { meta, data } = await r.json();
console.log(meta.total, data.length);

Erros

Erros vêm como { "error": { "code": "...", "message": "..." } } com o status HTTP correspondente.

HTTPcodeQuando
400bad_requestParâmetro inválido (ex.: CNPJ sem 14 caracteres; lista de screening sem nenhum CNPJ válido).
400too_many_cnpjsScreening com mais de 50 CNPJs — divida o lote.
400filter_requiredPeríodo aberto (dias=0) sem nenhum filtro seletivo (uf, cnae, cidade, termo, cnpj, capital, CEP, divida ou sancao).
401missing_key / invalid_keyChave ausente, inválida ou revogada.
403ip_blocked / ip_not_allowed / account_inactiveIP bloqueado, fora da allowlist, ou conta inativa.
404not_found / unknown_resourceCNPJ inexistente ou recurso desconhecido.
429quota_exceededCota mensal de buscas atingida (veja Retry-After).
429empresa_quota_exceededCota mensal de empresas com dossiê atingida (resource=empresa/screening; veja Retry-After). Estouro de leads não gera erro: a resposta é 200 com as linhas além do saldo mascaradas (contato_mascarado: "cota").
500query_errorErro interno ao consultar.
503maintenanceBase em recarga mensal (ver Retry-After). Não exige chave nem consome cota.

Durante a atualização mensal da base a API responde 503 maintenance com o header Retry-After (segundos). É um estado transitório de poucos minutos — repita a chamada após o intervalo indicado. Nenhuma requisição nesse período consome sua cota.

Tabelas de código

Situação cadastral (sit)

1Nula
2Ativa
3Suspensa
4Inapta
8Baixada

Porte

00
01Micro (ME)
03Pequeno (EPP)
05Demais

Dados públicos (dados abertos do governo federal), atualizados com frequência. CFO não é um órgão público.