Saltar al contenido principal

Errores

Esta página lista los errores que puede devolver cada endpoint de la API Universal: el path del que sale, el código HTTP, el errorCode (cuando existe) y el message tal como llega en la respuesta.

Cómo leer las tablas
  • Los message están transcritos literalmente, incluidos los que están en inglés o tienen errores de redacción. Si construyes lógica sobre un error, compara por errorCode (o data.code en Risks) y no por el texto.
  • Un message con <campo> indica que el texto cambia según el campo que falló.
  • Los errores de los endpoints de Risks tienen su propio catálogo: Códigos de errores de Risks.

Formatos de respuesta de error​

No todos los endpoints responden igual. Identifica el formato por el endpoint.

FormatoEndpointsEstructura
Negocio con códigoPOST /candidate-requests{ "isSuccess": true, "statusCode": 422, "message": "Unprocessable Entity.", "data": { "errorCode": "ERR012", "message": "..." } }
Validación de camposPOST /candidate-requests{ "statusCode": 422, "errors": [ { "errorCode": "ERR002", "message": "..." } ] }
EstándarAutenticación y permisos de todos los endpoints, POST /signin{ "statusCode": 401, "message": "...", "error": "Unauthorized" }
Risks/risks/legal-records/*{ "isSuccess": false, "statusCode": 404, "message": "...", "data": { "code": "SEARCH_NOT_FOUND", "requestId": "..." } }
Bulk/bulk-loading/*{ "isSuccess": true, "statusCode": 400, "message": "...", "data": { } }
Comportamientos que conviene conocer
  • isSuccess no indica éxito en los errores. En los formatos de negocio y Bulk llega en true aunque la petición haya fallado. Decide por el código HTTP y por statusCode.
  • POST /candidate-requests: el statusCode del body es 422, pero el código HTTP de la respuesta es 400 (o 404 cuando no se encuentra un recurso).
  • POST /signin: las credenciales incorrectas responden HTTP 201 con "success": false. No devuelve 401.
  • GET /candidate-requests/{uuid}: si el uuid no existe responde HTTP 200 con "statusCode": 404 dentro del body.

Autenticación y permisos​

Aplican a todos los endpoints que usan x-api-key o Authorization: Bearer. Formato estándar.

PathHTTPerrorCodemessageCondición
Todos401—Invalid credentials.No se envió ninguna credencial, o la API Key o el token no son válidos (inexistente, deshabilitada o expirada).
Todos403—Insufficient permissions.No se pudieron obtener los permisos del rol asociado a la credencial.
Todos403—Forbidden resourceEl rol no tiene permiso para ese endpoint.
Todos (con x-api-key)429—Too many requestsSe superó el límite de peticiones por API Key en la ventana de tiempo. Reintenta después.
nota

Antes de llegar al servicio, el gateway puede rechazar la petición con su propio 401 o 403. Esos mensajes los define el gateway y no están en este catálogo.


POST /signin​

Formato estándar para los 400. Las credenciales incorrectas no devuelven un código de error HTTP.

PathHTTPerrorCodemessageCondición
POST /signin201—El nombre de usuario o la contraseña son incorrectos. (con "success": false)Usuario inexistente, usuario inactivo, contraseña incorrecta, cuenta bloqueada o deshabilitada. No se distingue la causa.
POST /signin201—Se requiere autenticación de múltiples factores. (con "success": false)La cuenta tiene un segundo factor activo.
POST /signin400—email must be an emailemail ausente o con formato inválido.
POST /signin400—password should not be empty / password must be a stringpassword ausente, vacío o no es texto.
POST /signin400—property <campo> should not existEl body incluye un campo que no existe.
POST /signin500—Internal server errorError interno.

POST /candidate-requests​

Disponible también como POST /services/candidate-requests (API Key). Primero se valida el tipo de cada campo (formato de validación de campos) y después las reglas de negocio (formato de negocio con código).

Validación de campos​

HTTP 400. El message va dentro de errors[].

PathHTTPerrorCodemessageCondición
POST /candidate-requests400ERR002Required fields are missin g to perform this query: byNationalIdbyNationalId ausente o no es booleano.
POST /candidate-requests400ERR002Required fields are missing to perform this query: <campo>package, taxClassification o clientId ausentes o no son texto.
POST /candidate-requests400ERR015The email entered does not match the correct format.email con formato inválido.
POST /candidate-requests400ERR000The date on which the consent was accepted is required.consent.consentDate vacío.
POST /candidate-requests400ERR000The date on which the terms and conditions were accepted is required.consent.termsAgreementDate vacío.
POST /candidate-requests400ERR000consentDate must be in the format dd/MM/yyyy HH:mm:ss (e.g., 01/05/1999 14:30:45)consent.consentDate con formato inválido.
POST /candidate-requests400ERR000termsAgreementDate must be in the format dd/MM/yyyy HH:mm:ss (e.g., 01/05/1999 14:30:45)consent.termsAgreementDate con formato inválido.
POST /candidate-requests400ERR0001 to 70 charactersstreetAndNumber, delegationOrMunicipality, city o company fuera de 1 a 70 caracteres.
POST /candidate-requests400ERR000Only alphanumeric characters are acceptedEsos mismos campos con caracteres no permitidos.
POST /candidate-requests400ERR000The postal code must contain exactly 5 digitspostalCode no tiene exactamente 5 dígitos.
POST /candidate-requests400ERR000resultNotificationUrl must be a URL addressresultNotificationUrl no es una URL.
POST /candidate-requests400ERR000costCenter must be a number conforming to the specified constraintscostCenter no es numérico.
POST /candidate-requests400ERR000<campo> must be a string / <campo> must be a boolean value / <campo> must be an objectCualquier otro campo con un tipo distinto al esperado.

Reglas de negocio: persona moral (taxClassification: "PM")​

PathHTTPerrorCodemessageCondición
POST /candidate-requests400ERR019businessName is required.Falta businessName.
POST /candidate-requests400ERR019corporateRegime is required.Falta el campo regime.
POST /candidate-requests400ERR019registrationCountry must match a valid catalog entry.registrationCountry no está en el catálogo wc-countries.
POST /candidate-requests400ERR000Validation errorregime no está en el catálogo de regímenes fiscales.

Reglas de negocio: persona física (taxClassification: "PF")​

PathHTTPerrorCodemessageCondición
POST /candidate-requests400ERR019taxClassification has an incorrect formattaxClassification distinto de PF y PM.
POST /candidate-requests400ERR002The national ID does not have the correct format.nationalId no cumple el formato del país. Con byNationalId: true.
POST /candidate-requests400ERR016The national ID is required.Falta nationalId. Con byNationalId: true.
POST /candidate-requests400ERR007name is required to complete the registration.Falta name. Con byNationalId: false.
POST /candidate-requests400ERR010The field last name is required to complete the registration.Falta lastName. Con byNationalId: false.
POST /candidate-requests400ERR011The field birthdate does not have the correct format.birthDate ausente, con formato distinto de DD/MM/YYYY, anterior a 1900 o futura.
POST /candidate-requests400ERR011The sex field is required to complete the registration.Falta sex.
POST /candidate-requests400ERR020The sex field has an incorrect format.sex distinto de H, M o X.
POST /candidate-requests400ERR012The state field is required to complete the registration.Falta state.
POST /candidate-requests400ERR021The state field has an incorrect format.state no es una clave de estado válida.
POST /candidate-requests400—the following fields are required or have incorrect formats: [name, lastName, secondLastName, birthDate, sex, state]name o lastName contienen caracteres no permitidos.
POST /candidate-requests400ERR010The candidate you are trying to register is not of legal age.El candidato es menor de 18 años.
POST /candidate-requests400ERR012The gender is invalid.gender distinto de H o M.

Usuario, cliente y paquete​

PathHTTPerrorCodemessageCondición
POST /candidate-requests404ERR017User not found.El usuario asociado a la credencial no existe.
POST /candidate-requests400ERR017Package is required.package viene vacío.
POST /candidate-requests404ERR007The package <id> with which the registration is being attempted does not exist.El package no existe.
POST /candidate-requests404ERR008The client <id> with which the registration is being attempted does not exist.El clientId no existe.
POST /candidate-requests404ERR003This package is not available to you.El paquete no está asignado a tu cliente.
POST /candidate-requests404—Country not foundEl cliente no tiene configurado el país indicado.
POST /candidate-requests400ERR002This package only allows registration using a National ID.El paquete no admite registro por nombre y se envió byNationalId: false.

Campos requeridos por el paquete​

PathHTTPerrorCodemessageCondición
POST /candidate-requests400ERR012The <campo> field is required to complete the registration.Falta un campo que el paquete exige.
POST /candidate-requests400ERR012The nss field has an invalid format.nss no tiene 11 dígitos.
POST /candidate-requests400ERR012The rfc and curp do not match.rfc y nationalId no son consistentes.
POST /candidate-requests400ERR012The RFC is required.Paquete con Reporte de Crédito y sin rfc.
POST /candidate-requests400ERR012The candidate consent is required to complete the registration.Paquete con Reporte de Crédito que exige consent.
POST /candidate-requests400ERR020The PIN does not match the provided data.El año del RFC no coincide con los dígitos 3 y 4 de consentNIP.
POST /candidate-requests400ERR015The email address is required for this process.El paquete requiere interacción con el candidato y falta email.
POST /candidate-requests400ERR012The homeAddress are required.Paquete con Reporte de Crédito que exige homeAddress.
POST /candidate-requests400ERR012The workAddress are required.hasWorkExperience es true y falta workAddress.

Centro de costos​

Estos errores llegan con el formato de validación de campos y el message genérico Validation error (ERR000). La causa real está en la última columna.

PathHTTPerrorCodemessageCausa
POST /candidate-requests400ERR000Validation errorcostCenter es obligatorio para tu cliente y no se envió.
POST /candidate-requests400ERR000Validation errorSe envió costCenter pero tu cliente no usa centros de costo.
POST /candidate-requests400ERR000Validation errorTu cliente no tiene centros de costo configurados, o el centro indicado está deshabilitado.
POST /candidate-requests404—Cost center <id> not foundEl centro de costo no existe. Formato estándar.

GET /candidate-requests/{uuid}​

Disponible también como GET /services/candidate-requests/{uuid} (API Key).

PathHTTPerrorCodemessageCondición
GET /candidate-requests/{uuid}200—candidate request not found (con "statusCode": 404 en el body)El uuid no existe.

GET /candidate-requests/{uuid}/processes/{processId}​

PathHTTPerrorCodemessageCondición
GET /candidate-requests/{uuid}/processes/{processId}500—Failed to get process details: <detalle>No se pudo obtener el detalle del Process.
nota

page y limit no se validan: un valor no numérico no produce un error 400.


POST /bulk-loading/upload​

Formato Bulk. Solo disponible con Authorization: Bearer.

PathHTTPerrorCodemessageCondición
POST /bulk-loading/upload400—Only CSV files are allowedEl archivo no es CSV.
POST /bulk-loading/upload400—File not foundFalta el campo file del formulario.
POST /bulk-loading/upload400—Register type not foundFalta registerType.
POST /bulk-loading/upload400—CSV malformed => <detalle>El CSV no se puede leer.
POST /bulk-loading/upload400—File validation failed (con data.details.errors, por ejemplo national_id is required)Falta una columna requerida. Se reporta únicamente el primer registro con error.
POST /bulk-loading/upload401—User is not authorizedEl rol del usuario no puede hacer cargas masivas.
POST /bulk-loading/upload404—Client not foundEl cliente del usuario no existe.
POST /bulk-loading/upload413—Mensaje estándar del servidorEl archivo supera 5 MB.
POST /bulk-loading/upload500—Internal Server ErrorError interno, o registerType distinto de byName y byNationalId.

GET /bulk-loading/file/{uuid}/status​

PathHTTPerrorCodemessageCondición
GET /bulk-loading/file/{uuid}/status404—UUID not foundEl uuid no corresponde a ninguna carga.
GET /bulk-loading/file/{uuid}/status500—Internal Server ErrorNo se pudo generar el enlace al archivo de errores.

Errores por registro de una carga masiva​

Estos errores no se devuelven como respuesta HTTP. Se procesan después de subir el archivo y quedan en el archivo CSV de errores que entrega fileUrl en GET /bulk-loading/file/{uuid}/status, en la columna reasonFail. No tienen errorCode.

OrigenreasonFailCondición
PaquetePackage not foundEl package_id no existe.
PaqueteCredit report process is not supportedEl paquete incluye Reporte de Crédito, que no está disponible en carga masiva.
PaqueteEmail is requiredEl paquete requiere interacción con el candidato y falta el correo.
Paíscountry_id is required / country_id is invalidFalta o no está en el catálogo de países.
DatosbirthDate is invalidFecha distinta de DD/MM/YYYY o inexistente.
Datossex must be "M" or "H"Solo en registro por nombre.
Datosstate is required / state must be in code. Ex: "TS" or "HG"Solo en registro por nombre.
DatosNational id incorrect syntaxSolo en registro por identificador.
DatosNSS is invalidnss no tiene 11 dígitos.
Datosrfc is required / RFC is invalidPaquete con lista negra del SAT o Reporte de Crédito.
DatospersonalReferences are required / personalReferences must be grater than 0Paquete con Referencias Personales.
DatosbtrustProfile is invalid / btrustCategories are required / btrustCategories are invalidPaquete con el Process Btrust.
Centro de costoscostCenter is requiredEl cliente usa centros de costo y falta.
Centro de costoscostCenter is not allowed or requiredSe envió costCenter pero el cliente no lo usa.
Centro de costosCost center does not exist or is not visibleEl centro no existe o está deshabilitado.
ProcesamientoUnexpected error processing the candidateError interno al procesar el registro.
Registro del candidatoCould not save candidate in database, State not found, Could not fetch package y similaresFalla durante el registro posterior a la validación.

Risks​

Formato Risks. El detalle de cada código, si se cobra y si se puede reintentar está en Códigos de errores de Risks. Aquí se muestra a qué path corresponde cada uno.

PathHTTPdata.codemessageCondición
POST /risks/legal-records/searches400INVALID_SEARCH_CRITERIAEl criterio de búsqueda no es válido (con data.reasons)Criterios de búsqueda incompletos o inválidos.
POST /risks/legal-records/searches400IDENTITY_NOT_FOUNDLa CURP no corresponde a una persona registradaBúsqueda por nationalId de una CURP bien formada que no existe.
POST /risks/legal-records/searches503PROVIDER_UNAVAILABLEEl servicio de identidad no está disponible, así que no se pudo resolver la CURP; reintenta en unos momentosBúsqueda por nationalId con el servicio de identidad caído.
GET /risks/legal-records/searches/{searchId}404SEARCH_NOT_FOUNDLa búsqueda no existe o no pertenece al clienteEl searchId no existe o es de otro cliente.
GET /risks/legal-records/searches/{searchId}410SEARCH_EXPIREDLa búsqueda expiró; ejecuta una nueva búsquedaPasaron más de 2 horas desde la búsqueda.
GET /risks/legal-records/searches/{searchId}/records/{uuid}404SEARCH_NOT_FOUNDLa búsqueda no existe o no pertenece al clienteEl searchId no existe o es de otro cliente.
GET /risks/legal-records/searches/{searchId}/records/{uuid}404MATCH_NOT_FOUNDLa coincidencia no pertenece a la búsqueda indicadaEl uuid no está en esa búsqueda.
GET /risks/legal-records/searches/{searchId}/records/{uuid}410SEARCH_EXPIREDLa búsqueda expiró; ejecuta una nueva búsquedaLa búsqueda expiró y el registro no se había consultado antes.
GET /risks/legal-records/searches/{searchId}/records/{uuid}503PROVIDER_UNAVAILABLELa fuente de antecedentes legales no está disponible; reintenta en unos momentosLa fuente no responde. Si trae data.unlockAlreadyCharged: true, el desbloqueo ya se cobró y reintentar no vuelve a cobrar.
GET /risks/legal-records/searches/{searchId}/records/{uuid}/csv404SEARCH_NOT_FOUND / MATCH_NOT_FOUNDIgual que en el detalleEl searchId o el uuid no existen.
GET /risks/legal-records/searches/{searchId}/records/{uuid}/csv409MATCH_NOT_UNLOCKEDLa coincidencia no ha sido desbloqueadaSe pidió el CSV de un registro cuyo detalle no se ha consultado.
GET /risks/legal-records/searches/{searchId}/records/{uuid}/csv503PROVIDER_UNAVAILABLELa fuente de antecedentes legales no está disponible; reintenta en unos momentosLa fuente no responde.
Todos los de /risks/legal-records/*400—El usuario tiene acceso a varios clientes; indica clientId para atribuir el consumoTu usuario tiene varios clientes y no enviaste clientId.
Todos los de /risks/legal-records/*403—No cuentas con acceso a este clienteEl clientId enviado no es uno de tus clientes.
Todos los de /risks/legal-records/*400—<campo> debe tener el formato DD-MM-YYYY, property <campo> should not exist u otros mensajes de validaciónParámetros o body con formato inválido.