Saltar al contenido principal

Errores

Todos los errores de la API de Ozzie siguen un formato consistente. Cuando una solicitud falla, el cuerpo de la respuesta siempre contiene un objeto error con un code legible por máquina, un message legible por humanos y un array details opcional con contexto adicional.


Formato de la respuesta de error

{
"error": {
"code": "ERROR_CODE",
"message": "Una descripción legible de qué salió mal.",
"details": []
}
}
CampoTipoDescripción
error.codestringCódigo de error legible por máquina — úsalo para manejo programático
error.messagestringDescripción legible del error
error.detailsarrayContexto adicional opcional, como qué campos fallaron en validación

Códigos de error

INVALID_JSON

Estado HTTP400 Bad Request
Cuándo ocurreEl cuerpo de la solicitud no pudo ser analizado como JSON
Cómo resolverVerifica que el header Content-Type sea application/json y que el cuerpo sea JSON válido.

VALIDATION_ERROR

Estado HTTP422 Unprocessable Entity
Cuándo ocurreEl cuerpo de la solicitud es JSON válido pero contiene valores de campo inválidos
Cómo resolverRevisa el array details — cada entrada identifica el campo específico y la falla de validación.

UNAUTHORIZED

Estado HTTP401 Unauthorized
Cuándo ocurreEl header Authorization está ausente, malformado o contiene credenciales inválidas
Cómo resolverVerifica que el token esté codificado correctamente como base64(client_id:client_secret).

FORBIDDEN

Estado HTTP403 Forbidden
Cuándo ocurreTus credenciales son válidas, pero estás intentando acceder a un recurso que pertenece al usuario de otro cliente
Cómo resolverVerifica que el user_id en la ruta pertenezca a un usuario que creaste bajo tu client_id.

NOT_FOUND

Estado HTTP404 Not Found
Cuándo ocurreEl recurso solicitado no existe
Cómo resolverVerifica que el ID en la URL sea correcto y que el recurso fue creado antes de intentar recuperarlo.

CONFLICT

Estado HTTP409 Conflict
Cuándo ocurreLa solicitud conflictúa con el estado actual de un recurso. Más comúnmente: intentar crear un usuario con un external_user_id que ya existe.
Cómo resolverUsa GET /users?external_user_id=... para verificar si ya existe antes de crear.

INTAKE_REQUIRED

Estado HTTP422 Unprocessable Entity
Cuándo ocurreLlamaste a un endpoint que requiere un intake financiero (ej: POST /plan), pero no se ha enviado ningún intake.
Cómo resolverLlama a POST /users/{user_id}/financial-intake primero.

PLAN_REQUIRED

Estado HTTP422 Unprocessable Entity
Cuándo ocurreLlamaste a un endpoint que requiere un plan (ej: POST /money-moves/generate), pero no se ha generado ningún plan.
Cómo resolverLlama a POST /users/{user_id}/plan primero.

PERSONALITY_REQUIRED

Estado HTTP422 Unprocessable Entity
Cuándo ocurrePOST /plan/personalize fue llamado sin el campo personality_type en el cuerpo.
Cómo resolverIncluye personality_type en el cuerpo de la solicitud. Valores válidos: "optimizer", "planner", "avoider", "spender".

RATE_LIMIT_EXCEEDED

Estado HTTP429 Too Many Requests
Cuándo ocurreTu cliente ha enviado más solicitudes de las que permite el límite de tasa.
Cómo resolverEspera hasta el tiempo especificado en el header X-RateLimit-Reset, luego reintenta. Implementa backoff exponencial.

INTERNAL_ERROR

Estado HTTP500 Internal Server Error
Cuándo ocurreOcurrió un error inesperado en los servidores de Ozzie.
Cómo resolverReintenta después de un breve delay. Si el error persiste, verifica la página de estado de Ozzie.

Estrategia de reintento

Código de error¿Reintentar?Estrategia
INVALID_JSONNoCorrige la solicitud
VALIDATION_ERRORNoCorrige los campos inválidos
UNAUTHORIZEDNoCorrige las credenciales
FORBIDDENNoEstás accediendo al recurso equivocado
NOT_FOUNDNoEl recurso no existe
CONFLICTNoEl recurso ya existe
INTAKE_REQUIREDNoRedirige al usuario a completar el intake
PLAN_REQUIREDNoLlama a POST /plan primero
RATE_LIMIT_EXCEEDEDEspera X-RateLimit-Reset, luego reintenta
INTERNAL_ERRORReintenta con backoff exponencial