Consulta de CNPJ
Envía el CNPJ (registro nacional de empresas de Brasil) y recibe los datos catastrales de la empresa: razón social, nombre comercial, situación catastral, dirección, CNAE (código de actividad), tamaño, Simples Nacional/MEI y socios (QSA). Cuesta 1 crédito por CNPJ encontrado, igual que la Consulta Simple de CPF.
¿Usas Cursor, Lovable, v0 u otra IA? Copia el prompt de la Consulta de CNPJ y pégalo en tu asistente.
¿Muchos CNPJ a la vez? Usa la Consulta de CNPJ por Lote. Sin código, el dashboard consulta un CNPJ a la vez y guarda el resultado en el Historial.
Endpoint
https:/ / api.cpfhub.io/ cnpj/ {cnpj}Parámetros
| Dónde | Nombre | Obligatorio | Descripción |
|---|---|---|---|
| Path | cnpj | Sí | CNPJ con o sin formato: 11222333000181 o 11.222.333/0001-81. Acepta el CNPJ alfanumérico (ver abajo). |
| Header | x-api-key | Sí | Tu API Key. Ver Autenticación. |
CNPJ alfanumérico
La API acepta el nuevo formato de CNPJ alfanumérico, que la Receita Federal (administración tributaria de Brasil) empezó a emitir en julio de 2026: 12 caracteres con letras (A a Z) y números, seguidos de 2 dígitos verificadores numéricos. Ejemplo ficticio: 12ABC34501DE35 (o 12.ABC.345/01DE-35).
- Las minúsculas se convierten a mayúsculas.
- Los puntos, la barra y el guion se eliminan antes de validar.
- El dígito verificador se comprueba en los dos formatos. Las secuencias repetidas como
00000000000000se rechazan. - Guarda el CNPJ como texto en tu base de datos, nunca como número.
Ejemplo
Los ejemplos leen la clave de CPFHUB_API_KEY, tratan el 404 como resultado normal y usan un timeout de 10 s.
curl --max-time 10 "https://api.cpfhub.io/cnpj/11222333000181" \
-H "x-api-key: $CPFHUB_API_KEY"Respuesta
HTTP 200 OK
{
"success": true,
"data": {
"cnpj": "11222333000181",
"razao_social": "EMPRESA EXEMPLO LTDA",
"nome_fantasia": "EXEMPLO",
"situacao_cadastral": "Ativa",
"data_situacao_cadastral": "2015-03-10",
"matriz_filial": "Matriz",
"data_inicio_atividade": "2015-03-10",
"cnae_principal": "6201501",
"cnaes_secundarios": ["6204000", "6311900"],
"codigo_natureza_juridica": "2062",
"natureza_juridica": "Sociedade Empresária Limitada",
"tipo_logradouro": "RUA",
"logradouro": "DAS FLORES",
"numero": "100",
"complemento": "SALA 1",
"bairro": "CENTRO",
"cep": "01001000",
"uf": "SP",
"municipio": "SAO PAULO",
"email": "contato@example.com",
"telefones": [
{ "ddd": "11", "numero": "00000000", "is_fax": false }
],
"capital_social": "100000,00",
"porte_empresa": "Microempresa (ME)",
"opcao_simples": "S",
"data_opcao_simples": "2015-03-10",
"opcao_mei": "N",
"data_opcao_mei": null,
"QSA": [
{
"nome_socio": "FULANO DE TAL",
"cnpj_cpf_socio": "***.456.789-**",
"qualificacao_socio": "Sócio-Administrador",
"data_entrada_sociedade": "2015-03-10",
"identificador_socio": "Pessoa Física",
"faixa_etaria": "31 a 40 anos"
}
]
}
}Los campos vienen de la base pública del CNPJ, así que nombres y valores están en portugués y son, en general, string. Las fechas usan AAAA-MM-DD. Un campo vacío puede llegar como "".
| Campo | Tipo | Descripción |
|---|---|---|
data.cnpj | string | CNPJ consultado, 14 caracteres sin formato |
data.razao_social | string | Razón social |
data.nome_fantasia | string | Nombre comercial. Puede venir vacío |
data.situacao_cadastral | string | Situación catastral: "Ativa" (activa), "Baixada" (dada de baja), "Inapta" (inapta), "Suspensa" (suspendida) o "Nula" (nula) |
data.data_situacao_cadastral | string | null | Fecha de la situación catastral actual |
data.matriz_filial | string | "Matriz" (sede) o "Filial" (sucursal) |
data.data_inicio_atividade | string | null | Fecha de apertura |
data.cnae_principal | string | CNAE principal, 7 dígitos |
data.cnaes_secundarios | string[] | CNAE secundarios, 7 dígitos cada uno |
data.codigo_natureza_juridica, data.natureza_juridica | string | Código (4 dígitos) y descripción de la naturaleza jurídica |
data.tipo_logradouro, data.logradouro, data.numero, data.complemento, data.bairro | string | Dirección del establecimiento |
data.cep | string | Código postal (CEP), 8 dígitos sin formato |
data.uf, data.municipio | string | Estado (sigla) y municipio |
data.email | string | Correo registrado en la Receita Federal. Puede venir vacío |
data.telefones[] | object[] | ddd (código de área), numero e is_fax (boolean) |
data.capital_social | string | Capital social con coma decimal: "100000,00" |
data.porte_empresa | string | Tamaño: "Microempresa (ME)", "Empresa de Pequeno Porte (EPP)", "Demais" o "Não informado" |
data.opcao_simples, data.opcao_mei | string | "S" (sí), "N" (no) o "" (sin información) |
data.data_opcao_simples, data.data_opcao_mei | string | null | Fecha de adhesión al Simples Nacional y al MEI |
data.QSA[] | object[] | Socios y administradores (abajo) |
data.lgpd_anonimizado | boolean | Solo aparece cuando el titular pidió la anonimización. Algunos campos vienen ocultos |
Cada elemento de data.QSA:
| Campo | Descripción |
|---|---|
nome_socio | Nombre del socio (persona o empresa) |
cnpj_cpf_socio | CNPJ del socio persona jurídica. Para personas físicas, el CPF viene siempre enmascarado: ***.456.789-** |
qualificacao_socio | Cargo, por ejemplo "Sócio-Administrador" (socio administrador) |
data_entrada_sociedade | Fecha de entrada en la sociedad, o null |
identificador_socio | "Pessoa Física" (persona física), "Pessoa Jurídica" (persona jurídica) o "Estrangeiro" (extranjero) |
faixa_etaria | Rango de edad del socio |
- Las fechas vacías o
0000-00-00en la base de origen llegan comonull. - La respuesta puede incorporar campos nuevos. Ignora los campos que tu código no conoce.
Errores
La API responde solo en portugués. Los mensajes de error aparecen tal como llegan, con la traducción entre paréntesis.
| Status | Cuándo ocurre | Qué hacer |
|---|---|---|
400 | CNPJ con formato inválido o dígito verificador incorrecto ("CNPJ inválido. Formato ou dígito verificador incorreto.", CNPJ inválido) | Corrige el CNPJ. No repitas. No consume crédito. |
401 | API Key ausente, inválida o inactiva (error string) | Revisa el header x-api-key. |
403 | Créditos agotados sin excedente ("Limite de créditos excedido", límite de créditos superado, en general con error string, a veces en error.message) o cuenta inactiva/bloqueada (error string) | Recarga créditos o contacta a soporte. No repitas. |
404 | CNPJ no encontrado en la base ("CNPJ não encontrado na base de dados") | Resultado normal. No consume crédito. |
429 | Límite por minuto superado, compartido con la Consulta Simple de CPF (30/min por defecto) | Espera los segundos del header Retry-After. No consume crédito. |
503 | Base de CNPJ no disponible ("cnpj_unavailable") o falla pasajera al reservar créditos o registrar la consulta | Repite con espera creciente (2 s, 4 s, 8 s). No consume crédito. |
Formato del error y reintentos: Códigos de Error. Límite por minuto y créditos: Límites de Uso.
Detalles
- Costo: 1 crédito por CNPJ encontrado (
200), el mismo costo de la Consulta Simple de CPF y de la misma franquicia del plan. Algunos planes tienen costo propio: revisa el tuyo en el dashboard.400,404,429y503no consumen crédito. - Límite por minuto: la Consulta de CNPJ y la Consulta Simple de CPF comparten el mismo límite por API Key (30 solicitudes por minuto por defecto, sumando las dos).
- Fuente de los datos: base pública del CNPJ publicada por la Receita Federal (Dados Abertos do CNPJ), actualizada mensualmente y procesada por el proyecto OpenCNPJ (licencia MIT). CPFHub.io no consulta la Receita Federal en tiempo real para CNPJ: un registro puede estar desactualizado hasta la próxima actualización mensual. No existe Consulta en Tiempo Real de CNPJ.
- Socios personas físicas: el CPF del socio viene siempre enmascarado. La API no devuelve el CPF completo de los socios.
- Historial: las consultas de CNPJ aparecen en el Historial del dashboard, junto con las de CPF.
- Timeout del cliente: la consulta puede haberse completado y cobrado en el servidor. Repetir cobra de nuevo.
- Datos de ejemplo: el CNPJ
11222333000181, el CNPJ alfanumérico12ABC34501DE35y los datos anteriores son ficticios.
Actualizado el 15 de octubre de 2026