Consultar CNPJ em Java

Este guia mostra como consultar um CNPJ pela API REST da CNPJAPI em Java, usando o HttpClient da biblioteca padrão (java.net.http, Java 11+). A resposta vem em JSON, com os campos em PascalCase (RazaoSocial, SituacaoCadastral, ...).

Pré-requisitos

  • Java 17+ (LTS). O java.net.http.HttpClient é nativo desde o Java 11; o switch de seta usado no tratamento de erros requer Java 14+.
  • Uma biblioteca JSON para desserializar a resposta (Jackson, Gson, ...).
  • Uma API key da CNPJAPI. Crie a conta em https://app.cnpjapi.com.br e gere a chave (veja Autenticação).

Consulta simples

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

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

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.cnpjapi.com.br/" + cnpj))
        .header("Authorization", "Bearer " + apiKey)
        .GET()
        .build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

if (response.statusCode() == 200) {
    // Desserialize response.body() com sua lib JSON (ex.: Jackson):
    // Empresa empresa = new ObjectMapper().readValue(response.body(), Empresa.class);
    System.out.println(response.body());
}

As chamadas client.send(...) e Thread.sleep(...) lançam exceções verificadas (IOException, InterruptedException): rode dentro de um método com throws ou envolva em try/catch.

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). Trate como recuperável:

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());

switch (response.statusCode()) {
    case 429 -> {
        int espera = response.headers().firstValue("Retry-After")
                .map(Integer::parseInt).orElse(60);
        Thread.sleep(espera * 1000L);
        // tente novamente...
    }
    case 404 -> System.out.println("CNPJ não encontrado na base pública");
    case 200 -> { /* processe response.body() */ }
    default -> throw new RuntimeException("Falha na consulta: HTTP " + response.statusCode());
}

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):

HttpRequest ieRequest = HttpRequest.newBuilder()
        .uri(URI.create("https://api.cnpjapi.com.br/consulta/ie/" + cnpj + "?uf=SP"))
        .header("Authorization", "Bearer " + apiKey)
        .GET()
        .build();

HttpResponse<String> ieResponse = client.send(ieRequest, HttpResponse.BodyHandlers.ofString());

if (ieResponse.statusCode() == 200) {
    // Desserialize ieResponse.body() com sua lib JSON e itere "resultados":
    // cada item tem uf, ie, indicador, situacao, tipo, ...
    System.out.println(ieResponse.body());
}

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.