Pular para o conteúdo

Como consultar CNPJ via API no PHP.

Aprenda a consultar CNPJ via API no PHP com a extensão cURL: código pronto, leitura do JSON, tratamento de erros e boas práticas. API de CNPJ grátis, sem chave e sem cadastro.

Por que usar a API do openCNPJ no PHP

O PHP é uma das linguagens mais usadas em sistemas de gestão, e-commerce e ERPs no Brasil. Com a API do openCNPJ, você preenche cadastros de clientes e fornecedores automaticamente a partir do CNPJ, usando só a extensão cURL do próprio PHP.

  • Grátis, sem chave de acesso e sem cadastro.
  • Resposta em JSON com razão social, situação cadastral, endereço, CNAEs, sócios e Simples Nacional.
  • Aceita o CNPJ numérico e o novo CNPJ alfanumérico.
  • Limite de 10 requisições por segundo por IP.

O que você precisa

PHP 7.4 ou superior com a extensão cURL (php-curl) habilitada. A extensão JSON já vem incluída no PHP.

Consultar um CNPJ no PHP

O endpoint é GET https://api.opencnpj.com.br/cnpj/{cnpj}. Envie o CNPJ com 14 caracteres, sem pontos, barra ou hífen. O exemplo abaixo consulta o CNPJ 06.990.590/0001-23:

<?php
$cnpj = '06990590000123';

$ch = curl_init("https://api.opencnpj.com.br/cnpj/{$cnpj}");
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10]);
$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status !== 200) {
    throw new RuntimeException("HTTP {$status}");
}

$empresa = json_decode($body, true);
echo $empresa['razao_social'], PHP_EOL;
echo $empresa['estabelecimento']['situacao_cadastral'], PHP_EOL;

Remover a máscara do CNPJ

Se o CNPJ vem formatado (06.990.590/0001-23) de um formulário, banco de dados ou planilha, limpe a pontuação antes de montar a URL. A mesma regra funciona para o CNPJ alfanumérico:

<?php
function limparCnpj(string $cnpj): string
{
    return strtoupper(preg_replace('/[^0-9A-Za-z]/', '', $cnpj));
}

$cnpj = limparCnpj('06.990.590/0001-23'); // "06990590000123"

Campos mais usados da resposta

CampoConteúdo
razao_socialNome empresarial
estabelecimento.nome_fantasiaNome fantasia
estabelecimento.situacao_cadastralAtiva, Suspensa, Inapta, Baixada ou Nula
estabelecimento.atividade_principalCNAE principal, com código e descrição
estabelecimento.cidade.nome e estabelecimento.estado.siglaMunicípio e UF
estabelecimento.cep, logradouro, numero, bairroEndereço
simples.simples e simples.meiOpção pelo Simples Nacional e MEI
sociosQuadro de sócios e administradores

A lista completa de campos está na documentação da API.

Tratando erros

Verifique o status HTTP antes de ler o JSON. PHP: use curl_getinfo($ch, CURLINFO_HTTP_CODE).

StatusO que significaO que fazer
200CNPJ encontradoLer o JSON
400Formato de CNPJ inválidoConferir os 14 caracteres
404CNPJ não encontrado na baseInformar ao usuário
429Limite de requisições excedidoAguardar e tentar de novo
500Erro internoTentar novamente mais tarde

Os erros também vêm em JSON, com os campos status, titulo e detalhes.

Boas práticas

  • Defina um timeout na requisição, por exemplo com CURLOPT_TIMEOUT.
  • Guarde o resultado em cache se o mesmo CNPJ for consultado com frequência.
  • Em processamentos em lote, respeite o limite de 10 requisições por segundo.
  • Os dados refletem a base pública mais recente processada e não substituem certidões oficiais.

Perguntas frequentes

A API de CNPJ do openCNPJ é gratuita?

Sim, 100% grátis. Não há chave de acesso nem cadastro. O limite é de 10 requisições por segundo por IP.

Preciso de alguma biblioteca para consultar CNPJ em PHP?

Não. A extensão cURL, presente na maioria das instalações, é suficiente. Se o seu projeto já usa Guzzle ou o HttpClient do Laravel, a chamada é a mesma: um GET em https://api.opencnpj.com.br/cnpj/{cnpj}.

Funciona no Laravel?

Sim. Com o cliente HTTP do Laravel: Http::timeout(10)->get("https://api.opencnpj.com.br/cnpj/{$cnpj}")->throw()->json().

De onde vêm os dados do CNPJ?

Dos dados abertos do CNPJ publicados pela Receita Federal, complementados por bases públicas. Os dados podem ter defasagem e não substituem certidões oficiais. Veja a origem dos dados.