@edwincoronado/amadeus
Version:
Node library for the Amadeus travel APIs with ServiceNow compatibility
537 lines (431 loc) • 16.1 kB
Markdown
[](https://www.npmjs.com/package/amadeus)
[](https://github.com/amadeus4dev/amadeus-node/actions/workflows/build.yml)
[](https://codeclimate.com/github/amadeus4dev/amadeus-node/maintainability)
[](https://www.npmjs.com/package/amadeus?activeTab=dependencies)
[](https://discord.gg/cVrFBqx)
Amadeus provides a rich set of APIs for the travel industry. For more details, check out the [Amadeus for Developers Portal](https://developers.amadeus.com) or the [SDK class reference](https://amadeus4dev.github.io/amadeus-node/).
This module has been tested using [Node LTS versions](https://nodejs.org/en/about/releases/). You can install it using Yarn or NPM.
```sh
npm install amadeus --save
```
To make your first API call, you will need to [register](https://developers.amadeus.com/register) for an Amadeus Developer Account and [set up your first application](https://developers.amadeus.com/my-apps).
```js
const Amadeus = require('amadeus');
const amadeus = new Amadeus({
clientId: 'REPLACE_BY_YOUR_API_KEY',
clientSecret: 'REPLACE_BY_YOUR_API_SECRET'
});
amadeus.shopping.flightOffersSearch.get({
originLocationCode: 'SYD',
destinationLocationCode: 'BKK',
departureDate: '2022-06-01',
adults: '2'
}).then(function(response){
console.log(response.data);
}).catch(function(responseError){
console.log(responseError.code);
});
```
You can find all the endpoints in self-contained [code examples](https://github.com/amadeus4dev/amadeus-code-examples).
The client can be initialized directly.
```js
// Initialize using parameters
const amadeus = new Amadeus({
clientId: 'REPLACE_BY_YOUR_API_KEY',
clientSecret: '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.
```js
const amadeus = new Amadeus();
```
Your credentials can be found on the [Amadeus dashboard](https://developers.amadeus.com/my-apps).
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:
```js
const amadeus = new Amadeus({
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](https://amadeus4dev.github.io/amadeus-node/) for in-depth information about every SDK method, its arguments and return types.
* [Get Started](https://amadeus4dev.github.io/amadeus-node/)
* [Find an Airport](https://amadeus4dev.github.io/amadeus-node/#airports)
* [Find a Flight](https://amadeus4dev.github.io/amadeus-node/#flightofferssearch)
* [Get Flight Inspiration](https://amadeus4dev.github.io/amadeus-node/#flightdestinations)
This library conveniently maps every API path to a similar path. For example, `GET /v2/reference-data/urls/checkin-links?airlineCode=BA` would be:
```js
amadeus.referenceData.urls.checkinLinks.get({ airlineCode: 'BA' });
```
Similarly, to select a resource by ID, you can pass in the ID to the **singular** path. For example, `GET /v1/shopping/hotelOffers/123/` would be:
```js
amadeus.shopping.hotelOffer('123').get(...);
```
You can make any arbitrary `GET` API call directly with the `.client.get` method as well:
```js
amadeus.client.get('/v2/reference-data/urls/checkin-links', { airlineCode: 'BA' });
```
Or, with a `POST` using `.client.post` method:
```js
amadeus.client.post('/v1/shopping/flight-offers/pricing', { data });
```
Every API call returns a `Promise` that either resolves or rejects.
Every resolved API call returns a `Response` object containing a `body` attribute with the raw response. If the API call contained a JSON response, it will parse the JSON into the `result` attribute. If this data contains a `data` key, that will be made available in `data` attribute.
For a failed API call, it returns a `ResponseError`object containing the (parsed or unparsed) response, the request, and an error code.
```js
amadeus.referenceData.urls.checkinLinks.get({
airlineCode: 'BA'
}).then(function(response){
console.log(response.body); //=> The raw body
console.log(response.result); //=> The fully parsed result
console.log(response.data); //=> The data attribute taken from the result
}).catch(function(error){
console.log(error.response); //=> The response object with (un)parsed data
console.log(error.response.request); //=> The details of the request made
console.log(error.code); //=> A unique error code to identify the type of error
});
```
If an API endpoint supports pagination, the other pages are available under the `.next`, `.previous`, `.last` and `.first` methods.
```js
amadeus.referenceData.locations.get({
keyword: 'LON',
subType: 'AIRPORT,CITY'
}).then(function(response){
console.log(response.data); // first page
return amadeus.next(response);
}).then(function(nextResponse){
console.log(nextResponse.data); // second page
});
```
If a page is not available, the response will resolve to `null`.
The SDK makes it easy to add your own logger that is compatible with the default `console`.
```js
const amadeus = new Amadeus({
clientId: 'REPLACE_BY_YOUR_API_KEY',
clientSecret: 'REPLACE_BY_YOUR_API_SECRET',
logger: new MyConsole()
});
```
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. The available options are `silent` (default), `warn`, and `debug`.
```js
const amadeus = new Amadeus({
clientId: 'REPLACE_BY_YOUR_API_KEY',
clientSecret: 'REPLACE_BY_YOUR_API_SECRET',
logLevel: 'debug'
});
```
```js
//Airport Routes
amadeus.airport.directDestinations.get({
departureAirportCode: 'CDG',
})
//Airline Routes
//find all destinations served by a given airline
amadeus.airline.destinations.get({
airlineCode: 'BA',
})
// Flight Inspiration Search
amadeus.shopping.flightDestinations.get({
origin : 'MAD'
})
// Flight Cheapest Date Search
amadeus.shopping.flightDates.get({
origin : 'MAD',
destination : 'MUC'
})
// Flight Offers Search GET
amadeus.shopping.flightOffersSearch.get({
originLocationCode: 'SYD',
destinationLocationCode: 'BKK',
departureDate: '2022-11-01',
adults: '2'
})
// Flight Offers Search POST
// A full example can be found at https://github.com/amadeus4dev/amadeus-code-examples
amadeus.shopping.flightOffersSearch.post(body)
// Flight Offers Price
amadeus.shopping.flightOffersSearch.get({
originLocationCode: 'SYD',
destinationLocationCode: 'BKK',
departureDate: '2022-11-01',
adults: '1'
}).then(function(response){
return amadeus.shopping.flightOffers.pricing.post(
{
'data': {
'type': 'flight-offers-pricing',
'flightOffers': [response.data[0]]
}
}
)
}).then(function(response){
console.log(response.data);
}).catch(function(responseError){
console.log(responseError);
});
// Flight Offers Price with additional parameters
// for example: check additional baggage options
amadeus.shopping.flightOffers.pricing.post(body ,{include: 'bags'});
// Flight Create Orders
// To book the flight-offer(s) returned by the Flight Offers Price
// and create a flight-order with travelers' information.
// A full example can be found at https://git.io/JtnYo
amadeus.booking.flightOrders.post(
{
'type': 'flight-order',
'flightOffers': [priced-offers],
'travelers': []
}
);
// Retrieve flight order with ID 'XXX'. This ID comes from the
// Flight Create Orders API, which is a temporary ID in test environment.
amadeus.booking.flightOrder('XXX').get()
// Cancel flight order with ID 'XXX'. This ID comes from the
// Flight Create Orders API, which is a temporary ID in test environment.
amadeus.booking.flightOrder('XXX').delete()
// Flight SeatMap Display
// To retrieve the seat map of each flight included
// in flight offers for MAD-NYC flight on 2021-08-01
amadeus.shopping.flightOffersSearch.get({
originLocationCode: 'SYD',
destinationLocationCode: 'BKK',
departureDate: '2022-11-01',
adults: '1'
}).then(function(response){
return amadeus.shopping.seatmaps.post(
{
'data': [response.data[0]]
}
);
}).then(function(response){
console.log(response.data);
}).catch(function(responseError){
console.log(responseError);
});
// To retrieve the seat map for flight order with ID 'XXX'
amadeus.shopping.seatmaps.get({
'flight-orderId': 'XXX'
});
// Flight Availabilities Search
amadeus.shopping.availability.flightAvailabilities.post(body);
// Branded Fares Upsell
amadeus.shopping.flightOffers.upselling.post(body);
// Flight Choice Prediction
amadeus.shopping.flightOffersSearch.get({
originLocationCode: 'SYD',
destinationLocationCode: 'BKK',
departureDate: '2022-11-01',
adults: '2'
}).then(function(response){
return amadeus.shopping.flightOffers.prediction.post(response);
}).then(function(response){
console.log(response.data);
}).catch(function(responseError){
console.log(responseError);
});
// Flight Checkin Links
amadeus.referenceData.urls.checkinLinks.get({
airlineCode : 'BA'
})
// Airline Code Lookup
amadeus.referenceData.airlines.get({
airlineCodes : 'U2'
})
// Airports and City Search (autocomplete)
// Find all the cities and airports starting by 'LON'
amadeus.referenceData.locations.get({
keyword : 'LON',
subType : Amadeus.location.any
})
// Get a specific city or airport based on its id
amadeus.referenceData.location('ALHR').get()
// Airport Nearest Relevant Airport (for London)
amadeus.referenceData.locations.airports.get({
longitude : 0.1278,
latitude : 51.5074
})
// Flight Most Booked Destinations
amadeus.travel.analytics.airTraffic.booked.get({
originCityCode : 'MAD',
period : '2017-08'
}
// Flight Most Traveled Destinations
amadeus.travel.analytics.airTraffic.traveled.get({
originCityCode : 'MAD',
period : '2017-01'
})
// Flight Busiest Traveling Period
amadeus.travel.analytics.airTraffic.busiestPeriod.get({
cityCode: 'MAD',
period: '2017',
direction: Amadeus.direction.arriving
})
// City Search API
// finds cities that match a specific word or string of letters.
// Return a list of cities matching a keyword 'Paris'
amadeus.referenceData.locations.cities.get({
keyword: 'Paris'
})
//Hotel Name Autocomplete API
//Autocomplete a hotel search field
amadeus.referenceData.locations.hotel.get({
keyword: 'PARI',
subType: 'HOTEL_GDS'
})
//Hotel List API
//Get list of hotels by city code
amadeus.referenceData.locations.hotels.byCity.get({
cityCode: 'PAR'
})
//Get List of hotels by Geocode
amadeus.referenceData.locations.hotels.byGeocode.get({
latitude: 48.83152,
longitude: 2.24691
})
//Get List of hotels by hotelIds
amadeus.referenceData.locations.hotels.byHotels.get({
hotelIds: 'ACPAR245'
})
// Hotel Search API V3
// Get list of available offers in specific hotels by hotel ids
amadeus.shopping.hotelOffersSearch.get({
hotelIds: 'RTPAR001',
adults: '2'
})
// Check offer conditions of a specific offer id
amadeus.shopping.hotelOfferSearch('XXX').get()
// Hotel Booking API v2
amadeus.booking.hotelOrders.post(
{
'data': {
'type': 'hotel-order',
'guests': [],
'travelAgent': {},
'roomAssociations': [],
'payment': {}
}
}
)
// Hotel Booking API v1
amadeus.booking.hotelBookings.post(
{
'data': {
'offerId': 'XXXX',
'guests': [],
'payments': [],
'rooms': []
}
}
)
// On-Demand Flight Status
// What's the current status of my flight?
amadeus.schedule.flights.get({
carrierCode: 'AZ',
flightNumber: '319',
scheduledDepartureDate: '2021-03-13'
})
// Points of Interest
// What are the popular places in Barcelona (based a geo location and a radius)
amadeus.referenceData.locations.pointsOfInterest.get({
latitude : 41.397158,
longitude : 2.160873
})
// What are the popular places in Barcelona? (based on a square)
amadeus.referenceData.locations.pointsOfInterest.bySquare.get({
north: 41.397158,
west: 2.160873,
south: 41.394582,
east: 2.177181
})
// Extract the information about point of interest with ID '9CB40CB5D0'
amadeus.referenceData.locations.pointOfInterest('9CB40CB5D0').get()
// Location Score
amadeus.location.analytics.categoryRatedAreas.get({
latitude : 41.397158,
longitude : 2.160873
})
// Tours and Activities
// What are the best tours and activities in Barcelona?
amadeus.shopping.activities.get({
latitude: 41.397158,
longitude: 2.160873
})
// What are the best tours and activities in Barcelona? (based on a Square)
amadeus.shopping.activities.bySquare.get({
north: 41.397158,
west: 2.160873,
south: 41.394582,
east: 2.177181
})
// Extract the information about an activity with ID '56777'
amadeus.shopping.activity('56777').get()
// Hotel Ratings
// Get Sentiment Analysis of reviews about Holiday Inn Paris Notre Dame.
amadeus.eReputation.hotelSentiments.get({
hotelIds: 'XKPARC12'
})
// Trip Purpose Prediction
// Forecast traveler purpose, Business or Leisure, together with the probability in the context of search & shopping.
amadeus.travel.predictions.tripPurpose.get({
originLocationCode: 'NYC',
destinationLocationCode: 'MAD',
departureDate: '2021-04-01',
returnDate: '2021-04-08'
})
// Flight Delay Prediction
// This machine learning API is based on a prediction model that takes the input of the user - time, carrier, airport and aircraft information;
// and predict the segment where the flight is likely to lay.
amadeus.travel.predictions.flightDelay.get({
originLocationCode: 'BRU',
destinationLocationCode: 'FRA',
departureDate: '2020-01-14',
departureTime: '11:05:00',
arrivalDate: '2020-01-14',
arrivalTime: '12:10:00',
aircraftCode: '32A',
carrierCode: 'LH',
flightNumber: '1009',
duration: 'PT1H05M'
})
// Airport On-time Performance
// Get the percentage of on-time flight departures from JFK
amadeus.airport.predictions.onTime.get({
airportCode: 'JFK',
date: '2022-18-01'
})
// Travel Recommendations
amadeus.referenceData.recommendedLocations.get({
cityCodes: 'PAR',
travelerCountryCode: 'FR'
})
// Flight Price Analysis
amadeus.analytics.itineraryPriceMetrics.get({
originIataCode: 'MAD',
destinationIataCode: 'CDG',
departureDate: '2022-03-13',
})
//Cars & Transfers APIs
// Transfer Search API: Search Transfer
amadeus.shopping.transferOffers.post(body);
// Transfer Book API: Book a transfer based on the offer id
amadeus.ordering.transferOrders.post(body, offerId='2094123123');
// Transfer Management API: Cancel a transfer based on the order id & confirmation number
amadeus.ordering.transferOrder('XXX').transfers.cancellation.post({}, confirmNbr='12345');
```
Want to contribute? Read our [Contributors Guide](.github/CONTRIBUTING.md) for guidance on installing and running this code in a development environment.
This library is released under the [MIT License](LICENSE).
You can find us on [StackOverflow](https://stackoverflow.com/questions/tagged/amadeus) or join our developer community on
[](https://discord.gg/cVrFBqx).
[]: https://www.npmjs.com/package/amadeus