Skip to Content
API RESTErrores

Errores

Toda respuesta de error sigue el mismo formato:

{ "error": { "code": "validation_failed", "message": "El campo email es obligatorio.", "details": [ { "field": "email", "issue": "missing" } ], "request_id": "req_abc123", "doc_url": "https://docs.ministrium.com/es/api/errores/#validation_failed" } }

request_id es crítico: inclúyalo siempre en tickets de soporte para que podamos buscar el log exacto.

Códigos HTTP

HTTPSignificado
200OK
201Created
204No Content (DELETE exitoso)
400Bad Request (sintaxis o validación)
401Unauthorized (token inválido o ausente)
403Forbidden (token válido pero rol/scope insuficiente)
404Not Found
409Conflict (ej. email duplicado)
422Unprocessable Entity (validación de negocio)
429Rate limited
500Server error
503Service unavailable (mantenimiento)

Códigos de error de Ministrium

codeCuándo
validation_failedFalta o es inválido un campo. details lista cada problema.
unauthorizedSin token o token expirado.
token_revokedEl token fue revocado explícitamente.
scope_insufficientToken válido pero sin scope requerido.
tenant_not_foundCabecera X-Tenant apunta a tenant inexistente.
tenant_inactiveTenant suspendido por billing u otro motivo.
resource_not_foundEl ID solicitado no existe (o no es visible al token).
conflictCrear con un identificador único ya tomado (email duplicado, slug).
rate_limitedCuotas de API superadas. Retry-After en cabecera.
stripe_errorStripe rechazó la transacción. details.stripe_code con el detalle.
internal_errorBug. Reportar con request_id.

Validación múltiple

Si hay varios problemas en un mismo request, todos se reportan:

{ "error": { "code": "validation_failed", "message": "3 campos inválidos.", "details": [ { "field": "email", "issue": "invalid_format" }, { "field": "phone", "issue": "missing" }, { "field": "campus_id", "issue": "not_found" } ] } }

Localización de mensajes

message se traduce según Accept-Language:

Accept-Language: es-MX → "El campo email es obligatorio." Accept-Language: en-US → "Field email is required."

code y details[*].field siempre en inglés (estables para parsing).

Reintentos

CódigoReintentar
5xx, 408, 429Sí, con backoff exponencial
4xx (excepto 429)NO. Indica error del cliente.

Backoff sugerido: min(2^retries * 100ms, 30s) con jitter ± 20%.

Mantenimiento programado

Si Ministrium entra en mantenimiento, las llamadas reciben 503 con cabecera Retry-After: <segundos>. Esto se anuncia con 7 días de antelación en Status.

Errores de Stripe

Cuando una operación involucra Stripe (donación, payout) y falla, devolvemos 402 Payment Required o 409 Conflict con detalles:

{ "error": { "code": "stripe_error", "message": "La tarjeta fue rechazada por el banco emisor.", "details": { "stripe_code": "card_declined", "decline_code": "insufficient_funds", "stripe_request_id": "req_xyz789" } } }

stripe_request_id permite cruzar con el dashboard de Stripe.

Last updated on