Search code examples
amadeus

missing keyword parameter is clearly included in api call


I'm trying to set up a basic API call to Amadeus. All the correct parameters are included and I'm grabbing a fresh token for each call.

It's a React/Flask application.

Here's my endpoint in app/routes.py:

@app.route('/search', methods=['GET'])
@cross_origin(origin='*')
def get_flights():

    api_key = os.environ.get('amadeus_api_key', None)
    api_secret = os.environ.get('amadeus_api_secret', None)

    # first, you must get an access token using your Amadeus credentials
    token_request = requests.post(
        'https://test.api.amadeus.com/v1/security/oauth2/token',
        data = {
            'grant_type': 'client_credentials',
            'client_id': api_key,
            'client_secret': api_secret
        }
    )
    token = token_request.json()['access_token']
    bearer = 'Bearer {}'.format(token)

    locations = requests.get(
        'https://test.api.amadeus.com/v1/reference-data/locations',
        headers = {
            'Authorization': bearer 
        },
        data = {
            'subType': 'AIRPORT',
            'keyword': 'BOS'
        }
    )
    print(locations.json())

    # example:
    # https://test.api.amadeus.com/v1/reference-data/locations
    # ?subType=AIRPORT&keyword=BOS

    return jsonify({'token': token})

Here's the error:

{'errors': [{'status': 400, 'code': 32171, 'title': 'MANDATORY DATA MISSING', 'detail': 'Missing mandatory query parameter', 'source': {'parameter': 'keyword'}}]}

As you can see in the /search endpoint, the keyword parameter is clearly included.

What gives? Am I missing something?


Solution

  • The request to get the locations is not correctly built as it is sending subType and keyword as body instead of query parameters. According to requests documentation, you need to use params:

        locations = requests.get(
        'https://test.api.amadeus.com/v1/reference-data/locations',
        headers = {
            'Authorization': bearer 
        },
        params = {
            'subType': 'AIRPORT',
            'keyword': 'BOS'
        }
    )