Consultar CNPJ em PHP

Este guia mostra como consultar um CNPJ pela API REST da CNPJAPI em PHP, usando cURL (disponível por padrão). A resposta vem em JSON, com os campos em PascalCase (RazaoSocial, SituacaoCadastral, ...).

Pré-requisitos

Consulta simples

<?php

$cnpj = '00776574000156'; // apenas os 14 dígitos, sem pontuação
$apiKey = 'cnpj_sua_chave';

$ch = curl_init("https://api.cnpjapi.com.br/{$cnpj}");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["Authorization: Bearer {$apiKey}"],
    CURLOPT_TIMEOUT => 10,
]);

$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status === 200) {
    $empresa = json_decode($body, true);
    echo $empresa['RazaoSocial'], PHP_EOL;
    echo $empresa['SituacaoCadastral']['Descricao'], PHP_EOL;
}

Tratando erros e rate limit

Ao exceder o limite por minuto ou a cota mensal, a API responde 429 com o cabeçalho Retry-After (segundos). Para lê-lo, capture os cabeçalhos da resposta:

<?php

$ch = curl_init("https://api.cnpjapi.com.br/{$cnpj}");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => true, // inclui os cabeçalhos no retorno
    CURLOPT_HTTPHEADER => ["Authorization: Bearer {$apiKey}"],
]);

$resposta = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$tamanhoCabecalho = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
curl_close($ch);

if ($status === 429) {
    $cabecalhos = substr($resposta, 0, $tamanhoCabecalho);
    preg_match('/retry-after:\s*(\d+)/i', $cabecalhos, $m);
    $espera = (int) ($m[1] ?? 60);
    sleep($espera);
    // tente novamente...
} elseif ($status === 404) {
    echo 'CNPJ não encontrado na base pública', PHP_EOL;
}

Inscrição Estadual (premium)

Com um plano que inclui Inscrição Estadual, consulte a IE de um CNPJ na fonte oficial da SEFAZ. Passe uf para uma UF (1 crédito) ou omita para a varredura nacional (3 créditos):

<?php

$ch = curl_init("https://api.cnpjapi.com.br/consulta/ie/{$cnpj}?uf=SP");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ["Authorization: Bearer {$apiKey}"],
    CURLOPT_TIMEOUT => 15,
]);

$body = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($status === 200) {
    $ie = json_decode($body, true);
    foreach ($ie['resultados'] as $r) {
        echo $r['uf'], ' ', $r['ie'], ' ', $r['situacao'], PHP_EOL;
    }
}

Contrato completo (campos, cobertura, créditos) em Consultar a Inscrição Estadual.

Próximos passos

Crie sua conta gratuita em https://app.cnpjapi.com.br e faça a primeira consulta em minutos.