Saltar al contenido
BrazID

Documentación de la API

Un único endpoint, autenticado con clave. Todas las respuestas son JSON.

Autenticación

Envíe su clave en el encabezado x-api-key en cada solicitud. Las claves ausentes, inválidas o revocadas reciben 401. Cree y revoque claves en el panel y guárdelas solo en su servidor.

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

Endpoints

Hay dos caminos: la consulta rápida en nuestra base interna (solo CPF) y la consulta oficial (CPF + fecha de nacimiento). Ambos tienen versión por lotes, con hasta 1.000 CPF por solicitud. Todo CPF se higieniza (se quitan puntos y guiones) antes de la búsqueda.

GET /v1/cpf/:cpf

Consulta rápida en la base interna

Busca solo en la caché (Redis y Neon), en milisegundos. Sin fecha de nacimiento. Si el CPF no está en la base, responde 404 con el código CACHE_MISS y usted usa POST /v1/cpf.

200 cobra 1 crédito; 404 no cobra.

POST /v1/cpf/batch

Consulta rápida por lotes (base interna)

Recibe { "cpfs": [...] } y devuelve found (registros encontrados), missing (fuera de la caché) e invalid (CPF mal formados o con dígito inválido).

Cobra 1 crédito por CPF encontrado; missing e invalid no cobran.

POST /v1/cpf

Consulta oficial

Envíe cpf y birthdate (AAAA-MM-DD, ambos obligatorios). Usa la caché cuando el dato existe y tiene menos de 30 días; si no, consulta la fuente oficial y actualiza la caché.

Solo el 200 cobra 1 crédito.

POST /v1/cpf/batch/process

Consulta oficial por lotes (asíncrona)

Recibe un array [{ "cpf": "...", "birthdate": "AAAA-MM-DD" }] con hasta 1.000 ítems y responde 202 con un batch_id. Siga el avance con GET /v1/cpf/batch/:id o por webhook.

Exige saldo para todo el lote (o plan con excedente). Cobra 1 crédito por ítem encontrado.

Consulta en la base interna

El 404 de caché no es un error de CPF: solo significa que el registro aún no está en nuestra base. El cuerpo trae code: "CACHE_MISS". El dato en caché vale hasta 30 días.

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

Consulta por lotes

En el lote de la base interna la respuesta es inmediata. Los CPF repetidos cuentan una vez. Sin excedente, si el saldo no cubre todos los encontrados, toda la solicitud responde 402 y no se cobra nada.

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
}

Cómo funciona el lote oficial

Lo que ya está en caché se responde al instante. El resto va a la fuente oficial en segundo plano, con concurrencia limitada. Los ítems inválidos, no encontrados y las fallas del proveedor no cobran, y usted puede reenviar solo los que fallaron. Los resultados quedan disponibles por 24 horas. Si tiene un webhook configurado, enviamos el evento batch.completed (sin datos personales) cuando el 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 un CPF

Envíe cpf (con o sin puntuación) y birthdate (AAAA-MM-DD), ambos obligatorios. Los dos se sanean y validan antes de cualquier consulta; la fecha de nacimiento debe coincidir con la del titular, de lo contrario la respuesta es 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" }'

Respuesta

credits_remaining puede ocultarse en la configuración del panel. gender y deceased pueden ser null cuando la fuente no los 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 saneado, 11 dígitos.
name
Nombre del titular, en mayúsculas.
birthdate
Fecha de nacimiento en formato DD/MM/AAAA. day, month y year traen las partes numéricas.
gender
M, F o null.
situation
Situación catastral en texto (ej.: REGULAR, TITULAR FALECIDO); null si la fuente no la informa.
deceased
true cuando la situación catastral indica fallecimiento; null si se desconoce.
credits_remaining
Saldo después de esta consulta (cuota mensual + créditos de bonificación).

Errores

Ninguna respuesta 4xx o 5xx consume crédito ni genera cobro de excedente.

EstadoCuándo ocurreCobra crédito
200—Sí (1)
400El CPF no tiene exactamente 11 dígitos numéricos, o birthdate falta o es 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" }No
401Encabezado x-api-key ausente, clave inválida o revocada.{ "error": "Invalid or missing API key" }No
402Plan gratuito con los 20 créditos del ciclo agotados (se renuevan en el próximo ciclo). Pase a un plan Pro para continuar (los planes pagos nunca reciben este error: el excedente se cobra).{ "error": "Payment Required", "message": "Limite de créditos excedido", "code": "CREDITS_EXHAUSTED" }No
403Cuenta suspendida o bloqueada.{ "error": "Forbidden", "message": "Limite de créditos excedido" }No
404CPF válido, pero no encontrado en el registro oficial.{ "error": "CPF not found" }No
422Dígito verificador inválido.{ "error": "Invalid check digit" }No
429Se superó el límite de solicitudes por segundo de su plan. Respete el encabezado Retry-After.{ "error": "Rate limit exceeded", "message": "Muitas requisições. Aguarde antes de tentar novamente." }No
500 / 503Falla temporal en la infraestructura o en el proveedor externo.{ "error": "Service unavailable", "message": "Falha temporária no processamento. Tente novamente em instantes." }No

Límites de solicitudes

Cada clave tiene un límite por segundo según el plan: 5 (Gratuito), 20 (Pro 200), 50 (Pro 1.000), 100 (Pro 5.000), 200+ (Corporativo). Las respuestas incluyen X-RateLimit-Limit, X-RateLimit-Remaining y, en caso de 429, Retry-After en segundos.

Webhooks de consumo

Registre una URL HTTPS en el panel para recibir el evento usage.threshold_reached cuando el consumo llegue al 80% y al 95% de la cuota. Cada envío incluye x-brazid-signature: t=<timestamp>,v1=<HMAC-SHA256 de "timestamp.cuerpo">, firmado con el secreto de su 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"
}