convertajá

Guia 7 de 8

Consultas e dados: CNPJ, CEP, validação, boleto e Pix

Endpoints de dados brasileiros para cadastro de clientes, checkout e financeiro. Respondem na hora, em JSON, sem tarefa nem arquivo.

10 min · Iniciante · atualizado em 16/10/2026

O que você vai construir

Uma função de cadastro de cliente que confere o CNPJ, busca os dados na Receita e preenche razão social e endereço. E exemplos prontos de CEP, validação em lote, boleto e Pix.

Antes de começar

Quanto custa

EndpointCusto por chamada
GET /v1/cnpj/{cnpj}grátis
GET /v1/cep/{cep}grátis
POST /v1/validate1 crédito (lote: 1 crédito a cada 50 itens, até 1.000)
POST /v1/boleto/parse, /v1/pix/brcode, /v1/qrcode, /v1/barcode1 crédito

Só é cobrado o que dá certo: consulta não encontrada, fonte fora do ar ou dado inválido não consomem créditos. Todas contam no limite de requisições por minuto.

Passo 1: Consulte um CNPJ

Dados públicos da Receita Federal (via BrasilAPI), com cache de 24 horas: razão social, situação, endereço, CNAEs e Simples. Aceita o novo CNPJ alfanumérico. O quadro de sócios não é devolvido (LGPD).

# Só os números (ou o CNPJ alfanumérico), sem a barra
curl "https://convertaja.com.br/v1/cnpj/00000000000191" \
  -H "Authorization: Bearer $CONVERTAJA_KEY"
Resposta 200
{
  "cnpj": "00000000000191",
  "razaoSocial": "BANCO DO BRASIL SA",
  "nomeFantasia": "DIRECAO GERAL",
  "situacao": "ATIVA",
  "dataSituacao": "2005-11-03",
  "abertura": "1966-08-01",
  "porte": "DEMAIS",
  "naturezaJuridica": "Sociedade de Economia Mista",
  "cnaePrincipal": {
    "codigo": "6422100",
    "descricao": "Bancos múltiplos, com carteira comercial"
  },
  "cnaesSecundarios": [
    {
      "codigo": "6499999",
      "descricao": "Outras atividades de serviços financeiros não especificadas anteriormente"
    }
  ],
  "endereco": {
    "logradouro": "QUADRA SAUN QUADRA 5 BLOCO B TORRE I, II, III",
    "numero": "SN",
    "complemento": "ANDAR T I SL S101 A S1602 T II SL C101 A C1602 TIII SL N101 A N1602",
    "bairro": "ASA NORTE",
    "municipio": "Brasilia",
    "uf": "DF",
    "cep": "70040912"
  },
  "telefone": "(61) 3493-9002",
  "email": "",
  "capitalSocial": 120000000000,
  "simples": {
    "optante": false,
    "mei": false
  },
  "cached": false
}

Dica O CNPJ pode ir com ou sem pontuação, inclusive com a barra: /v1/cnpj/00.000.000/0001-91 e /v1/cnpj/00000000000191 dão o mesmo resultado.

Respostas possíveis: 400 invalid_cnpj (dígito verificador errado), 404 not_found (não existe na Receita) e 502 upstream_unavailable (fonte fora do ar; tente de novo em alguns minutos).

Passo 2: Consulte um CEP

curl "https://convertaja.com.br/v1/cep/01310100" \
  -H "Authorization: Bearer $CONVERTAJA_KEY"
Resposta 200
{
  "cep": "01310100",
  "logradouro": "Avenida Paulista",
  "bairro": "Bela Vista",
  "cidade": "São Paulo",
  "uf": "SP",
  "cached": false
}

Fonte: BrasilAPI, com ViaCEP de reserva. O CEP precisa ter 8 números (com ou sem traço); caso contrário, 400 invalid_cep.

Passo 3: Valide documentos, um ou vários

Confere os dígitos verificadores de CPF, CNPJ (inclusive alfanumérico), CNH, PIS/PASEP, título de eleitor, RENAVAM e CNS. Sem type, deduzimos pelo tamanho (e candidates mostra as possibilidades). Ótimo para limpar uma base inteira de cadastro:

# Um documento (o tipo é opcional: sem ele, deduzimos pelo tamanho)
curl -X POST "https://convertaja.com.br/v1/validate" \
  -H "Authorization: Bearer $CONVERTAJA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"type":"cnpj","value":"12.ABC.345/01DE-35"}'

# Vários de uma vez (até 1.000; 1 crédito a cada 50)
curl -X POST "https://convertaja.com.br/v1/validate" \
  -H "Authorization: Bearer $CONVERTAJA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"values":["529.982.247-25","111.111.111-11","11.222.333/0001-81"]}'
Resposta 200 (lote)
{
  "count": 3,
  "valid_count": 2,
  "results": [
    {
      "value": "529.982.247-25",
      "type": "cpf",
      "type_label": "CPF",
      "valid": true,
      "normalized": "52998224725",
      "formatted": "529.982.247-25",
      "candidates": [
        "cpf",
        "cnh",
        "pis",
        "renavam"
      ]
    },
    {
      "value": "111.111.111-11",
      "type": "cpf",
      "type_label": "CPF",
      "valid": false,
      "normalized": "11111111111",
      "formatted": null,
      "candidates": [
        "cpf",
        "cnh",
        "pis",
        "renavam"
      ]
    },
    {
      "value": "11.222.333/0001-81",
      "type": "cnpj",
      "type_label": "CNPJ",
      "valid": true,
      "normalized": "11222333000181",
      "formatted": "11.222.333/0001-81",
      "alphanumeric": false
    }
  ]
}

A validação confere só a matemática do número; para saber se a empresa existe e está ativa, consulte o CNPJ (passo 1).

Passo 4: Junte tudo num cadastro de cliente

Valida primeiro (rápido, evita consultar número digitado errado), depois busca os dados e recusa empresa que não esteja ativa:

// cadastro.mjs: confere o CNPJ de um novo cliente e preenche o cadastro com os dados da Receita
const BASE = 'https://convertaja.com.br/v1';
const headers = { Authorization: `Bearer ${process.env.CONVERTAJA_KEY}`, 'Content-Type': 'application/json' };

async function cadastrar(cnpjDigitado) {
  // 1. Dígitos verificadores (barato e rápido): evita consultar CNPJ digitado errado
  const v = await (await fetch(`${BASE}/validate`, { method: 'POST', headers, body: JSON.stringify({ type: 'cnpj', value: cnpjDigitado }) })).json();
  if (!v.valid) return { ok: false, motivo: 'CNPJ com dígito verificador errado' };

  // 2. Dados públicos da empresa
  const res = await fetch(`${BASE}/cnpj/${v.normalized}`, { headers });
  const empresa = await res.json();
  if (res.status === 404) return { ok: false, motivo: 'CNPJ não encontrado na Receita' };
  if (!res.ok) return { ok: false, motivo: empresa.error.message, tentarDeNovo: res.status === 502 || res.status === 429 };
  if (empresa.situacao !== 'ATIVA') return { ok: false, motivo: `Situação na Receita: ${empresa.situacao}` };

  return {
    ok: true,
    cliente: {
      cnpj: v.formatted, razaoSocial: empresa.razaoSocial, nomeFantasia: empresa.nomeFantasia,
      cep: empresa.endereco.cep, cidade: empresa.endereco.municipio, uf: empresa.endereco.uf,
      simples: empresa.simples.optante,
    },
  };
}

console.log(await cadastrar('00.000.000/0001-91'));
{
  ok: true,
  cliente: {
    cnpj: '00.000.000/0001-91',
    razaoSocial: 'BANCO DO BRASIL SA',
    nomeFantasia: 'DIRECAO GERAL',
    cep: '70040912',
    cidade: 'Brasilia',
    uf: 'DF',
    simples: false
  }
}

Passo 5: Leia um boleto

Linha digitável (47 posições no bancário, 48 na arrecadação/concessionárias) ou código de barras (44), com ou sem pontuação. Conferimos os dígitos e devolvemos banco, valor e vencimento, já com o novo fator de vencimento (reiniciado em 22/02/2025):

curl -X POST "https://convertaja.com.br/v1/boleto/parse" \
  -H "Authorization: Bearer $CONVERTAJA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"code":"23793.38128 86000.782713 36950.000632 1 10000000012345"}'
Resposta 200
{
  "tipo": "bancario",
  "valido": true,
  "codigo_barras": "23791100000000123453381286000782713695000063",
  "linha_digitavel": "23793381288600078271336950000632110000000012345",
  "linha_digitavel_formatada": "23793.38128 86000.782713 36950.000632 1 10000000012345",
  "banco": {
    "codigo": "237",
    "nome": "Bradesco"
  },
  "moeda": "BRL",
  "valor": 123.45,
  "fator_vencimento": 1000,
  "vencimento": "2025-02-22",
  "campo_livre": "3381286000782713695000063"
}

Dígito que não confere: 422 invalid_boleto.

Passo 6: Gere um Pix copia e cola com QR Code

BR Code estático no padrão do Banco Central, com o QR Code em SVG e PNG na mesma resposta. Campos: key (CPF, CNPJ, e-mail, telefone +55 ou chave aleatória), name (até 25 caracteres), city (até 15), e opcionais amount (em reais), txid (até 25 letras e números) e description:

curl -X POST "https://convertaja.com.br/v1/pix/brcode" \
  -H "Authorization: Bearer $CONVERTAJA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"key":"contato@minhaloja.com.br","name":"Minha Loja LTDA","city":"SAO PAULO","amount":149.90,"txid":"PEDIDO1234"}'
Resposta 200 (QR encurtado)
{
  "payload": "00020126460014br.gov.bcb.pix0124contato@minhaloja.com.br5204000053039865406149.905802BR5915Minha Loja LTDA6009SAO PAULO62140510PEDIDO123463041DBC",
  "key": "contato@minhaloja.com.br",
  "key_type": "email",
  "amount": 149.9,
  "txid": "PEDIDO1234",
  "qr_svg": "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"456\" height=\"456\" …</svg>",
  "qr_png_base64": "iVBORw0KGgoAAAANSUhEUgAAAcgAAAHI…"
}

Dica É um Pix estático: serve para cobrar, mas a confirmação do pagamento vem do seu banco ou PSP. Use o txid para conciliar.

QR Code e código de barras

POST /v1/qrcode recebe text (até 2.900 caracteres) e opções de cor, margem e correção de erros. POST /v1/barcode recebe type e value; EAN/UPC sem o último dígito recebem o dígito calculado. Os dois devolvem svg e/ou png_base64 conforme format (svg, png ou both). Exemplo completo no guia Etiquetas para e-commerce.

Próximos passos

Todos os endpoints e opções: referência da API. Dúvidas? Fale com a gente e informe o X-Request-Id da chamada.