Endpoints
Referencia
Endpoints
Referencia de cada endpoint de la API v1 de Muvon: parámetros, respuestas y ejemplos en curl y Node.
Todas las rutas cuelgan de https://api.muvon.mx/api/v1. Los ejemplos usan la variable MUVON_API_KEY y Node 18 o más nuevo (fetch incluido).
General
Probar tu llave
/api/v1/pingConfirma que la llave funciona y en qué modo estás. No cambia nada.
Sin parámetros.
Petición
curl "https://api.muvon.mx/api/v1/ping" \
-H "Authorization: Bearer $MUVON_API_KEY"{
"object": "ping",
"livemode": false,
"partner": {
"id": "p_4c1d9a",
"code": "VIAJESSOL",
"name": "Viajes Sol"
}
}Tu cuenta y el modo.
Errores frecuentes
Documento OpenAPI
/api/v1/openapi.jsonEsta referencia en OpenAPI 3.1, pública y sin llave. Úsala para generar clientes o importarla en Postman.
Pública, sin llave.
Sin parámetros.
Petición
curl "https://api.muvon.mx/api/v1/openapi.json"{
"openapi": "3.1.0",
"info": {
"title": "Muvon Reseller API",
"version": "1.0.0"
}
}El documento.
Catálogo
Tipos de vehículo
/api/v1/vehicle-typesLos tipos de vehículo que se pueden cotizar, con cupo y anticipación mínima.
Sin parámetros.
Petición
curl "https://api.muvon.mx/api/v1/vehicle-types" \
-H "Authorization: Bearer $MUVON_API_KEY"{
"data": [
{
"id": "vt_sedan",
"object": "vehicle_type",
"name_es": "Sedán / SUV / Tesla",
"name_en": "Sedan / SUV / Tesla",
"min_passengers": 1,
"max_passengers": 3,
"max_bags": 3,
"min_notice_hours": 30
},
{
"id": "vt_van",
"object": "vehicle_type",
"name_es": "Van",
"name_en": "Van",
"min_passengers": 1,
"max_passengers": 12,
"max_bags": 12,
"min_notice_hours": 30
},
{
"id": "vt_sprinter",
"object": "vehicle_type",
"name_es": "Sprinter",
"name_en": "Sprinter",
"min_passengers": 11,
"max_passengers": 19,
"max_bags": 19,
"min_notice_hours": 48
}
]
}Lista completa (sin paginar).
Errores frecuentes
Lugares
/api/v1/placesAeropuertos, hoteles y otros puntos conocidos. Usar su id da el precio más exacto.
Sin parámetros.
Petición
curl "https://api.muvon.mx/api/v1/places" \
-H "Authorization: Bearer $MUVON_API_KEY"{
"data": [
{
"id": "pl_cun",
"object": "place",
"name": "Cancun Airport (CUN)",
"kind": "airport",
"iata_code": "CUN",
"address": null,
"lat": 21.0365,
"lng": -86.8771
},
{
"id": "pl_hotel52",
"object": "place",
"name": "Hotel 52 Playa del Carmen",
"kind": "hotel",
"iata_code": null,
"address": "Calle 52 Norte, Playa del Carmen",
"lat": 20.6421,
"lng": -87.0638
}
]
}Lista completa (sin paginar). Guárdala en caché unas horas.
Errores frecuentes
Extras
/api/v1/extrasExtras que puedes agregar a un traslado: sillas para bebé, mascotas y más.
Sin parámetros.
Petición
curl "https://api.muvon.mx/api/v1/extras" \
-H "Authorization: Bearer $MUVON_API_KEY"{
"data": [
{
"code": "BABY_SEAT",
"object": "extra",
"name_es": "Silla para bebé",
"name_en": "Baby seat",
"price_cents": 1000,
"currency": "USD",
"per_unit": true
},
{
"code": "BOOSTER_SEAT",
"object": "extra",
"name_es": "Asiento elevador",
"name_en": "Booster seat",
"price_cents": 1000,
"currency": "USD",
"per_unit": true
}
]
}Lista completa (sin paginar).
Errores frecuentes
Cotizaciones
Cotizar
/api/v1/quotesCalcula el precio público y tu comisión para cada tipo de vehículo que cabe. La cotización guarda el precio: al reservar no se vuelve a calcular.
Cuerpo (JSON)
service_typestringOpcional: Muvon lo deduce de los lugares (aeropuerto o no). Manda hourly (o solo hours) para un auto por horas, sin dropoff.
Valores: airport_pickup, airport_dropoff, point_to_point, hourly
pickup_atstring (date-time)obligatorioFecha y hora de recogida en ISO 8601 con zona horaria (Cancún es -05:00). Mínimo 30 h desde ahora, o más si el vehículo lo pide.
pickupobjectobligatorioDónde se recoge: place_id, o address + lat + lng.
pickup.place_idstringId de un lugar de GET /places (aeropuerto, hotel). Es la forma más exacta.
pickup.addressstringDirección, si no hay place_id. Va con lat y lng.
pickup.latnumberLatitud de la dirección.
pickup.lngnumberLongitud de la dirección.
dropoffobjectDestino, con la misma forma que pickup. Obligatorio salvo en hourly.
dropoff.place_idstringId de un lugar de GET /places (aeropuerto, hotel). Es la forma más exacta.
dropoff.addressstringDirección, si no hay place_id. Va con lat y lng.
dropoff.latnumberLatitud de la dirección.
dropoff.lngnumberLongitud de la dirección.
hoursintegerSolo en hourly: de 1 a 12.
passengersobjectobligatorioCuántas personas viajan.
passengers.adultsintegerobligatorioAdultos, mínimo 1.
passengers.childrenintegerNiñas y niños. Cuentan para el cupo del vehículo.
bagsintegerMaletas. No puede pasar del máximo del vehículo.
languagestringIdioma de los nombres de vehículos y extras en la respuesta. en por omisión.
Valores: es, en
vehicle_type_idstringOpcional: cotiza solo ese tipo de vehículo. Si no lo mandas, regresan todos los que caben.
extrasobject[]Extras de GET /extras.
extras[].codestringobligatorioCódigo del extra.
extras[].quantityintegerCantidad, 1 por omisión.
Petición
curl -X POST "https://api.muvon.mx/api/v1/quotes" \
-H "Authorization: Bearer $MUVON_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"service_type": "airport_pickup",
"pickup_at": "2026-12-20T14:30:00-05:00",
"pickup": {
"place_id": "pl_cun"
},
"dropoff": {
"place_id": "pl_hotel52"
},
"passengers": {
"adults": 2,
"children": 1
},
"bags": 3,
"extras": [
{
"code": "BOOSTER_SEAT",
"quantity": 1
}
]
}'{
"id": "qt_8f3a1c9e2b7d4f60",
"object": "quote",
"livemode": false,
"expires_at": "2026-11-14T18:40:00-05:00",
"currency": "USD",
"request": {
"service_type": "airport_pickup",
"pickup_at": "2026-12-20T14:30:00-05:00",
"pickup": {
"place_id": "pl_cun",
"name": "Cancun Airport (CUN)",
"address": null
},
"dropoff": {
"place_id": "pl_hotel52",
"name": "Hotel 52 Playa del Carmen",
"address": null
},
"hours": null,
"passengers": {
"adults": 2,
"children": 1
},
"bags": 3,
"extras": [
{
"code": "BOOSTER_SEAT",
"quantity": 1
}
]
},
"options": [
{
"vehicle_type_id": "vt_sedan",
"name": "Sedan / SUV / Tesla",
"max_passengers": 3,
"max_bags": 3,
"price_cents": 9500,
"commission_cents": 950,
"km": 54.2
},
{
"vehicle_type_id": "vt_van",
"name": "Van",
"max_passengers": 12,
"max_bags": 12,
"price_cents": 13000,
"commission_cents": 1300,
"km": 54.2
}
]
}La cotización.
Reservas
Reservar
/api/v1/bookingsReserva una opción de una cotización. Queda en new y unpaid, con una payment_url para tu cliente y un apartado de 2 horas.
Requiere Idempotency-Key.
Cuerpo (JSON)
quote_idstringobligatorioCotización vigente de POST /quotes. Cada cotización se reserva una sola vez.
vehicle_type_idstringobligatorioUna de las options de la cotización.
passengerobjectobligatorioQuién viaja. Muvon le escribe a este correo y teléfono sobre su viaje.
passenger.first_namestringobligatorioNombre.
passenger.last_namestringobligatorioApellido.
passenger.emailstring (email)obligatorioCorreo.
passenger.phonestringobligatorioTeléfono con lada internacional, como +5215512345678.
passenger.languagestringIdioma del pasajero y de la página de pago. en por omisión.
Valores: es, en
flight_numberstringVuelo. Pídelo siempre en llegadas al aeropuerto: así el piloto sigue los retrasos.
roomstringHabitación o villa, si aplica.
notesstringNotas para el equipo de Muvon.
external_refstringTu propia referencia (orden, carrito). Regresa en la reserva y en los webhooks.
return_urlstring (uri)Opcional, https. A dónde va tu cliente después de pagar.
Petición
curl -X POST "https://api.muvon.mx/api/v1/bookings" \
-H "Authorization: Bearer $MUVON_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"quote_id": "qt_8f3a1c9e2b7d4f60",
"vehicle_type_id": "vt_sedan",
"passenger": {
"first_name": "Ana",
"last_name": "García",
"email": "ana@example.com",
"phone": "+5215512345678",
"language": "es"
},
"flight_number": "AA1234",
"notes": "Viajamos con una carriola",
"external_ref": "ORDER-5521",
"return_url": "https://www.example.com/orders/5521"
}'{
"id": "bk_5d2e8a41c07f4b9e",
"object": "booking",
"kind": "transfer",
"code": "TEST-000001",
"livemode": false,
"status": "new",
"payment_status": "unpaid",
"payment_url": "https://api.muvon.mx/pay/r/3c9f0b7e6a5d4c2b1a09f8e7d6c5b4a3",
"hold_expires_at": "2026-11-14T20:10:00-05:00",
"external_ref": "ORDER-5521",
"service_type": "airport_pickup",
"pickup_at": "2026-12-20T14:30:00-05:00",
"pickup": {
"place_id": "pl_cun",
"name": "Cancun Airport (CUN)",
"address": null
},
"dropoff": {
"place_id": "pl_hotel52",
"name": "Hotel 52 Playa del Carmen",
"address": null
},
"hours": null,
"vehicle_type_id": "vt_sedan",
"passengers": {
"adults": 2,
"children": 1
},
"bags": 3,
"extras": [
{
"code": "BOOSTER_SEAT",
"quantity": 1,
"price_cents": 1000
}
],
"flight_number": "AA1234",
"room": null,
"notes": "Viajamos con una carriola",
"passenger": {
"first_name": "Ana",
"last_name": "García",
"email": "ana@example.com",
"phone": "+5215512345678",
"language": "es"
},
"price_cents": 9500,
"currency": "USD",
"commission_cents": 950,
"tracking_url": "https://api.muvon.mx/track?t=a1b2c3d4e5f6",
"cancel_reason": null,
"created_at": "2026-11-14T18:10:00-05:00",
"updated_at": "2026-11-14T18:10:00-05:00"
}La reserva. Con la misma Idempotency-Key y el mismo cuerpo regresa la misma respuesta.
Listar reservas
/api/v1/bookingsTus reservas del modo de la llave, de la más nueva a la más vieja.
Parámetros de consulta
limitintegerCuántos regresar, de 1 a 100. 20 por omisión.
starting_afterstringId del último elemento de la página anterior.
statusstringSolo ese estado.
Valores: new, assigned, confirmed, on_the_way, arrived, on_board, dropped_off, completed, no_show, cancelled
fromstring (date-time)Recogidas desde esta fecha.
tostring (date-time)Recogidas hasta esta fecha.
Petición
curl "https://api.muvon.mx/api/v1/bookings?limit=20&status=confirmed" \
-H "Authorization: Bearer $MUVON_API_KEY"{
"data": [
{
"id": "bk_5d2e8a41c07f4b9e",
"object": "booking",
"kind": "transfer",
"code": "TEST-000001",
"livemode": false,
"status": "new",
"payment_status": "unpaid",
"payment_url": "https://api.muvon.mx/pay/r/3c9f0b7e6a5d4c2b1a09f8e7d6c5b4a3",
"hold_expires_at": "2026-11-14T20:10:00-05:00",
"external_ref": "ORDER-5521",
"service_type": "airport_pickup",
"pickup_at": "2026-12-20T14:30:00-05:00",
"pickup": {
"place_id": "pl_cun",
"name": "Cancun Airport (CUN)",
"address": null
},
"dropoff": {
"place_id": "pl_hotel52",
"name": "Hotel 52 Playa del Carmen",
"address": null
},
"hours": null,
"vehicle_type_id": "vt_sedan",
"passengers": {
"adults": 2,
"children": 1
},
"bags": 3,
"extras": [
{
"code": "BOOSTER_SEAT",
"quantity": 1,
"price_cents": 1000
}
],
"flight_number": "AA1234",
"room": null,
"notes": "Viajamos con una carriola",
"passenger": {
"first_name": "Ana",
"last_name": "García",
"email": "ana@example.com",
"phone": "+5215512345678",
"language": "es"
},
"price_cents": 9500,
"currency": "USD",
"commission_cents": 950,
"tracking_url": "https://api.muvon.mx/track?t=a1b2c3d4e5f6",
"cancel_reason": null,
"created_at": "2026-11-14T18:10:00-05:00",
"updated_at": "2026-11-14T18:10:00-05:00"
}
],
"has_more": false
}Una página. Ve Paginación.
Errores frecuentes
Consultar una reserva
/api/v1/bookings/{ref}El estado actual de una reserva, por id o por code.
Parámetros de ruta
refstringobligatorioid o code de la reserva.
Petición
curl "https://api.muvon.mx/api/v1/bookings/TEST-000001" \
-H "Authorization: Bearer $MUVON_API_KEY"{
"id": "bk_5d2e8a41c07f4b9e",
"object": "booking",
"kind": "transfer",
"code": "TEST-000001",
"livemode": false,
"status": "new",
"payment_status": "unpaid",
"payment_url": "https://api.muvon.mx/pay/r/3c9f0b7e6a5d4c2b1a09f8e7d6c5b4a3",
"hold_expires_at": "2026-11-14T20:10:00-05:00",
"external_ref": "ORDER-5521",
"service_type": "airport_pickup",
"pickup_at": "2026-12-20T14:30:00-05:00",
"pickup": {
"place_id": "pl_cun",
"name": "Cancun Airport (CUN)",
"address": null
},
"dropoff": {
"place_id": "pl_hotel52",
"name": "Hotel 52 Playa del Carmen",
"address": null
},
"hours": null,
"vehicle_type_id": "vt_sedan",
"passengers": {
"adults": 2,
"children": 1
},
"bags": 3,
"extras": [
{
"code": "BOOSTER_SEAT",
"quantity": 1,
"price_cents": 1000
}
],
"flight_number": "AA1234",
"room": null,
"notes": "Viajamos con una carriola",
"passenger": {
"first_name": "Ana",
"last_name": "García",
"email": "ana@example.com",
"phone": "+5215512345678",
"language": "es"
},
"price_cents": 9500,
"currency": "USD",
"commission_cents": 950,
"tracking_url": "https://api.muvon.mx/track?t=a1b2c3d4e5f6",
"cancel_reason": null,
"created_at": "2026-11-14T18:10:00-05:00",
"updated_at": "2026-11-14T18:10:00-05:00"
}La reserva.
Errores frecuentes
Cancelar una reserva
/api/v1/bookings/{ref}/cancelCancela hasta 24 h antes de la recogida, mientras el estado sea new, assigned o confirmed. La API nunca reembolsa: si ya estaba pagada, el equipo de Muvon hace el reembolso.
Parámetros de ruta
refstringobligatorioid o code de la reserva.
Cuerpo (JSON)
reasonstringMotivo, queda en cancel_reason.
Petición
curl -X POST "https://api.muvon.mx/api/v1/bookings/TEST-000001/cancel" \
-H "Authorization: Bearer $MUVON_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"reason": "Customer changed plans"
}'{
"id": "bk_5d2e8a41c07f4b9e",
"object": "booking",
"kind": "transfer",
"code": "TEST-000001",
"livemode": false,
"status": "cancelled",
"payment_status": "unpaid",
"payment_url": "https://api.muvon.mx/pay/r/3c9f0b7e6a5d4c2b1a09f8e7d6c5b4a3",
"hold_expires_at": null,
"external_ref": "ORDER-5521",
"service_type": "airport_pickup",
"pickup_at": "2026-12-20T14:30:00-05:00",
"pickup": {
"place_id": "pl_cun",
"name": "Cancun Airport (CUN)",
"address": null
},
"dropoff": {
"place_id": "pl_hotel52",
"name": "Hotel 52 Playa del Carmen",
"address": null
},
"hours": null,
"vehicle_type_id": "vt_sedan",
"passengers": {
"adults": 2,
"children": 1
},
"bags": 3,
"extras": [
{
"code": "BOOSTER_SEAT",
"quantity": 1,
"price_cents": 1000
}
],
"flight_number": "AA1234",
"room": null,
"notes": "Viajamos con una carriola",
"passenger": {
"first_name": "Ana",
"last_name": "García",
"email": "ana@example.com",
"phone": "+5215512345678",
"language": "es"
},
"price_cents": 9500,
"currency": "USD",
"commission_cents": 950,
"tracking_url": "https://api.muvon.mx/track?t=a1b2c3d4e5f6",
"cancel_reason": "Customer changed plans",
"created_at": "2026-11-14T18:10:00-05:00",
"updated_at": "2026-11-15T09:02:13-05:00",
"refund": "manual"
}La reserva cancelada. Si ya estaba pagada trae refund: "manual".
Errores frecuentes
Eventos
Listar eventos
/api/v1/eventsLos mismos eventos que mandan los webhooks, del más nuevo al más viejo. Sirve para recuperar lo que tu servidor no recibió.
Parámetros de consulta
limitintegerCuántos regresar, de 1 a 100. 20 por omisión.
starting_afterstringId del último elemento de la página anterior.
typestringSolo ese tipo.
Valores: booking.created, booking.paid, booking.assigned, booking.confirmed, booking.on_the_way, booking.arrived, booking.on_board, booking.dropped_off, booking.completed, booking.no_show, booking.cancelled, ping
Petición
curl "https://api.muvon.mx/api/v1/events?type=booking.paid&limit=50" \
-H "Authorization: Bearer $MUVON_API_KEY"{
"data": [
{
"id": "evt_0a9b8c7d6e5f4a3b",
"object": "event",
"type": "booking.paid",
"created": "2026-11-14T18:22:41-05:00",
"livemode": false,
"data": {
"object": {
"id": "bk_5d2e8a41c07f4b9e",
"object": "booking",
"kind": "transfer",
"code": "TEST-000001",
"livemode": false,
"status": "new",
"payment_status": "paid",
"payment_url": "https://api.muvon.mx/pay/r/3c9f0b7e6a5d4c2b1a09f8e7d6c5b4a3",
"hold_expires_at": null,
"external_ref": "ORDER-5521",
"service_type": "airport_pickup",
"pickup_at": "2026-12-20T14:30:00-05:00",
"pickup": {
"place_id": "pl_cun",
"name": "Cancun Airport (CUN)",
"address": null
},
"dropoff": {
"place_id": "pl_hotel52",
"name": "Hotel 52 Playa del Carmen",
"address": null
},
"hours": null,
"vehicle_type_id": "vt_sedan",
"passengers": {
"adults": 2,
"children": 1
},
"bags": 3,
"extras": [
{
"code": "BOOSTER_SEAT",
"quantity": 1,
"price_cents": 1000
}
],
"flight_number": "AA1234",
"room": null,
"notes": "Viajamos con una carriola",
"passenger": {
"first_name": "Ana",
"last_name": "García",
"email": "ana@example.com",
"phone": "+5215512345678",
"language": "es"
},
"price_cents": 9500,
"currency": "USD",
"commission_cents": 950,
"tracking_url": "https://api.muvon.mx/track?t=a1b2c3d4e5f6",
"cancel_reason": null,
"created_at": "2026-11-14T18:10:00-05:00",
"updated_at": "2026-11-14T18:22:41-05:00"
}
}
}
],
"has_more": false
}Una página.
Errores frecuentes
Sandbox
Simular el pago
/api/v1/test/bookings/{ref}/paySolo prueba: marca pagada una reserva sin pasar por Stripe y manda booking.paid.
Solo con llave de prueba.
Parámetros de ruta
refstringobligatorioid o code de la reserva.
Petición
curl -X POST "https://api.muvon.mx/api/v1/test/bookings/TEST-000001/pay" \
-H "Authorization: Bearer $MUVON_API_KEY"{
"id": "bk_5d2e8a41c07f4b9e",
"object": "booking",
"kind": "transfer",
"code": "TEST-000001",
"livemode": false,
"status": "new",
"payment_status": "paid",
"payment_url": "https://api.muvon.mx/pay/r/3c9f0b7e6a5d4c2b1a09f8e7d6c5b4a3",
"hold_expires_at": null,
"external_ref": "ORDER-5521",
"service_type": "airport_pickup",
"pickup_at": "2026-12-20T14:30:00-05:00",
"pickup": {
"place_id": "pl_cun",
"name": "Cancun Airport (CUN)",
"address": null
},
"dropoff": {
"place_id": "pl_hotel52",
"name": "Hotel 52 Playa del Carmen",
"address": null
},
"hours": null,
"vehicle_type_id": "vt_sedan",
"passengers": {
"adults": 2,
"children": 1
},
"bags": 3,
"extras": [
{
"code": "BOOSTER_SEAT",
"quantity": 1,
"price_cents": 1000
}
],
"flight_number": "AA1234",
"room": null,
"notes": "Viajamos con una carriola",
"passenger": {
"first_name": "Ana",
"last_name": "García",
"email": "ana@example.com",
"phone": "+5215512345678",
"language": "es"
},
"price_cents": 9500,
"currency": "USD",
"commission_cents": 950,
"tracking_url": "https://api.muvon.mx/track?t=a1b2c3d4e5f6",
"cancel_reason": null,
"created_at": "2026-11-14T18:10:00-05:00",
"updated_at": "2026-11-14T18:22:41-05:00"
}La reserva pagada.
Errores frecuentes
Simular un estado
/api/v1/test/bookings/{ref}/statusSolo prueba: mueve la reserva al siguiente estado del viaje y manda su evento.
Solo con llave de prueba.
Parámetros de ruta
refstringobligatorioid o code de la reserva.
Cuerpo (JSON)
statusstringobligatorioEstado nuevo. Ve el orden en Sandbox.
Valores: assigned, confirmed, on_the_way, arrived, on_board, dropped_off, completed, no_show, cancelled
Petición
curl -X POST "https://api.muvon.mx/api/v1/test/bookings/TEST-000001/status" \
-H "Authorization: Bearer $MUVON_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "assigned"
}'{
"id": "bk_5d2e8a41c07f4b9e",
"object": "booking",
"kind": "transfer",
"code": "TEST-000001",
"livemode": false,
"status": "assigned",
"payment_status": "paid",
"payment_url": "https://api.muvon.mx/pay/r/3c9f0b7e6a5d4c2b1a09f8e7d6c5b4a3",
"hold_expires_at": null,
"external_ref": "ORDER-5521",
"service_type": "airport_pickup",
"pickup_at": "2026-12-20T14:30:00-05:00",
"pickup": {
"place_id": "pl_cun",
"name": "Cancun Airport (CUN)",
"address": null
},
"dropoff": {
"place_id": "pl_hotel52",
"name": "Hotel 52 Playa del Carmen",
"address": null
},
"hours": null,
"vehicle_type_id": "vt_sedan",
"passengers": {
"adults": 2,
"children": 1
},
"bags": 3,
"extras": [
{
"code": "BOOSTER_SEAT",
"quantity": 1,
"price_cents": 1000
}
],
"flight_number": "AA1234",
"room": null,
"notes": "Viajamos con una carriola",
"passenger": {
"first_name": "Ana",
"last_name": "García",
"email": "ana@example.com",
"phone": "+5215512345678",
"language": "es"
},
"price_cents": 9500,
"currency": "USD",
"commission_cents": 950,
"tracking_url": "https://api.muvon.mx/track?t=a1b2c3d4e5f6",
"cancel_reason": null,
"created_at": "2026-11-14T18:10:00-05:00",
"updated_at": "2026-11-14T18:22:41-05:00"
}La reserva con el estado nuevo.

