Skip to content

Flights

The flights domain wraps four provider adapters (Amadeus, Duffel, Dohop, Darwin) behind a normalized surface. Partners run their own provider search and submit the offer struct to Movmo as the booking entry point. The offer lifecycle is consistent across providers.

  • Booking flow starts at POST /v1/flights/providers/{provider}/offers — accepts a provider-native offer struct, returns a Movmo offer_id. API-key-only, so it can fire before the user authenticates.
  • idempotency_key required on POST .../bookings. Replay the same key on retry; Movmo deduplicates.
  • Ownership enforced on booking GET. Read via /v1/users/{userid}/bookings/....
  • Pricing is a separate step for Amadeus only (POST .../offers/{offer_id}/pricing); Duffel, Darwin, and Dohop integrate pricing into the booking step. Check getProviderCapabilities at runtime to be safe.
  • Seat maps are capability-gated by supports_seat_selection.

Provider catalog and offer lifecycle (selected — see the spec for the full list):

OperationPath
listProvidersGET /v1/flights/providers
getProviderCapabilitiesGET /v1/flights/providers/{provider}/capabilities
createProviderOfferPOST /v1/flights/providers/{provider}/offers
getProviderOfferGET /v1/flights/providers/{provider}/offers/{offer_id}
priceProviderOfferPOST /v1/flights/providers/{provider}/offers/{offer_id}/pricing
saveOfferPassengersPOST .../offers/{offer_id}/passengers
updateOfferPassengerPUT .../offers/{offer_id}/passengers/{passenger_id}
getOfferSeatMapsGET .../offers/{offer_id}/seat-maps
createProviderBookingPOST /v1/flights/providers/{provider}/bookings
retryProviderBookingPOST /v1/flights/providers/{provider}/bookings/retry
getProviderBookingGET /v1/flights/providers/{provider}/bookings/{booking_id}
cancelProviderBookingDELETE /v1/flights/providers/{provider}/bookings/{booking_id}

User-bookings sub-resource:

OperationPath
listUserBookingsGET /v1/users/{userid}/bookings
getUserBookingGET /v1/users/{userid}/bookings/{bookingid}
getUserBookingPassengersGET /v1/users/{userid}/bookings/{bookingid}/passengers
getUserBookingOfferGET /v1/users/{userid}/bookings/{bookingid}/offer

Full schemas in the OpenAPI spec under tags: [Flights].

Model Context Protocol (MCP) wrappers for this domain:

ToolMaps to
search_flightsDarwin search proxy
create_offerDarwin hold + POST /v1/flights/providers/darwin/offers
get_offer_detailsGET /v1/flights/providers/{provider}/offers/{offer_id}
get_seat_mapCapability check + GET .../offers/{offer_id}/seat-maps
update_passengerPUT .../offers/{offer_id}/passengers/{passenger_id}
create_bookingInternal user/offer/payment lookup + POST .../bookings
get_bookingGET /v1/flights/providers/{provider}/bookings/{booking_id}

search_flights and create_offer invoke Darwin only. For other providers via MCP, drive your own search, submit the offer to REST createProviderOffer, then continue with get_offer_details, update_passenger, and create_booking.

  • The duplicate /v1/flights/users/{userid}/bookings* path is deprecated and omitted from the partner surface. Always read user bookings from /v1/users/{userid}/bookings.
  • PUT /v1/flights/providers/{provider}/bookings/{booking_id} is a stub in the codebase and intentionally absent from the spec. Use cancel-and-rebook.
  • The /v1/darwin/* and Dohop air-shopping proxies are internal.