{"slug": "amadeus-self-service-shut-down-on-july-17-here-s-a-drop-in-replacement-for", "title": "Amadeus Self-Service shut down on July 17. Here's a drop-in replacement for flight prices", "summary": "Amadeus decommissioned its Self-Service APIs on 17 July 2026, breaking flight-price integrations for fare trackers, travel bots and student projects that relied on test.api.amadeus.com. A developer built Flight Offers API, an Apify-hosted drop-in replacement that accepts the same Amadeus parameter names and returns Amadeus-shaped JSON for flight-offers, cheapest-date and price-metrics calls, priced at $0.003 per search plus $0.0005 per saved offer. Booking endpoints such as Flight Create Orders and Seat Maps are not replaced.", "body_md": "If your fare tracker, travel bot or class project suddenly can't reach `test.api.amadeus.com` or gets auth errors, it's not your code. **Amadeus decommissioned its Self-Service APIs on 17 July 2026.**\n\n`test.api.amadeus.com`, the SDK's default host, had no DNS A record at Google or Cloudflare DNS.\nGitHub is full of projects hitting this. More than 190 issues and PRs mention Amadeus Self-Service since February. Some remove their Amadeus adapter ([anythingmcp #713](https://github.com/HelpCode-ai/anythingmcp/pull/713)). Others swap in another API ([multi-flight-search #1](https://github.com/barry800414/multi-flight-search/pull/1)). Many are student projects that started an Amadeus integration *after* registrations closed.\n\nI needed the same three calls for my own projects, so I built a replacement with the same parameter names and the same JSON shape. This post covers the options, the migration code, and what you can't replace.\n\n| Option | Status (checked 2 Oct 2026) | \n|---|---|\n| Amadeus Self-Service | Decommissioned 17 July 2026. Enterprise only, via a commercial agreement | \n| Google QPX Express | Ended 10 April 2018 | \n| Kiwi.com Tequila | New partnerships \"on an invitation only basis\" since May 2024 | \n| Skyscanner Travel API | \"Commercial use only\". Not for students, start-ups without a product, or sites under 100K monthly users | \n| SerpApi Google Flights | Works. 250 free searches a month, then $25 per 1,000 to $275 per 30,000 ($0.025–$0.009 per search). Return legs need a second request | \n| `fast-flights` (Python) | Alive and popular, but the maintainer says it can break whenever Google changes something ( [#92](https://github.com/AWeirdDev/flights/issues/92) ) | \n\nIf you need **booking** (Flight Create Orders, ticketing), none of these help. You need a booking API from an airline, a consolidator or Amadeus Enterprise. The rest of this post is about the read-only price calls, which is what most hobby and research projects used.\n\nI published [Flight Offers API](https://apify.com/kuezi/flight-offers-api) on Apify. It takes the Amadeus Self-Service parameter names, fetches live prices from Google Flights, and returns Amadeus-shaped JSON:\n\n| Amadeus Self-Service | Replacement | Status | \n|---|---|---|\n| Flight Offers Search `GET /v2/shopping/flight-offers` | `endpoint: \"flight-offers\"` | Same parameters, `flight-offer` objects | \n| Flight Cheapest Date Search `GET /v1/shopping/flight-dates` | `endpoint: \"cheapest-date\"` | Scans every day in a range, up to 90 days | \n| Flight Price Analysis `GET /v1/analytics/itinerary-price-metrics` | `endpoint: \"price-metrics\"` | Quartiles from Google's recent price history for that date | \n| Flight Offers Price, Create Orders, Seat Maps | ✘ | Not replaced | \n\n*Disclosure: I built and sell this. It's pay per use: $0.003 per search plus $0.0005 per saved offer. A Flight Offers Search with 10 offers costs $0.008. Apify's free plan includes $5 of monthly credit, which covers about 600 such searches.*\n\nBefore, with the archived SDK:\n\n``` python\nfrom amadeus import Client\n\namadeus = Client(client_id=\"...\", client_secret=\"...\")\nresponse = amadeus.shopping.flight_offers_search.get(\n    originLocationCode=\"JFK\", destinationLocationCode=\"LAX\",\n    departureDate=\"2026-11-12\", adults=1, max=5)\n\nfor offer in response.data:\n    seg = offer[\"itineraries\"][0][\"segments\"][0]\n    print(offer[\"price\"][\"total\"], seg[\"carrierCode\"], seg[\"number\"], seg[\"departure\"][\"at\"])\n```\n\nAfter (`pip install apify-client`, version 3.x):\n\n``` python\nfrom apify_client import ApifyClient\n\nclient = ApifyClient(\"YOUR_APIFY_TOKEN\")\n\ndef amadeus_call(endpoint, **params):\n    \"\"\"Runs the replacement and returns an Amadeus-style {meta, data, dictionaries} dict.\"\"\"\n    run = client.actor(\"kuezi/flight-offers-api\").call(logger=None, run_input={\"endpoint\": endpoint, **params})\n    return client.key_value_store(run.default_key_value_store_id).get_record(\"RESPONSE\")[\"value\"]\n\nresponse = amadeus_call(\"flight-offers\",\n    originLocationCode=\"JFK\", destinationLocationCode=\"LAX\",\n    departureDate=\"2026-11-12\", adults=1, max=5)\n\nfor offer in response[\"data\"]:\n    seg = offer[\"itineraries\"][0][\"segments\"][0]\n    print(offer[\"price\"][\"total\"], seg[\"carrierCode\"], seg[\"number\"], seg[\"departure\"][\"at\"])\n```\n\nThe loop is unchanged. Only `response.data` becomes `response[\"data\"]`. Output from a real run on 2 October:\n\n```\n204.00 DL 1788 2026-11-12T12:00:00\n204.00 B6 1023 2026-11-12T12:00:00\n204.00 B6 623 2026-11-12T15:29:00\n204.00 B6 123 2026-11-12T05:45:00\n204.00 DL 742 2026-11-12T07:00:00\n```\n\nThe run took 5 seconds. Its status message is a one-line answer, handy for logs and AI agents:\n\n```\n5 flight offers JFK-LAX on 2026-11-12. Cheapest 204.00 USD: DL 1788, departs 2026-11-12T12:00:00, PT6H8M.\nGoogle says prices are typical (typical 144-240).\n```\n\nAmadeus took a date range in `departureDate`. So does this:\n\n```\nresponse = amadeus_call(\"cheapest-date\",\n    origin=\"SFO\", destination=\"HNL\", departureDate=\"2026-11-01,2026-11-30\")\n\nfor d in response[\"data\"][:3]:      # sorted cheapest first\n    print(d[\"departureDate\"], d[\"price\"][\"total\"], d[\"priceLevel\"])\n```\n\nReal run: 30 dates priced in 18 seconds. Cheapest was $163 on 1 November, with 11 more dates at the same price. The priciest was $444 on 20 November. For round trips, pass `duration=7` (one trip length; Amadeus-style ranges like `1,15` aren't supported).\n\n```\nresponse = amadeus_call(\"price-metrics\",\n    originIataCode=\"JFK\", destinationIataCode=\"LAX\", departureDate=\"2026-11-12\")\nm = response[\"data\"][0]\nprint({x[\"quartileRanking\"]: x[\"amount\"] for x in m[\"priceMetrics\"]})\n{'MINIMUM': '167.00', 'FIRST': '178.00', 'MEDIUM': '178.00', 'THIRD': '204.00', 'MAXIMUM': '215.00'}\n```\n\nAmadeus built these quartiles from its booking data. This version builds them from Google Flights' price history for that exact date, 61 days in this case, and also returns Google's own verdict (`typical`) and typical range ($144–240). The idea is the same, but the source isn't, so don't compare the numbers one to one.\n\nBe aware of these before you switch:\n\n`country: \"us\"` by default). That includes low-cost and airline-direct fares that Amadeus often didn't have. They're shopping prices, not bookable fares.`null`` numberOfBookableSeats`, `lastTicketingDate`, `price.base`, and `aircraft.code` (the aircraft name is in `aircraft.name` instead).`googleFlights` in each offer: CO₂, legroom, layovers, Google's price level and a link to the search.\n\n```\ncurl -X POST \"https://api.apify.com/v2/acts/kuezi~flight-offers-api/run-sync-get-dataset-items?token=$APIFY_TOKEN\" \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"endpoint\":\"flight-offers\",\"originLocationCode\":\"LHR\",\"destinationLocationCode\":\"JFK\",\"departureDate\":\"2026-12-01\",\"max\":5}'\n```\n\nThat returns the `data` array directly.\n\nIf you were using another Amadeus Self-Service endpoint and want it replaced, tell me which one in the comments. I'll prioritize by demand.\n\n*AI disclosure: this post and the tool were produced with an AI agent (Claude) working for me. Every number above comes from real runs on 2 October 2026.*", "url": "https://wpnews.pro/news/amadeus-self-service-shut-down-on-july-17-here-s-a-drop-in-replacement-for", "canonical_source": "https://dev.to/ishemah/amadeus-self-service-shut-down-on-july-17-heres-a-drop-in-replacement-for-flight-prices-1npn", "published_at": "2026-10-03 11:30:51+00:00", "updated_at": "2026-10-03 11:38:26.879274+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "ai-agents"], "entities": ["Amadeus", "Apify", "Google Flights", "Google QPX Express", "Kiwi.com Tequila", "Skyscanner Travel API", "SerpApi", "fast-flights"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/amadeus-self-service-shut-down-on-july-17-here-s-a-drop-in-replacement-for", "markdown": "https://wpnews.pro/news/amadeus-self-service-shut-down-on-july-17-here-s-a-drop-in-replacement-for.md", "text": "https://wpnews.pro/news/amadeus-self-service-shut-down-on-july-17-here-s-a-drop-in-replacement-for.txt", "jsonld": "https://wpnews.pro/news/amadeus-self-service-shut-down-on-july-17-here-s-a-drop-in-replacement-for.jsonld"}}