Pular para o conteúdo
BrazID

Documentação da API

Um único endpoint, autenticado por chave. Todas as respostas são JSON.

Autenticação

Envie sua chave no cabeçalho x-api-key em todas as requisições. Chaves ausentes, inválidas ou revogadas recebem 401. Gere e revogue chaves no painel; mantenha-as apenas no seu servidor.

x-api-key: cpf_live_••••••••••••••••

Endpoints

Há dois caminhos: a consulta rápida na base interna (só CPF) e a consulta oficial (CPF + data de nascimento). Os dois têm versão em lote, com até 1.000 CPFs por requisição. Todo CPF é higienizado (pontos e traço são removidos) antes da busca.

GET /v1/cpf/:cpf

Consulta rápida na base interna

Busca só no cache (Redis e Neon), em milissegundos. Sem data de nascimento. Se o CPF não estiver na base, responde 404 com o código CACHE_MISS e você usa o POST /v1/cpf.

200 cobra 1 crédito; 404 não cobra.

POST /v1/cpf/batch

Consulta rápida em lote (base interna)

Recebe { "cpfs": [...] } e devolve found (registros encontrados), missing (fora do cache) e invalid (CPFs mal formados ou com dígito inválido).

Cobra 1 crédito por CPF encontrado; missing e invalid não cobram.

POST /v1/cpf

Consulta oficial

Envia CPF e birthdate (AAAA-MM-DD, ambos obrigatórios). Usa o cache quando o dado existe e tem menos de 30 dias; senão consulta a fonte oficial e atualiza o cache.

Só o 200 cobra 1 crédito.

POST /v1/cpf/batch/process

Consulta oficial em lote (assíncrona)

Recebe um array [{ "cpf": "...", "birthdate": "AAAA-MM-DD" }] com até 1.000 itens e responde 202 com um batch_id. Acompanhe pelo GET /v1/cpf/batch/:id ou por webhook.

Exige saldo para o lote inteiro (ou plano com excedente). Cobra 1 crédito por item encontrado.

Consulta na base interna

O 404 de cache miss não é erro de CPF: significa só que o registro ainda não está na nossa base. O corpo traz code: "CACHE_MISS". O dado em cache vale por até 30 dias.

curl https://api.brazid.com/v1/cpf/52998224725 \
  -H "x-api-key: $BRAZID_API_KEY"

Consulta em lote

No lote da base interna a resposta é imediata. CPFs repetidos contam uma vez. Sem excedente, se o saldo não cobrir todos os encontrados a requisição inteira responde 402 e nada é cobrado.

curl -X POST https://api.brazid.com/v1/cpf/batch \
  -H "x-api-key: $BRAZID_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "cpfs": ["529.982.247-25", "11144477735"] }'
{
  "success": true,
  "found": [
    {
      "cpf": "52998224725",
      "name": "MARIA SOUZA LIMA",
      "birthdate": "26/11/1982",
      "situation": "REGULAR"
    }
  ],
  "missing": [
    "11144477735"
  ],
  "invalid": [],
  "credits_remaining": 48
}

Como funciona o lote oficial

O que já está no cache é respondido na hora. O restante vai para a fonte oficial em segundo plano, com concorrência limitada. Itens inválidos, não encontrados e falhas do provedor não cobram, e você pode reenviar só os que falharam. Os resultados ficam disponíveis por 24 horas. Se você tiver um webhook configurado, enviamos o evento batch.completed (sem dados pessoais) quando o lote termina.

curl -X POST https://api.brazid.com/v1/cpf/batch/process \
  -H "x-api-key: $BRAZID_API_KEY" \
  -H "Content-Type: application/json" \
  -d '[{ "cpf": "529.982.247-25", "birthdate": "1982-11-26" }, { "cpf": "11144477735", "birthdate": "1990-05-02" }]'
{
  "success": true,
  "batch_id": "0c1e…",
  "status": "processing",
  "total": 2,
  "processed": 1,
  "status_url": "/v1/cpf/batch/0c1e…"
}

Consultar um CPF

Envie cpf (com ou sem pontuação) e birthdate (AAAA-MM-DD), ambos obrigatórios. Os dois são sanitizados e validados antes de qualquer consulta; a data de nascimento precisa conferir com a do titular, senão a resposta é 404.

POST /v1/cpf

curl -X POST https://api.brazid.com/v1/cpf \
  -H "x-api-key: $BRAZID_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "cpf": "529.982.247-25", "birthdate": "1982-11-26" }'

Resposta

credits_remaining pode ser ocultado nas configurações do painel. gender e deceased podem ser null quando a fonte não informa.

{
  "success": true,
  "data": {
    "cpf": "52998224725",
    "name": "MARIA SOUZA LIMA",
    "birthdate": "26/11/1982",
    "day": 26,
    "month": 11,
    "year": 1982,
    "gender": "M",
    "deceased": false,
    "situation": "REGULAR"
  },
  "credits_remaining": 49
}
cpf
CPF sanitizado, 11 dígitos.
name
Nome do titular, em maiúsculas.
birthdate
Data de nascimento no formato DD/MM/AAAA. day, month e year trazem as partes numéricas.
gender
M, F ou null.
situation
Situação cadastral em texto (ex.: REGULAR, TITULAR FALECIDO); null quando a fonte não informa.
deceased
true quando a situação cadastral indica óbito; null quando desconhecido.
credits_remaining
Saldo após esta consulta (cota mensal + créditos bônus).

Erros

Nenhuma resposta 4xx ou 5xx consome crédito ou gera cobrança de excedente.

StatusQuando aconteceCobra crédito
200—Sim (1)
400O CPF não tem exatamente 11 dígitos numéricos, ou birthdate está ausente ou inválida (use AAAA-MM-DD).{ "error": "Invalid CPF format", "message": "CPF deve conter exatamente 11 dígitos numéricos" } / { "error": "Invalid birthdate", "message": "birthdate é obrigatório e deve ser uma data válida no formato AAAA-MM-DD" }Não
401Cabeçalho x-api-key ausente, chave inválida ou revogada.{ "error": "Invalid or missing API key" }Não
402Plano gratuito com os 20 créditos do ciclo esgotados (renovam no próximo ciclo). Contrate um plano Pro para continuar (planos pagos nunca recebem este erro: o excedente é cobrado).{ "error": "Payment Required", "message": "Limite de créditos excedido", "code": "CREDITS_EXHAUSTED" }Não
403Conta suspensa ou bloqueada.{ "error": "Forbidden", "message": "Limite de créditos excedido" }Não
404CPF válido, mas não encontrado na base oficial.{ "error": "CPF not found" }Não
422Dígito verificador inválido.{ "error": "Invalid check digit" }Não
429Limite de requisições por segundo do seu plano excedido. Respeite o cabeçalho Retry-After.{ "error": "Rate limit exceeded", "message": "Muitas requisições. Aguarde antes de tentar novamente." }Não
500 / 503Falha temporária na infraestrutura ou no provedor externo.{ "error": "Service unavailable", "message": "Falha temporária no processamento. Tente novamente em instantes." }Não

Limites de requisição

Cada chave tem um limite por segundo conforme o plano: 5 (Gratuito), 20 (Pro 200), 50 (Pro 1.000), 100 (Pro 5.000), 200+ (Corporativo). As respostas trazem X-RateLimit-Limit, X-RateLimit-Remaining e, em caso de 429, Retry-After em segundos.

Webhooks de consumo

Cadastre uma URL HTTPS no painel para receber o evento usage.threshold_reached quando o consumo atingir 80% e 95% da cota. Cada envio traz o cabeçalho x-brazid-signature: t=<timestamp>,v1=<HMAC-SHA256 de "timestamp.corpo">, calculado com o segredo do seu webhook.

{
  "type": "usage.threshold_reached",
  "threshold": 80,
  "used_percent": 80,
  "monthly_credits": 500,
  "auto_charge_enabled": true,
  "period_end": "2026-11-13T00:00:00.000Z"
}