Errores
Conceptos
Errores
Formato de los errores de la API de Muvon, sus tipos, códigos HTTP y la lista completa de códigos.
Los errores usan códigos HTTP (4xx es algo de la petición, 5xx es de nuestro lado) y siempre el mismo cuerpo:
json
{
"error": {
"type": "invalid_request_error",
"code": "notice_too_short",
"message": "pickup_at must be at least 30 hours from now",
"param": "pickup_at",
"request_id": "req_7e1f0c2a9b8d4e3f"
}
}Tipos
| Tipo | Cuándo |
|---|---|
invalid_request_error | La petición tiene un problema: falta un campo, un valor no sirve, o la regla de negocio no lo permite. |
authentication_error | Falta la llave o no sirve. |
permission_error | La llave sirve pero no puede hacer eso. |
rate_limit_error | Demasiadas peticiones. Ve Límites. |
idempotency_error | Problema con la Idempotency-Key. Ve Idempotencia. |
api_error | Falla de nuestro lado. Reintenta con espera creciente. |
Códigos
Programa contra code, no contra message: los mensajes pueden cambiar, los códigos no.
| HTTP | Código | Tipo | Qué significa |
|---|---|---|---|
| 400 | parameter_missing | invalid_request_error | Falta un campo obligatorio (param dice cuál). |
| 400 | parameter_invalid | invalid_request_error | Un campo tiene un valor o formato que no sirve. |
| 400 | invalid_json | invalid_request_error | El cuerpo no es JSON válido. |
| 400 | body_missing | invalid_request_error | Ese endpoint necesita un cuerpo JSON. |
| 400 | idempotency_key_invalid | invalid_request_error | La Idempotency-Key debe tener de 1 a 255 caracteres imprimibles, sin espacios. |
| 400 | place_not_found | invalid_request_error | Ese place_id no existe. Usa uno de GET /places o manda una dirección. |
| 400 | vehicle_type_not_found | invalid_request_error | Ese vehicle_type_id no existe. Ve GET /vehicle-types. |
| 400 | quote_invalid | invalid_request_error | La cotización no tiene precio. Pide otra. |
| 400 | idempotency_key_required | invalid_request_error | POST /bookings sin encabezado Idempotency-Key. |
| 401 | missing_api_key | authentication_error | No mandaste Authorization: Bearer. |
| 401 | invalid_api_key | authentication_error | La llave no existe, se revocó, la cuenta está suspendida o es una llave live sin live activado. |
| 403 | test_mode_only | permission_error | Las rutas /test/… solo funcionan con llave de prueba. |
| 404 | resource_missing | invalid_request_error | No hay una reserva o cotización con ese id o código para tu cuenta y modo. |
| 409 | quote_expired | invalid_request_error | La cotización venció. Pide otra. |
| 409 | quote_used | invalid_request_error | Esa cotización ya se reservó. |
| 409 | cancel_window_closed | invalid_request_error | Faltan menos de 24 h para la recogida. Escribe a Muvon. |
| 409 | booking_not_payable | invalid_request_error | Sandbox: una reserva cancelada no se puede pagar. |
| 409 | booking_not_cancellable | invalid_request_error | El viaje ya está en curso, terminó o ya estaba cancelado. |
| 409 | invalid_status_transition | invalid_request_error | Sandbox: ese estado no sigue al actual. |
| 409 | idempotency_conflict | idempotency_error | Usaste la misma Idempotency-Key con otro cuerpo. |
| 422 | notice_too_short | invalid_request_error | La recogida es en menos de 30 h, o de la anticipación del vehículo. |
| 422 | same_origin_destination | invalid_request_error | Origen y destino son el mismo lugar. |
| 422 | route_too_long | invalid_request_error | El viaje pasa de 330 km. |
| 422 | route_not_priceable | invalid_request_error | No pudimos calcular la ruta entre esos puntos. |
| 422 | passengers_out_of_range | invalid_request_error | Ningún vehículo (o el que pediste) lleva a esas personas. |
| 422 | too_many_bags | invalid_request_error | Las maletas no caben en el vehículo. |
| 422 | hours_out_of_range | invalid_request_error | En hourly, hours va de 1 a 12. |
| 422 | extra_unavailable | invalid_request_error | Ese extra no existe o no se vende por la API. |
| 422 | option_unavailable | invalid_request_error | El vehicle_type_id no está en las opciones de la cotización. |
| 413 | body_too_large | invalid_request_error | El cuerpo pasa de 32 KB. |
| 429 | rate_limited | rate_limit_error | Demasiadas peticiones en este minuto. Espera lo que diga Retry-After. |
| 500 | internal_error | api_error | Algo falló de nuestro lado. Reintenta; si sigue, manda el request_id. |
| 503 | not_configured | api_error | El servicio no está disponible por ahora. Reintenta más tarde. |
| 503 | pricing_unavailable | api_error | No hay tarifas cargadas para cotizar. Reintenta más tarde. |

