After creating an offer request and selecting an offer, call GET /air/offers/{offer_id} and inspect the available_services array for services of type 'baggage' and 'meal'.
For baggage services, read the metadata fields for total_weight_kg and quantity to present meaningful descriptions; for meals, read the meal_code or description field.
Build a services array mapping each service_id to the relevant passenger_id and segment_id; include this in the order creation POST body under the services key.
Confirm the ancillaries were accepted by inspecting the services array on the created order response; each entry should include a confirmed_at timestamp.
For post-booking ancillary additions (where the airline supports it), call POST /air/orders/{id}/services with the additional service objects.
Surface the itemized ancillary costs in your booking summary UI, clearly separated from the base fare.
Known gotchas
Not all ancillaries are available for post-booking addition; check the airline's capability flags returned by Duffel before offering post-booking upsell.
Meal codes are airline-specific (e.g., VGML for vegetarian) and must be stored correctly — presenting a wrong meal type to the passenger causes service failures.
Baggage allowances already included in the fare are not reflected in available_services; always separately retrieve the included baggage from the offer's conditions.bags_included field.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp