CPFHub.io

Límites de Uso

La API de CPFHub.io tiene dos límites:

  • Créditos: cada consulta exitosa consume créditos de la franquicia de tu plan.
  • Solicitudes por minuto: un tope de llamadas por minuto en cada tipo de consulta, para proteger la estabilidad de la API.

Los costos de abajo son los valores por defecto. Consulta en el dashboard los costos y las reglas de excedente específicos de tu plan. Los límites por defecto son 30/min en la Consulta Simple (cada envío de lote cuenta como 1) y 5/min en la Consulta en Tiempo Real. Los planes personalizados pueden tener límites distintos, así que confírmalo con el soporte de CPFHub.io. Por encima del límite, la API responde 429 con el header Retry-After. El saldo y el plan actual aparecen en GET /quota, que no consume crédito.

Créditos por plan

Plan en el sitioNombre en GET /quotaCréditos por períodoAl agotarse
GratisGrátis50La API se detiene y responde 403 hasta la renovación.
ProMicro100La API sigue funcionando y el excedente se cobra en la factura siguiente
ProBásico1.000La API sigue funcionando y el excedente se cobra en la factura siguiente
ProIntermediário5.000La API sigue funcionando y el excedente se cobra en la factura siguiente
ProAvançado10.000La API sigue funcionando y el excedente se cobra en la factura siguiente
EnterprisePlan personalizadoA consultarNegociado

El plan Pro del sitio es un selector de volumen, y cada volumen corresponde a uno de los planes de arriba. Los nombres en GET /quota son los nombres en portugués que devuelve la API. Los planes personalizados pueden tener reglas propias, así que revisa las condiciones de tu cuenta en el dashboard. Consulta los precios en cpfhub.io/precos.

Cuándo se renuevan los créditos: en los planes de pago, al inicio de cada ciclo de facturación de la suscripción. En el plan Gratis, el día 1 de cada mes (UTC). El saldo es de toda la cuenta y suma todas las claves.

Costo por consulta

ConsultaCosto
Consulta Simple (GET /cpf/{cpf})1 crédito por CPF encontrado
Consulta en Tiempo Real (POST /cpf/realtime)1,5 créditos por consulta exitosa
Consulta por lote (POST /cpf/bulk)1 crédito por CPF encontrado
Estado del lote (GET /cpf/bulk/{jobId})Gratis
Saldo de créditos (GET /quota)Gratis

Estos son los costos por defecto. Consulta en el dashboard los costos específicos de tu plan.

✦

Los errores no consumen crédito

Un CPF no encontrado (404), un CPF con formato o dígito verificador incorrecto (400/422), el límite por minuto (429) y las fallas al consultar la Receita Federal (422/502/503) no consumen créditos.

Créditos agotados

En los planes sin cobro de excedente, como el Gratis, la API responde 403 cuando el saldo no cubre el costo de la consulta:

DóndeMensajeFormato de error
Consulta Simple y Consulta en Tiempo RealLimite de créditos excedido (límite de créditos excedido)Objeto (error.message)
Envío de lote, saldo menor que la listaCréditos insuficientes para o lote: N necessários. (créditos insuficientes para el lote: se necesitan N)Objeto (error.message)
Envío de lote, saldo en ceroLimite de créditos excedidoCadena
  • En el lote, el saldo debe cubrir todos los CPF válidos de la lista antes del envío. Si no alcanza, no se cobra nada.
  • Un saldo de 1 crédito todavía permite una Consulta Simple, pero no una Consulta en Tiempo Real (1,5 créditos).
  • Sigue el saldo en GET /quota, que funciona con créditos en cero y no consume crédito.

Límite por minuto

ConsultaLímite por defecto
Consulta Simple (GET /cpf/{cpf})30 solicitudes por minuto
Consulta por lote (POST /cpf/bulk)Cada envío cuenta como 1 solicitud de la Consulta Simple
Consulta en Tiempo Real (POST /cpf/realtime)5 solicitudes por minuto

Estos son los límites por defecto. Los planes personalizados pueden tener límites distintos, así que confírmalo con el soporte de CPFHub.io. Cada envío de lote cuenta como una solicitud de la Consulta Simple. Por encima del límite, la API responde 429 con el header Retry-After.

  • El límite vale por clave de API y por tipo de consulta.
  • Toda solicitud cuenta, incluso las que responden 404.
  • El conteo se reinicia al comienzo de cada minuto del reloj.
  • GET /cpf/bulk/{jobId} y GET /quota no entran en el límite.

Al pasar el límite, la API responde 429 con el header Retry-After (segundos hasta liberarse) y no consume crédito:

HTTP
HTTP/1.1 429 Too Many Requests
Retry-After: 18
JSON
{
  "success": false,
  "data": null,
  "error": {
    "message": "Limite de requisições por minuto excedido. Tente novamente em 18 segundos."
  }
}

El texto de message viene en portugués (límite de solicitudes por minuto excedido, intenta de nuevo en 18 segundos). Espera el tiempo de Retry-After y repite la misma solicitud. Para muchos CPF, usa la consulta por lote: un solo envío procesa hasta 10.000 CPF y cuenta como una solicitud.

Límite por lote

POST /cpf/bulk acepta hasta 10.000 CPF por solicitud. Para volúmenes mayores, divídelos en varias llamadas. Detalles en Consulta por Lote.

La Consulta en Tiempo Real no está disponible por lote.

Uso en volumen

✦

Usa el endpoint de lote para volúmenes grandes

Para muchos CPF a la vez, prefiere POST /cpf/bulk: una llamada procesa hasta 10.000 CPF en segundo plano.

Si prefieres llamadas individuales, limita la concurrencia y respeta el 429:

Python
import asyncio, os
import httpx

CONCURRENCIA = 5

async def process_batch(cpf_list: list[str]):
    semaphore = asyncio.Semaphore(CONCURRENCIA)

    async with httpx.AsyncClient(
        base_url='https://api.cpfhub.io',
        headers={'x-api-key': os.environ['CPFHUB_API_KEY']},
        timeout=10,
    ) as client:
        async def lookup_one(cpf: str):
            async with semaphore:
                for _ in range(3):
                    res = await client.get(f'/cpf/{cpf}')
                    if res.status_code != 429:
                        return res.status_code, res.json()
                    await asyncio.sleep(int(res.headers.get('retry-after', '5')))
                return res.status_code, res.json()

        return await asyncio.gather(*[lookup_one(cpf) for cpf in cpf_list])

En la Consulta en Tiempo Real, el tiempo típico es de cerca de 1 segundo (no es un SLA). Usa un timeout de al menos 60 segundos.

Volúmenes mayores

Para volúmenes de más de 10.000 consultas al mes, límites por minuto mayores, condiciones negociadas o un SLA dedicado, habla con nosotros sobre el plan Enterprise.

Hablar con el equipo →


Actualizado el 4 de octubre de 2026