Consulta de registro
Consultas al registro oficial brasileño por número de contribuyente: consulta de CNPJ y consulta de CPF con fecha de nacimiento, modelo de errores, protección de datos y lista de comprobación de integración.
Visión general
Consulte datos registrales oficiales brasileños por número de identificación del contribuyente:
| Capacidad | Endpoint | Qué devuelve |
|---|---|---|
| Consulta de CNPJ | GET /openapi/v3/consultas/cnpj/{cnpj} | Datos registrales de la empresa para un número de 14 dígitos: razón social, nombre comercial, situación registral, naturaleza jurídica, CNAE, dirección registrada, contactos, capital social |
| Consulta de CPF | GET /openapi/v3/consultas/cpf/{cpf}/{nascimento} | Datos registrales de la persona física para un número de 11 dígitos más la fecha de nacimiento: nombre, situación registral, fecha de nacimiento |
Ambos endpoints son GET: el cuerpo firmado es la cadena vacía y todas las variables de ruta (CNPJ / CPF / fecha de nacimiento) forman parte de la ruta firmada, vea Autenticación. Las respuestas son objetos simples (sin sobre de la plataforma); los errores de negocio son un objeto simple {code, message}.
Por qué el CPF requiere fecha de nacimiento
La fuente upstream valida CPF y fecha de nacimiento como un par (semántica de la Receita Federal); el CPF por sí solo no devuelve nada. Un par que no coincide y un CPF inexistente devuelven el mismo código de error: deliberadamente no se distinguen, de lo contrario el endpoint se convertiría en una herramienta para averiguar la fecha de nacimiento de otras personas.
Requisitos previos (una sola vez)
- Credencial de la aplicación: solicite una aplicación y reciba el
app_secret. Se muestra una sola vez; guárdelo de forma segura. - Suscripción a la API: la plataforma concede a su aplicación acceso a los endpoints que necesite (la clave de scope es la ruta del endpoint).
Endpoints
| Endpoint | Finalidad |
|---|---|
GET /openapi/v3/consultas/cnpj/{cnpj} | Datos registrales de la empresa por CNPJ |
GET /openapi/v3/consultas/cpf/{cpf}/{nascimento} | Datos registrales de la persona física por CPF y fecha de nacimiento, con las franjas de edad de la LGPD |
Modelo de errores
Dos formas de error
Los errores de negocio, de solicitud y de la fuente upstream (HTTP 400 / 422 / 428 / 451 / 503) se devuelven como objeto simple:
{ "code": 10016003, "message": "CPF not found" }
| Campo | Tipo | Descripción |
|---|---|---|
| code | integer | Código de error de la plataforma |
| message | string | Explicación legible, localizada al idioma de la solicitud |
Los errores de la capa de autenticación (HTTP 401 / 403 / 429) los produce el gateway de la plataforma antes de que la solicitud llegue a la API, y usan el sobre de la plataforma:
{ "success": false, "errorType": 1, "code": 10009005, "message": "API not subscribed, please subscribe before calling" }
| Campo | Tipo | Descripción |
|---|---|---|
| success | boolean | false en todo error |
| errorType | integer | 1 error de API, 2 rechazo de la SEFAZ, 3 fallo del sistema, 4 fallo de validación de campos |
| code | integer | Código de error de la plataforma |
| message | string | Explicación legible, localizada |
Nota: su gestor de errores debe aceptar ambas formas. Una regla robusta: interprete el cuerpo como JSON, lea
codede cualquiera de las formas y tratesuccess=falseo HTTP >= 400 como fallo.
Códigos de error de negocio
| code | HTTP | Responsable | Significado | Acción |
|---|---|---|---|---|
| 10016000 | 400 | Llamador | Formato de CPF inválido (se requieren 11 dígitos) | Compruebe caracteres de formato indebidos o longitud incorrecta |
| 10016001 | 400 | Llamador | Dígitos verificadores del CPF inválidos | Valide localmente con el algoritmo mod-11 para evitar llamadas inútiles |
| 10016002 | 400 | Llamador | Fecha de nacimiento inválida (se requiere un DDMMYYYY válido) | Observe el orden día-mes-año y que la fecha debe existir |
| 10016003 | 400 | Llamador | CPF no encontrado | El CPF no existe o el CPF y la fecha de nacimiento no coinciden (deliberadamente indistinguibles) |
| 10016004 | 451 | Tercero (bloqueo legal upstream) | LGPD: menor de 16 anos (Lei Felca), el titular es menor de 16 años | Datos legalmente retenidos; no reintente |
| 10016005 | 422 | Tercero (bloqueo legal upstream) | LGPD: menor de idade, el titular tiene entre 16 y 17 años | Datos legalmente retenidos; no reintente |
| 10016006 | 428 | Tercero (bloqueo legal upstream) | LGPD: idade nao verificavel - informe a data de nascimento para completar a verificacao, no se puede verificar la edad | La plataforma ya volvió a verificar una vez con la fecha de nacimiento; no reintente |
| 10016010 | 400 | Llamador | Formato de CNPJ inválido (se requieren 14 dígitos) | Compruebe caracteres de formato indebidos |
| 10016011 | 400 | Llamador | Dígitos verificadores del CNPJ inválidos | Valide localmente con el algoritmo mod-11 |
| 10016012 | 400 | Llamador | CNPJ no encontrado | No existe ese CNPJ en el registro oficial |
| 10016020 | 503 | Tercero (upstream no disponible) | Fuente de datos upstream temporalmente no disponible | Reintente con backoff exponencial (empiece en 1 s, duplique hasta 30 s, añada jitter); si persiste, contacte con la plataforma |
Los errores de formato y de dígito verificador se rechazan localmente en la plataforma y nunca llegan a la fuente upstream: no consumen cuota ni se facturan.
Convención de responsabilidad: 10016000 a 10016003 y 10016010 a 10016012 son problemas del llamador; 10016004 a 10016006 son bloqueos legales de terceros; 10016020 es una indisponibilidad de tercero; HTTP 500 + 10001000 es un fallo de la plataforma.
Facturación: 10016003 (no encontrado / fecha de nacimiento que no coincide), 10016004 (menor de 16) y 10016005 (16 a 17 años) se facturan por llamada; 10016006 (edad no verificable), 10016020 (upstream no disponible) y los errores de formato / dígito verificador rechazados localmente no se facturan. Las franjas de edad se detallan en la página Consulta de CPF.
Errores de autenticación y autorización
| HTTP | code | Significado | Acción |
|---|---|---|---|
| 401 | 10009000 | Faltan cabeceras de firma (token / sign / timestamp) | Las tres cabeceras son obligatorias |
| 401 | 10009001 | Timestamp inválido o desfase de reloj superior a ±300 s | Sincronice el reloj (NTP); genere el timestamp en cada solicitud |
| 401 | 10009002 | Token inválido | Compruebe el app_secret |
| 401 | 10009003 | Firma no coincide | Vea la lista en Solución de problemas |
| 403 | 10009004 | Aplicación desactivada | Contacte con la plataforma |
| 403 | 10009015 | Aplicación no vigente (pendiente de aprobación o rechazada) | Espere la aprobación |
| 403 | 10009014 | Cuenta del integrador desactivada | Contacte con la plataforma |
| 403 | 10009005 | API no suscrita | Solicite la suscripción al endpoint |
| 429 | 10009006 | Límite de tasa superado | Reintente con backoff exponencial (empiece en 1 s, duplique hasta 30 s, añada jitter) |
Guía de reintentos: 401 y 403 son errores de configuración; reintentar sin corregir es inútil y puede disparar el límite de tasa. 429 y 503 (10016020) son reintentables con backoff. 422 / 428 / 451 son bloqueos legales; reintentar es inútil. Para 500, contacte con la plataforma con el timestamp y la ruta de la solicitud fallida.
Referencia rápida de estados HTTP
| HTTP | Escenario | Forma del cuerpo |
|---|---|---|
| 200 | Consulta realizada | Datos simples |
| 400 | Parámetro inválido / registro no encontrado | {code, message} simple |
| 401 | Fallo de autenticación | Sobre de la plataforma |
| 403 | Aplicación desactivada / no vigente / no suscrita | Sobre de la plataforma |
| 422 | Titular del CPF de 16 a 17 años (bloqueo legal upstream, 10016005) | {code, message} simple, sin campos personales |
| 428 | Edad del CPF no verificable (bloqueo legal upstream, 10016006) | {code, message} simple, sin campos personales |
| 429 | Límite de tasa superado | Sobre de la plataforma |
| 451 | Titular del CPF menor de 16 años (bloqueo legal upstream, 10016004) | {code, message} simple, sin campos personales |
| 500 | Fallo del lado de la plataforma (10001000) | {code, message} simple, contacte con la plataforma |
| 503 | Fuente de datos upstream no disponible (10016020) | {code, message} simple, reintente con backoff |
Protección de datos
El CPF es un dato personal de una persona física y se rige por la LGPD de Brasil (Ley 13.709/2018):
- La plataforma no persiste los resultados de las consultas de CPF; cada consulta va a la fuente en tiempo real.
- Los valores completos de CPF nunca entran en los registros de la aplicación; se enmascaran.
- Las variables de ruta en el registro de llamadas pasan por HMAC antes de almacenarse; no se conserva texto en claro.
- La fuente upstream retiene legalmente los datos de menores de edad; la plataforma transmite los estados 451 / 422 / 428 sin cambios y no almacena nada. 451 / 422 se facturan por llamada, 428 no; vea Menores de edad y verificación de edad en la página Consulta de CPF.
Se espera que los llamadores observen el mismo principio de necesidad mínima: consulte solo cuando exista una base legal de negocio (como la emisión de facturas) y no conserve datos personales más allá de lo que el negocio requiera.
Localización de las respuestas
El campo message sigue el idioma de la solicitud: la cabecera Language (en / pt / es / zh) tiene prioridad, después Accept-Language (admite pt-BR y valores q). Sin cabecera de idioma, las respuestas usan portugués (pt) por defecto.
Para las decisiones programáticas use siempre el code numérico y valores enumerados como situacao.codigo; nunca compare textos descriptivos. El message de las franjas de bloqueo de la LGPD es el texto legal en portugués y no se traduce.
Lista de comprobación de integración
- Obtenga el
app_secrety confirme que ambos endpoints están suscritos. - Llame con un CNPJ real: HTTP 200,
nidevuelve la entrada,situacaoCadastral.codigoes2. - Llame con un CPF real + fecha de nacimiento: HTTP 200,
nascimentodevuelve la entrada. - Caso negativo: CPF correcto con fecha de nacimiento incorrecta devuelve 400 +
10016003(mismo código que no encontrado). - Caso negativo: CNPJ / CPF con dígitos verificadores incorrectos devuelve 400 +
10016011/10016001(rechazado localmente, no facturado). - Caso negativo: fecha de nacimiento como
1997-01-09o31021997devuelve 400 +10016002. - Rutas de fallo: llame con un
signincorrecto (401 +10009003); llame a un endpoint no suscrito (403 +10009005). - Compatibilidad del parser: asegúrese de que su cliente trata 422 / 428 / 451 / 503 como fallos y lee el cuerpo simple
{code, message}(estos estados no se pueden provocar con datos de prueba; solo aparecen en producción con CPF reales de menores).
Solución de problemas
¿La firma nunca coincide (401, 10009003)?
Compruebe, por orden de frecuencia:
- Una solicitud GET no concatenó el cuerpo como la cadena vacía
""(se usó un objeto vacío o un texto de relleno); pathsin el prefijo/openapi, o incluyendo la query string;- El segmento de la fecha de nacimiento quedó fuera de la firma del CPF; ambas variables de ruta deben firmarse;
signenviado en mayúsculas (debe ser hex en minúsculas);- El
timestampusado en la concatenación difiere del de la cabecera (regenerado entre ambos); - Un CNPJ con formato cuya
/dividió la ruta.
Recalcule primero los valores fijos del ejemplo de firma en Autenticación; cuando su implementación local coincida, pase a inspeccionar los parámetros de la solicitud real.
¿El CNPJ devuelve 404 o no enruta?
El parámetro CNPJ acepta solo 14 dígitos. La / dentro de 40.673.061/0001-34 se trata como separador de ruta, por lo que la solicitud nunca llega al endpoint.
¿CPF encontrado pero el flujo de negocio parece incorrecto?
Compruebe primero situacao.codigo: cualquier valor distinto de 0 significa que el CPF no está en situación regular (fallecido, suspendido, pendiente de regularización, ...). Los datos son válidos; la decisión de negocio es suya.
¿Desfase de reloj (401, 10009001)?
El reloj de su servidor difiere del nuestro en más de 300 segundos. Use NTP y nunca guarde en caché ni reutilice timestamps entre solicitudes.
