Shop & Book Product

What is it?

The Shop & Book suite of APIs enables partners to build web applications where customers can directly book packages into a Sales & Catering system. A customer begins by searching for locations which meet their needs followed by providing filter criteria such as dates, setup types, and attendance. From this information, the customer is provided with a list of locations along with the base price of the available packages offered. Once a customer picks their desired package they may be presented with more detailed information – such as the menus and items included - about their selection. After making a final decision and providing contact information, the customer can book their business directly into the Sales & Catering system. After payment has been processed, the piece of business may be updated to record the deposit. The current state of these bookings can then be retrieved, and then cancelled if needed.

How do I get it?

Minimum Requirements

  1. The caller must be a verified partner subscribed to the Shop & Book Product.
  2. The caller and location must be integrated with a verified instance of Amadeus Sales & Event Management – Advanced (R45 or Above)

How do I use it?

The rest of this documentation gives an overview of the suggested best practice to build a powerful and effective integration with the Shop & Book APIs

Included APIs

What's Included?

  1. Identity Provider
  2. Packages
  3. Pricing
  4. Booking Policy
  5. Direct Book

You must be logged in with an active subscription to view these APIs.

What about Security?

All Shop & Book APIs require AHWS authentication. See the authentication guide for details.

How do the APIs integrate?

The Shop & Book APIs are designed to support a customer’s shopping experience via the following workflow:

  1. A customer selects one or more locations for which they are interested in booking an event or meeting.
  2. They then provide criteria for their Event/Meeting: the number of attendees, setup type, etc.
  3. The customer’s selection is used to perform an Availability Search which returns the list of locations along with the available packages that meet the customer's criteria.
  4. Tax details may be requested for a particular package.
  5. Tax details may be requested for the cost of a particular Function Room.
  6. Additional details about the package may be requested and displayed to the customer: Events, Items, Alternate Languages, etc.
  7. An Add On Item search can be performed for a given package to display items available at an additional charge.
  8. Tax details may be requested for various Add On Items.
  9. Booking policy details may be requested prior to creating a booking in the Sales & Catering system.
  10. The customer makes their final selection, provides contact information, and creates a booking in the Sales & Catering system.
  11. If payment is collected, it can be noted in the Sales & Catering system via the add deposit operation.
  12. A customer may view the current state of their booking via the get booking operation.
  13. If the the user wishes to cancel an already created booking, they can do so via the cancel booking operation.

API Data Flow

The APIs in this product require responses to construct the payloads for downstream requests. This section provides a simple example of the end to end flow for the Shop & Book experience.

Package Availability Search

To create the first request the following is a sample search payload. To see what fields are required vs optional, see the API documentation.

Search Request


{
    

"StartDate": "2018-10-01Z"Starting timeframe of the search.

,

"EndDate": "2018-10-02Z"Ending timeframe of the search

, "FunctionRoomSetupName": { "LogicalOperator": "nop", "Parameters": [ { "ComparisonOperator": "eq",

"Value": "Classroom"Filter on Function Room Setup

} ] }, "LanguageCode": "en", "Locations": [ {

"Id": "1337PR0P"Id of the Location being searched

} ],

"NumberOfAttendees": 50Requested number of attendees

}

Search Response


{
    "data": {
        "elapsedTime": 3656,
        "locations": [
            {
                "id": "a19f2000002rDwvAAE",
                "name": "The Mansion",
                

"originalId": "1337PR0P",The Location Id

"packages": [ { "currencyCode": "USD", "description": "Includes a classroom style lunch meeting.", "eventOtherIncomePriceTotal": 30, "eventPriceTotal": 30, "events": [ { "classification": { "description": "A classroom style lunch meeting.",

"id": "a0jf200000EEmQPAA1",The Event Classification Id

"name": "Lunch Meeting", "systemId": "028dbcac-ec4a-4449-90dd-8b9e2343b79a" },

"endDate": "2018-10-01T13:00:00+00:00",Default end time for this event

"functionRooms":List of available function rooms for the event.

[ {

"id": "a0uf200000Of54VAAR",Function Room Id

"name": "Meeting Room A",

"rental": 100,Default Function Room Rental

"setups": [ { "capacity": 100, "id": "a0sf200000ge0UwAAI",

"name": "Classroom",Function Room Setup

"systemId": "028dbcac-ec4a-4449-90dd-8b9e2343b79a" } ], "systemId": "028dbcac-ec4a-4449-90dd-8b9e2343b79a" } ],

"id": "a1Tf2000008bcooEAA"Package Event Id

, "name": "Lunch Meeting",

"startDate": "2018-10-01T11:30:00+00:00",Default start time for the event

"systemId": "028dbcac-ec4a-4449-90dd-8b9e2343b79a" } ],

"id": "a1af2000012Y3mOAAS"The Id of the resulting package

, "isInclusive": false, "name": "Lunch Meeting Package", "otherIncomePriceTotal": 0, "systemId": "028dbcac-ec4a-4449-90dd-8b9e2343b79a" } ], "systemId": "028dbcac-ec4a-4449-90dd-8b9e2343b79a" } ] }, "instanceCode": "4d98f744-6e78-454a-a247-226f2dff0644" }

Package Detail Search

The next (optional) step after getting availability data is to query for more information on a specific package. The Package Detail API returns information such as Alternate Languages, Items, Menus, and Descriptions. Data is purely supplemental and is used only to enrich user experience; this information is not required to submit a Create Booking request.

Detail Request


{
    "location": {
        

"id": "1337PR0P"Original Id from search response

},

"id": "a1af2000012Y3mOAAS"Package Id from search response

,

"NumberOfAttendees": 50Requested number of attendees

}

Detail Response


{ 
    "data": { 
        "elapsedTime": 9167,     
        "packageDetails": { 
            "id": "a1af2000012Y3mOAAS", 
            "name": "Lunch Meeting Package", 
            "description": "Classroom Style meeting with lunch served.", 
            "alternateLanguage":[ 
                { 
                    "languageCode": "FR", 
                    "name": "Déjeuner de travail", 
                    "description": "Déjeuner de travail" 
                } 
            ], 
            "packageEvents": [ 
                { 
                    

"id": "a1Tf2000008bcooEAA",Package Event Id the detail relates too.

"eventClassification": { "id": "a0jf200000EEmQPAA1", "defaultStartTime": "11:30", "defaultEndTime": "13:00", "name": "Lunch Meeting", "description": "A lunch meeting", "alternateLanguage": [ { "languageCode": "FR", "name": "Déjeuner de travail", "description": "Déjeuner de travail" } ] },

"items"List of Items and their descriptions for event

: [ { "id": "a15f2000008Jbw7AAC", "name": "Pizza", "richDescription": "An authentic New York style pizza with tomato sauce made in-house, fresh mozzarella, and choice of toppings - serves 5." "alternateLanguage": [ { "languageCode": "FR", "name": "Pizza", "description": "Pizza" } ], "quantity": 10, "estimatedConsumptionPercentage": 100.00, "serviceFactor": 5.00, "allowDecimalQuantities": false } ] } ] } }, "instanceCode": "f91a93fd-c133-43dc-9528-9ffad8dff86b" }

Package Taxes

If taxes are to be displayed to the customer then Get Tax Details should be called for the selected package. Get Tax Details returns all taxes for a given package by revenue classification.

Package Taxes Request


{
    "location": {
        

"id": "1337PR0P"Original Id from search response

},

"entityId": "a1af2000012Y3mOAAS"Package Id from search response

,

"quantity": 50Requested number of attendees

}

Package Taxes Response


{
    "data": {
        "currencyCode": "USD",
        "id": "a1af2000012Y3mOAAS",
        "sourceType": "Package",
        "quantity": 50,
        "grandTotal": 1995,
        "totalBase": 1500,
        "totalTax": 120,
        "totalAdmin": 75,
        "totalGratuity": 300,
        "revenueClassifications": [
            {
                "id": "a1u0b000002zFvCAAU",
                "name": "Food",
                "grandTotal": 1330,
                "totalBase": 1000,
                "totalTax": 80,
                "totalAdmin": 50,
                "totalGratuity": 200,
                "taxes": [
                    {
                        "taxName": "State Tax",
                        "cost": 80,
                        "rate": 8,
                        "rateType": "Percent"
                    }
                ]
            },
            {
                "id": "a1u0b000002zFvHAAU",
                "name": "Other",
                "grandTotal": 665,
                "totalBase": 500,
                "totalTax": 40,
                "totalAdmin": 25,
                "totalGratuity": 100,
                "taxes": [
                    {
                        "taxName": "State Tax",
                        "cost": 40,
                        "rate": 8,
                        "rateType": "Percent"
                    }
                ]
            }
        ]
    },
    "instanceCode": "29ab7d68-ee7d-419b-84c3-c954a8bf1d93"
}
                            

Function Room Taxes

Next, if a function room rental charge is to be added and taxes are to be displayed to the customer then Get Tax Details should be called for the selected function room and rental cost. Get Tax Details returns all taxes for a given function room and rental cost by revenue classification.

Function Room Taxes Request


{
    "location": {
        

"id": "1337PR0P"Original Id from search response

},

"entityId": "a0uf200000Of54VAAR"Function Room Id from search response

,

"cost": 100Cost of the Function Room from search response

, "isCostInclusive": 0 }

Function Room Taxes Response


{
    "data": {
        "currencyCode": "USD",
        "id": "a0uf200000Of54VAAR",
        "sourceType": "PackageFunctionRoom",
        "quantity": 1,
        "grandTotal": 108,
        "totalBase": 100,
        "totalTax": 8,
        "totalAdmin": 0,
        "totalGratuity": 0,
        "revenueClassifications": [
            {
                "id": "a1u0b000002zFvIAAU",
                "name": "Function Room Rental",
                "grandTotal": 108,
                "totalBase": 100,
                "totalTax": 8,
                "totalAdmin": 0,
                "totalGratuity": 0,
                "taxes": [
                    {
                        "taxName": "State Tax",
                        "cost": 8,
                        "rate": 8,
                        "rateType": "Percent"
                    }
                ]
            }
        ]
    },
    "instanceCode": "f5575583-a8ad-46a0-a817-b96acf378b6d"
}
                            

Add On Search

Another optional step is to search for any add on items available to upsell on a specified package. Information returned in the Add On Search API can be used to display available selections to a user and used to create any selected items in the booking create payload.

Add On Search Request


{
    "location": {
        

"id": "1337PR0P"Original Id from search response

},

"id": "a1af2000012Y3mOAAS"Package Id from search response

,

"attendance": 50Requested number of attendees

}

Add On Search Response


{
    "data": {
        "elapsedTime": 22869,
        "items": [
            {
              "eventClassifications": [
                    {
                        "id": "a0o5e000003KCXXAA4",
                        "name": "Wedding"                       
                    }
                ],
                "itemType": "Item",
                "sourceItemId": "a150b000003ItOpAAK",
                "name": "Balloon",
                "abbreviation": "BAL",
                "description": "A single large balloon filled with helium.",
                "richDescription": "A single large balloon filled with helium.",
                "servingUnit": "Balloon",
                "soldByUnit": "Balloon",
                "alternateDescription": "A helium filled balloon.",
                "alternateLanguages": [
                    {
                        "languageCode": "FR",
                        "name": "ballon",
                        "richDescription": "ballon",
                        "servingUnit": "ballon",
                        "soldByUnit": "ballon"
                    }
                ],
                "preventQtyAdjustment": false,
                "allowDecimalQuantities": false,
                "quantityCalculation": "PerPerson",
                "serviceFactor": 1,
                "estimatedConsumptionPercentage": 100,
                

"calculatedQuantity": 50Calculated quantity from provided number of attendees

, "isInclusive": false, "unitPrice": 1.99, "inclusiveUnitPrice": 1.99, "adminCharge": 5, "adminIsIncludedInInclusivePrice": false, "gratuity": 20, "gratuityIsIncludedInInclusivePrice": false, "revenueClassificationId": "a1u0b000002zFvHAAU", "currencyCode": "USD" }, { "eventClassifications": [ { "id": "a0o5e000003KCXXAA4", "name": "Lunch prop" } ], "itemType": "DetailedMenu", "sourceItemId": "a150b000003ItOzAAK", "name": "Wine and Cheese", "abbreviation": "W&C", "description": "A cheese plate and a bottle of wine", "richDescription": "A cheese plate and a bottle of wine", "servingUnit": "Plate", "soldByUnit": "Plate", "alternateDescription": "A bottle of wine served with a cheese plate", "alternateLanguages": [ { "languageCode": "FR", "name": "Vin et fromage", "richDescription": "Vin et fromage", "servingUnit": "assiette", "soldByUnit": "assiette" } ], "preventQtyAdjustment": false, "allowDecimalQuantities": false, "quantityCalculation": "PerPerson", "serviceFactor": 6, "estimatedConsumptionPercentage": 80,

"calculatedQuantity": 7Calculated quantity from provided number of attendees

, "isInclusive": false, "unitPrice": 50, "inclusiveUnitPrice": 50, "adminCharge": 5, "adminIsIncludedInInclusivePrice": false, "gratuity": 20, "gratuityIsIncludedInInclusivePrice": false, "revenueClassificationId": "a1u0b000002zFvCAAU", "menuItems": [ { "priceWithMenu": true, "itemType": "Item", "sourceItemId": "a150b000003ItPTAA0", "name": "Cheese Plate", "abbreviation": "CHEESE", "description": "A platter of various gourmet cheeses – serves 6", "servingUnit": "plate", "soldByUnit": "plate", "alternateDescription": "6 servings of various gourmet cheeses", "alternateLanguages": [ { "languageCode": "FR", "name": "Assiette de fromage", "richDescription": "Assiette de fromage", "servingUnit": "assiette", "soldByUnit": "assiette" } ], "preventQtyAdjustment": false, "allowDecimalQuantities": false, "serviceFactor": 6, "estimatedConsumptionPercentage": 80,

"calculatedQuantity": 7Calculated quantity from provided number of attendees

, "isInclusive": false, "unitPrice": 10, "inclusiveUnitPrice": 10, "adminCharge": 5, "adminIsIncludedInInclusivePrice": false, "gratuity": 20, "gratuityIsIncludedInInclusivePrice": false, "revenueClassificationId": "a1u0b000002zFvCAAU", "currencyCode": "USD" }, { "priceWithMenu": true, "itemType": "Item", "sourceItemId": "a150b000003ItPEAA0", "name": "House Wine - Bottle", "abbreviation": "B-WINE-H", "description": "1 bottle of house wine", "servingUnit": "bottle", "soldByUnit": "bottle", "alternateDescription": "house wine served by the bottle", "alternateLanguages": [ { "languageCode": "FR", "name": "Vin Maison - Bouteille", "richDescription": "Vin Maison - Bouteille", "servingUnit": "bouteille", "soldByUnit": "bouteille" } ], "preventQtyAdjustment": false, "allowDecimalQuantities": false, "serviceFactor": 6, "estimatedConsumptionPercentage": 80,

"calculatedQuantity": 7Calculated quantity from provided number of attendees

, "isInclusive": false, "unitPrice": 40, "inclusiveUnitPrice": 40, "adminCharge": 5, "adminIsIncludedInInclusivePrice": false, "gratuity": 20, "gratuityIsIncludedInInclusivePrice": false, "revenueClassificationId": "a1u0b000002zFvDAAU", "currencyCode": "USD" } ], "itemRevenueBreakdowns": [ { "revenueClassificationId": "a1u0b000002zFvCAAU", "unitPrice": 10, "inclusiveUnitPrice": 10, "adminCharge": 5, "adminIsIncludedInInclusivePrice": false, "gratuity": 20, "gratuityIsIncludedInInclusivePrice": false, "currencyCode": "USD" }, { "revenueClassificationId": "a1u0b000002zFvDAAU", "unitPrice": 40, "inclusiveUnitPrice": 40, "adminCharge": 5, "adminIsIncludedInInclusivePrice": false, "gratuity": 20, "gratuityIsIncludedInInclusivePrice": false, "currencyCode": "USD" } ], "currencyCode": "USD" } ] }, "instanceCode": "86ea293c-93dd-4cc9-9bf7-66c556f414e9" }

Add On Item Taxes

Next, if add on items are selected and taxes are to be displayed to the customer then Get Tax Details should be called for each add on item. Get Tax Details returns all taxes for a given item by revenue classification.

Add On Item Taxes Request


                    
{
    "location": {
        

"id": "1337PR0P"Original Id from search response

},

"entityId": "a150b000003ItPTAA0"Item Id from add on search response

,

"quantity": 50Calculated quantity from add on search response

}

Add On Item Taxes Response


{
    "data": {
        "currencyCode": "USD",
        "id": "a150b000003ItPTAA0",
        "sourceType": "Item",
        "quantity": 50,
        "grandTotal": 665,
        "totalBase": 500,
        "totalTax": 40,
        "totalAdmin": 25,
        "totalGratuity": 100,
        "revenueClassifications": [
            {
                "id": "a1u0b000002zFvCAAU",
                "name": "Food",
                "grandTotal": 665,
                "totalBase": 500,
                "totalTax": 40,
                "totalAdmin": 25,
                "totalGratuity": 100,
                "taxes": [
                    {
                        "taxName": "State Tax",
                        "cost": 40,
                        "rate": 8,
                        "rateType": "Percent"
                    }
                ]
            }
        ]
    },
    "instanceCode": "7a52adec-4b09-49cd-a6f5-942e74ed1713"
}
                            

Add On Menu Taxes

Get Tax Details can also be called for any menu returned by an Add On Search request. Get Tax Details returns all taxes for a given menu by revenue classification.

Add On Menu Taxes Request


{
    "location": {
        

"id": "1337PR0P"Original Id from search response

},

"entityId": "a150b000003ItOzAAK"Item Id from add on search response

,

"quantity": 7Calculated quantity from add on search response

}

Add On Menu Taxes Response


{
    "data": {
        "currencyCode": "USD",
        "id": "a150b000003ItOzAAK",
        "sourceType": "Item",
        "quantity": 7,
        "grandTotal": 457.1,
        "totalBase": 350,
        "totalTax": 19.6,
        "totalAdmin": 17.5,
        "totalGratuity": 70,
        "revenueClassifications": [
            {
                "id": "a1u0b000002zFvCAAU",
                "name": "Food",
                "grandTotal": 93.1,
                "totalBase": 70,
                "totalTax": 5.6,
                "totalAdmin": 3.5,
                "totalGratuity": 14,
                "taxes": [
                    {
                        "taxName": "State Tax",
                        "cost": 5.6,
                        "rate": 8,
                        "rateType": "Percent"
                    }
                ]
            },
            {
                "id": "a1u0b000002zFvDAAU",
                "name": "Beverage",
                "grandTotal": 364,
                "totalBase": 280,
                "totalTax": 14,
                "totalAdmin": 14,
                "totalGratuity": 56,
                "taxes": [
                    {
                        "taxName": "City Tax",
                        "cost": 14,
                        "rate": 5,
                        "rateType": "Percent"
                    }
                ]
            }
        ]
    },
    "instanceCode": "1d0d0489-f754-442f-ac01-6dd03e529257"
}
                            

Booking Policy

Get Booking Policy Details prior to creating a booking.

Booking Policy Request


    

https://{BookingPolicy-url}/Active?date={booking-start-date}&channel={channel-id}&detail={true}&languageCode={language_code}Get Booking Policy by Channel, Date, and Language Code.

https://{BookingPolicy-url}/{policy-id}?detail={true}&{language_code}Get Booking Policies by Policy Id and Language Code.

Booking Policy by Channel, Date, and Language Code.

  • This endpoint is used to return a channel's active booking policy for the date provided.
  • If the channel is omitted, the requesting user's channel will be utilized.
  • If detail is set to true, then the booking policies returned will include all of the terms & conditions, deposit and cancellation policy info.
  • If a language code is provided in conjunction with detail being set to true, then terms & conditions, deposit and cancellation policy info will be provided for the specified language.

Booking Policies by Policy Id and Language Code.

  • Gets a booking policy along with all of its terms & conditions, deposit and cancellation policy info.
  • If a languageCode is provided the terms & conditions, deposit and cancellation policy info for the language specified will be returned.
  • If the detail parameter is set to false, only the booking policy info will be returned. Terms & conditions, deposit and cancellation policy info will not be returned.

Booking Policy Response



Sample Response when calling "https://{BookingPolicy-url}/Active?date=9999-03-15&channel=1234567&detail=true&languageCode=en"

{
  "data": 
    {
      

"bookingPolicyId": "e1866455-2a21-4942-b68e-84e67b9dd50d"bookingPolicyId applied when creating a booking.

, "channelId": "1234567", "name": "My Hotel", "description": "My BookingPolicy", "policyStartDate": "9999-01-01T00:00:00", "policyEndDate": "9999-12-31T00:00:00", "policyStatusId": "active", "termsAndConditions": [ { "termsAndConditionsId": "fb50d4ea-0d39-45be-961e-c855f57ebbe5", "bookingPolicyId": "e1866455-2a21-4942-b68e-84e67b9dd50d", "languageCode": "en", "body": "My Terms And Conditions" } ], "deposit": { "depositRules": [ { "depositRuleTexts": [ { "languageCode": "en", "description": "My Description..." } ], "daysBeforeArrival": 7, "amount": 20.00, "unit": "percent" } ] }, "cancellationPolicy": { "cancellationPolicyId": "fe455201-5be2-491a-81e9-9448442a62bb", "bookingPolicyId": "e1866455-2a21-4942-b68e-84e67b9dd50d", "gracePeriodHours": 24, "cancellationPolicyTexts": [ { "cancellationPolicyId": "fe455201-5be2-491a-81e9-9448442a62bb", "languageCode": "EN", "gracePeriodText": "Any applicable cancellation fee will be waived if cancelled within 24 hours of booking creation.", "description": "This is a summary of the grace period and all of the cancellation rules for this cancellation policy." } ], "cancellationRules": [ { "cancellationRuleId": "526f5795-df05-4471-b725-82110b3a837d", "cancellationPolicyId": "fe455201-5be2-491a-81e9-9448442a62bb", "daysBeforeArrival": 2, "amount": 75.00, "unit": "flat", "currencyCode": "USD", "cancellationRuleTexts": [ { "cancellationRuleId": "08251712-4058-4D16-A5A4-6FC3EB6FE22F", "languageCode": "EN", "description": "$75.00 fee applicable for cancellations made between 0 and 2 days from arrival date." } ] }, { "cancellationRuleId": "687668a4-26e6-464b-a342-35679877ea5e", "cancellationPolicyId": "fe455201-5be2-491a-81e9-9448442a62bb", "daysBeforeArrival": 7, "amount": 50.00, "unit": "percent", "cancellationRuleTexts": [ { "cancellationRuleId": "687668a4-26e6-464b-a342-35679877ea5e", "languageCode": "EN", "description": "50% fee applicable for cancellations made between 0 and 7 days from arrival date." } ] }, { "cancellationRuleId": "5dcca1a0-5a0f-4b4f-90f2-61aa487577d3", "cancellationPolicyId": "fe455201-5be2-491a-81e9-9448442a62bb", "daysBeforeArrival": 30, "amount": 25.00, "unit": "percent", "cancellationRuleTexts": [ { "cancellationRuleId": "5dcca1a0-5a0f-4b4f-90f2-61aa487577d3", "languageCode": "EN", "description": "25% fee applicable for cancellations made between 8 and 30 days from arrival date." } ] }, { "cancellationRuleId": "0bde4509-7253-46d1-87cc-c205ae80ca6e", "cancellationPolicyId": "fe455201-5be2-491a-81e9-9448442a62bb", "daysBeforeArrival": 365, "amount": 00.00, "unit": "percent", "cancellationRuleTexts": [ { "cancellationRuleId": "0bde4509-7253-46d1-87cc-c205ae80ca6e", "languageCode": "EN", "description": "0% fee applicable for cancellations made between 31 and 365 days from arrival date." } ] } } }, "correlationId": "7f61c27e-1e0d-4e69-a665-e67a6cf442ed" }

DepositRule

Get applicable DepositRule prior to sending the Deposit.

Get DepositRule Request


    

{BookingPolicy-url}/deposit?date={bookingDate}&depositDate={depositDate}&channel={string}&languageCode={string}Gets a single DepositRule that applies to the time you are attempting to make the deposit.

Get Deposit Rule endpoint to get the deposit rule that applies when making a deposit on a given date.

  • The date query parameter indicates the booking start date. This is the date when a booking is going to start.
  • The depositDate query parameter indicates the date the user intends to make the deposit payment. This date is used to determine which depositRule applies based on the time between the depositDate and the booking Start date.
  • If a language code is provided, then depositText info will be provided for the specified language.

Get DepositRule Response



Sample Response when calling:
https://{BookingPolicy-url}/deposit?date=9999-07-10&depositDate=9999-07-01&channel=1234567&languageCode=en

{
  "data": 
    {
        "description": "If you are more than 7 days until booking date, the deposit will cost 20%",
        "languageCode": "en",
        "daysBeforeArrival": 365,
        "amount": 20.00,
        "unit": "percent"
    },
    "correlationId": "7f61c27e-1e0d-4e69-a665-e67a6cf442ed"
}
                            

Booking Create Payload

In order to create a Booking request the user needs to select an available function room and provide contact information. Once that detail is provided all other information can be derived from the previous package search response. Upon successful Booking Create call, the booking will automatically be assigned to the Default Lead Coordinator of the location (if one exists) who will be sent an email alerting them of the booking creation.

Booking Request


{
    "locationId": "1337PR0P",
    "name": "Lunch Meeting",
    

"leadSource": "A Channel Partner - Online Bookings"Sets the LeadSource of the booking.

,

"arrivalDate": "2018-10-01Z"Arrival date of the booking

,

"departureDate": "2018-10-02Z"Departure date of the booking

, "status": "Prospect",

"sourcePackageId": "a1af2000012Y3mOAAS"Package Id that was selected

, "numberOfAttendees": 50,

"events"Detail out all events to be included from Search Response

: [ { "name": "Lunch Meeting",

"functionRoom": "a0uf200000Of54VAAR"Requested Function Room Id

,

"rental": 100Rental rate for Function Room

,

"eventClassification": "a0jf200000EEmQPAA1"Event Classification Id

,

"startTime": "2018-10-01T11:30:00Z"Start time for the event

,

"endTime": "2018-10-01T13:00:00Z"End time for the event

,

"eventItems"Detail out all event items to be included from Add On Search Response

: [ { "sourceItemId": "a150b000003ItOpAAK", "revenueClassificationId": "a1u0b000002zFvHAAU", "name": "Balloon", "description": "A single large balloon filled with helium.",

"bookedQuantity": 50Calculated quantity from add on search response

, "price": "1.99", "consumptionPercentage": 100, "serviceFactor": 1, "soldBy": "Balloon", "units": "Balloon", "discountPercentage": 0 } ],

"eventMenus"Detail out all event menus to be included from Add On Search Response

: [ { "sourceMenuId": "a150b000003ItOzAAK", "revenueClassificationId": "a1u0b000002zFvCAAU", "name": "Wine and Cheese", "description": "A cheese plate and a bottle of wine",

"bookedQuantity": 7Calculated quantity from add on search response

, "consumptionPercentage": 80, "serviceFactor": 6, "soldBy": "Plate", "units": "Plate", "priceBreakdown": [ { "revenueClassificationId": "a1u0b000002zFvCAAU", "price": 10 }, { "revenueClassificationId": "a1u0b000002zFvDAAU", "price": 40 } ], "eventMenuItems": [ { "sourceItemId": "a150b000003ItPTAA0", "revenueClassificationId": "a1u0b000002zFvCAAU", "name": "Cheese Plate", "description": "A platter of various gourmet cheeses – serves 6",

"bookedQuantity": 7Calculated quantity from add on search response

, "price": "10", "priceWithMenu": "true", "consumptionPercentage": 80, "serviceFactor": 6, "soldBy": "plate", "units": "plate", "discountPercentage": 0 }, { "sourceItemId": "a150b000003ItPEAA0", "revenueClassificationId": "a1u0b000002zFvDAAU", "name": "House Wine - Bottle", "description": "1 bottle of house wine",

"bookedQuantity": 7Calculated quantity from add on search response

, "price": 40, "priceWithMenu": "true", "consumptionPercentage": 80, "serviceFactor": 6, "soldBy": "bottle", "units": "bottle", "discountPercentage": 0 } ], "discountPercentage": 0 } ] } ],

"primaryContact"Contact information provided by the user.

: { "firstName": "Kylo", "lastName": "Ren", "email": "kylo4lyfe@amadeus.com", "phone": "6034367500", "mobile": "6034367500", "address": { "street": "75 New Hampshire Ave.", "city": "Portsmouth", "state": "NH", "zipCode": "03801", "country": "US" } },

"guestroomBlock"Detail information on guestrooms if required.

: { "Name": "Lunch Meeting", "guestrooms": [ { "patternDate": "2018-10-01", "roomCode": "KNG", "occupancyQuantity": [ { "occupancyType": "SingleOccupancy", "price": 100, "quantity": 50 } ] } ] } }

Booking Response


{
    "data": {
        

"confirmationNumber": "SK5BE9TA"The confirmation number for the booking

,

"id": "a0Lf200000AlH7kEAF"The Id of created booking

, "successful": true,

"locationDetails"Detail information on the location where the booking was created.

: { "name": "The Mansion", "email": "themansion@test.com", "phone": "(603) 555-5555" } } }

Cancel Booking

This endpoint can be used to cancel a booking that was created via the Create Booking endoint. The Cancel booking api takes in the locationId and BookingId as parameters to the URL and returns the Id of the cancelled booking as well as the URL to retrieve the CancellationPolicy of the booking.

Sample Cancel Booking Request URL


https://api.newmarketinc.com/api/DirectBook/{locationId}/Booking/{BookingId}/CancelSample URL to cancel a specified booking at a specified Location.

Cancel Booking Response


{
  "data": {
    

"cancellationPolicy": "https://api.newmarketinc.com/api/BookingPolicy/v1/BookingPolicy/{policyId}/Cancellations?date=2020-09-03&cancellationDate=2021-04-22"Url to the Cancellation Policy of the Booking.

,

"id": "a0Lf200000AlH7kEAF"Id of cancelled booking.

, "successful": true } }

Add Deposit Payload

If a deposit was collected the booking can be updated to record the transaction details. This step is not required and Amadeus Hospitality does not offer a payment gateway integration. This request is not for payment processing, only tracking that it occurred.

Add Deposit Request


{
    

"BookingId": "a0Lf200000AlH7kEAF"Id of created booking.

,

"Amount":500Amount the transaction was for.

, "CurrencyIsoCode": "USD",

"ReferenceNumber": "1234"Reference number returned from payment gateway for transaction.

}

Add Deposit Response


{
    "data": {
        

"id": "a2Hf20000017922EAA"Id of created transaction.

, "successful": true } }

Get Booking

This endpoint can be used to retrieve the current state of a booking that was created via the Create Booking endpoint. The get booking api takes in the locationId and BookingId as parameters to the URL and returns the booking.

Sample Get Booking Request URL


https://api.newmarketinc.com/api/DirectBook/{locationId}/Booking/{BookingId}Sample URL to get a specified booking at a specified Location.

Get Booking Response


{
    "data": {
        "bookingId": "a0Lf200000AlH7kEAF",
        "name": "Lunch Meeting",
        "location": {
            "name": "The Mansion",
            "address": {
                "line1": "123 Main St.",
                "city": "Portsmouth",
                "stateProvince": "NH",
                "postalCode": "03801"
            },
            "phone": "(555) 555-5555",
            "email": "themansion@test.com"
        },
        "bookedDate": "2018-09-01T00:00:00",
        "status": "Definite",
        "arrivalDate": "2018-10-01T00:00:00",
        "departureDate": "2018-10-02T00:00:00",
        "events": {
            "minEventStartDateTime": "2018-10-01T11:30:00",
            "maxEventEndDateTime": "2018-10-01T13:00:00",
            "numberOfEvents": 1,
            "eventDetails": [
                {
                    "name": "Lunch Meeting",
                    "status": "FunctionRoomConfirmed",
                    "attendees": 50,
                    "startDateTime": "2018-10-01T11:30:00",
                    "endDateTime": "2018-10-01T13:00:00",
                    "functionRoom": "Meeting Room A"
                }
            ]
        },
        "guestrooms": [
            {
                "date": "2018-10-01T00:00:00",
                "rooms": 50
            }
        ],
        "account": {
            "name": "Amadeus",
            "address": {
                "city": "Portsmouth",
                "stateProvince": "NH",
                "postalCode": "03801",
                "country": "US"
            }
        },
        "contact": {
            "name": "John Smith",
            "address": {
                "line1": "75 New Hampshire Ave.",
                "city": "Portsmouth",
                "stateProvince": "NH",
                "postalCode": "03801",
                "country": "US"
            }
        },
        "policyId": "e1866455-2a21-4942-b68e-84e67b9dd50d"
    }
}
                            

API Data Flow V2

The APIs in this product require responses to construct the payloads for downstream requests. This section provides a simple example of the end to end flow for the Shop & Book experience.

Package Availability Search V2

To create the first request the following is a sample search payload. To see what fields are required vs optional, see the API documentation.

Search Request


{
  

"StartDate": "2018-10-01Z"Starting timeframe of the search.

,

"EndDate": "2018-10-02Z"Ending timeframe of the search

, "FunctionRoomSetupName": { "LogicalOperator": "nop", "Parameters": [ { "ComparisonOperator": "eq",

"Value": "Classroom"Filter on Function Room Setup

} ] }, "LanguageCode": "en", "Locations": [ {

"Id": "1337PR0P"Id of the Location being searched

} ],

"NumberOfAttendees": 50Requested number of attendees

}

Search Response


{
  "data": {
    "elapsedTime": 3656,
    "locations": [
      {
        "id": "a19f2000002rDwvAAE",
        "name": "The Mansion",
        "startingAtPrice": 30.00,
        "packages": [
          {
            "currencyCode": "USD",
            "description": "Includes a classroom style lunch meeting.",
            "eventPriceTotal": 30,
            "functionRoomSetups": [
              {
                "name": "Classroom",
                

"timeSlots": [If no timeslots are specified on the package, this list will still contain one element for the default times. If Timeslots are specified all event times will be overwritten with times from the timeslot.

{ "days": [ { "date": "2018-10-01", "functionRooms": [ { "id": "a0uf200000Of54VAAR", "name": "Meeting Room A", "capacity": 100, "events": [ { "id": "a1Tf2000008bcooEAA", "name": "Lunch Meeting", "startTime": "11:30:00", "endTime": "13:00:00", "rental": 100, "rentalCalculation": "PerPerson", "eventClassificationId": "a0jf200000EEmQPAA1" } ] } ] } ] } ] } ],

"id": "a1af2000012Y3mOAAS"The Id of the resulting package

, "isInclusive": "false", "name": "Lunch Meeting Package" } ] } ] }, "instanceCode": "4d98f744-6e78-454a-a247-226f2dff0644" }

Package Detail Search V2

The next (optional) step after getting availability data is to query for more information on a specific package. The Package Detail API returns information such as Alternate Languages, Items, Menus, and Descriptions. Data is purely supplemental and is used only to enrich user experience; this information is not required to submit a Create Booking request.

Detail Request


{
  "location": {
    

"id": "1337PR0P"Original Id from search response

},

"id": "a1af2000012Y3mOAAS"Package Id from search response

,

"NumberOfAttendees": 50Requested number of attendees

}

Detail Response


{
  "data": {
    "elapsedTime": 9167,
    "packageDetails": {
      "id": "a1af2000012Y3mOAAS",
      "name": "Lunch Meeting Package",
      "description": "Classroom Style meeting with lunch served.",
      "alternateLanguage": [
        {
          "languageCode": "FR",
          "name": "Déjeuner de travail",
          "description": "Déjeuner de travail"
        }
      ],
      "packageEvents": [
        {
          

"id": "a1Tf2000008bcooEAA",Package Event Id the detail relates too.

"eventClassification": { "id": "a0jf200000EEmQPAA1", "defaultStartTime": "11:30", "defaultEndTime": "13:00", "name": "Lunch Meeting", "description": "A lunch meeting", "alternateLanguage": [ { "languageCode": "FR", "name": "Déjeuner de travail", "description": "Déjeuner de travail" } ] },

"items"List of Items and their descriptions for event

: [ { "id": "a15f2000008Jbw7AAC", "name": "Pizza", "richDescription": "An authentic New York style pizza with tomato sauce made in-house, fresh mozzarella, and choice of toppings - serves 5.", "alternateLanguage": [ { "languageCode": "FR", "name": "Pizza", "description": "Pizza" } ], "quantity": 10, "estimatedConsumptionPercentage": 100.00, "serviceFactor": 5.00, "allowDecimalQuantities": "false" } ] } ] } }, "instanceCode": "f91a93fd-c133-43dc-9528-9ffad8dff86b" }

The Package Details endpoint includes an optional query parameter that enhances the response to include package pricing information, the list of function rooms associated to the package (along with associated pricing), and add on items (along with associated pricing). The Detail Response below displays that additional pricing information with that optional parameter provided.

Detail Request


{
  "location": {
    

"id": "a1G5e0000007fPgEAI"Original Id from search response

},

"id": "a1k5e0000021HWkAAM"Package Id from search response

,

"NumberOfAttendees": 20Requested number of attendees

}

Detail Response


{
      "data": {
        "elapsedTime": 19763,
        "packageDetails": {
          "id": "a1k5e0000021FV5AAM",
          "name": "Technocrats Corp Package Ref",
          "isInclusive": true,
          "perPersonPrice": 62.80,
          "inclusivePerPersonPrice": 80.00,
          "pricing": {
            "totalBase": 62.80,
            "totalAdmin": 5.86,
            "totalGratuity": 5.86,
            "totalTax": 7.45,
            "grandTotal": 82.00
          },
          

"functionRooms"List of Function Rooms

: [ { "id": "a0z5e000001tz7vAAA", "name": "SnB binary beast advanced property 1:Conference room", "rental": 2000.00, "rentalCalculation": "PerEvent", "pricing": { "totalBase": 2000.00, "totalAdmin": 20.00, "totalGratuity": 200.00, "totalTax": 222.00, "grandTotal": 2442.00 } }, { "id": "a0z5e000001uUwTAAU", "name": "Event Only Inclusive Package:Technocrats FR", "rental": 1000.00, "rentalCalculation": "PerPerson", "pricing": { "totalBase": 1000.00, "totalAdmin": 10.00, "totalGratuity": 100.00, "totalTax": 111.00, "grandTotal": 1221.00 } } ], "packageEvents": [ {

"id": "a1c5e000001OANfAAO",Package Event Id the detail relates too.

"eventClassification": { "id": "a0o5e000003KCXSAA4", "defaultStartTime": "04:45:00", "defaultEndTime": "21:15:00", "name": "Wedding", "description": "Weeding" },

"items"List of Items and their descriptions for event

: [ { "id": "a1B5e000001f1NfEAI", "name": "Sandwich", "quantity": 1, "servingUnit": "100", "soldByUnit": "1", "estimatedConsumptionPercentage": 100.00, "serviceFactor": 1.00, "allowDecimalQuantities": false } ],

"addOnItems"List of Addon Items

: [ { "pricing": { "totalBase": 9.090, "totalAdmin": 0.90, "totalGratuity": 0, "totalTax": 1.00, "grandTotal": 11.00 }, "itemType": "Item", "sourceItemId": "a1B5e000001fP5dEAE", "name": "Technocrats Item with EC", "preventQtyAdjustment": false, "allowDecimalQuantities": false, "quantityCalculation": "PerPerson", "serviceFactor": 2.00, "estimatedConsumptionPercentage": 100.00, "calculatedQuantity": 1, "isInclusive": true, "unitPrice": 9.09, "inclusiveUnitPrice": 10.00, "revenueClassificationId": "a275e000000309SAAQ", "currencyCode": "USD" }, { "pricing": { "totalBase": 10.00, "totalAdmin": 1.00, "totalGratuity": 1.00, "totalTax": 1.20, "grandTotal": 13.20 }, "itemType": "Item", "sourceItemId": "a1B5e000001fPihEAE", "name": "Grilled Sandwich", "preventQtyAdjustment": false, "allowDecimalQuantities": false, "quantityCalculation": "NotCalculated", "serviceFactor": 1.00, "estimatedConsumptionPercentage": 100.00, "calculatedQuantity": 1, "isInclusive": false, "unitPrice": 10.00, "inclusiveUnitPrice": 12.10, "revenueClassificationId": "a275e000000302lAAA", "currencyCode": "USD" }, { "pricing": { "totalBase": 16.52, "totalAdmin": 1.23, "totalGratuity": 0.49, "totalTax": 1.82, "grandTotal": 20.09 }, "itemType": "SimpleMenu", "sourceItemId": "a1B5e000001fPk2EAE", "name": "Lunch and Learn", "preventQtyAdjustment": false, "allowDecimalQuantities": false, "quantityCalculation": "NotCalculated", "serviceFactor": 1.00, "estimatedConsumptionPercentage": 100.00, "calculatedQuantity": 1, "isInclusive": true, "unitPrice": 16.52, "inclusiveUnitPrice": 20.00, "revenueClassificationId": "a275e000000302lAAA", "currencyCode": "USD" } ] } ] } }, "instanceCode": "4f190033-d790-40fe-814e-d55ac6224a6f" }

Package Taxes Breakdown V2

Retrieves the detailed cost breakdown, including base cost, taxes, gratuity, and admin fees for each package retrieved by the package availability search. Enhancements over Version 1 of this endpoint include capabilities for retrieving cost summaries for multiple packages across multiple locations. Response time may be longer than usual if cost details are requested for more than 30 packages at a time.

Package Taxes Breakdown V2 Request


[
  {
    "location": {
      

"id": "a1G5e0000006wyoEAA"Original Id from search response. The location associated with the given package.

}, "entities": [ {

"entityId": "a1k5e00000219tvAAA"Package Id from search response

,

"quantity": 1The number of package attendees.

}, {

"entityId": "a1k5e00000219tCAAQ"Package Id from search response

,

"quantity": 1The number of package attendees.

} ] } ]

Package Taxes Breakdown V2 Response


{
  "data": [
    {
      "locationId": "a1G5e0000006wyoEAA",
      "currencyCode": "USD",
      "id": "a1k5e00000219tvAAA",
      "sourceType": "Package",
      "quantity": 1.0,
      "grandTotal": 5.60,
      "totalBase": 5.00,
      "totalTax": 0.50,
      "totalAdmin": 0.05,
      "totalGratuity": 0.05,
      "revenueClassifications": [
        {
          "id": "a275e00000030IlAAI",
          "name": "Beverage",
          "grandTotal": 5.60,
          "totalBase": 5.00,
          "totalTax": 0.50,
          "totalAdmin": 0.05,
          "totalGratuity": 0.05,
          "taxes": [
            {
              "taxName": "State Sales Tax",
              "cost": 0.50,
              "rate": 10.00,
              "rateType": "Percent"
            }
          ]
        }
      ]
    },
    {
      "locationId": "a1G5e0000006wyoEAA",
      "currencyCode": "USD",
      "id": "a1k5e00000219tCAAQ",
      "sourceType": "Package",
      "quantity": 1.0,
      "grandTotal": 11.60,
      "totalBase": 10.00,
      "totalTax": 1.00,
      "totalAdmin": 0.50,
      "totalGratuity": 0.10,
      "revenueClassifications": [
        {
          "id": "a275e00000030IlAAI",
          "name": "Beverage",
          "grandTotal": 11.60,
          "totalBase": 10.00,
          "totalTax": 1.00,
          "totalAdmin": 0.50,
          "totalGratuity": 0.10,
          "taxes": [
            {
              "taxName": "State Sales Tax",
              "cost": 1.00,
              "rate": 10.00,
              "rateType": "Percent"
            }
          ]
        }
      ]
    }
  ],
  "instanceCode": "0496225e-fe2c-46e5-b0c2-ed70f0e1d859"
}
                            

Package Event Taxes Breakdown V2

Retrieves the detailed cost breakdown, including base cost, taxes, gratuity, and admin fees for each package event retrieved by the package availability search. Enhancements over Version 1 of this endpoint include capabilities for retrieving cost summaries for multiple package events across multiple locations. Response time may be longer than usual if cost details are requested for more than 30 package events at a time.

Package Event Taxes Breakdown V2 Request


[
  {
    "location": {
      

"id": "a1G5e0000006wyoEAA"Original Id from search response. The location associated with the given package event.

}, "entities": [ {

"entityId": "a1c5e000000P6qmAAC"Package Event Id from search response

,

"quantity": 1The number of the package event’s attendees.

}, {

"entityId": "a1c5e000000P6rkAAC"Package Event Id from search response

,

"quantity": 1The number of the package event’s attendees.

} ] } ]

Package Event Taxes Breakdown V2 Response


{
  "data": [
    {
      "locationId": "a1G5e0000006wyoEAA",
      "currencyCode": "USD",
      "id": "a1c5e000000P6qmAAC",
      "sourceType": "PackageEvent",
      "quantity": 1.0,
      "grandTotal": 5.60,
      "totalBase": 5.00,
      "totalTax": 0.50,
      "totalAdmin": 0.05,
      "totalGratuity": 0.05,
      "revenueClassifications": [
        {
          "id": "a275e00000030IoAAI",
          "name": "Administrative Charge",
          "grandTotal": 5.60,
          "totalBase": 5.00,
          "totalTax": 0.50,
          "totalAdmin": 0.05,
          "totalGratuity": 0.05,
          "taxes": [
            {
              "taxName": "State Sales Tax",
              "cost": 0.50,
              "rate": 10.00,
              "rateType": "Percent"
            }
          ]
        }
      ]
    },
    {
      "locationId": "a1G5e0000006wyoEAA",
      "currencyCode": "USD",
      "id": "a1c5e000000P6rkAAC",
      "sourceType": "PackageEvent",
      "quantity": 1.0,
      "grandTotal": 2.26,
      "totalBase": 2.00,
      "totalTax": 0.20,
      "totalAdmin": 0.02,
      "totalGratuity": 0.04,
      "revenueClassifications": [
        {
          "id": "a275e00000030ImAAI",
          "name": "Resource",
          "grandTotal": 2.26,
          "totalBase": 2.00,
          "totalTax": 0.20,
          "totalAdmin": 0.02,
          "totalGratuity": 0.04,
          "taxes": [
            {
              "taxName": "State Sales Tax",
              "cost": 0.20,
              "rate": 10.00,
              "rateType": "Percent"
            }
          ]
        }
      ]
    }
  ],
  "instanceCode": "48f04622-1998-4f30-9ae9-6b4e1ac0cddb"
}
                            

Function Room Taxes Breakdown V2

Retrieves the detailed cost breakdown, including base cost, taxes, gratuity, and admin fees for each function room retrieved by the package availability search. Enhancements over Version 1 of this endpoint include capabilities for retrieving cost summaries for multiple function rooms across multiple locations. Response time may be longer than usual if cost details are requested for more than 30 function rooms at a time.

Function Room Taxes Breakdown V2 Request


[
  {
    "location": {
      

"id": "a1G5e0000006wyoEAA"Original Id from search response.The location associated with the given function room

}, "entities": [ {

"cost": 100This is the rental cost returned from the availability search.

, "isCostInclusive": "false", "adminPercentage": 2, "adminIsIncludedInInclusiveCost": "false", "gratuityPercentage": 5, "gratuityIsIncludedInInclusiveCost": "false",

"entityId": "a0z5e000001uGvQAAU"The function room’s identifier.

,

"quantity": 1The number of times the function room is to be rented.

}, {

"cost": 200This is the rental cost returned from the availability search.

, "isCostInclusive": "false", "adminPercentage": 5, "adminIsIncludedInInclusiveCost": "false", "gratuityPercentage": 2.5, "gratuityIsIncludedInInclusiveCost": "false",

"entityId": "a0y4S000000Hwb2QAC"The function room’s identifier.

,

"quantity": 3The number of times the function room is to be rented.

} ] } ]

Function Room Taxes Breakdown V2 Response


{
  "data": [
    {
      "locationId": "a1G5e0000006wyoEAA",
      "currencyCode": "USD",
      "id": "a0z5e000001uGvQAAU",
      "sourceType": "PackageFunctionRoom",
      "quantity": 1.0,
      "grandTotal": 117.00,
      "totalBase": 100.0,
      "totalTax": 10.00,
      "totalAdmin": 2.00,
      "totalGratuity": 5.00,
      "revenueClassifications": [
        {
          "id": "a275e00000030IqAAI",
          "name": "Function Room Rental",
          "grandTotal": 117.00,
          "totalBase": 100.0,
          "totalTax": 10.00,
          "totalAdmin": 2.00,
          "totalGratuity": 5.00,
          "taxes": [
            {
              "taxName": "Tax 1",
              "cost": 10.00,
              "rate": 10.00,
              "rateType": "Percent"
            }
          ]
        }
      ]
    },
    {
      "locationId": "a1G5e0000006wyoEAA",
      "currencyCode": "USD",
      "id": "a0y4S000000Hwb2QAC",
      "sourceType": "PackageFunctionRoom",
      "quantity": 3.0,
      "grandTotal": 705.00,
      "totalBase": 600.0,
      "totalTax": 60.00,
      "totalAdmin": 30.00,
      "totalGratuity": 15.00,
      "revenueClassifications": [
        {
          "id": "a275e00000030IqAAI",
          "name": "Function Room Rental",
          "grandTotal": 705.00,
          "totalBase": 600.0,
          "totalTax": 60.00,
          "totalAdmin": 30.00,
          "totalGratuity": 15.00,
          "taxes": [
            {
              "taxName": "Tax 1",
              "cost": 60.00,
              "rate": 10.00,
              "rateType": "Percent"
            }
          ]
        }
      ]
    }
  ],
  "instanceCode": "d09aed3e-dd6a-4dfe-ba42-a35b11478a0f"
}
                            

GuestRoom Room Taxes Breakdown V2

Retrieves the detailed cost breakdown, including base cost, taxes, gratuity, and admin fees for each guestroom retrieved by the package availability search. Enhancements over Version 1 of this endpoint include capabilities for retrieving cost summaries for multiple guestrooms across multiple locations. Response time may be longer than usual if cost details are requested for more than 30 guestrooms at a time.

GuestRoom Room Taxes Breakdown V2 Request


[
  {
    "location": {
      

"id": "a1G5e0000006wyoEAA"Original Id from search response. The location associated with the given guest room

}, "entities": [ {

"occupancyType": "SingleOccupancy"This is how many people will be in the room:

,

"cost": 100This is the cost of the room for the given occupancy type.

, "isCostInclusive": "false", "adminPercentage": 0, "adminIsIncludedInInclusiveCost": "false", "gratuityPercentage": 0, "gratuityIsIncludedInInclusiveCost": "false",

"entityId": "King"The guest room’s identifier

,

"quantity": 1This is the number of rooms being requested.

}, {

"occupancyType": "DoubleOccupancy"This is how many people will be in the room:

,

"cost": 100This is the cost of the room for the given occupancy type.

, "isCostInclusive": "false", "adminPercentage": 0, "adminIsIncludedInInclusiveCost": "false", "gratuityPercentage": 0, "gratuityIsIncludedInInclusiveCost": "false",

"entityId": "Queen"The guest room’s identifier

,

"quantity": 2This is the number of rooms being requested.

} ] } ]

GuestRoom Room Taxes Breakdown V2 Response


{
  "data": [
    {
      "locationId": "a1G5e0000006wyoEAA",
      "currencyCode": "USD",
      "id": "KNG",
      "sourceType": "Guestroom",
      "quantity": 1.0,
      "grandTotal": 602.50,
      "totalBase": 100.0,
      "totalTax": 502.50,
      "totalAdmin": 0.0,
      "totalGratuity": 0.0,
      "revenueClassifications": [
        {
          "id": "Guestroom",
          "name": "Guestroom",
          "grandTotal": 602.50,
          "totalBase": 100.0,
          "totalTax": 502.50,
          "totalAdmin": 0.0,
          "totalGratuity": 0.0,
          "taxes": [
            {
              "taxName": "Ocucpancy Tax",
              "cost": 500.00,
              "rate": 500.00,
              "rateType": "Flat"
            },
            {
              "taxName": "Tax 1",
              "cost": 2.50,
              "rate": 2.50,
              "rateType": "Percent"
            }
          ]
        }
      ]
    },
    {
      "locationId": "a1G5e0000006wyoEAA",
      "currencyCode": "USD",
      "id": "Queen",
      "sourceType": "Guestroom",
      "quantity": 2.0,
      "grandTotal": 2205.00,
      "totalBase": 200.0,
      "totalTax": 2005.00,
      "totalAdmin": 0.0,
      "totalGratuity": 0.0,
      "revenueClassifications": [
        {
          "id": "Guestroom",
          "name": "Guestroom",
          "grandTotal": 2205.00,
          "totalBase": 200.0,
          "totalTax": 2005.00,
          "totalAdmin": 0.0,
          "totalGratuity": 0.0,
          "taxes": [
            {
              "taxName": "Ocucpancy Tax",
              "cost": 2000.00,
              "rate": 500.00,
              "rateType": "Flat"
            },
            {
              "taxName": "Tax 1",
              "cost": 5.00,
              "rate": 2.50,
              "rateType": "Percent"
            }
          ]
        }
      ]
    }
  ],
  "instanceCode": "bfc4d161-4d7f-47b4-a2ef-d2e983383f81"
}

                            

Add On Search V2

Another optional step is to search for any add on items available to upsell on a specified package. Information returned in the Add On Search API can be used to display available selections to a user and used to create any selected items in the booking create payload.

Add On Search Request


{
  "location": {
    

"id": "1337PR0P"Original Id from search response

},

"id": "a1af2000012Y3mOAAS"Package Id from search response

,

"attendance": 50Requested number of attendees

}

Add On Search Response


{
  "data": {
    "elapsedTime": 22869,
    "items": [
      {
        "eventClassifications": [
          {
            "id": "a0o5e000003KCXXAA4",
            "name": "Wedding"
          }
        ],
        "itemType": "Item",
        "sourceItemId": "a150b000003ItOpAAK",
        "name": "Balloon",
        "abbreviation": "BAL",
        "description": "A single large balloon filled with helium.",
        "richDescription": "A single large balloon filled with helium.",
        "servingUnit": "Balloon",
        "soldByUnit": "Balloon",
        "alternateDescription": "A helium filled balloon.",
        "alternateLanguages": [
          {
            "languageCode": "FR",
            "name": "ballon",
            "richDescription": "ballon",
            "servingUnit": "ballon",
            "soldByUnit": "ballon"
          }
        ],
        "preventQtyAdjustment": "false",
        "allowDecimalQuantities": "false",
        "quantityCalculation": "PerPerson",
        "serviceFactor": 1,
        "estimatedConsumptionPercentage": 100,
        

"calculatedQuantity": 50Calculated quantity from provided number of attendees

, "isInclusive": "false", "unitPrice": 1.99, "inclusiveUnitPrice": 1.99, "adminCharge": 5, "adminIsIncludedInInclusivePrice": "false", "gratuity": 20, "gratuityIsIncludedInInclusivePrice": "false", "revenueClassificationId": "a1u0b000002zFvHAAU", "currencyCode": "USD" }, { "eventClassifications": [ { "id": "a0o5e000003KCXXAA4", "name": "Lunch prop" } ], "itemType": "DetailedMenu", "sourceItemId": "a150b000003ItOzAAK", "name": "Wine and Cheese", "abbreviation": "W&C", "description": "A cheese plate and a bottle of wine", "richDescription": "A cheese plate and a bottle of wine", "servingUnit": "Plate", "soldByUnit": "Plate", "alternateDescription": "A bottle of wine served with a cheese plate", "alternateLanguages": [ { "languageCode": "FR", "name": "Vin et fromage", "richDescription": "Vin et fromage", "servingUnit": "assiette", "soldByUnit": "assiette" } ], "preventQtyAdjustment": "false", "allowDecimalQuantities": "false", "quantityCalculation": "PerPerson", "serviceFactor": 6, "estimatedConsumptionPercentage": 80,

"calculatedQuantity": 7Calculated quantity from provided number of attendees

, "isInclusive": "false", "unitPrice": 50, "inclusiveUnitPrice": 50, "adminCharge": 5, "adminIsIncludedInInclusivePrice": "false", "gratuity": 20, "gratuityIsIncludedInInclusivePrice": "false", "revenueClassificationId": "a1u0b000002zFvCAAU", "menuItems": [ { "priceWithMenu": "true", "itemType": "Item", "sourceItemId": "a150b000003ItPTAA0", "name": "Cheese Plate", "abbreviation": "CHEESE", "description": "A platter of various gourmet cheeses – serves 6", "servingUnit": "plate", "soldByUnit": "plate", "alternateDescription": "6 servings of various gourmet cheeses", "alternateLanguages": [ { "languageCode": "FR", "name": "Assiette de fromage", "richDescription": "Assiette de fromage", "servingUnit": "assiette", "soldByUnit": "assiette" } ], "preventQtyAdjustment": "false", "allowDecimalQuantities": "false", "serviceFactor": 6, "estimatedConsumptionPercentage": 80,

"calculatedQuantity": 7Calculated quantity from provided number of attendees

, "isInclusive": "false", "unitPrice": 10, "inclusiveUnitPrice": 10, "adminCharge": 5, "adminIsIncludedInInclusivePrice": "false", "gratuity": 20, "gratuityIsIncludedInInclusivePrice": "false", "revenueClassificationId": "a1u0b000002zFvCAAU", "currencyCode": "USD" }, { "priceWithMenu": "true", "itemType": "Item", "sourceItemId": "a150b000003ItPEAA0", "name": "House Wine - Bottle", "abbreviation": "B-WINE-H", "description": "1 bottle of house wine", "servingUnit": "bottle", "soldByUnit": "bottle", "alternateDescription": "house wine served by the bottle", "alternateLanguages": [ { "languageCode": "FR", "name": "Vin Maison - Bouteille", "richDescription": "Vin Maison - Bouteille", "servingUnit": "bouteille", "soldByUnit": "bouteille" } ], "preventQtyAdjustment": "false", "allowDecimalQuantities": "false", "serviceFactor": 6, "estimatedConsumptionPercentage": 80,

"calculatedQuantity": 7Calculated quantity from provided number of attendees

, "isInclusive": "false", "unitPrice": 40, "inclusiveUnitPrice": 40, "adminCharge": 5, "adminIsIncludedInInclusivePrice": "false", "gratuity": 20, "gratuityIsIncludedInInclusivePrice": "false", "revenueClassificationId": "a1u0b000002zFvDAAU", "currencyCode": "USD" } ], "itemRevenueBreakdowns": [ { "revenueClassificationId": "a1u0b000002zFvCAAU", "unitPrice": 10, "inclusiveUnitPrice": 10, "adminCharge": 5, "adminIsIncludedInInclusivePrice": "false", "gratuity": 20, "gratuityIsIncludedInInclusivePrice": "false", "currencyCode": "USD" }, { "revenueClassificationId": "a1u0b000002zFvDAAU", "unitPrice": 40, "inclusiveUnitPrice": 40, "adminCharge": 5, "adminIsIncludedInInclusivePrice": "false", "gratuity": 20, "gratuityIsIncludedInInclusivePrice": "false", "currencyCode": "USD" } ], "currencyCode": "USD" } ] }, "instanceCode": "86ea293c-93dd-4cc9-9bf7-66c556f414e9" }

Item Taxes Breakdown V2

Retrieves the detailed cost breakdown, including base cost, taxes, gratuity, and admin fees for each package item retrieved by the package availability search. Enhancements over Version 1 of this endpoint include capabilities for retrieving cost summaries for package items across multiple locations. Response time may be longer than usual if cost details are requested for more than 30 package items at a time.

Item Taxes Breakdown V2 Request


[
  {
    "location": {
      

"id": "a1G5e0000006wyoEAA"Original Id from search response.The location associated with the given item.

}, "entities": [ {

"entityId": "a1B5e000001fCHoEAM"Item Id from search response

,

"quantity": 1Requested number of attendees

}, {

"entityId": "a1B5e000001fCHZEA2"Item Id from search response

,

"quantity": 1Requested number of attendees

} ] } ]

Item Taxes Breakdown V2 Response


{
  "data": [
    {
      "locationId": "a1G5e0000006wyoEAA",
      "currencyCode": "USD",
      "id": "a1B5e000001fCHoEAM",
      "sourceType": "Item",
      "quantity": 1.0,
      "grandTotal": 12.0,
      "totalBase": 10.0,
      "totalTax": 1.0,
      "totalAdmin": 0.5,
      "totalGratuity": 0.5,
      "revenueClassifications": [
        {
          "id": "a275e00000030IkAAI",
          "name": "Food",
          "grandTotal": 12.0,
          "totalBase": 10.0,
          "totalTax": 1.0,
          "totalAdmin": 0.5,
          "totalGratuity": 0.5,
          "taxes": [
            {
              "taxName": "State Sales Tax",
              "cost": 1.0,
              "rate": 10.0,
              "rateType": "Percent"
            }
          ]
        }
      ]
    },
    {
      "locationId": "a1G5e0000006wyoEAA",
      "currencyCode": "USD",
      "id": "a1B5e000001fCHZEA2",
      "sourceType": "Item",
      "quantity": 1.0,
      "grandTotal": 12.0,
      "totalBase": 10.0,
      "totalTax": 1.0,
      "totalAdmin": 0.5,
      "totalGratuity": 0.5,
      "revenueClassifications": [
        {
          "id": "a275e00000030IkAAI",
          "name": "Food",
          "grandTotal": 12.0,
          "totalBase": 10.0,
          "totalTax": 1.0,
          "totalAdmin": 0.5,
          "totalGratuity": 0.5,
          "taxes": [
            {
              "taxName": "State Sales Tax",
              "cost": 1.0,
              "rate": 10.0,
              "rateType": "Percent"
            }
          ]
        }
      ]
    }
  ],
  "instanceCode": "63d73f8a-2294-4b53-87c9-f147d8fa105e"
}
                            

Booking Policy

Get Booking Policy Details prior to creating a booking.

Booking Policy Request


    

https://{BookingPolicy-url}/Active?date={booking-start-date}&channel={channel-id}&detail={true}&languageCode={language_code}Get Booking Policy by Channel, Date, and Language Code.

https://{BookingPolicy-url}/{policy-id}?detail={true}&{language_code}Get Booking Policies by Policy Id and Language Code.

Booking Policy by Channel, Date, and Language Code.

  • This endpoint is used to return a channel's active booking policy for the date provided.
  • If the channel is omitted, the requesting user's channel will be utilized.
  • If detail is set to true, then the booking policies returned will include all of the terms & conditions, deposit and cancellation policy info.
  • If a language code is provided in conjunction with detail being set to true, then terms & conditions, deposit and cancellation policy info will be provided for the specified language.

Booking Policies by Policy Id and Language Code.

  • Gets a booking policy along with all of its terms & conditions, deposit and cancellation policy info.
  • If a languageCode is provided the terms & conditions, deposit and cancellation policy info for the language specified will be returned.
  • If the detail parameter is set to false, only the booking policy info will be returned. Terms & conditions, deposit and cancellation policy info will not be returned.

Booking Policy Response



Sample Response when calling "https://{BookingPolicy-url}/Active?date=9999-03-15&channel=1234567&detail=true&languageCode=en"

{
  "data": {
    

"bookingPolicyId": "e1866455-2a21-4942-b68e-84e67b9dd50d"bookingPolicyId applied when creating a booking.

, "channelId": "1234567", "name": "My Hotel", "description": "My BookingPolicy", "policyStartDate": "9999-01-01T00:00:00", "policyEndDate": "9999-12-31T00:00:00", "policyStatusId": "active", "termsAndConditions": [ { "termsAndConditionsId": "fb50d4ea-0d39-45be-961e-c855f57ebbe5", "bookingPolicyId": "e1866455-2a21-4942-b68e-84e67b9dd50d", "languageCode": "en", "body": "My Terms And Conditions" } ], "deposit": { "depositRules": [ { "depositRuleTexts": [ { "languageCode": "en", "description": "My Description..." } ], "daysBeforeArrival": 7, "amount": 20.0, "unit": "percent" } ] }, "cancellationPolicy": { "cancellationPolicyId": "fe455201-5be2-491a-81e9-9448442a62bb", "bookingPolicyId": "e1866455-2a21-4942-b68e-84e67b9dd50d", "gracePeriodHours": 24, "cancellationPolicyTexts": [ { "cancellationPolicyId": "fe455201-5be2-491a-81e9-9448442a62bb", "languageCode": "EN", "gracePeriodText": "Any applicable cancellation fee will be waived if cancelled within 24 hours of booking creation.", "description": "This is a summary of the grace period and all of the cancellation rules for this cancellation policy." } ], "cancellationRules": [ { "cancellationRuleId": "526f5795-df05-4471-b725-82110b3a837d", "cancellationPolicyId": "fe455201-5be2-491a-81e9-9448442a62bb", "daysBeforeArrival": 2, "amount": 75.0, "unit": "flat", "currencyCode": "USD", "cancellationRuleTexts": [ { "cancellationRuleId": "08251712-4058-4D16-A5A4-6FC3EB6FE22F", "languageCode": "EN", "description": "$75.00 fee applicable for cancellations made between 0 and 2 days from arrival date." } ] }, { "cancellationRuleId": "687668a4-26e6-464b-a342-35679877ea5e", "cancellationPolicyId": "fe455201-5be2-491a-81e9-9448442a62bb", "daysBeforeArrival": 7, "amount": 50.0, "unit": "percent", "cancellationRuleTexts": [ { "cancellationRuleId": "687668a4-26e6-464b-a342-35679877ea5e", "languageCode": "EN", "description": "50% fee applicable for cancellations made between 0 and 7 days from arrival date." } ] }, { "cancellationRuleId": "5dcca1a0-5a0f-4b4f-90f2-61aa487577d3", "cancellationPolicyId": "fe455201-5be2-491a-81e9-9448442a62bb", "daysBeforeArrival": 30, "amount": 25.0, "unit": "percent", "cancellationRuleTexts": [ { "cancellationRuleId": "5dcca1a0-5a0f-4b4f-90f2-61aa487577d3", "languageCode": "EN", "description": "25% fee applicable for cancellations made between 8 and 30 days from arrival date." } ] }, { "cancellationRuleId": "0bde4509-7253-46d1-87cc-c205ae80ca6e", "cancellationPolicyId": "fe455201-5be2-491a-81e9-9448442a62bb", "daysBeforeArrival": 365, "amount": 0.0, "unit": "percent", "cancellationRuleTexts": [ { "cancellationRuleId": "0bde4509-7253-46d1-87cc-c205ae80ca6e", "languageCode": "EN", "description": "0% fee applicable for cancellations made between 31 and 365 days from arrival date." } ] } ] }, "correlationId": "7f61c27e-1e0d-4e69-a665-e67a6cf442ed" } }

DepositRule

Get applicable DepositRule prior to sending the Deposit.

Get DepositRule Request


    

{BookingPolicy-url}/deposit?date={bookingDate}&depositDate={depositDate}&channel={string}&languageCode={string}Gets a single DepositRule that applies to the time you are attempting to make the deposit.

Get Deposit Rule endpoint to get the deposit rule that applies when making a deposit on a given date.

  • The date query parameter indicates the booking start date. This is the date when a booking is going to start.
  • The depositDate query parameter indicates the date the user intends to make the deposit payment. This date is used to determine which depositRule applies based on the time between the depositDate and the booking Start date.
  • If a language code is provided, then depositText info will be provided for the specified language.

Get DepositRule Response



Sample Response when calling:
https://{BookingPolicy-url}/deposit?date=9999-07-10&depositDate=9999-07-01&channel=1234567&languageCode=en

{
  "data": {
    "description": "If you are more than 7 days until booking date, the deposit will cost 20%",
    "languageCode": "en",
    "daysBeforeArrival": 365,
    "amount": 20.0,
    "unit": "percent"
  },
  "correlationId": "7f61c27e-1e0d-4e69-a665-e67a6cf442ed"
}
                            

Booking Create Payload V2

In order to create a Booking request the user needs to select an available function room and provide contact information. Bookings can be created with just Packages/FunctionSpace, Just a GuestroomBlock and no functionspace, or both a guestroomblock and functionspace. Once that detail is provided all other information can be derived from the previous package search response. Upon successful Booking Create call, the booking will automatically be assigned to the Default Lead Coordinator of the location (if one exists) who will be sent an email alerting them of the booking creation.

Booking Request


{
  "name": "Lunch Meeting",
  

"leadSource": "A Channel Partner - Online Bookings"Sets the LeadSource of the booking.

, "bookingOrigin": "Amadeus Hospitality Demo", "confirmationNumber": "4534", "bookingPolicyId": "c87b60e7-d950-4d37-8240-68e9ce2fbf98", "comments": "This is a demo booking.", "bookingType": "Meeting", "housingMethod": "Rooming List", "marketSegment": "Corporate", "revenueType": "Catering", "accountId": "a0uf200000Of54AACR", "companyName": "Fred's Company",

"arrivalDate": "2018-10-01Z"Arrival date of the booking

,

"departureDate": "2018-10-02Z"Departure date of the booking

, "status": "Prospect",

"packages"List of Packages to add to the booking that include events and functionrooms.

: [ {

"id": "a1af2000012Y3mOAAS",Id of the package to add to the booking.

"days": [ {

"patternDay": 0,Represents the day of the booking based on arrival/departure dates.

"attendees": 20, "functionRoomId": "a0uf200000Of54VAAR", "functionRoomSetupName": "Classroom",

"events"List of packageEvents to add to the booking for this day.

: [ { "eventClassificationId": "a0jf200000EEmQPAA1",

"rental": 100,Rental rate for the FunctionRoom.

"startTime": "11:30:00",StartTime of the event, if none is provided it will use the default startTime from the eventClassification.

"endTime": "13:00:00",EndTime of the event, if none is provided it will use the default endTime from the eventClassification.

"addOnItems"List of additional Items to add onto the event.

: [ {

"id": "a150b000003ItOpAAK",If an ItemType Item Id is provided, the Item will be added to the booking with the provided Quantity.

"quantity": 50 }, {

"id": "a150b000003ItOzAAK",If a MenuType ItemId is provided, the menu and all menuItems associated to the menu will be added to the booking.

"quantity": 25 } ] } ] } ] } ],

"primaryContact"Contact information provided by the user.

: { "firstName": "Kylo", "lastName": "Ren", "email": "kylo4lyfe@amadeus.com", "phone": "6034367500", "mobile": "6034367500", "address": { "street": "75 New Hampshire Ave.", "city": "Portsmouth", "state": "NH", "zipCode": "03801", "country": "US" } },

"guestroomBlocks"Detail information on guestrooms if required.

: [ { "Name": "Lunch Meeting", "groupCode": "DemoCd", "nights": [ {

"patternDay": 0,Represents the day to add a guestroomblock to based on booking arrivalDate, 0 = 2018-10-01

"guestrooms"Information on the types of rooms to add for this night.

: [ {

"roomCode": "KNG",The type of room to add.

"occupancyQuantity"Information on the number of rooms to book as well as price per room.

: [ { "guestRoomOccupancyType": "SingleOccupancy", "quantity": 50, "price": 100 } ] } ] } ] } ] }

Booking Response


{
  "data": {
    

"confirmationNumber": "SK5BE9TA"The confirmation number for the booking

,

"id": "a0Lf200000AlH7kEAF"The Id of created booking

, "successful": true,

"locationDetails"Detail information on the location where the booking was created.

: { "name": "The Mansion", "email": "themansion@test.com", "phone": "(603) 555-5555" } } }

Cancel Booking V2

This endpoint can be used to cancel a booking that was created via the Create Booking endoint. The Cancel booking api takes in the locationId and BookingId as parameters to the URL and returns the Id of the cancelled booking as well as the URL to retrieve the CancellationPolicy of the booking.

Sample Cancel Booking Request URL


https://api.newmarketinc.com/api/DirectBook/{locationId}/Booking/{BookingId}/CancelSample URL to cancel a specified booking at a specified Location.

Cancel Booking Response


{
  "data": {
    

"cancellationPolicy": "https://api.newmarketinc.com/api/BookingPolicy/v1/BookingPolicy/{policyId}/Cancellations?date=2020-09-03&cancellationDate=2021-04-22"Url to the Cancellation Policy of the Booking.

,

"id": "a0Lf200000AlH7kEAF"Id of cancelled booking.

, "successful": true } }

Add Deposit Payload V2

If a deposit was collected the booking can be updated to record the transaction details. This step is not required and Amadeus Hospitality does not offer a payment gateway integration. This request is not for payment processing, only tracking that it occurred.

Add Deposit Request


{
  

"BookingId": "a0Lf200000AlH7kEAF"Id of created booking.

,

"Amount":500Amount the transaction was for.

, "CurrencyIsoCode": "USD",

"ReferenceNumber": "1234"Reference number returned from payment gateway for transaction.

}

Add Deposit Response


{
  "data": {
    

"id": "a2Hf20000017922EAA"Id of created transaction.

, "successful": true } }

Get Booking V2

This endpoint can be used to retrieve the current state of a booking that was created via the Create Booking endpoint. The get booking api takes in the locationId and BookingId as parameters to the URL and returns the booking.

Sample Get Booking Request URL


https://api.newmarketinc.com/api/DirectBook/V2/{locationId}/Booking/{BookingId}Sample URL to get a specified booking at a specified Location.

Get Booking Response


{
    "data": {
        "bookingId": "a0P5e00000Aud2BEAR",
        "name": "Booking-01",
        "location": {
            "name": "Hilton Demo Property",
            "address": {
                "line1": "Portsmouth",
                "line2": "address line 2",
                "city": "Portsmouth",
                "stateProvince": "NH",
                "postalCode": "03801"
            },
            "phone": "(555) 555-5555",
            "email": "test@amadeus.com",
            "website": "www.amadeus.com"
        },
        "bookedDate": "2022-05-13T00:00:00",
        "status": "Prospect",
        "arrivalDate": "2022-05-13T00:00:00",
        "departureDate": "2022-05-14T00:00:00",
        "events": {
            "minEventStartDateTime": "2022-05-13T09:30:00",
            "maxEventEndDateTime": "2022-05-13T10:00:00",
            "numberOfEvents": 3,
            "eventDetails": [
                {
                    "name": "European breakfast",
                    "status": "Unconfirmed",
                    "attendees": 30,
                    "startDateTime": "2022-05-13T09:30:00",
                    "endDateTime": "2022-05-13T10:00:00",
                    "functionRoom": "Conference Room",
                    "eventItems": [
                        {
                            "name": "Orange Juice",
                            "itemType": "Item",
                            "quantityCalculation": "Per Person",
                            "bookedQuantity": 1.0,
                            "actualQuantity": 1.0,
                            "unitPrice": 0.54,
                            "soldBy": "Sold By Value"
                        }
                    ]
                },
                {
                    "name": "Luncheon",
                    "status": "Unconfirmed",
                    "attendees": 30,
                    "startDateTime": "2022-05-13T09:30:00",
                    "endDateTime": "2022-05-13T10:00:00",
                    "functionRoom": "Conference Room",
                    "eventItems": [
                        {
                            "name": "Arrabiata Pasta",
                            "itemType": "Item",
                            "quantityCalculation": "Per Event",
                            "bookedQuantity": 1.0,
                            "actualQuantity": 1.0,
                            "unitPrice": 75.75
                        },
                        {
                            "name": "Green Salad",
                            "itemType": "Item",
                            "quantityCalculation": "Per Event",
                            "bookedQuantity": 1.0,
                            "actualQuantity": 1.0,
                            "unitPrice": 90.90,
                            "soldBy": "Arpita"
                        }
                    ]
                },
                {
                    "name": "EC1",
                    "status": "Unconfirmed",
                    "attendees": 30,
                    "startDateTime": "2022-05-13T09:30:00",
                    "endDateTime": "2022-05-13T10:00:00",
                    "functionRoom": "Conference Room",
                    "eventItems": []
                }
            ]
        },
        "guestroomBlocks": [
            {
                "roomBlockCode": "RB1",
                "guestrooms": [
                    {
                        "date": "2022-05-13T00:00:00",
                        "rooms": 100,
                        "guestroomTypes": [
                            {
                                "roomCode": "ROH",
                                "quantity": 100
                            }
                        ]
                    }
                ]
            }
        ],
        "bookingRevenueSummary": {
            "exclusiveSubtotalCost": 1739.39,
            "adminCost": 367.30
        },
        "contact": {
            "name": "John Doe",
            "address": {
                "line1": "75 New Hampshire Ave.",
                "city": "Portsmouth",
                "stateProvince": "NH",
                "postalCode": "03801",
                "country": "USA"
            }
        },
        "policyId": "676a1e84-17bd-4f5a-b527-4a98d97a0329"
    }
}
                            

Troubleshooting

If something goes wrong during the request, an ErrorResponse will be returned. The ErrorResponse will contain an HttpStatus and a message briefly describing the error. Depending on the error it may also return more detail such as an ErrorCode or Pointer.

If requests are returning empty or limited results, but the calls indicate a successful HttpStatus (200), there may be configuration issues. Below are some possible causes:

  1. The search criteria being used may be incorrect or too strict, double check that the logical and comparison operators in the request are correct (I.E.: you may be using "and" when you actually want "or")
  2. Data inside of the Delphi.FDC application may not be properly configured. Make sure the StartDate and EndDate are not within any Blackout Period, and that the function room is enabled for all of the days of the week that are being searched for.
  3. The credentials used to make the call may not have access to all Locations, which would require configuration changes by Amadeus Hospitality.

Error Response Model

{
  "errors": [
    {
      

"status": 422,HttpStatus corresponding to this error.

"code": 20,The error code corresponding to this error

"title": "The departure date of the booking must be after the arrival.",Brief summary of the error

"source": {

"pointer": "DepartureDate"The field corresponding to the source of this error.

} } ] }

Expected Http Statuses

Problem Potential Reason
400 The request could not be understood or failed validation in some way. The response should contain additional information.
401 The request did not include the correct authentication.
403 The server understood the request but it is not able to fulfill it due to insufficient permissions.
409 There was a conflict that occurred while trying to book an event, and the space was no longer available as requested.
413 The payload provided was too large, or it translated into another request and the translation was too large.
422 There were validation failures with the payload. (ex. Departure date was before start date or a required field was not provided) This status should also return information identifying the field that caused the validation failure.
429 Your subscription has made too many calls too quickly, the response body will contain details on when you can call again.
500 The server has encountered a problem, please try again.
503 The service is temporarily unavailable, please try again later.

Error Codes

Code Name Probable Cause
10 Unauthorized This is returned if the calling user does not meet security/permission requirements for the action they are trying.
12 Body Required Returned when an endpoint is called that expects a request body and none was provided.
14 Invalid URL Parameter This is returned if a URL parameter provided in the request is invalid.
20 Validation Failure This is returned when some element of the request does not meet validation requirements, the offending field should also be returned in the error.
1200 Unknown Salesforce Error Has Occurred This is returned when an unexpected error has occurred on the Salesforce platform while processing the request.
1201 Salesforce API Currently Disable The API has been disabled for the Salesforce instance you are trying to write to.
1202 Salesforce Request Limit Exceeded The requested Salesforce instance has reached its limit on API requests and cannot process anymore until its limits refresh.
1203 Salesforce Not Found The requested resource could not be found.
1204 Salesforce Malformed Id One or more of the provided Salesforce Ids were invalid.
1205 Salesforce Field Integrity Error The request has elements that do not meet validation requirements in the Salesforce instance.
1206 Salesforce Field Custom Validation Error The requested Salesforce instance has custom validation that the request does not meet.
1207 Salesforce Cannot Upsert Record Salesforce could not process the request due to internal limitations.
1208 Salesforce Processing Failed Salesforce failed to process the request due to internal limitations.
1209 Salesforce Invalid Picklist Selection An invalid picklist selection was made in the request
1210 Salesforce Required Field Missing A required Salesforce field is missing from the request.
1211 Salesforce Invalid Query The request resulted in an invalid query against Salesforce.
1212 Salesforce Sub Request Failure The request resulted in an invalid payload.
1213 Salesforce Locked Row Error While processing the request Salesforce returned a row lock, try to send this request again later
1214 Salesforce Function Room Conflict While creating the booking one or more of the function rooms requested became unavailable, ask the user to select a different function room or time slot and try again.
1215 Salesforce Error Validating Room Selection While confirming the booking event selections were in the proper function space Salesforce returned an error.
1216 Salesforce Unable to Persist Salesforce failed to process the request due to internal limitations.
1217 Salesforce Cannot Delete Salesforce failed to process the request due to internal limitations.
1218 Salesforce Insufficient Access While creating the booking in Salesforce, the integration user did not have permissions to the requested records.
1219 Salesforce To Many Records The request resulted in too many records to insert into Salesforce at one time. Bulk data is currently unsupported.
1220 Salesforce Storage Limit Exceeded The Salesforce instance has run out of space.
1221 Salesforce String Length Error A string value sent in the request was too long for the corresponding Salesforce field.
1222 Salesforce Invalid Related Entity Error A specified Id for a related entity was not valid.
1223 Salesforce Invalid Field Error The request to Salesforce contained an invalid field, or a field for which the integration user did not have permission to access.

Rate Limits

In order to monitor the platform, this product has rate limits enforced on calling users. The system is currently limited to 500 calls per minute (including authentication calls). Rate limits reset every sixty seconds. If rate limits are reached, all requests will receive an HttpStatus of 429 like:

{
  "errors": [
    {
      "status": 429,
      "title": "Rate limit is exceeded. Try again in 25 seconds."
    }
  ]
}
                    

Changelog

As the product is developed and improved, this page will be updated to give an overview of changes in order to make transitioning to newer versions easier.

Version 2

General

  • New API versions have been published for Packages, Pricing, and Direct Booking APIs.

Packages

Availability Search

  • The response contract has been restructured in order to better organize search results.
    • Previous hierarchy: Locations => Packages => Events => Function Rooms => Function Room Setups
    • New hierarchy: Locations => Packages => Function Room Setups => Time Slots => Function Rooms => Events
  • SystemId is no longer returned as part of the response model.
  • Rental information has been moved from the Function Room level to the Event level.

Pricing

General

  • Existing Pricing endpoints that only supported a single entity per-request have been replaced by new endpoints that support multiple entities in a single request.
  • The response contract for Pricing endpoints has been slightly modified to support returning multiple pricing results in one request.

Direct Book

Create Booking

  • The request contract has been restructured to support additional functionality (detailed below) and flow more coherently with the Package Availability Search.
  • The amount of information required in the request contract has been reduced greatly. Pricing information for Events and Event Items are now calculated internally and are not provided in the request.
  • The API now allows for the creation of Package-only and Guestroom-only Bookings. Existing functionality for Booking both at once is not changed.
  • The API now supports per-day attendance for Packages.
  • The API now supports the Booking of multiple Packages.
  • The API no longer allows for the creation of Accounts as part of the Booking process. A new field, CompanyName, can be used to store an Account name. This will appear on the Booking under the "DirectBook Company Name" field.
  • The API now supports the usage of a default Account, defined in Amadeus Sales & Event Management at the Property-level. If no AccountId is provided in the Booking request, the default Account will be used, assuming it is configured.

Version 1

  • Initial Release