Envelopes de error, el catálogo completo de errores y las respuestas exitosas que parecen fallos.
Error de aplicación
json
{
"statusCode": 409,
"code": "transfer_price_changed",
"message": "The transfer price changed. Request pricing again"
}Discrimina por code, no por message: los mensajes están localizados y pueden reescribirse.
Error de validación
Cuando la petición en sí está mal formada, message es un array de problemas en lugar de un único string.
json
{
"statusCode": 400,
"message": [
"numPassengers must not be less than 1",
"latitude and longitude must be sent together"
],
"error": "Bad Request"
}Errores generales
| HTTP | Código | Significado | Acción recomendada |
|---|---|---|---|
400 | El body, la query o el path son inválidos, o incluyen una propiedad desconocida. | Corrige la petición usando el array message. | |
400 | transfer_invalid_language | Idioma no soportado. | Usa un valor de idioma documentado. |
400 | transfer_invalid_currency | Moneda no soportada. | Usa una moneda soportada. |
400 | transfer_currency_mismatch | La moneda difiere de la oferta o la cotización. | Reutiliza la moneda del paso anterior. |
400 | transfer_location_not_found | No se pudo resolver una ubicación. | Añade city o zipcode, o envía place ID o coordenadas. |
429 | transfer_provider_error | Rate limit temporal. | Reintenta con backoff exponencial. |
502 | transfer_provider_error | La petición no pudo completarse. | No asumas éxito; conserva tus identificadores y consulta la reserva. |
503 | El precio no pudo confirmarse en este momento. | Reintenta más tarde; no reserves ni cobres. |
Tokens, pricing y booking
| HTTP | Código | Significado |
|---|---|---|
400 | transfer_invalid_booking_token | El token expiró, fue modificado o pertenece a otra oferta. |
400 | transfer_invalid_pricing_token | El pricing token es inválido o inconsistente con la petición. |
400 | transfer_pricing_required | La petición no incluye pricing token. |
400 | transfer_invalid_amenities | Keys de amenities duplicadas, vacías o no disponibles. |
400 | transfer_flight_info_required | La oferta exige airline y flightNumber. |
400 | transfer_return_flight_info_required | Un round trip exige los datos del vuelo de retorno. |
409 | transfer_price_changed | El precio cotizado ya no es válido. |
409 | transfer_booking_in_progress | La reserva no pudo aceptarse para este pricing token. |
410 | transfer_pricing_expired | La cotización expiró antes de crear la reserva. |
Reservas
| HTTP | Código | Significado |
|---|---|---|
400 | transfer_booking_not_found | La consulta no incluyó exactamente un identificador. |
502 | transfer_provider_error | No se pudo consultar, crear, cambiar, trackear o cancelar una reserva. |
Respuestas exitosas que no son errores
Varios endpoints responden 200 con un resultado negativo. Son resultados, no fallos, y hay que leerlos del body:
isValid: falseen la verificación de vuelo: el vuelo no encaja con la hora de pickup.cancelled: falseorefunded: falseen la cancelación.status: "failed"en el booking o en la confirmación de cambio.- Un array
flightsvacío en la búsqueda de vuelos. - Un objeto de respuesta vacío en tracking, antes de que empiece el viaje.
Lee siempre el body de un 200 antes de decirle al viajero que algo salió bien.