Consultar CNPJ em Go
Este guia mostra como consultar um CNPJ pela API REST da CNPJAPI em Go, usando o pacote net/http da biblioteca padrão. A resposta vem em JSON, com os campos em PascalCase (RazaoSocial, SituacaoCadastral, ...).
Pré-requisitos
- Go 1.18+.
- Uma API key da CNPJAPI. Crie a conta em https://app.cnpjapi.com.br e gere a chave (veja Autenticação).
Consulta simples
Com structs tipadas para os campos que você usa:
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
)
type Empresa struct {
RazaoSocial string `json:"RazaoSocial"`
SituacaoCadastral struct {
Descricao string `json:"Descricao"`
} `json:"SituacaoCadastral"`
}
func main() {
const cnpj = "00776574000156" // apenas os 14 dígitos, sem pontuação
const apiKey = "cnpj_sua_chave"
req, _ := http.NewRequest(http.MethodGet, "https://api.cnpjapi.com.br/"+cnpj, nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
log.Fatalf("consulta falhou: HTTP %d", resp.StatusCode)
}
var empresa Empresa
if err := json.NewDecoder(resp.Body).Decode(&empresa); err != nil {
log.Fatal(err)
}
fmt.Println(empresa.RazaoSocial)
fmt.Println(empresa.SituacaoCadastral.Descricao)
}
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. Este trecho usa também os pacotes strconv e time, então acrescente-os ao seu import:
import (
"net/http"
"strconv"
"time"
)
// ...
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
switch resp.StatusCode {
case http.StatusTooManyRequests:
espera, err := strconv.Atoi(resp.Header.Get("Retry-After"))
if err != nil {
espera = 60 // sem header válido, espera um minuto
}
time.Sleep(time.Duration(espera) * time.Second)
// tente novamente...
case http.StatusNotFound:
fmt.Println("CNPJ não encontrado na base pública")
case http.StatusOK:
// decodifique o corpo...
}
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):
type RespostaIE struct {
Resultados []struct {
UF string `json:"uf"`
IE string `json:"ie"`
Situacao string `json:"situacao"`
} `json:"resultados"`
}
req, _ := http.NewRequest(http.MethodGet, "https://api.cnpjapi.com.br/consulta/ie/"+cnpj+"?uf=SP", nil)
req.Header.Set("Authorization", "Bearer "+apiKey)
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
var ie RespostaIE
if err := json.NewDecoder(resp.Body).Decode(&ie); err != nil {
log.Fatal(err)
}
for _, r := range ie.Resultados {
fmt.Println(r.UF, r.IE, r.Situacao)
}
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.