API v1

Documentação da cnpjob API

Acesse dados de 67 milhões de empresas, 70 milhões de estabelecimentos e 27 milhões de sócios diretamente da Receita Federal — em tempo real, com latência < 100ms.

REST API JSON Dados RF oficiais 67M empresas
Base URL https://api.cnpjob.com.br
💡

Todos os endpoints de dados retornam JSON. Inclua o header Accept: application/json nas suas requisições. A API usa HTTPS obrigatoriamente em produção.

Quickstart — 60 segundos

bash — cURL
# 1. Registre sua conta e obtenha uma API key em cnpjob.com.br

# 2. Consulte um CNPJ
curl https://api.cnpjob.com.br/cnpj/33000167000101 \
  -H "X-API-Key: cnjb_live_SUA_CHAVE"
javascript — fetch
const res = await fetch('https://api.cnpjob.com.br/cnpj/33000167000101', {
  headers: { 'X-API-Key': 'cnjb_live_SUA_CHAVE' }
});
const empresa = await res.json();
console.log(empresa.razao_social); // "PETROLEO BRASILEIRO S A"
python — requests
import requests

res = requests.get(
    'https://api.cnpjob.com.br/cnpj/33000167000101',
    headers={'X-API-Key': 'cnjb_live_SUA_CHAVE'}
)
empresa = res.json()
print(empresa['razao_social'])  # "PETROLEO BRASILEIRO S A"
🔑 Segurança

Autenticação

A API usa API Keys transmitidas via header HTTP. Nunca exponha sua chave em código client-side ou repositórios públicos.

Header obrigatório

http
GET /cnpj/33000167000101 HTTP/1.1
Host: api.cnpjob.com.br
X-API-Key: cnjb_live_SUA_CHAVE
Accept: application/json
⚠️

Requisições sem o header X-API-Key retornam 401 Unauthorized. Chaves inativas ou inválidas também retornam 401.

Gerenciando sua API Key

AçãoComo fazer
Criar chaveDashboard → "Gerar nova chave" (exibida uma única vez)
Revogar chaveGerar nova chave revoga automaticamente a anterior
Ver prefixoDashboard → seção "Minha API Key" (ex: cnjb_live_ab12...)
Verificar usoDashboard → seção "Uso"

A chave completa é exibida apenas no momento da criação. O sistema armazena somente o hash SHA-256. Guarde em variável de ambiente (CNPJOB_API_KEY=cnjb_live_...).

⚡ Limites

Rate Limiting

Limites são aplicados por API key usando contadores atômicos no Redis. Dois janelas independentes: por minuto e por dia.

Free
R$0
para sempre
10 req / dia
2 req / minuto
10 itens / página
Pro
R$99
por mês
10.000 req / dia
60 req / minuto
100 itens / página
Business
R$349
por mês
100.000 req / dia
300 req / minuto
1.000 itens / página

Headers de resposta

Todas as respostas de endpoints autenticados incluem os headers abaixo:

X-RateLimit-Limit-Minute
Limite de requisições por minuto do seu plano
X-RateLimit-Limit-Day
Limite diário do seu plano
X-RateLimit-Remaining-Minute
Requisições restantes no minuto atual
X-RateLimit-Remaining-Day
Requisições restantes no dia atual
⚠️

Ao exceder o limite por minuto ou diário, a API retorna 429 Too Many Requests. O contador de minuto reseta após 60s e o diário à meia-noite UTC.

resposta 429
{
  "error": "Limite de 2 req/min atingido. Aguarde 1 minuto."
}
🚨 Respostas

Códigos de erro

Todos os erros retornam JSON com campo error descritivo.

StatusSignificadoCausa comum
400Bad RequestCNPJ inválido, parâmetro ausente
401UnauthorizedAPI key ausente ou inválida
402Payment RequiredPlano expirado — renove a assinatura
403ForbiddenEndpoint requer plano superior (Pro/Business)
404Not FoundCNPJ não encontrado na base RF
429Too Many RequestsLimite de req/min ou req/dia atingido
500Internal Server ErrorErro inesperado — contate o suporte
503Service UnavailableServiço temporariamente indisponível
exemplo de erro 403
{
  "error": "Este endpoint requer o plano pro ou superior. Faça upgrade em cnpjob.com.br."
}
📋 Sem autenticação

Planos disponíveis

Lista os planos ativos com limites e preços. Útil para exibir opções de upgrade na sua aplicação.

GET /plans Lista planos ativos
Resposta 200
json
[
  {
    "id": 1,
    "name": "Free",
    "slug": "free",
    "price_brl": "0.00",
    "req_per_day": 10,
    "req_per_min": 2,
    "max_page_size": 10,
    "has_checkout": false
  },
  {
    "id": 2,
    "name": "Pro",
    "slug": "pro",
    "price_brl": "99.90",
    "req_per_day": 10000,
    "req_per_min": 60,
    "max_page_size": 100,
    "has_checkout": true
  }
]
📋 Sem autenticação

CNAEs

Lista e consulta atividades econômicas da Classificação Nacional de Atividades Econômicas (CNAE).

GET /cnae Lista todos os CNAEs
Resposta 200
json
[
  { "codigo": "0111301", "descricao": "Cultivo de arroz" },
  { "codigo": "0111302", "descricao": "Cultivo de milho" }
]
GET /cnae/:codigo Descrição de um CNAE
🔒

Requer API Key + plano Pro ou superior.

Parâmetros
ParâmetroTipoDescrição
codigopathCódigo CNAE (ex: 6201501)
Resposta 200
json
{ "codigo": "6201501", "descricao": "Desenvolvimento de programas de computador sob encomenda" }
GET /cnae/:codigo/empresas Empresas com este CNAE
🔒

Requer API Key + plano Pro ou superior. Retorna apenas empresas ativas.

Parâmetros
ParâmetroTipoDescrição
codigopathCódigo CNAE (ex: 6201501)
limitqueryResultados por página (padrão: 20, máx: conforme plano)
pagequeryNúmero da página (padrão: 1)
Resposta 200
json
{
  "cnae": "6201501",
  "page": 1,
  "limit": 20,
  "total": 20,
  "empresas": [
    {
      "cnpj": "00.000.000/0001-00",
      "razao_social": "EMPRESA TECH LTDA",
      "uf": "SP",
      "municipio": "SAO PAULO",
      "data_inicio_atividade": "2018-03-15"
    }
  ]
}
📋 Sem autenticação

Municípios

GET /municipios Lista todos os municípios
json
[
  { "codigo": "7107", "nome": "SAO PAULO", "uf": "SP" }
]
GET /municipios/:uf Municípios por estado
Parâmetros
ParâmetroTipoExemplo
ufpathSP, RJ, MG...
✅ Sem autenticação

Validar CNPJ

Valida o formato e dígito verificador de um CNPJ sem consumir cota de requisições.

GET /cnpj/validate/:cnpj Valida formato de CNPJ

Endpoint público — não requer API Key e não consome cota.

Exemplo
bash
curl https://api.cnpjob.com.br/cnpj/validate/33000167000101
🏢 Dados de empresa

Consulta por CNPJ

Retorna dados completos de uma empresa: razão social, situação, endereço, CNAE, sócios, capital social e mais — direto da Receita Federal.

GET /cnpj/:cnpj Dados completos da empresa

Disponível no plano Free. Aceita CNPJ com ou sem formatação (33.000.167/0001-01 ou 33000167000101).

Parâmetros
ParâmetroTipoDescrição
cnpjpathCNPJ com 14 dígitos (formatado ou não)
Exemplo de requisição
bash
curl https://api.cnpjob.com.br/cnpj/33000167000101 \
  -H "X-API-Key: cnjb_live_SUA_CHAVE"
Resposta 200
json
{
  "cnpj": "33.000.167/0001-01",
  "razao_social": "PETROLEO BRASILEIRO S A PETROBRAS",
  "nome_fantasia": "PETROBRAS",
  "situacao_cadastral": "Ativa",
  "data_situacao": "2005-11-17",
  "data_abertura": "1966-09-28",
  "porte": "Grande",
  "natureza_juridica": "Sociedade de Economia Mista",
  "capital_social": 205431960490.52,
  "cnae_principal": {
    "codigo": "0600301",
    "descricao": "Extração de petróleo e gás natural"
  },
  "cnaes_secundarios": [
    { "codigo": "1921700", "descricao": "Fabricação de produtos do refino de petróleo" }
  ],
  "endereco": {
    "logradouro": "AV REPUBLICA DO CHILE",
    "numero": "65",
    "complemento": "ANDAR 1 A 22",
    "bairro": "CENTRO",
    "municipio": "RIO DE JANEIRO",
    "uf": "RJ",
    "cep": "20031912"
  },
  "telefone": "2135985678",
  "email": "relacionamento@petrobras.com.br",
  "socios": [
    {
      "nome": "MAGDA MARIA DE REGINA CHAMBRIARD",
      "qualificacao": "Presidente",
      "tipo": "Pessoa Física",
      "cpf_representante": null
    }
  ]
}
👥 Societário

Quadro societário

Retorna o quadro de sócios e administradores (QSA) de um CNPJ com qualificações e percentuais.

GET /cnpj/:cnpj/socios Sócios de um CNPJ

Disponível no plano Free.

Exemplo de requisição
bash
curl https://api.cnpjob.com.br/cnpj/33000167000101/socios \
  -H "X-API-Key: cnjb_live_SUA_CHAVE"
Resposta 200
json
[
  {
    "nome": "MAGDA MARIA DE REGINA CHAMBRIARD",
    "cpf_cnpj": "***355***-**",
    "qualificacao": "Presidente",
    "tipo": "Pessoa Física",
    "data_entrada": "2023-06-21"
  }
]
📦 Consulta em lote

Batch de CNPJs

Consulta múltiplos CNPJs em uma única requisição. Cada CNPJ no lote consome 1 unidade do rate limit.

POST /cnpj/batch Consulta em lote

Disponível no plano Free. O peso do rate limit é proporcional ao número de CNPJs enviados.

Body (JSON)
json
{
  "cnpjs": ["33000167000101", "00000000000191"]
}
Exemplo
bash
curl -X POST https://api.cnpjob.com.br/cnpj/batch \
  -H "X-API-Key: cnjb_live_SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{"cnpjs":["33000167000101","00000000000191"]}'
🏭 Filiais

Estabelecimentos

Lista todas as filiais e estabelecimentos de um CNPJ raiz, com endereços e situações individuais.

GET /cnpj/:cnpj/estabelecimentos Filiais de um CNPJ
🔒

Requer plano Pro ou superior.

Parâmetros
ParâmetroTipoPadrãoDescrição
cnpjpathCNPJ (14 dígitos)
limitquery20Itens por página (máx conforme plano)
offsetquery0Posição inicial para paginação
Resposta 200
json
{
  "total": 48,
  "data": [
    {
      "cnpj": "33.000.167/0001-01",
      "nome_fantasia": "PETROBRAS - MATRIZ",
      "situacao": "Ativa",
      "tipo": "Matriz",
      "uf": "RJ",
      "municipio": "RIO DE JANEIRO"
    }
  ]
}
🔍 Busca textual

Busca por razão social

Busca empresas por nome usando similaridade trigram (pg_trgm). Suporta termos parciais e nomes incompletos.

GET /empresa/busca Busca por nome da empresa
🔒

Requer plano Pro ou superior.

Parâmetros
ParâmetroTipoObrigatórioDescrição
qquery✅ SimTermo de busca (mín. 3 caracteres)
limitqueryNãoResultados por página (padrão: 20)
pagequeryNãoNúmero da página (padrão: 1)
Exemplo
bash
curl "https://api.cnpjob.com.br/empresa/busca?q=petrobras&limit=5" \
  -H "X-API-Key: cnjb_live_SUA_CHAVE"
Resposta 200
json
{
  "query": "petrobras",
  "page": 1,
  "limit": 5,
  "total": 12,
  "empresas": [
    {
      "cnpj": "33.000.167/0001-01",
      "razao_social": "PETROLEO BRASILEIRO S A PETROBRAS",
      "situacao": "Ativa",
      "uf": "RJ",
      "municipio": "RIO DE JANEIRO",
      "cnae_principal": "0600301"
    }
  ]
}
🔎 Filtros avançados

Busca com filtros

Filtra empresas por CNAE, UF, município e situação cadastral. Ideal para prospecção e enriquecimento de leads.

GET /empresas Filtra empresas por critérios
🔒

Requer plano Pro ou superior. Ao menos um filtro é obrigatório.

Parâmetros
ParâmetroTipoExemploDescrição
cnaequery6201501Código CNAE principal
ufquerySPSigla do estado
municipioquery7107Código do município RF
situacaoqueryativaSituação cadastral: ativa, baixada, suspensa, inapta, nula
limitquery50Resultados por página (padrão: 20)
pagequery1Número da página (padrão: 1)
Exemplo — empresas de TI ativas em São Paulo
bash
curl "https://api.cnpjob.com.br/empresas?cnae=6201501&uf=SP&situacao=ativa&limit=50" \
  -H "X-API-Key: cnjb_live_SUA_CHAVE"
Resposta 200
json
{
  "page": 1,
  "limit": 50,
  "total": 50,
  "empresas": [
    {
      "cnpj": "00.000.000/0001-00",
      "razao_social": "EMPRESA TECH LTDA",
      "situacao": "Ativa",
      "uf": "SP",
      "municipio": "SAO PAULO",
      "cnae_principal": "6201501"
    }
  ]
}
🔍 Busca por sócio

Empresas por sócio

Descobre todas as empresas onde um CPF ou CNPJ figura como sócio ou administrador.

GET /socio/busca Empresas de um sócio
🔒

Requer plano Pro ou superior.

Parâmetros
ParâmetroTipoObrigatórioDescrição
cpf_cnpjquery✅ SimCPF (11 dígitos) ou CNPJ (14 dígitos) do sócio
limitqueryNãoResultados por página (padrão: 20)
offsetqueryNãoPaginação
Exemplo
bash
curl "https://api.cnpjob.com.br/socio/busca?cpf_cnpj=12345678901" \
  -H "X-API-Key: cnjb_live_SUA_CHAVE"
Resposta 200
json
[
  {
    "cnpj": "12.345.678/0001-90",
    "razao_social": "EMPRESA EXEMPLO LTDA",
    "situacao": "Ativa",
    "nome_socio": "FULANO DE TAL",
    "qualificacao": "Sócio-Administrador"
  }
]
📊 Cota de Leads

Consultar cota diária

Retorna o uso atual, limite e horário de reset da cota de pesquisas de leads do usuário autenticado.

GET /api/portal/leads/quota Cota de pesquisas
Resposta 200
json
{
  "used":      3,
  "limit":     50,
  "remaining": 47,
  "reset_at":  "2026-05-26T00:00:00.000Z"
}
🕐 Histórico de Leads

Histórico de pesquisas

Retorna as últimas 20 pesquisas realizadas pelo usuário.

GET /api/portal/leads/history Histórico de pesquisas
Resposta 200
json
{
  "history": [
    {
      "filters": { "cnae": "8630501", "uf": "SP" },
      "result_count": 20,
      "created_at": "2026-05-25T22:00:00Z"
    }
  ]
}
🤖 Análise de Viabilidade IA

Solicitar análise

Gera um relatório de viabilidade empresarial cruzando dados da Receita Federal com pesquisa de preços de mercado via LLM. Se o relatório já existir em cache (mesmo CNAE + município), retorna imediatamente sem debitar cota.

POST /api/portal/analysis/request Solicitar análise de viabilidade
🔒

Requer autenticação JWT. Plano Pro (5/mês) ou Business (30/mês). Cache compartilhado — relatórios em cache são gratuitos.

Body (JSON)
CampoTipoObrigatórioDescrição
cnae_codigostring✅ SimCódigo CNAE (ex: 8630501)
municipio_codigostring✅ SimCódigo do município da RF (ex: 3550308)
descricao_negociostringContexto adicional do negócio planejado (max 1000 chars)
Exemplo
bash
curl -X POST "https://api.cnpjob.com.br/api/portal/analysis/request" \
  -H "Authorization: Bearer SEU_JWT" \
  -H "Content-Type: application/json" \
  -d '{"cnae_codigo":"8630501","municipio_codigo":"3550308","descricao_negocio":"Clínica de fisioterapia especializada em idosos"}'
Resposta — cache hit (instantâneo, não debita cota)
json
{
  "jobId":             "uuid-do-acesso",
  "status":            "done",
  "report": {
    "score_viabilidade": 72,
    "classificacao":    "Moderada",
    "resumo_executivo": "...",
    "analise_concorrencia": { "total_municipio": 847, "tendencia": "Crescendo" },
    "faixa_preco": { "minimo_estimado": 80, "media_estimada": 145, "maximo_estimado": 380 },
    "pontos_atencao": ["..."],
    "recomendacoes":  ["..."]
  },
  "score_viabilidade": 72,
  "last_updated_at":   "2026-05-25T22:00:00Z"
}
Resposta — cache stale (retorna relatório antigo + refresh em background)
json
{
  "jobId":           "uuid-do-acesso",
  "status":          "refreshing",
  "report": { /* relatório anterior, ainda válido */ },
  "score_viabilidade": 72,
  "last_updated_at":  "2026-05-10T00:00:00Z"
}
Resposta — novo relatório (processamento em background)
json
{
  "jobId":  "uuid-do-acesso",
  "status": "processing"
}
🔄 Status da Análise

Consultar status / resultado

Consulta o andamento de uma análise em background. Faça polling a cada 3–5 segundos até status === "done". Tempo médio: 30–60 segundos para relatórios novos.

GET /api/portal/analysis/:jobId Status e resultado da análise
Parâmetros
ParâmetroTipoDescrição
jobIdpathID retornado pelo POST /analysis/request
Exemplo de polling em Node.js
js
async function waitForAnalysis(jobId, token) {
  while (true) {
    const res  = await fetch(`/api/portal/analysis/${jobId}`, {
      headers: { Authorization: `Bearer ${token}` }
    });
    const data = await res.json();
    if (data.status === 'done')    return data.report;
    if (data.status === 'failed') throw new Error('Análise falhou');
    await new Promise(r => setTimeout(r, 4000));
  }
}
Resposta 200 — quando done
json
{
  "status":            "done",
  "report": { /* objeto completo do relatório */ },
  "score_viabilidade": 72,
  "last_updated_at":   "2026-05-25T22:00:00Z",
  "cnae_codigo":       "8630501",
  "municipio_codigo":  "3550308",
  "cnae_descricao":    "Atividade médica ambulatorial",
  "municipio_nome":    "SAO PAULO"
}
Status possíveis
StatusDescrição
processingWorker processando — continue o polling
doneRelatório disponível em report
failedFalha no processamento — nova requisição reprocessa automaticamente
📊 Cota de Análise

Consultar cota mensal

Retorna o uso, limite e reset mensal da cota de análises de viabilidade.

GET /api/portal/analysis/quota Cota mensal de análises
Resposta 200
json
{
  "used":      2,
  "limit":     5,
  "remaining": 3,
  "reset_at":  "2026-06-01T00:00:00.000Z"
}
📍 Lugares Próximos

Concorrentes no Google Maps

Busca concorrentes reais via Google Places API para o CNAE e município informados. Retorna "available": false se GOOGLE_PLACES_API_KEY não estiver configurado.

GET /api/portal/analysis/nearby-places Concorrentes via Google Places
Query params
ParâmetroObrigatórioDescrição
cnae_descricao✅ SimDescrição textual do CNAE (ex: Atividade médica ambulatorial)
municipio_nome✅ SimNome do município (ex: SAO PAULO)
Exemplo
bash
curl "https://api.cnpjob.com.br/api/portal/analysis/nearby-places?cnae_descricao=Fisioterapia&municipio_nome=SAO+PAULO" \
  -H "Authorization: Bearer SEU_JWT"
Resposta 200
json
{
  "available": true,
  "places": [
    {
      "name":          "Clínica Fisio Centro",
      "address":       "Rua das Flores, 100 - Centro, São Paulo",
      "rating":        4.7,
      "total_ratings": 128,
      "maps_url":      "https://www.google.com/maps/place/?q=place_id:..."
    }
  ]
}
© 2026 cnpjob · Dados da Receita Federal do Brasil
Home Dashboard Entrar