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. Authentication
  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 shopping APIs included in this product can be split into two different categories: APIs that return availability and APIs that return information. The flow for consuming these APIs will typically begin with an availability search, followed by subsequent requests to the APIs that provide more information on the packages that are available.

This section will provide a sample data flow for an average shopping and booking experience.

To see which fields are required and which are optional for each API, please refer to the API's specific documentation.

Package Availability Search

This availability search will return packages that are available across the entire duration of the search. For example, if you are searching for availablity in a two day window, all of the packages returned by this API will need to be available on both of those days. Otherwise, the package will not be included in the results.

Search Request


{
  

"StartDate": "2022-09-06Z"Starting timeframe of the search.

,

"EndDate": "2022-09-06Z"Ending timeframe of the search

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

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

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

"Id": "LocationId1"Id of the Location being searched

} ],

"NumberOfAttendees": 55Requested number of attendees

}

Search Response


{
  "data": {
    "elapsedTime": 3494,
    "locations": [
      {
        "id": "LocationId1",
        "name": "Shop And Book Hotel",
        

"originalId": "OriginalLocationId1",The Location Id

"packages": [ { "category": "Meeting", "currencyCode": "USD", "eventPriceTotal": 6375.00, "events": [ { "classification": {

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

"name": "Morning Meeting" },

"startDate": "2022-09-06T08:00:00",Default start time for the event

"endDate": "2022-09-06T11:00:00",Default end time for this event

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

[ {

"id": "FunctionRoomId1",Function Room Id

"name": "Conference Room Alpha",

"rental": 2500.00,Default Function Room Rental

"rentalCalculation": "PerEvent", "setups": [ { "capacity": 55, "id": "FunctionRoomSetupId1",

"name": "ConferenceRoom",Function Room Setup

"systemId": "7142a2ac-5337-472c-9382-34cdba330fc6" } ], "systemId": "7142a2ac-5337-472c-9382-34cdba330fc6" } ],

"id": "PackageEventId1",Package Event Id

"name": "Morning Meeting", "systemId": "7142a2ac-5337-472c-9382-34cdba330fc6" }, { "classification": {

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

"name": "Luncheon" },

"startDate": "2022-09-06T11:00:00",Default start time for the event

"endDate": "2022-09-06T12:00:00",Default end time for this event

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

[ {

"id": "FunctionRoomId1",Function Room Id

"name": "Function Room Alpha",

"rental": 25.00,Default Function Room Rental

"rentalCalculation": "PerPerson", "setups": [ { "capacity": 55, "id": "FunctionRoomSetupId1",

"name": "ConferenceRoom",Function Room Setup

"systemId": "7142a2ac-5337-472c-9382-34cdba330fc6" } ], "systemId": "7142a2ac-5337-472c-9382-34cdba330fc6" } ],

"id": "PackageEventId2",Package Event Id

"name": "Luncheon", "systemId": "7142a2ac-5337-472c-9382-34cdba330fc6" }, { "classification": {

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

"name": "Afternoon Meeting" },

"startDate": "2022-09-06T12:00:00",Default start time for the event

"endDate": "2022-09-06T15:00:00",Default end time for this event

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

[ {

"id": "FunctionRoomId1",Function Room Id

"name": "Conference Room Alpha",

"rental": 2500.00,Default Function Room Rental

"rentalCalculation": "PerEvent", "setups": [ { "capacity": 55, "id": "FunctionRoomSetupId1",

"name": "ConferenceRoom",Function Room Setup

"systemId": "7142a2ac-5337-472c-9382-34cdba330fc6" } ], "systemId": "7142a2ac-5337-472c-9382-34cdba330fc6" } ],

"id": "PackageEventId3",Package Event Id

"name": "Afternoon Meeting" "systemId": "7142a2ac-5337-472c-9382-34cdba330fc6" } ],

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

, "isInclusive": true, "name": "All Day Meeting Package", "otherIncomePriceTotal": 0.00, "systemId": "7142a2ac-5337-472c-9382-34cdba330fc6" } ], "startingAtPrice": 6375.00, "systemId": "7142a2ac-5337-472c-9382-34cdba330fc6" } ] }, "instanceCode": "cc9b0e2a-6d03-4a12-8762-c5c06c0d0ea5" }

Obtaining Package and Pricing Information

The next set of APIs will return information about specific packages, as well as pricing details for the package and other entities involved in the shopping process. These APIs are:

For the sake of brevity this page will not have examples for the pricing APIs. For more information on their request and response models, please refer to the individual API pages.

Package Detail Search

The Package Detail API returns information about a given package, such as Alternate Languages, Items, Menus, and Descriptions. This data is purely supplemental and is used only to enrich the shopper's experience; this information is not required to submit a Create Booking request.

Detail Request


{
  "location": {
    

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

, "systemId": "7142a2ac-5337-472c-9382-34cdba330fc6" },

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

,

"numberOfAttendees": 20Requested number of attendees

, "languageCode": "enus" }

Detail Response


{
  "data": {
    "elapsedTime": 88,
    "packageDetails": {
      "id": "PackageId1",
      "name": "All Day Meeting Package",
      "isInclusive": true,
      "packageEvents": [
        {
          

"id": "EventId1"Package Event Id

, "eventClassification": { "name": "Morning Meeting", "defaultStartTime": "08:00:00", "defaultEndTime": "11:00:00", "id": "EventClassificationId1" },

"items"List of Items and their descriptions for event

: [ { "id": "ItemId1", "name": "Notepads", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false }, { "id": "ItemId2", "name": "Pens", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false } ] }, { "id": "PackageEventId2", "eventClassification": { "name": "Luncheon", "defaultStartTime": "11:00:00", "defaultEndTime": "12:00:00", "id": "EventClassificationId2" }, "items": [ { "id": "ItemId3", "name": "Bottled Water", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false }, { "id": "ItemId4", "name": "Assorted Sandwiches", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false } ] }, { "id": "PackageEventId3", "eventClassification": { "name": "Afternoon Meeting", "defaultStartTime": "12:00:00", "defaultEndTime": "15:00:00", "id": "EventClassificationId3" }, "items": [ { "id": "ItemId1", "name": "Notepad", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false }, { "id": "ItemId2", "name": "Pens", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false } ] } ] }, "instanceCode": "588c6489-372f-4e48-8415-9a10020db142" } }

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": "OriginalLocationId1"Original Id from search response

},

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

,

"quantity": 50Requested number of attendees

}

Package Taxes Response


{
  "data": {
    "currencyCode": "USD",
    "id": "PackageId1",
    "sourceType": "Package",
    "quantity": 50,
    "grandTotal": 1995,
    "totalBase": 1500,
    "totalTax": 120,
    "totalAdmin": 75,
    "totalGratuity": 300,
    "revenueClassifications": [
      {
        "id": "RevenueClassificationId1",
        "name": "Food",
        "grandTotal": 1330,
        "totalBase": 1000,
        "totalTax": 80,
        "totalAdmin": 50,
        "totalGratuity": 200,
        "taxes": [
          {
            "taxName": "State Tax",
            "cost": 80,
            "rate": 8,
            "rateType": "Percent"
          }
        ]
      },
      {
        "id": "RevenueClassificationId2",
        "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"
}
                            

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": "OriginalLocationId1"Original Id from search response

},

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

,

"attendance": 50Requested number of attendees

}

Add On Search Response


{
  "data": {
    "elapsedTime": 22869,
    "items": [
      {
        "eventClassifications": [
          {
            "id": "EventClassificationId1",
            "name": "Morning Meeting"
          },
          {
            "id": "EventClassificationId3",
            "name": "Afternoon Meeting"
          }
        ],
        "itemType": "Item",
        "sourceItemId": "ItemId5",
        "name": "Coffee",
        "abbreviation": "COF",
        "description": "An early morning pick-me-up to get the meeting started right.",
        "richDescription": "An early morning pick-me-up to get the meeting started right.",
        "servingUnit": "Cup",
        "soldByUnit": "Cup",
        "alternateLanguages": [
          {
            "languageCode": "FR",
            "name": "Café",
            "servingUnit": "Tasse",
            "soldByUnit": "Tasse"
          }
        ],
        "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": "RevenueClassificationId1, "currencyCode": "USD" }, { "eventClassifications": [ { "id": "EventClassificationId2", "name": "Luncheon" } ], "itemType": "DetailedMenu", "sourceItemId": "ItemId6", "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": "RevenueClassificationId1", "menuItems": [ { "priceWithMenu": "true", "itemType": "Item", "sourceItemId": "ItemId7", "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": "RevenueClassificationId1", "currencyCode": "USD" }, { "priceWithMenu": "true", "itemType": "Item", "sourceItemId": "ItemId7", "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": "RevenueClassificationId2, "currencyCode": "USD" } ], "itemRevenueBreakdowns": [ { "revenueClassificationId": "RevenueClassificationId1", "unitPrice": 10, "inclusiveUnitPrice": 10, "adminCharge": 5, "adminIsIncludedInInclusivePrice": "false", "gratuity": 20, "gratuityIsIncludedInInclusivePrice": "false", "currencyCode": "USD" }, { "revenueClassificationId": "RevenueClassificationId2", "unitPrice": 40, "inclusiveUnitPrice": 40, "adminCharge": 5, "adminIsIncludedInInclusivePrice": "false", "gratuity": 20, "gratuityIsIncludedInInclusivePrice": "false", "currencyCode": "USD" } ], "currencyCode": "USD" } ] }, "instanceCode": "86ea293c-93dd-4cc9-9bf7-66c556f414e9" }

Completing the Booking Processs

The remaining APIs are provided to allow the shopper to complete the booking process. You will be able to retrieve policy information, create the booking, retrieve the booking, and cancel the booking. These APIs are:

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": "OriginalLocationId1",
  "name": "All Day Meeting",
  

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

,

"arrivalDate": "2022-09-06"Arrival date of the booking

,

"departureDate": "2022-09-07"Departure date of the booking

, "status": "Prospect",

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

, "numberOfAttendees": 50,

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

: [ { "name": "Morning Meeting",

"functionRoom": "FunctionRoomId1"Requested Function Room Id

,

"rental": 2500.00Rental rate for Function Room

,

"eventClassification": "EventClassificationId1Event Classification Id

,

"startTime": "2022-09-06T08:00:00Z"Start time for the event

,

"endTime": "2022-09-06T11:00:00Z"End time for the event

,

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

: [ { "sourceItemId": "ItemId1", "revenueClassificationId": "RevenueClassificationId1", "name": "Notepads", "description": "Write down all of the important details with these notepads.",

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

, "price": "1.99", "consumptionPercentage": 100, "serviceFactor": 1, "soldBy": "Notepad", "units": "Notepoad", "discountPercentage": 0 }, { "sourceItemId": "ItemId2", "revenueClassificationId": "RevenueClassificationId1", "name": "Pens", "description": "Write down all of the important details with these pens.",

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

, "price": "1.99", "consumptionPercentage": 100, "serviceFactor": 1, "soldBy": "Notepad", "units": "Notepoad", "discountPercentage": 0 } ], "discountPercentage": 0 }, { "name": "Luncheon",

"functionRoom": "FunctionRoomId1"Requested Function Room Id

,

"rental": 1250.00Rental rate for Function Room

,

"eventClassification": "EventClassificationId2Event Classification Id

,

"startTime": "2022-09-06T11:00:00Z"Start time for the event

,

"endTime": "2022-09-06T12:00:00Z"End time for the event

,

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

: [ { "sourceItemId": "ItemId3", "revenueClassificationId": "RevenueClassificationId2", "name": "Bottled Water", "description": "Refresh yourself with some ice cold water.",

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

, "price": "1.99", "consumptionPercentage": 100, "serviceFactor": 1, "soldBy": "Notepad", "units": "Notepoad", "discountPercentage": 0 }, { "sourceItemId": "ItemId4", "revenueClassificationId": "RevenueClassificationId2", "name": "Assorted Sandwiches", "description": "Delicious sandwiches made fresh daily.",

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

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

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

: [ { "sourceMenuId": "ItemId5", "revenueClassificationId": "RevenueClassificationId2", "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": "RevenueClassificationId2", "price": 10 }, { "revenueClassificationId": "RevenueClassificationId3, "price": 40 } ], "eventMenuItems": [ { "sourceItemId": "ItemId6", "revenueClassificationId": "RevenueClassificationId2", "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": "ItemId7", "revenueClassificationId": "RevenueClassificationId3", "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 }, { "name": "Afternoon Meeting",

"functionRoom": "FunctionRoomId1"Requested Function Room Id

,

"rental": 2500.00Rental rate for Function Room

,

"eventClassification": "EventClassificationId3Event Classification Id

,

"startTime": "2022-09-06T12:00:00Z"Start time for the event

,

"endTime": "2022-09-06T15:00:00Z"End time for the event

,

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

: [ { "sourceItemId": "ItemId1", "revenueClassificationId": "RevenueClassificationId1", "name": "Notepads", "description": "Write down all of the important details with these notepads.",

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

, "price": "1.99", "consumptionPercentage": 100, "serviceFactor": 1, "soldBy": "Notepad", "units": "Notepoad", "discountPercentage": 0 }, { "sourceItemId": "ItemId2", "revenueClassificationId": "RevenueClassificationId1", "name": "Pens", "description": "Write down all of the important details with these pens.",

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

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

"primaryContact"Contact information provided by the user.

: { "firstName": "John", "lastName": "Smith", "email": "john.smith@company.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": "BookingId1"The Id of created booking

, "successful": true,

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

: { "name": "Shop And Book Hotel", "email": "shopandbook@hotel.com", "phone": "(603) 555-5555" } } }

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": "BookingId1",
    "name": "All Day Meeting",
    "location": {
      "name": "Shop and Book Hotel",
      "address": {
        "line1": "75 New Hampshire Ave.",
        "city": "Portsmouth",
        "stateProvince": "NH",
        "postalCode": "03801"
      },
      "phone": "(555) 555-5555",
      "email": "shopandbook@hotel.com"
    },
    "bookedDate": "2022-09-06T00:00:00",
    "status": "Prospect",
    "arrivalDate": "2022-09-06T00:00:00",
    "departureDate": "2022-09-07T00:00:00",
    "events": {
      "minEventStartDateTime": "2022-09-06T08:00:00",
      "maxEventEndDateTime": "2022-09-06T15:00:00",
      "numberOfEvents": 3,
      "eventDetails": [
        {
          "name": "Morning Meeting",
          "status": "Unconfirmed",
          "attendees": 55,
          "startDateTime": "2022-09-06T08:00:00",
          "endDateTime": "2022-09-06T11:00:00",
          "functionRoom": "Conference Room",
          "eventItems": [
            {
              "name": "Notepads",
              "itemType": "Item",
              "quantityCalculation": "Per Person",
              "bookedQuantity": 50.0,
              "actualQuantity": 50.0,
              "unitPrice": 0.54,
              "soldBy": "Sold By Value"
            },
            {
              "name": "Pens",
              "itemType": "Item",
              "quantityCalculation": "Per Person",
              "bookedQuantity": 50.0,
              "actualQuantity": 50.0,
              "unitPrice": 0.54,
              "soldBy": "Sold By Value"
            }
          ]
        },
        {
          "name": "Luncheon",
          "status": "Unconfirmed",
          "attendees": 55,
          "startDateTime": "2022-09-06T11:00:00",
          "endDateTime": "2022-09-06T12:00:00",
          "functionRoom": "Conference Room",
          "eventItems": [
            {
              "name": "Bottled Water",
              "itemType": "Item",
              "quantityCalculation": "Per Event",
              "bookedQuantity": 50.0,
              "actualQuantity": 50.0,
              "unitPrice": 75.75
            },
            {
              "name": "Assorted Sandwiches",
              "itemType": "Item",
              "quantityCalculation": "Per Event",
              "bookedQuantity": 50.0,
              "actualQuantity": 50.0,
              "unitPrice": 90.9
            }
          ]
        },
        {
          "name": "Afternoon Meeting",
          "status": "Unconfirmed",
          "attendees": 30,
          "startDateTime": "2022-09-06T12:00:00",
          "endDateTime": "2022-09-06T15:00:00",
          "functionRoom": "Conference Room",
          "eventItems": [
            {
              "name": "Notepads",
              "itemType": "Item",
              "quantityCalculation": "Per Person",
              "bookedQuantity": 50.0,
              "actualQuantity": 50.0,
              "unitPrice": 0.54,
              "soldBy": "Sold By Value"
            },
            {
              "name": "Pens",
              "itemType": "Item",
              "quantityCalculation": "Per Person",
              "bookedQuantity": 50.0,
              "actualQuantity": 50.0,
              "unitPrice": 0.54,
              "soldBy": "Sold By Value"
            }
          ]
        }
      ]
    },
    "guestroomBlocks": [
      {
        "roomBlockCode": "RB1",
        "guestrooms": [
          {
            "date": "2022-09-06T00:00:00",
            "rooms": 100,
            "guestroomTypes": [
              {
                "roomCode": "ROH",
                "quantity": 100
              }
            ]
          }
        ]
      }
    ],
    "bookingRevenueSummary": {
      "exclusiveSubtotalCost": 1739.39,
      "adminCost": 367.3
    },
    "contact": {
      "name": "John Smith",
      "address": {
        "line1": "75 New Hampshire Ave.",
        "city": "Portsmouth",
        "stateProvince": "NH",
        "postalCode": "03801",
        "country": "USA"
      }
    },
    "policyId": "676a1e84-17bd-4f5a-b527-4a98d97a0329"
  }
}
                            

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 } }

API Data Flow V2

The shopping APIs included in this product can be split into two different categories: APIs that return availability and APIs that return information. The flow for consuming these APIs will typically begin with an availability search, followed by subsequent requests to the APIs that provide more information on the packages that are available.

This section will provide a sample data flow for an average shopping and booking experience.

To see which fields are required and which are optional for each API, please refer to the API's specific documentation.

Determining Availability

There are two APIs included in version 2.0 of the product that provide package availability information based on given criteria. They are:

Package Availability Search V2

This availability search will return packages that are available across the entire duration of the search. For example, if you are searching for availablity in a two day window, all of the packages returned by this API will need to be available on both of those days. Otherwise, the package will not be included in the results.

Search Request


{
  

"StartDate": "2022-09-06Z"Starting timeframe of the search.

,

"EndDate": "2022-09-06Z"Ending timeframe of the search

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

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

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

"Id": "LocationId1"Id of the Location being searched

} ],

"NumberOfAttendees": 55Requested number of attendees

}

Search Response


{
  "data": {
    "elapsedTime": 1865,
    "locations": [
      {
        "id": "LocationId1",
        "name": "Shop And Book Hotel",
        "packages": [
          {
            

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

, "name": "All Day Meeting Package", "isInclusive": true, "currencyCode": "USD", "eventPriceTotal": 6375.00, "functionRoomSetups": [ { "name": "ConferenceRoom",

"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": "2022-09-06", "functionRooms": [ { "id": "FunctionRoomId1", "name": "Conference Room Alpha", "capacity": 55, "events": [ {

"id": "EventId1"Package Event Id

, "name": "Morning Meeting", "startTime": "08:00:00", "endTime": "11:00:00", "eventClassificationId": "EventClassificationId1", "rental": 2500.00, "rentalCalculation": "PerEvent" }, {

"id": "EventId1"Package Event Id

, "name": "Luncheon", "startTime": "11:00:00", "endTime": "12:00:00", "eventClassificationId": "EventClassificationId2", "rental": 25.00, "rentalCalculation": "PerPerson" }, {

"id": "EventId1"Package Event Id

, "name": "Afternoon Meeting", "startTime": "12:00:00", "endTime": "15:00:00", "eventClassificationId": "EventClassificationId3", "rental": 2500.00, "rentalCalculation": "PerEvent" } ] } ] } ] } ] } ] } ], "startingAtPrice": 6375.00 } ] }, "instanceCode": "8540b870-d358-42e8-a770-0e8321ae7c09" }

Daily Availability Search

The Daily Availability Search returns the lowest cost available package on each day of the provided search criteria. Unlike the Package Availability Search, this API does not require packages to be available for every day of the search in order to be returned. Usage of this API is intended for scenarios where the shopper wants to find the lowest cost package of a certain type that is available any given day in some time span. For example, a shopper might want to book space for a one day new hire training, but they may not have a preference on the exact date; rather, they may want the lowest cost option that is available in a given week. If they searched over a one week period, this API would provide the lowest cost available package for each day of the week and the shopper could narrow down their choice from there.

Search Request


{
  

"StartDate": "2022-09-05Z"Starting timeframe of the search.

,

"EndDate": "2022-09-10Z"Ending timeframe of the search

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

"Id": "LocationId1"Id of the Location being searched

} ],

"NumberOfAttendees": 10Requested number of attendees

}

Search Response


{
  "data": {
    "elapsedTime": 370,
    "locations": [
      {
        "id": "LocationId1",
        "name": "Shop and Book Hotel",
        "dates": [
          {
            "date": "2022-09-05",
            "startingAtPrice": 40.00,
            "startingAtPriceRoomRental": 50.00,
            "roomRentalBy": "PerEvent",
            "currencyCode": "USD",
            "packageName": "PackageId1",
            "packageId": "All Day Meeting Package",
            "maxCapacity": 60
          },
          {
            "date": "2022-09-06",
            "startingAtPrice": 40.00,
            "startingAtPriceRoomRental": 50.00,
            "roomRentalBy": "PerEvent",
            "currencyCode": "USD",
            "packageName": "PackageId1",
            "packageId": "All Day Meeting Package",
            "maxCapacity": 60
          },
          {
            "date": "2022-09-07",
            "startingAtPrice": 40.00,
            "startingAtPriceRoomRental": 50.00,
            "roomRentalBy": "PerEvent",
            "currencyCode": "USD",
            "packageName": "PackageId1",
            "packageId": "All Day Meeting Package",
            "maxCapacity": 60
          },
          {
            "date": "2022-09-08",
            "startingAtPrice": 38.00,
            "startingAtPriceRoomRental": 110.00,
            "roomRentalBy": "PerEvent",
            "currencyCode": "USD",
            "packageName": "PackageId2",
            "packageId": "Morning Meeting Package",
            "maxCapacity": 40
          },
          {
            "date": "2022-09-09",
            "startingAtPrice": 38.00,
            "startingAtPriceRoomRental": 110.00,
            "roomRentalBy": "PerEvent",
            "currencyCode": "USD",
            "packageName": "PackageId2",
            "packageId": "Morning Meeting Package",
            "maxCapacity": 40
          },
          {
            "date": "2022-09-10",
            "startingAtPrice": 38.00,
            "startingAtPriceRoomRental": 110.00,
            "roomRentalBy": "PerEvent",
            "currencyCode": "USD",
            "packageName": "PackageId2",
            "packageId": "MorningMeetingPackage",
            "maxCapacity": 40
          }
        ]
      }
    ]
  },
  "instanceCode": "3a1b9697-ca90-4e29-ac29-0bd6b5945e6b"
}
                            

Obtaining Package and Pricing Information

The next set of APIs will return information about specific packages, as well as pricing details for the package and other entities involved in the shopping process. These APIs are:

For the sake of brevity this page will not have examples for the pricing APIs. For more information on their request and response models, please refer to the individual API pages.

Package Detail Search V2

The Package Detail API returns information about a given package, such as Alternate Languages, Items, Menus, and Descriptions. This data is purely supplemental and is used only to enrich the shopper's experience; this information is not required to submit a Create Booking request.

Detail Request


{
  "location": {
    

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

},

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

,

"numberOfAttendees": 20Requested number of attendees

, "languageCode": "enus" }

Detail Response


{
  "data": {
    "elapsedTime": 88,
    "packageDetails": {
      "id": "PackageId1",
      "name": "All Day Meeting Package",
      "isInclusive": true,
      "packageEvents": [
        {
          

"id": "EventId1"Package Event Id

, "eventClassification": { "name": "Morning Meeting", "defaultStartTime": "08:00:00", "defaultEndTime": "11:00:00", "id": "EventClassificationId1" },

"items"List of Items and their descriptions for event

: [ { "id": "ItemId1", "name": "Notepads", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false }, { "id": "ItemId2", "name": "Pens", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false } ] }, { "id": "PackageEventId2", "eventClassification": { "name": "Luncheon", "defaultStartTime": "11:00:00", "defaultEndTime": "12:00:00", "id": "EventClassificationId2" }, "items": [ { "id": "ItemId3", "name": "Bottled Water", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false }, { "id": "ItemId4", "name": "Assorted Sandwiches", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false } ] }, { "id": "PackageEventId3", "eventClassification": { "name": "Afternoon Meeting", "defaultStartTime": "12:00:00", "defaultEndTime": "15:00:00", "id": "EventClassificationId3" }, "items": [ { "id": "ItemId1", "name": "Notepad", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false }, { "id": "ItemId2", "name": "Pens", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false } ] } ] }, "instanceCode": "588c6489-372f-4e48-8415-9a10020db142" } }

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": "LocationId1"Original Id from search response

},

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

,

"NumberOfAttendees": 20Requested number of attendees

}

Detail Response


{
  "data": {
    "elapsedTime": 88,
    "packageDetails": {
      "id": "PackageId1",
      "name": "All Day Meeting Package",
      "isInclusive": true,
      "perPersonPrice": 62.8,
      "inclusivePerPersonPrice": 80.0,
      "pricing": {
        "totalBase": 62.8,
        "totalAdmin": 5.86,
        "totalGratuity": 5.86,
        "totalTax": 7.45,
        "grandTotal": 82.0
      },
      

"functionRooms"List of Function Rooms

: [ { "id": "FunctionRoomId1", "name": "Conference Room", "rental": 2000.0, "rentalCalculation": "PerEvent", "pricing": { "totalBase": 2000.0, "totalAdmin": 20.0, "totalGratuity": 200.0, "totalTax": 222.0, "grandTotal": 2442.0 } } ], "packageEvents": [ {

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

"eventClassification": { "id": "EventClassificationId1", "name": "Morning Meeting", "defaultStartTime": "08:00:00", "defaultEndTime": "11:00:00" },

"items"List of Items and their descriptions for event

: [ { "id": "ItemId1", "name": "Notepads", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false }, { "id": "ItemId2", "name": "Pens", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false } ],

"addOnItems"List of Addon Items

: [ { "pricing": { "totalBase": 9.09, "totalAdmin": 0.9, "totalGratuity": 0, "totalTax": 1.0, "grandTotal": 11.0 }, "itemType": "Item", "sourceItemId": "ItemId5", "name": "Coffee", "preventQtyAdjustment": false, "allowDecimalQuantities": false, "quantityCalculation": "PerPerson", "serviceFactor": 2.0, "estimatedConsumptionPercentage": 100.0, "calculatedQuantity": 1, "isInclusive": true, "unitPrice": 9.09, "inclusiveUnitPrice": 10.0, "revenueClassificationId": "RevenueClassificationId1", "currencyCode": "USD" } ] }, { "id": "PackageEventId2", "eventClassification": { "name": "Luncheon", "defaultStartTime": "11:00:00", "defaultEndTime": "12:00:00", "id": "EventClassificationId2" }, "items": [ { "id": "ItemId3", "name": "Bottled Water", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false }, { "id": "ItemId4", "name": "Assorted Sandwiches", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false } ] }, { "id": "PackageEventId3", "eventClassification": { "name": "Afternoon Meeting", "defaultStartTime": "12:00:00", "defaultEndTime": "15:00:00", "id": "EventClassificationId3" }, "items": [ { "id": "ItemId1", "name": "Notepad", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false }, { "id": "ItemId2", "name": "Pens", "quantity": 50, "estimatedConsumptionPercentage": 100.0, "serviceFactor": 1.0, "allowDecimalQuantities": false } ] } ] } }, "instanceCode": "4f190033-d790-40fe-814e-d55ac6224a6f" }

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": "LocationId1"Original Id from search response

},

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

,

"attendance": 50Requested number of attendees

}

Add On Search Response


{
  "data": {
    "elapsedTime": 22869,
    "items": [
      {
        "eventClassifications": [
          {
            "id": "EventClassificationId1",
            "name": "Morning Meeting"
          },
          {
            "id": "EventClassificationId3",
            "name": "Afternoon Meeting"
          }
        ],
        "itemType": "Item",
        "sourceItemId": "ItemId5",
        "name": "Coffee",
        "abbreviation": "COF",
        "description": "An early morning pick-me-up to get the meeting started right.",
        "richDescription": "An early morning pick-me-up to get the meeting started right.",
        "servingUnit": "Cup",
        "soldByUnit": "Cup",
        "alternateLanguages": [
          {
            "languageCode": "FR",
            "name": "Café",
            "servingUnit": "Tasse",
            "soldByUnit": "Tasse"
          }
        ],
        "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": "RevenueClassificationId1, "currencyCode": "USD" }, { "eventClassifications": [ { "id": "EventClassificationId2", "name": "Luncheon" } ], "itemType": "DetailedMenu", "sourceItemId": "ItemId6", "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": "RevenueClassificationId1", "menuItems": [ { "priceWithMenu": "true", "itemType": "Item", "sourceItemId": "ItemId7", "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": "RevenueClassificationId1", "currencyCode": "USD" }, { "priceWithMenu": "true", "itemType": "Item", "sourceItemId": "ItemId7", "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": "RevenueClassificationId2, "currencyCode": "USD" } ], "itemRevenueBreakdowns": [ { "revenueClassificationId": "RevenueClassificationId1", "unitPrice": 10, "inclusiveUnitPrice": 10, "adminCharge": 5, "adminIsIncludedInInclusivePrice": "false", "gratuity": 20, "gratuityIsIncludedInInclusivePrice": "false", "currencyCode": "USD" }, { "revenueClassificationId": "RevenueClassificationId2", "unitPrice": 40, "inclusiveUnitPrice": 40, "adminCharge": 5, "adminIsIncludedInInclusivePrice": "false", "gratuity": 20, "gratuityIsIncludedInInclusivePrice": "false", "currencyCode": "USD" } ], "currencyCode": "USD" } ] }, "instanceCode": "86ea293c-93dd-4cc9-9bf7-66c556f414e9" }

Completing the Booking Processs

The remaining APIs are provided to allow the shopper to complete the booking process. You will be able to retrieve policy information, create the booking, retrieve the booking, and cancel the booking. These APIs are:

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 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": "All Day Meeting",
  "leadSource": "A Channel Partner - Online Bookings",
  "bookingOrigin": "Amadeus Hospitality Demo",
  "confirmationNumber": "4534",
  "bookingPolicyId": "c87b60e7-d950-4d37-8240-68e9ce2fbf98",
  "comments": "This is an all day meeting.",
  "bookingType": "Meeting",
  "housingMethod": "Rooming List",
  "marketSegment": "Corporate",
  "revenueType": "Catering",
  "accountId": "AccountId1",
  "companyName": "Some Company",
  "arrivalDate": "2022-09-06",
  "departureDate": "2022-09-07",
  "status": "Prospect",
  "packages": [
    {
      "id": "PackageId1",
      "days": [
        {
          

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

"attendees": 20, "functionRoomId": "FunctionRoomId1", "functionRoomSetupName": "ConferenceRoom", "events": [ { "eventClassificationId": "EventClassificationId1", "rental": 100,

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

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

"addOnItems": [ { "id": "ItemId1", "quantity": 50 }, { "id": "ItemId2", "quantity": 50 } ] }, { "eventClassificationId": "EventClassificationId2", "rental": 100,

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

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

"addOnItems": [ { "id": "ItemId3", "quantity": 50 }, { "id": "ItemId4", "quantity": 50 } ] }, { "eventClassificationId": "EventClassificationId3", "rental": 100,

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

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

"addOnItems": [ { "id": "ItemId1", "quantity": 50 }, { "id": "ItemId2", "quantity": 50 } ] } ] } ] } ],

"primaryContact"Contact information provided by the user.

: { "firstName": "John", "lastName": "Smith", "email": "john.smith@company.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,

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

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

Booking Response


{
  "data": {
    

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

,

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

, "successful": true,

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

: { "name": "Shop and Book Hotel", "email": "shopandbook@hotel.com", "phone": "(603) 555-5555" } } }

Add Booking Deposit 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": "BookingId1"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": "TransactionId1"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": "BookingId1",
    "name": "All Day Meeting",
    "location": {
      "name": "Shop and Book Hotel",
      "address": {
        "line1": "75 New Hampshire Ave.",
        "city": "Portsmouth",
        "stateProvince": "NH",
        "postalCode": "03801"
      },
      "phone": "(555) 555-5555",
      "email": "shopandbook@hotel.com"
    },
    "bookedDate": "2022-09-06T00:00:00",
    "status": "Prospect",
    "arrivalDate": "2022-09-06T00:00:00",
    "departureDate": "2022-09-07T00:00:00",
    "events": {
      "minEventStartDateTime": "2022-09-06T08:00:00",
      "maxEventEndDateTime": "2022-09-06T15:00:00",
      "numberOfEvents": 3,
      "eventDetails": [
        {
          "name": "Morning Meeting",
          "status": "Unconfirmed",
          "attendees": 55,
          "startDateTime": "2022-09-06T08:00:00",
          "endDateTime": "2022-09-06T11:00:00",
          "functionRoom": "Conference Room",
          "eventItems": [
            {
              "name": "Notepads",
              "itemType": "Item",
              "quantityCalculation": "Per Person",
              "bookedQuantity": 50.0,
              "actualQuantity": 50.0,
              "unitPrice": 0.54,
              "soldBy": "Sold By Value"
            },
            {
              "name": "Pens",
              "itemType": "Item",
              "quantityCalculation": "Per Person",
              "bookedQuantity": 50.0,
              "actualQuantity": 50.0,
              "unitPrice": 0.54,
              "soldBy": "Sold By Value"
            }
          ]
        },
        {
          "name": "Luncheon",
          "status": "Unconfirmed",
          "attendees": 55,
          "startDateTime": "2022-09-06T11:00:00",
          "endDateTime": "2022-09-06T12:00:00",
          "functionRoom": "Conference Room",
          "eventItems": [
            {
              "name": "Bottled Water",
              "itemType": "Item",
              "quantityCalculation": "Per Event",
              "bookedQuantity": 50.0,
              "actualQuantity": 50.0,
              "unitPrice": 75.75
            },
            {
              "name": "Assorted Sandwiches",
              "itemType": "Item",
              "quantityCalculation": "Per Event",
              "bookedQuantity": 50.0,
              "actualQuantity": 50.0,
              "unitPrice": 90.9
            }
          ]
        },
        {
          "name": "Afternoon Meeting",
          "status": "Unconfirmed",
          "attendees": 30,
          "startDateTime": "2022-09-06T12:00:00",
          "endDateTime": "2022-09-06T15:00:00",
          "functionRoom": "Conference Room",
          "eventItems": [
            {
              "name": "Notepads",
              "itemType": "Item",
              "quantityCalculation": "Per Person",
              "bookedQuantity": 50.0,
              "actualQuantity": 50.0,
              "unitPrice": 0.54,
              "soldBy": "Sold By Value"
            },
            {
              "name": "Pens",
              "itemType": "Item",
              "quantityCalculation": "Per Person",
              "bookedQuantity": 50.0,
              "actualQuantity": 50.0,
              "unitPrice": 0.54,
              "soldBy": "Sold By Value"
            }
          ]
        }
      ]
    },
    "guestroomBlocks": [
      {
        "roomBlockCode": "RB1",
        "guestrooms": [
          {
            "date": "2022-09-06T00:00:00",
            "rooms": 100,
            "guestroomTypes": [
              {
                "roomCode": "ROH",
                "quantity": 100
              }
            ]
          }
        ]
      }
    ],
    "bookingRevenueSummary": {
      "exclusiveSubtotalCost": 1739.39,
      "adminCost": 367.3
    },
    "contact": {
      "name": "John Smith",
      "address": {
        "line1": "75 New Hampshire Ave.",
        "city": "Portsmouth",
        "stateProvince": "NH",
        "postalCode": "03801",
        "country": "USA"
      }
    },
    "policyId": "676a1e84-17bd-4f5a-b527-4a98d97a0329"
  }
}
                            

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": "BookingId1"Id of cancelled booking.

, "successful": true } }

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