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
| Campo | Conteúdo |
|---|---|
razao_social | Nome empresarial |
estabelecimento.nome_fantasia | Nome fantasia |
estabelecimento.situacao_cadastral | Ativa, Suspensa, Inapta, Baixada ou Nula |
estabelecimento.atividade_principal | CNAE principal, com código e descrição |
estabelecimento.cidade.nome e estabelecimento.estado.sigla | Município e UF |
estabelecimento.cep, logradouro, numero, bairro | Endereço |
simples.simples e simples.mei | Opção pelo Simples Nacional e MEI |
socios | Quadro 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).
| Status | O que significa | O que fazer |
|---|---|---|
200 | CNPJ encontrado | Ler o JSON |
400 | Formato de CNPJ inválido | Conferir os 14 caracteres |
404 | CNPJ não encontrado na base | Informar ao usuário |
429 | Limite de requisições excedido | Aguardar e tentar de novo |
500 | Erro interno | Tentar 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.