GET /v1/cnpjs
Buscar empresas por filtros
Página de até 20 empresas com campos basic, ordenação fixa por CNPJ, paginação por cursor. Custa 1 crédito por empresa retornada; página vazia não custa. Não disponível no plano Free.
Créditos
por empresa retornada · 1 crédito página máx. · 20 empresas
Parâmetros
| Nome | Em | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
uf | query | string | — | Sigla da UF (2 letras maiúsculas). Nível 1 — até 50 valores separados por vírgula. |
municipio | query | string | — | Código IBGE de município existente (7 dígitos). Nível 1 — até 50 valores separados por vírgula. |
cnae | query | string | — | CNAE fiscal (2, 3, 5 ou 7 dígitos: divisão, grupo, classe, subclasse). Nível 1 — até 50 valores separados por vírgula. |
porte | query | string | — | Porte: ME, EPP ou DEMAIS. Nível 1 — até 50 valores separados por vírgula. |
situacao | query | string | — | Situação: ATIVA, SUSPENSA, INAPTA, BAIXADA ou NULA. Nível 1 — até 50 valores separados por vírgula. |
simples | query | boolean | — | — |
mei | query | boolean | — | — |
natureza | query | string | — | Código da natureza jurídica (4 dígitos). Nível 1 — até 50 valores separados por vírgula. |
capital_min | query | numbermín. 0 | — | — |
capital_max | query | numbermín. 0 | — | — |
abertura_de | query | stringformato: date | — | — |
abertura_ate | query | stringformato: date | — | — |
regime | query | string | — | Nível 2 — Starter ou superior. Regime: LUCRO_PRESUMIDO, LUCRO_REAL, LUCRO_ARBITRADO, IMUNE ou ISENTA; até 50 valores separados por vírgula. |
cnae_secundario | query | boolean | — | Nível 2 — Starter ou superior. Com true, inclui CNAEs secundários; exige cnae. |
natureza_categoria | query | string | — | Nível 2 — Starter ou superior. Primeiro dígito da natureza jurídica (1 a 5); até 50 valores separados por vírgula. |
matriz_filial | query | stringenum: MATRIZ, FILIAL | — | Nível 2 — Starter ou superior. Tipo de estabelecimento. |
filiais_min | query | integermín. 0 | — | Nível 2 — Starter ou superior. Mínimo de filiais; deve ser menor ou igual a filiais_max. |
filiais_max | query | integermín. 0 | — | Nível 2 — Starter ou superior. Máximo de filiais; deve ser maior ou igual a filiais_min. |
situacao_data_de | query | stringformato: date | — | Nível 2 — Starter ou superior. Data mínima da situação (YYYY-MM-DD), até situacao_data_ate; exclui a sentinela 1925-01-01. |
situacao_data_ate | query | stringformato: date | — | Nível 2 — Starter ou superior. Data máxima da situação (YYYY-MM-DD), desde situacao_data_de; exclui a sentinela 1925-01-01. |
motivo_situacao | query | string | — | Nível 2 — Starter ou superior. Código do motivo da situação (2 dígitos); até 50 valores separados por vírgula. |
situacao_especial | query | string | — | Nível 2 — Starter ou superior. Código da situação especial (1 a 8); até 50 valores separados por vírgula. |
municipio_excluir | query | string | — | Nível 2 — Starter ou superior. Código IBGE de município existente (7 dígitos); até 50 valores separados por vírgula, todos excluídos. |
cep | query | string | — | Nível 2 — Starter ou superior. Prefixo do CEP (1 a 8 dígitos). |
bairro | query | stringmáx. 100 caracteres | — | Nível 2 — Starter ou superior. Bairro por igualdade exata (1 a 100 caracteres). |
com_email | query | boolean | — | Nível 2 — Starter ou superior. true exige e-mail; false exige ausência. |
com_site | query | boolean | — | Nível 2 — Starter ou superior. true exige site; false exige ausência. |
com_telefone | query | boolean | — | Nível 2 — Starter ou superior. true exige telefone; false exige ausência. |
com_celular | query | boolean | — | Nível 2 — Starter ou superior. true exige celular; false exige ausência. |
nome | query | stringmáx. 100 caracteres | — | Nível 2 — Starter ou superior. Texto contido na razão social ou nome fantasia (3 a 100 caracteres), sem diferenciar maiúsculas; barras e curingas são literais. |
socio_nome | query | stringmáx. 100 caracteres | — | Nível 3 — Pro ou superior. Texto contido no nome de algum sócio (3 a 100 caracteres), sem diferenciar maiúsculas; barras e curingas são literais. |
socio_cnpj | query | string | — | Nível 3 — Pro ou superior. CNPJ de sócio PJ, numérico ou alfanumérico: 14 caracteres após remover pontuação; CPF não é aceito. |
socio_qualificacao | query | string | — | Nível 3 — Pro ou superior. Código de qualificação do sócio (1 ou 2 dígitos); até 50 valores separados por vírgula. |
cep_raio | query | string | — | Nível 3 — Pro ou superior. CEP de 8 dígitos com coordenada conhecida; exige raio_metros e restringe ao município do CEP. |
raio_metros | query | integermín. 100 máx. 20000 | — | Nível 3 — Pro ou superior. Raio em metros (100 a 20000); exige cep_raio. |
faturamento | query | string | — | Nível 3 — Pro ou superior. Faixa do perfil full: ATE_360MIL, DE_360MIL_A_4_8MI ou ACIMA_4_8MI; até 50 valores separados por vírgula. |
funcionarios_min | query | integermín. 0 | — | Nível 3 — Pro ou superior. Mínimo do valor esperado de funcionários arredondado, como no perfil full; até funcionarios_max. Distribuição inválida não casa. |
funcionarios_max | query | integermín. 0 | — | Nível 3 — Pro ou superior. Máximo do valor esperado de funcionários arredondado, como no perfil full; desde funcionarios_min. Distribuição inválida não casa. |
cursor | query | string | — | Cursor opaco da página anterior (meta.next_cursor). |
explicacao | query | string | — | Ignorada. Presente para que a saída de generateFilter possa ser repassada inteira; não filtra e não conta como filtro. |
Respostas
200 OK
Página de resultados.
| Header | Tipo | Descrição |
|---|---|---|
X-Request-Id | string | Identificador da requisição para suporte. |
X-Client-Request-Id | string | Eco do X-Request-Id enviado pelo cliente quando casa ^[A-Za-z0-9_-]{8,64}$. Ausente se o cliente não enviou ou o valor é inválido. Nunca usado como identificador interno. |
X-Credits-Charged | integer | Créditos debitados nesta resposta. |
X-Credits-Remaining | integer | Créditos restantes (franquia + pacotes). |
X-Credits-Reset | stringformato: date-time | Instante do próximo reset da franquia (RFC 3339). |
X-RateLimit-Limit | integer | Requisições por minuto do plano (por conta). |
X-RateLimit-Remaining | integer | Requisições restantes no minuto corrente. |
{
"data": [
{
"cnpj": "00000000669822",
"raiz_cnpj": "00000000",
"razao_social": "BANCO DO BRASIL SA",
"nome_fantasia": "TIRADENTES / BNC (SP)",
"matriz_filial": {
"codigo": "2",
"descricao": "Filial"
},
"n_filiais": 0,
"data_inicio_atividade": "2009-04-16",
"situacao_cadastral": {
"codigo": "02",
"descricao": "Ativa"
},
"data_situacao_cadastral": "2009-04-16",
"motivo_situacao_cadastral": {
"codigo": "00",
"descricao": "Sem motivo"
},
"situacao_especial": null,
"data_situacao_especial": null,
"natureza_juridica": {
"codigo": "2038",
"descricao": "Sociedade de Economia Mista"
},
"porte": {
"codigo": "05",
"descricao": "Demais"
},
"capital_social": 120000000000,
"cnae_fiscal": {
"codigo": "6422100",
"descricao": "Bancos múltiplos, com carteira comercial"
},
"cnaes_secundarios": [
{
"codigo": "6499999",
"descricao": "Outras atividades de serviços financeiros não especificadas anteriormente"
}
],
"endereco": {
"tipo_logradouro": "AVENIDA",
"logradouro": "TIRADENTES",
"numero": "451",
"complemento": null,
"bairro": "Luz",
"cep": "01101010",
"municipio": "São Paulo",
"codigo_municipio_ibge": "3550308",
"codigo_municipio_siafi": "7107",
"uf": "SP"
},
"simples": {
"optante": false,
"data_opcao": "2007-07-01",
"data_exclusao": "2007-07-01"
},
"mei": {
"optante": false,
"data_opcao": "2009-07-01",
"data_exclusao": "2009-07-01"
},
"has_email": false,
"has_website": false,
"has_phone": false,
"has_mobile_phone": false
}
],
"meta": {
"request_id": "req_01J8ZK3Q9X",
"source": "rfb_open_data+oportunidados",
"data_as_of": "2026-09-01",
"credits_charged": 1,
"credits_remaining": 59,
"credits_reset_at": "2026-10-01T00:00:00-03:00",
"page_size": 1,
"next_cursor": null,
"total_count_capped": "1"
}
}
400 Requisição inválida
Filtro desconhecido ou valor fora do enum, cursor inválido, ou nenhum filtro além de cursor. explicacao é ignorada e não conta como filtro.
| Header | Tipo | Descrição |
|---|---|---|
X-Request-Id | string | Identificador da requisição para suporte. |
X-Client-Request-Id | string | Eco do X-Request-Id enviado pelo cliente quando casa ^[A-Za-z0-9_-]{8,64}$. Ausente se o cliente não enviou ou o valor é inválido. Nunca usado como identificador interno. |
X-RateLimit-Limit | integer | Requisições por minuto do plano (por conta). |
X-RateLimit-Remaining | integer | Requisições restantes no minuto corrente. |
X-Credits-Charged | integer | Créditos debitados nesta resposta. |
X-Credits-Remaining | integer | Créditos restantes (franquia + pacotes). |
X-Credits-Reset | stringformato: date-time | Instante do próximo reset da franquia (RFC 3339). |
{
"error": {
"code": "invalid_filter",
"message": "Um ou mais parâmetros da requisição são inválidos. Consulte a documentação.",
"request_id": "req_01J8ZK3Q9X",
"retryable": false,
"docs_url": "https://cnpj.ia.br/docs/erros-e-retentativas#invalid_filter"
}
}
401 Não autorizado
Chave ausente, desconhecida, revogada ou expirada.
| Header | Tipo | Descrição |
|---|---|---|
X-Request-Id | string | Identificador da requisição para suporte. |
X-Client-Request-Id | string | Eco do X-Request-Id enviado pelo cliente quando casa ^[A-Za-z0-9_-]{8,64}$. Ausente se o cliente não enviou ou o valor é inválido. Nunca usado como identificador interno. |
{
"error": {
"code": "invalid_api_key",
"message": "Chave de API ausente ou inválida.",
"request_id": "req_01J8ZK3Q9X",
"retryable": false,
"docs_url": "https://cnpj.ia.br/docs/erros-e-retentativas#invalid_api_key"
}
}
402 Pagamento necessário
Franquia e pacotes esgotados. Header X-Credits-Reset.
| Header | Tipo | Descrição |
|---|---|---|
X-Request-Id | string | Identificador da requisição para suporte. |
X-Client-Request-Id | string | Eco do X-Request-Id enviado pelo cliente quando casa ^[A-Za-z0-9_-]{8,64}$. Ausente se o cliente não enviou ou o valor é inválido. Nunca usado como identificador interno. |
X-RateLimit-Limit | integer | Requisições por minuto do plano (por conta). |
X-RateLimit-Remaining | integer | Requisições restantes no minuto corrente. |
X-Credits-Charged | integer | Créditos debitados nesta resposta. |
X-Credits-Remaining | integer | Créditos restantes (franquia + pacotes). |
X-Credits-Reset | stringformato: date-time | Instante do próximo reset da franquia (RFC 3339). |
{
"error": {
"code": "quota_exceeded",
"message": "Créditos insuficientes para esta operação. Aguarde a renovação ou adquira mais créditos.",
"request_id": "req_01J8ZK3Q9X",
"retryable": false,
"docs_url": "https://cnpj.ia.br/docs/erros-e-retentativas#quota_exceeded"
}
}
403 Proibido
insufficient_plan (operação fora do plano), filter_not_in_plan (filtro acima do nível do plano) ou payment_required (cobrança recusada há mais de 7 dias). Com a busca globalmente fechada, o mesmo insufficient_plan usa a mensagem de liberação gradual.
| Header | Tipo | Descrição |
|---|---|---|
X-Request-Id | string | Identificador da requisição para suporte. |
X-Client-Request-Id | string | Eco do X-Request-Id enviado pelo cliente quando casa ^[A-Za-z0-9_-]{8,64}$. Ausente se o cliente não enviou ou o valor é inválido. Nunca usado como identificador interno. |
X-RateLimit-Limit | integer | Requisições por minuto do plano (por conta). |
X-RateLimit-Remaining | integer | Requisições restantes no minuto corrente. |
{
"error": {
"code": "insufficient_plan",
"message": "Seu plano não inclui esta operação. Troque de plano para continuar.",
"request_id": "req_01J8ZK3Q9X",
"retryable": false,
"docs_url": "https://cnpj.ia.br/docs/erros-e-retentativas#insufficient_plan"
}
}
404 Não encontrado
API desligada (CNPJIA_API_ENABLED diferente de on).
| Header | Tipo | Descrição |
|---|---|---|
X-Request-Id | string | Identificador da requisição para suporte. |
X-Client-Request-Id | string | Eco do X-Request-Id enviado pelo cliente quando casa ^[A-Za-z0-9_-]{8,64}$. Ausente se o cliente não enviou ou o valor é inválido. Nunca usado como identificador interno. |
{
"error": {
"code": "not_found",
"message": "Recurso não encontrado.",
"request_id": "req_01J8ZK3Q9X",
"retryable": false,
"docs_url": "https://cnpj.ia.br/docs/erros-e-retentativas#not_found"
}
}
429 Excesso de requisições
Requisições por minuto da conta excedidas. Header Retry-After. Sem X-RateLimit-* quando o limite atingido é o de requisições sem chave por IP.
| Header | Tipo | Descrição |
|---|---|---|
X-Request-Id | string | Identificador da requisição para suporte. |
X-Client-Request-Id | string | Eco do X-Request-Id enviado pelo cliente quando casa ^[A-Za-z0-9_-]{8,64}$. Ausente se o cliente não enviou ou o valor é inválido. Nunca usado como identificador interno. |
Retry-After | integer | Só em 429 e 503: segundos até tentar de novo. |
X-RateLimit-Limit | integer | Requisições por minuto do plano (por conta). |
X-RateLimit-Remaining | integer | Requisições restantes no minuto corrente. |
{
"error": {
"code": "rate_limited",
"message": "Limite de requisições excedido. Tente novamente em instantes.",
"request_id": "req_01J8ZK3Q9X",
"retryable": true,
"docs_url": "https://cnpj.ia.br/docs/erros-e-retentativas#rate_limited"
}
}
500 Erro interno
Erro interno, inclusive timeout da busca. retryable: true; a operação não é cobrada. Se houve liquidação, o estorno é tentado e pode ficar pendente de retentativa ou recuperação manual. X-RateLimit-* presentes quando a requisição passou pelo controle de requisições por conta; X-Credits-* presentes quando passou pela verificação de saldo (mesmo sem débito). Ausentes quando a falha é anterior (por exemplo, ao consultar o estado da base).
| Header | Tipo | Descrição |
|---|---|---|
X-Request-Id | string | Identificador da requisição para suporte. |
X-Client-Request-Id | string | Eco do X-Request-Id enviado pelo cliente quando casa ^[A-Za-z0-9_-]{8,64}$. Ausente se o cliente não enviou ou o valor é inválido. Nunca usado como identificador interno. |
X-RateLimit-Limit | integer | Requisições por minuto do plano (por conta). |
X-RateLimit-Remaining | integer | Requisições restantes no minuto corrente. |
X-Credits-Charged | integer | Créditos debitados nesta resposta. |
X-Credits-Remaining | integer | Créditos restantes (franquia + pacotes). |
X-Credits-Reset | stringformato: date-time | Instante do próximo reset da franquia (RFC 3339). |
{
"error": {
"code": "internal_error",
"message": "Erro interno. Tente novamente; se persistir, fale com o suporte.",
"request_id": "req_01J8ZK3Q9X",
"retryable": true,
"docs_url": "https://cnpj.ia.br/docs/erros-e-retentativas#internal_error"
}
}
503 Serviço indisponível
Janela mensal de atualização da base. Header Retry-After.
| Header | Tipo | Descrição |
|---|---|---|
X-Request-Id | string | Identificador da requisição para suporte. |
X-Client-Request-Id | string | Eco do X-Request-Id enviado pelo cliente quando casa ^[A-Za-z0-9_-]{8,64}$. Ausente se o cliente não enviou ou o valor é inválido. Nunca usado como identificador interno. |
Retry-After | integer | Só em 429 e 503: segundos até tentar de novo. |
{
"error": {
"code": "maintenance",
"message": "A base está em manutenção. Tente novamente em instantes.",
"request_id": "req_01J8ZK3Q9X",
"retryable": true,
"docs_url": "https://cnpj.ia.br/docs/erros-e-retentativas#maintenance"
}
}
504 Tempo esgotado
Timeout de consulta. retryable: true; nada é cobrado. X-RateLimit-* presentes quando a requisição passou pelo controle de requisições por conta; X-Credits-* presentes quando passou pela verificação de saldo (mesmo sem débito). Ausentes quando a falha é anterior (por exemplo, ao consultar o estado da base).
| Header | Tipo | Descrição |
|---|---|---|
X-Request-Id | string | Identificador da requisição para suporte. |
X-Client-Request-Id | string | Eco do X-Request-Id enviado pelo cliente quando casa ^[A-Za-z0-9_-]{8,64}$. Ausente se o cliente não enviou ou o valor é inválido. Nunca usado como identificador interno. |
X-RateLimit-Limit | integer | Requisições por minuto do plano (por conta). |
X-RateLimit-Remaining | integer | Requisições restantes no minuto corrente. |
X-Credits-Charged | integer | Créditos debitados nesta resposta. |
X-Credits-Remaining | integer | Créditos restantes (franquia + pacotes). |
X-Credits-Reset | stringformato: date-time | Instante do próximo reset da franquia (RFC 3339). |
{
"error": {
"code": "upstream_timeout",
"message": "A operação demorou mais que o esperado. Tente novamente.",
"request_id": "req_01J8ZK3Q9X",
"retryable": true,
"docs_url": "https://cnpj.ia.br/docs/erros-e-retentativas#upstream_timeout"
}
}
Ferramenta MCP
No servidor MCP oficial esta operação é a ferramenta buscar_empresas, com a mesma chave e os mesmos créditos da API.
Exemplo
curl -s "https://api.cnpj.ia.br/v1/cnpjs?uf=PR" \
-H "Authorization: Bearer $CNPJIA_KEY"