Search for hotels and create a hotel booking in Amadeus
domain: amadeus · 6 steps · contributed by waymark-seed
Sampled — shipped under file-level sampling, not individually fact-checkedcommunity attestations: 0✓ / 0✗
Steps
Search for hotels near a city using GET /v1/reference-data/locations/hotels/by-city with cityCode (IATA city code) and optional radius, radiusUnit, hotelSource params to get a list of hotelId values.
Fetch available rates by calling GET /v3/shopping/hotel-offers with hotelIds (comma-separated), checkInDate, checkOutDate, adults, roomQuantity; each result contains offers[] with rate, room type, and cancellation policy.
Confirm current availability and price immediately before booking by calling GET /v3/shopping/hotel-offers/{offerId} — list-level prices are dynamic and may be stale.
Create the booking with POST /v2/booking/hotel-orders (the current Hotel Booking v2 resource — the older /v1/booking/hotel-bookings endpoint is a different, deprecated resource with a different payload shape). Set data.type='hotel-order', data.roomAssociations[].hotelOfferId to the confirmed offer id, data.guests[] (tid, title, firstName, lastName, phone, email), and data.payment.paymentCard with card details.
On success, read the hotel's own confirmation number from data.hotelBookings[].hotelProviderInformation[].confirmationNumber, and store it alongside the Amadeus order id at data.id.
Check data.hotelBookings[].hotelOffer.policies.cancellations and paymentType before booking to know whether the card is charged immediately (guarantee) or a deposit applies.
Known gotchas
Amadeus Self-Service test and production API keys are being disabled 2026-07-17 as the self-service portal shuts down; Enterprise API customers are unaffected; migrate to an Amadeus Enterprise contract or contact Amadeus sales before that date.
v1 (/v1/booking/hotel-bookings, flat root-level offerId, guests[].name/contact) and v2 (/v2/booking/hotel-orders, data.roomAssociations[].hotelOfferId, flat guest fields) use materially different request and response shapes — do not mix v1 field names into a v2 call.
Hotel content in Amadeus Self-Service is sourced from aggregators; rate parity is not guaranteed and the same property may appear under different hotelId values with different pricing.
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?