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 library requires Java 1.7+ and the Gson library. You can install the SDK via Maven or Gradle:
<dependency>
<groupId>com.amadeus</groupId>
<artifactId>amadeus-java</artifactId>
<version>10.0.0</version>
</dependency>
compile "com.amadeus:amadeus-java:10.0.0"
To make your first API call, you will need to register for an Amadeus Developer Account and set up your first application.
import com.amadeus.Amadeus;
import com.amadeus.Params;
import com.amadeus.exceptions.ResponseException;
import com.amadeus.referenceData.Locations;
import com.amadeus.resources.Location;
public class AmadeusExample {
public static void main(String[] args) throws ResponseException {
Amadeus amadeus = Amadeus
.builder("REPLACE_BY_YOUR_API_KEY", "REPLACE_BY_YOUR_API_SECRET")
.build();
Location[] locations = amadeus.referenceData.locations.get(Params
.with("keyword", "LON")
.and("subType", Locations.ANY));
System.out.println(locations);
}
}
You can find all the endpoints in self-contained code examples.
The client can be initialized directly:
//Initialize using parameters
Amadeus amadeus = Amadeus
.builder("REPLACE_BY_YOUR_API_KEY", "REPLACE_BY_YOUR_API_SECRET")
.build();
Alternatively, it can be initialized without any parameters if the environment variables AMADEUS_CLIENT_ID and AMADEUS_CLIENT_SECRET are present.
Amadeus amadeus = Amadeus
.builder(System.getenv())
.build();
Your credentials can be found on the Amadeus dashboard.
By default the SDK is set to test environment. To switch to a production (pay-as-you-go) environment, please switch the hostname as follows:
Amadeus amadeus = Amadeus
.builder(System.getenv())
.setHostname("production")
.build();
Amadeus has a large set of APIs, and our documentation is here to get you started. Head over to our reference documentation for in-depth information about every SDK method, 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.referenceData.urls.checkinLinks.get(Params.with("airlineCode", "BA"));
Similarly, to select a resource by ID, you can pass in the ID to the singular path. For example, GET v1/reference-data/locations/pois would be:
amadeus.referenceData.locations.pointOfInterest("9CB40CB5D0").get();
You can make any arbitrary API call as well directly with the .get method.
Keep in mind, this returns a raw Resource.
Response response = amadeus.get("/v2/reference-data/urls/checkin-links", Params.with("airlineCode", "BA"));
response.getResult();
Or, with POST method:
Response response = amadeus.post("/v1/shopping/availability/flight-availabilities", body);
Every successful API call returns a Resource object. The Resource object has the raw response body (in string format) available:
Location[] locations = amadeus.referenceData.locations.get(Params
.with("keyword", "LON")
.and("subType", Locations.ANY));
// The raw response, as a string
locations[0].getResponse().getBody();
If an API endpoint supports pagination, the other pages are available under the
.next, .previous, .last and .first methods.
Location[] locations = amadeus.referenceData.locations.get(Params
.with("keyword", "LON")
.and("subType", Locations.ANY));
// Fetches the next page
Location[] locations = (Location[]) amadeus.next(locations[0]);
If a page is not available, the method will return null.
The SDK makes it easy to add your own logger.
import java.util.logging.Logger;
// Assumes the current class is called MyLogger
private final static Logger LOGGER = Logger.getLogger(MyLogger.class.getName());
...
Amadeus amadeus = Amadeus
.builder("REPLACE_BY_YOUR_API_KEY", "REPLACE_BY_YOUR_API_SECRET")
.setLogger(LOGGER)
.build();
)
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 amadeus = Amadeus
.builder("REPLACE_BY_YOUR_API_KEY", "REPLACE_BY_YOUR_API_SECRET")
.setLogLevel("debug") // or warn
.build();
```java // Flight Inspiration Search FlightDestination[] flightDestinations = amadeus.shopping.flightDestinations.get(Params .with("origin", "MAD"));
// Flight Cheapest Date Search FlightDate[] flightDates = amadeus.shopping.flightDates.get(Params .with("origin", "MAD") .and("destination", "MUC"));
// Flight Offers Search v2 GET FlightOfferSearch[] flightOffersSearches = amadeus.shopping.flightOffersSearch.get( Params.with("originLocationCode", "SYD") .and("destinationLocationCode", "BKK") .and("departureDate", "2023-11-01") .and("returnDate", "2023-11-08") .and("adults", 2) .and("max", 3));
// Flight Offers Search v2 POST // body can be a String version of your JSON or a JsonObject FlightOfferSearch[] flightOffersSearches = amadeus.shopping.flightOffersSearch.post(body);
// Flight Order Management // The flightOrderID comes from the Flight Create Orders (in test environment it's temporary) // Retrieve a flight order FlightOrder order = amadeus.booking.flightOrder("eJzTd9f3NjIJdzUGAAp%2fAiY=").get(); // Cancel a flight order Response order = amadeus.booking.flightOrder("eJzTd9f3NjIJdzUGAAp%2fAiY=").delete();
// Flight Offers price FlightPrice[] flightPricing = amadeus.shopping.flightOffersSearch.pricing.post( body, Params.with("include", "other-services") .and("forceClass", "false"));
// Flight Choice Prediction // Note that the example calls 2 APIs: Flight Offers Search & Flight Choice Prediction FlightOfferSearch[] flightOffers = amadeus.shopping.flightOffersSearch.get( Params.with("originLocationCode", "NYC") .and("destinationLocationCode", "MAD") .and("departureDate", "2024-04-01") .and("returnDate", "2024-04-08") .and("adults", 1));
// Using a JSonObject JsonObject result = flightOffers[0].getResponse().getResult(); FlightOfferSearch[] flightOffersPrediction = amadeus.shopping.flightOffers.prediction.post(result);
// Using a String String body = flightOffers[0].getResponse().getBody(); FlightOfferSearch[] flightOffersPrediction = amadeus.shopping.flightOffers.prediction.post(body);
// Flight Check-in Links CheckinLink[] checkinLinks = amadeus.referenceData.urls.checkinLinks.get(Params .with("airlineCode", "BA"));
// Airline Code LookUp Airline[] airlines = amadeus.referenceData.airlines.get(Params .with("airlineCodes", "BA"));
// Airport & City Search (autocomplete) // Find all the cities and airports starting by the keyword 'LON' Location[] locations = amadeus.referenceData.locations.get(Params .with("keyword", "LON") .and("subType", Locations.ANY)); // Get a specific city or airport based on its id Location location = amadeus.referenceData .location("ALHR").get();
// Airport Nearest Relevant (for London) Location[] locations = amadeus.referenceData.locations.airports.get(Params .with("latitude", 0.1278) .and("longitude", 51.5074));
// City Search City[] cities = amadeus.referenceData.locations.cities.get(Params .with("keyword","PARIS"));
// Flight Most Booked Destinations AirTraffic[] airTraffics = amadeus.travel.analytics.airTraffic.booked.get(Params .with("originCityCode", "MAD") .and("period", "2017-08"));
// Flight Most Traveled Destinations AirTraffic[] airTraffics = amadeus.travel.analytics.airTraffic.traveled.get(Params .with("originCityCode", "MAD") .and("period", "2017-01"));
// Flight Busiest Traveling Period Period[] busiestPeriods = amadeus.travel.analytics.airTraffic.busiestPeriod.get(Params .with("cityCode", "MAD") .and("period", "2017") .and("direction", BusiestPeriod.ARRIVING));
// Points of Interest // What are the popular places in Barcelona (based a geo location and a radius) PointOfInterest[] pointsOfInterest = amadeus.referenceData.locations.pointsOfInterest.get(Params .with("latitude", "41.39715") .and("longitude", "2.160873"));
// What are the popular places in Barcelona? (based on a square) PointOfInterest[] pointsOfInterest = amadeus.referenceData.locations.pointsOfInterest.bySquare.get(Params .with("north", "41.397158") .and("west", "2.160873") .and("south", "41.394582") .and("east", "2.177181"));
// Returns a single Point of Interest from a given id PointOfInterest pointOfInterest = amadeus.referenceData.locations.pointOfInterest("9CB40CB5D0").get();
// Tours and Activities // What are the popular activities in Barcelona (based a geo location and a radius) Activity[] activities = amadeus.shopping.activities.get(Params .with("latitude", "41.39715") .and("longitude", "2.160873"));
// What are the popular activities in Barcelona? (based on a square) Activity[] activities = amadeus.shopping.activities.bySquare.get(Params .with("north", "41.397158") .and("west", "2.160873") .and("south", "41.394582") .and("east", "2.177181"));
// Returns a single activity from a given id Activity activity = amadeus.shopping.activity("4615").get();
// What's the likelihood flights from this airport will leave on time? Prediction AirportOnTime = amadeus.airport.predictions.onTime.get(Params .with("airportCode", "NCE") .and("date", "2024-04-01"));
// What's the likelihood of a given flight to be delayed? Prediction[] flightDelay = amadeus.travel.predictions.flightDelay.get(Params .with("originLocationCode", "NCE") .and("destinationLocationCode", "IST") .and("departureDate", "2020-08-01") .and("departureTime", "18:20:00") .and("arrivalDate", "2020-08-01") .and("arrivalTime", "22:15:00") .and("aircraftCode", "321") .and("carrierCode", "TK") .and("flightNumber", "1816") .and("duration", "PT31H10M"));
// Flight Create Orders to book a flight // Using a JSonObject or String FlightOrder createdOrder = amadeus.booking.flightOrders.post(body);
// Using a JsonObject for flight offer and Traveler[] as traveler information // see example at src/main/java/examples/flight/createorders/FlightCreateOrders.java FlightOrder createdOrder = amadeus.booking.flightOrders.post(flightOffersSearches, travelerArray);
// What is the the seat map of a given flight? SeatMap[] seatmap = amadeus.shopping.seatMaps.get(Params .with("flight-orderId", "eJzTd9f3NjIJdzUGAAp%2fAiY="));
// What is the the seat map of a given flight? // The body can be a String version of your JSON or a JsonObject SeatMap[] seatmap = amadeus.shopping.seatMaps.post(body);
// Trip Purpose Prediction Prediction tripPurpose = amadeus.travel.predictions.tripPurpose.get(Params .with("originLocationCode", "NYC") .and("destinationLocationCode", "MAD") .and("departureDate", "2024-04-01") .and("returnDate", "2024-04-08"));
// Travel Recommendations Location destinations = amadeus.referenceData.recommendedLocations.get(Params .with("cityCodes", "PAR") .and("travelerCountryCode", "FR"));
// On Demand Flight Status DatedFlight[] flightStatus = amadeus.schedule.flights.get(Params .with("carrierCode", "AZ") .and("flightNumber", "319") .and("scheduledDepartureDate", "2024-03-13"));
// Flight Price Analysis ItineraryPriceMetric[] metrics = amadeus.analytics.itineraryPriceMetrics.get(Params .with("originIataCode", "MAD") .and("destinationIataCode", "CDG") .and("departureDate", "2024-03-21"));
// Airport Routes Destination[] directDestinations = amadeus.airport.directDestinations.get(Params .with("departureAirportCode","MAD") .and("max","2"));
// Flight Availabilites Search POST // body can be a String version of your JSON or a JsonObject FlightAvailability[] flightAvailabilities = amadeus.shopping.availability.flightAvailabilities.post(body);
// Location Score GET ScoredLocation[] scoredLocations = amadeus.location.analytics.categoryRatedAreas.get(Params .with("latitude", "41.397158") .and("longitude", "2.160873"));
// Branded Fares Upsell Post // body can be a String version of your JSON or a JsonObject FlightOfferSearch[] upsellFlightOffers = amadeus.shopping.flightOffers.upselling.post(body);
// Hotel List // Get list of hotels by hotel id Hotel[] hotels = amadeus.referenceData.locations.hotels.byHotels.get(Params .with("hotelIds", "ADPAR001")); // Get list of hotels
$ claude mcp add amadeus-java \
-- python -m otcore.mcp_server <graph>