Códigos y Formatos de Error¶
Códigos de Respuesta HTTP¶
| Código | Uso |
|---|---|
| 200 OK | Operación exitosa (login, listados, actualizaciones, validación TSA) |
| 201 CREATED | Recurso creado (certificado, configuración TSA) |
| 202 ACCEPTED | Lote de firma masiva encolado (POST /api/firma/masiva) |
| 400 BAD_REQUEST | Datos faltantes/inválidos, error de negocio (IllegalArgumentException); en /api/firma/* también cubre nivel_firma no soportado, límites del lote excedidos, o página fuera de rango |
| 401 UNAUTHORIZED | Token ausente/vacío, credenciales TSA inválidas, permisos insuficientes, dni de firma no coincide con el token |
| 403 FORBIDDEN | Refresh token inválido o expirado; en /api/audit/* también cubre un usuario autenticado sin rol ROLE_ADMIN/ROLE_SUPER |
| 404 NOT_FOUND | Alias TSA no encontrado o eliminado; en /api/firma/* también cubre un código de solicitud masiva que no existe o no pertenece al dni del token; en /api/audit/* un dni o id de proceso inexistente |
| 408 REQUEST_TIMEOUT | Timeout contra el servicio TSA |
| 409 CONFLICT | (GET /api/firma/zip/{solicitud}) la solicitud existe pero todavía no terminó de procesarse |
| 422 UNPROCESSABLE_ENTITY | (/api/firma/*) el certificado principal del dni_firmante no existe, no está vigente, o está revocado |
| 500 INTERNAL_SERVER_ERROR | Error no controlado |
| 502 BAD_GATEWAY | TSA inalcanzable, respuesta vacía o error de validación TSA |
Formato de Errores¶
No hay un formato de error único y estandarizado en todo el servicio. Los patrones más comunes son:
Mensaje simple (MessageResponse) — usado en Auth:
Mapa con estado — usado en Certificados:
{
"message": "Invalid file type. Please upload a .p12 file.",
"certificate": null,
"status": "ERROR"
}
Respuesta de firma (SignResponse) — usado en Documentos:
Validación/estado TSA (TimeStampValidationResponse o mapa {status, message, errorCode}) — usado en TSA:
{
"status": "ERROR",
"message": "Invalid TSA credentials.",
"errorCode": "TSA_AUTH_FAILED",
"alias": "tsa-prd",
"validatedAt": "2026-02-11T15:21:01.512+00:00",
"validationCount": 6,
"lastValidationOk": false
}
Los errorCode de TSA están documentados en detalle en TSA.
Respuestas de /api/firma/* — siempre incluyen success (booleano) y mensaje; en error, success: false y el resto de los campos propios de cada respuesta quedan vacíos:
{ "success": false, "mensaje": "No existe un certificado principal registrado para el dni 12345678" }
Recomendación para integradores¶
Al consumir la API, verificar primero el código HTTP y luego, si el body trae un campo status, tratar "ERROR" como fallo aunque el HTTP status sea 200 (no todos los endpoints siguen esa convención de forma consistente).