Amadeus provides a rich set of APIs for the travel industry. For more details, check out the Amadeus for Developers Portal or the SDK class reference.
This SDK requires Python 3.4+ (Python 2+ is no longer supported). You can install it directly with pip:
pip install amadeus
OR, add it to your requirements.txt file and install using:
pip install -r requirements.txt
To make your first API call, you will need to register for an Amadeus Developer Account and set up your first application.
from amadeus import Client, ResponseError
amadeus = Client(
client_id='REPLACE_BY_YOUR_API_KEY',
client_secret='REPLACE_BY_YOUR_API_SECRET'
)
try:
response = amadeus.shopping.flight_offers_search.get(
originLocationCode='MAD',
destinationLocationCode='ATH',
departureDate='2022-11-01',
adults=1)
print(response.data)
except ResponseError as error:
print(error)
You can find all the endpoints in self-contained code examples.
The client can be initialized directly.
# Initialize using parameters
amadeus = Client(client_id='REPLACE_BY_YOUR_API_KEY', client_secret='REPLACE_BY_YOUR_API_SECRET')
Alternatively, it can be initialized without any parameters if the environment variables AMADEUS_CLIENT_ID
and AMADEUS_CLIENT_SECRET
are present.
amadeus = Client()
Your credentials can be found on the Amadeus dashboard.
By default, the SDK environment is set to test
environment. To switch to a production (pay-as-you-go) environment, please switch the hostname as follows:
amadeus = Client(hostname='production')
Amadeus has a large set of APIs, and our documentation is here to get you started today. Head over to our reference documentation for in-depth information about every SDK method, as well as its arguments and return types.
This library conveniently maps every API path to a similar path.
For example, GET /v2/reference-data/urls/checkin-links?airlineCode=BA
would be:
amadeus.reference_data.urls.checkin_links.get(airlineCode='BA')
Similarly, to select a resource by ID, you can pass in the ID to the singular path.
For example, GET /v2/shopping/hotel-offers/XZY
would be:
amadeus.shopping.hotel_offer('XYZ').get()
You can make any arbitrary API call directly with the .get
method as well:
amadeus.get('/v2/reference-data/urls/checkin-links', airlineCode='BA')
Or, with POST
method:
amadeus.post('/v1/shopping/flight-offers/pricing', body)
Every API call returns a Response
object. If the API call contained a JSON response it will parse the JSON into the .result
attribute. If this data also contains a data
key, it will make that available as the .data
attribute. The raw body of the response is always available as the .body
attribute.
from amadeus import Location
response = amadeus.reference_data.locations.get(
keyword='LON',
subType=Location.ANY
)
print(response.body) #=> The raw response, as a string
print(response.result) #=> The body parsed as JSON, if the result was parsable
print(response.data) #=> The list of locations, extracted from the JSON
If an API endpoint supports pagination, the other pages are available under the .next
, .previous
, .last
and .first
methods.
from amadeus import Location
response = amadeus.reference_data.locations.get(
keyword='LON',
subType=Location.ANY
)
amadeus.next(response) #=> returns a new response for the next page
If a page is not available, the method will return None
.
The SDK makes it easy to add your own logger.
import logging
logger = logging.getLogger('your_logger')
logger.setLevel(logging.DEBUG)
amadeus = Client(
client_id='REPLACE_BY_YOUR_API_KEY',
client_secret='REPLACE_BY_YOUR_API_SECRET',
logger=logger
)
Additionally, to enable more verbose logging, you can set the appropriate level on your own logger. The easiest way would be to enable debugging via a parameter during initialization, or using the AMADEUS_LOG_LEVEL
environment variable.
amadeus = Client(
client_id='REPLACE_BY_YOUR_API_KEY',
client_secret='REPLACE_BY_YOUR_API_SECRET',
log_level='debug'
)
# Flight Inspiration Search
amadeus.shopping.flight_destinations.get(origin='MAD')
# Flight Cheapest Date Search
amadeus.shopping.flight_dates.get(origin='MAD', destination='MUC')
# Flight Offers Search GET
amadeus.shopping.flight_offers_search.get(originLocationCode='SYD', destinationLocationCode='BKK', departureDate='2022-11-01', adults=1)
# Flight Offers Search POST
amadeus.shopping.flight_offers_search.post(body)
# Flight Offers Price
flights = amadeus.shopping.flight_offers_search.get(originLocationCode='SYD', destinationLocationCode='BKK', departureDate='2022-11-01', adults=1).data
amadeus.shopping.flight_offers.pricing.post(flights[0])
amadeus.shopping.flight_offers.pricing.post(flights[0:2], include='credit-card-fees,other-services')
# Flight Create Orders
amadeus.booking.flight_orders.post(flights[0], traveler)
# Flight Order Management
# The flight ID comes from the Flight Create Orders (in test environment it's temporary)
# Retrieve the order based on it's ID
flight_booking = amadeus.booking.flight_orders.post(body).data
amadeus.booking.flight_order(flight_booking['id']).get()
# Delete the order based on it's ID
amadeus.booking.flight_order(flight_booking['id']).delete()
# Flight SeatMap Display GET
amadeus.shopping.seatmaps.get(**{"flight-orderId": "orderid"})
# Flight SeatMap Display POST
amadeus.shopping.seatmaps.post(body)
# Flight Availabilities POST
amadeus.shopping.availability.flight_availabilities.post(body)
# Branded Fares Upsell
amadeus.shopping.flight_offers.upselling.post(body)
# Flight Choice Prediction
body = amadeus.shopping.flight_offers_search.get(
originLocationCode='MAD',
destinationLocationCode='NYC',
departureDate='2022-11-01',
adults=1).result
amadeus.shopping.flight_offers.prediction.post(body)
# Flight Checkin Links
amadeus.reference_data.urls.checkin_links.get(airlineCode='BA')
# Airline Code Lookup
amadeus.reference_data.airlines.get(airlineCodes='U2')
# Airport and City Search (autocomplete)
# Find all the cities and airports starting by 'LON'
amadeus.reference_data.locations.get(keyword='LON', subType=Location.ANY)
# Get a specific city or airport based on its id
amadeus.reference_data.location('ALHR').get()
# City Search
amadeus.reference_data.locations.cities.get(keyword='PAR')
# Airport Nearest Relevant Airport (for London)
amadeus.reference_data.locations.airports.get(longitude=0.1278, latitude=51.5074)
# Flight Most Booked Destinations
amadeus.travel.analytics.air_traffic.booked.get(originCityCode='MAD', period='2017-08')
# Flight Most Traveled Destinations
amadeus.travel.analytics.air_traffic.traveled.get(originCityCode='MAD', period='2017-01')
# Flight Busiest Travel Period
amadeus.travel.analytics.air_traffic.busiest_period.get(cityCode='MAD', period='2017', direction='ARRIVING')
# Hotel Search
# Get list of Hotels by city code
amadeus.shopping.hotel_offers.get(cityCode='LON')
# Get list of offers for a specific hotel
amadeus.shopping.hotel_offers_by_hotel.get(hotelId='BGLONBGB')
# Confirm the availability of a specific offer
offerId = amadeus.shopping.hotel_offer('8123DD9DE5102DADF5DA3B55C8C575F54114336EE718578753888747FE0652FC').get()
# Hotel Search v3
# Get list of available offers by hotel ids
amadeus.shopping.hotel_offers_search.get(hotelIds='RTPAR001', adults='2')
# Check conditions of a specific offer
amadeus.shopping.hotel_offer_search('XXX').get()
# Hotel List
# Get list of hotels by hotel id
amadeus.reference_data.locations.hotels.by_hotels.get(hotelIds='ADPAR001')
# Get list of hotels by city code
amadeus.reference_data.locations.hotels.by_city.get(cityCode='PAR')
# Get list of hotels by a geocode
amadeus.reference_data.locations.hotels.by_geocode.get(longitude=2.160873,latitude=41.397158)
# Hotel Name Autocomplete
amadeus.reference_data.locations.hotel.get(keyword='PARI', subType=[Hotel.HOTEL_GDS, Hotel.HOTEL_LEISURE])
# Hotel Booking
# The offerId comes from the hotel_offer above
amadeus.booking.hotel_bookings.post(offerId, guests, payments)
# Hotel Ratings
# What travelers think about this hotel?
amadeus.e_reputation.hotel_sentiments.get(hotelIds = 'ADNYCCTB')
# Points of Interest
# What are the popular places in Barcelona (based a geo location and a radius)
amadeus.reference_data.locations.points_of_interest.get(latitude=41.397158, longitude=2.160873)
# What are the popular places in Barcelona? (based on a square)
amadeus.reference_data.locations.points_of_interest.by_square.get(north=41.397158, west=2.160873,
south=41.394582, east=2.177181)
# Returns a single Point of Interest from a given id
amadeus.reference_data.locations.point_of_interest('9CB40CB5D0').get()
# Location Score
amadeus.location.analytics.category_rated_areas.get(latitude=41.397158, longitude=2.160873)
# Safe Place
# How safe is Barcelona? (based a geo location and a radius)
amadeus.safety.safety_rated_locations.get(latitude=41.397158, longitude=2.160873)
# How safe is Barcelona? (based on a square)
amadeus.safety.safety_rated_locations.by_square.get(north=41.397158, west=2.160873,
south=41.394582, east=2.177181)
# What is the safety information of a location based on it's Id?
amadeus.safety.safety_rated_location('Q930400801').get()
# Trip Purpose Prediction
amadeus.travel.predictions.trip_purpose.get(originLocationCode='ATH', destinationLocationCode='MAD', departureDate='2022-11-01', returnDate='2022-11-08')
# Flight Delay Prediction
amadeus.travel.predictions.flight_delay.get(originLocationCode='NCE', destinationLocationCode='IST', departureDate='2022-08-01', \
departureTime='18:20:00', arrivalDate='2022-08-01', arrivalTime='22:15:00', aircraftCode='321', carrierCode='TK', flightNumber='1816', duration='PT31H10M')
# Airport On-Time Performance
amadeus.airport.predictions.on_time.get(airportCode='JFK', date='2022-11-01')
# Airport Routes
amadeus.airport.direct_destinations.get(departureAirportCode='BLR')
# Trip Parser
# Encode to Base64 your booking confirmation file (.html, .eml, .pdf supported)
response = amadeus.travel.trip_parser_jobs.post(amadeus.travel.from_file(path_to_file))
# Alternatively you can use a Base64 encoded content directly
response = amadeus.travel.trip_parser_jobs.post(amadeus.travel.from_base64(base64))
# Or you can call the API with the JSON directly
response = amadeus.travel.trip_parser_jobs.post(body)
# Get the parsing status of the process by jobId
amadeus.travel.trip_parser_jobs.status(response.data['id']).get()
# Get the result of the process by jobId
amadeus.travel.trip_parser_jobs.result(response.data['id']).get()
# Travel Recommendations
amadeus.reference_data.recommended_locations.get(cityCodes='PAR', travelerCountryCode='FR')
# Retrieve status of a given flight
amadeus.schedule.flights.get(carrierCode='AZ', flightNumber='319', scheduledDepartureDate='2022-09-13')
# Tours and Activities
# What are the popular activities in Madrid (based a geo location and a radius)
amadeus.shopping.activities.get(latitude=40.41436995, longitude=-3.69170868)
# What are the popular activities in Barcelona? (based on a square)
amadeus.shopping.activities.by_square.get(north=41.397158, west=2.160873,
south=41.394582, east=2.177181)
# Returns a single activity from a given id
amadeus.shopping.activity('4615').get()
# Returns itinerary price metrics
amadeus.analytics.itinerary_price_metrics.get(originIataCode='MAD', destinationIataCode='CDG',
departureDate='2021-03-21')
# Covid-19 Area Report
amadeus.duty_of_care.diseases.covid19_area_report.get(countryCode="US")
Want to contribute? Read our Contributors Guide for guidance on installing and running this code in a development environment.
This library is released under the MIT License.
You can find us on StackOverflow or join our developer community on Discord.