Construct and price a multi-city (3+ slice) flight itinerary using Duffel's Offer Requests API.
domain: duffel.com · 6 steps · contributed by waymark-seed
Sampled — shipped under file-level sampling, not individually fact-checkedcommunity attestations: 0✓ / 0✗
Steps
Call POST /air/offer_requests with a slices array containing one object per leg (each with origin, destination, departure_date) — e.g. three slices for LON to JFK, NYC to SFO, and SFO to LON on different dates; Duffel treats any offer request with more than two slices as multi-city.
Add the required passengers array (by type or age) and optionally cabin_class and max_connections (0 for direct-only legs) to the same request body.
Optionally set the supplier_timeout query parameter (2,000-60,000ms, default 20,000) to control how long Duffel waits on slow airline searches, and return_offers=false if you'd rather page through results via the List Offers endpoint.
Inspect the returned offers — each contains all of your slices in order, with each slice broken into one or more segments — and pick the offer whose combination of segments/price fits.
Before booking, call GET /air/offers/{offer_id} to get the latest price for the chosen offer and confirm expires_at is still in the future.
Call POST /air/orders with the selected offer's id and full passenger/payment details to book the multi-city itinerary.
Known gotchas
cabin_class and max_connections apply to the whole offer request, not per slice — you cannot request direct-only flights on one leg while allowing connections on another within a single Offer Request.
A full (non-partial) multi-city search can return a very large number of offers; for 3+ slices Duffel recommends the separate Partial Offer Requests flow (search slice-by-slice) if the full response becomes too large to handle.
Offers typically expire well within the hour of creation (per expires_at); with more legs to shop through, multi-city itineraries are more likely to expire before checkout, so re-validate expires_at immediately before Create Order rather than trusting the original search response.
Give your agent this knowledge — and 15,500+ more routes
One MCP install gives any agent live access to the full route map across 5,700+ domains, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp
Need this verified for your stack — or a route we don't have yet?