Endpoints
Reference
Endpoints
Reference for every Muvon API v1 endpoint: parameters, responses and curl and Node examples.
Every path hangs off https://api.muvon.mx/api/v1. Examples use the MUVON_API_KEY variable and Node 18 or newer (built-in fetch).
General
Check your key
/api/v1/pingConfirms the key works and which mode you're in. Changes nothing.
No parameters.
Request
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"
}
}Your account and mode.
Common errors
OpenAPI document
/api/v1/openapi.jsonThis reference as OpenAPI 3.1, public and keyless. Use it to generate clients or import it into Postman.
Public, no key.
No parameters.
Request
curl "https://api.muvon.mx/api/v1/openapi.json"{
"openapi": "3.1.0",
"info": {
"title": "Muvon Reseller API",
"version": "1.0.0"
}
}The document.
Catalogue
Vehicle types
/api/v1/vehicle-typesVehicle types you can quote, with capacity and minimum notice.
No parameters.
Request
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
}
]
}Full list (not paginated).
Common errors
Places
/api/v1/placesAirports, hotels and other known points. Using their id gives the most precise price.
No parameters.
Request
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
}
]
}Full list (not paginated). Cache it for a few hours.
Common errors
Extras
/api/v1/extrasExtras you can add to a transfer: baby seats, pets and more.
No parameters.
Request
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
}
]
}Full list (not paginated).
Common errors
Quotes
Create a quote
/api/v1/quotesWorks out the public price and your commission for every vehicle type that fits. The quote locks the price: booking doesn't recalculate it.
Body (JSON)
service_typestringOptional: Muvon works it out from the places (airport or not). Send hourly (or just hours) for a car by the hour, with no dropoff.
Values: airport_pickup, airport_dropoff, point_to_point, hourly
pickup_atstring (date-time)requiredPickup date and time in ISO 8601 with offset (Cancun is -05:00). At least 30 h from now, or more if the vehicle asks for it.
pickupobjectrequiredWhere the pickup is: place_id, or address + lat + lng.
pickup.place_idstringId of a place from GET /places (airport, hotel). The most precise option.
pickup.addressstringAddress, when there's no place_id. Goes with lat and lng.
pickup.latnumberLatitude of the address.
pickup.lngnumberLongitude of the address.
dropoffobjectDestination, same shape as pickup. Required except for hourly.
dropoff.place_idstringId of a place from GET /places (airport, hotel). The most precise option.
dropoff.addressstringAddress, when there's no place_id. Goes with lat and lng.
dropoff.latnumberLatitude of the address.
dropoff.lngnumberLongitude of the address.
hoursintegerOnly for hourly: 1 to 12.
passengersobjectrequiredHow many people travel.
passengers.adultsintegerrequiredAdults, at least 1.
passengers.childrenintegerChildren. They count toward the vehicle's capacity.
bagsintegerBags. Can't exceed the vehicle's maximum.
languagestringLanguage of the vehicle and extra names in the response. en by default.
Values: es, en
vehicle_type_idstringOptional: quote only that vehicle type. Without it you get every type that fits.
extrasobject[]Extras from GET /extras.
extras[].codestringrequiredExtra code.
extras[].quantityintegerQuantity, 1 by default.
Request
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
}
]
}The quote.
Bookings
Create a booking
/api/v1/bookingsBooks one option of a quote. It starts as new and unpaid, with a payment_url for your customer and a 2-hour hold.
Requires Idempotency-Key.
Body (JSON)
quote_idstringrequiredUnexpired quote from POST /quotes. Each quote books once.
vehicle_type_idstringrequiredOne of the quote's options.
passengerobjectrequiredWho travels. Muvon contacts this email and phone about the ride.
passenger.first_namestringrequiredFirst name.
passenger.last_namestringrequiredLast name.
passenger.emailstring (email)requiredEmail.
passenger.phonestringrequiredPhone with country code, like +15551234567.
passenger.languagestringPassenger's language, also used on the payment page. en by default.
Values: es, en
flight_numberstringFlight. Always ask for it on airport arrivals: the pilot follows delays with it.
roomstringRoom or villa, if any.
notesstringNotes for the Muvon team.
external_refstringYour own reference (order, cart). Comes back on the booking and in webhooks.
return_urlstring (uri)Optional, https. Where your customer goes after paying.
Request
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"
}The booking. The same Idempotency-Key and body returns the same response.
List bookings
/api/v1/bookingsYour bookings in the key's mode, newest first.
Query parameters
limitintegerHow many to return, 1 to 100. 20 by default.
starting_afterstringId of the last item of the previous page.
statusstringOnly that status.
Values: new, assigned, confirmed, on_the_way, arrived, on_board, dropped_off, completed, no_show, cancelled
fromstring (date-time)Pickups from this date.
tostring (date-time)Pickups up to this date.
Request
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
}One page. See Pagination.
Retrieve a booking
/api/v1/bookings/{ref}A booking's current state, by id or code.
Path parameters
refstringrequiredBooking id or code.
Request
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"
}The booking.
Common errors
Cancel a booking
/api/v1/bookings/{ref}/cancelCancels up to 24 h before pickup, while the status is new, assigned or confirmed. The API never refunds: if it was paid, the Muvon team handles the refund.
Path parameters
refstringrequiredBooking id or code.
Body (JSON)
reasonstringReason, saved in cancel_reason.
Request
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"
}The cancelled booking. If it was paid it carries refund: "manual".
Events
List events
/api/v1/eventsThe same events webhooks send, newest first. Use it to catch up on anything your server missed.
Query parameters
limitintegerHow many to return, 1 to 100. 20 by default.
starting_afterstringId of the last item of the previous page.
typestringOnly that type.
Values: 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
Request
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
}One page.
Common errors
Sandbox
Simulate payment
/api/v1/test/bookings/{ref}/payTest only: marks a booking paid without Stripe and sends booking.paid.
Test key only.
Path parameters
refstringrequiredBooking id or code.
Request
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"
}The paid booking.
Simulate a status
/api/v1/test/bookings/{ref}/statusTest only: moves the booking to the next ride status and sends its event.
Test key only.
Path parameters
refstringrequiredBooking id or code.
Body (JSON)
statusstringrequiredNew status. See the order in Sandbox.
Values: assigned, confirmed, on_the_way, arrived, on_board, dropped_off, completed, no_show, cancelled
Request
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"
}The booking with its new status.

