BookingUSB-Product Addon APIs
Modified on: 2024-04-24 15:57
As part of our design update, the screenshots are currently being revised.
TABLE OF CONTENTS
Introduction
Product Addon APIs are used by distributors to get product addon details through the product addon detail API and check the real-time availability of certain product addons through the product addon availability API. Please be aware that distributors who connect with Disney are required to implement these APIs.
- Product Addon Detail(/productAddon/{supplierId}/{hotelId}/{type}/{code})
- Product Addon Availability(/productAddon/availability)
- Product Addon Park Reservation(/productAddon/parkReservation)
Product Addon Detail
The API is used by distributors to get product addon details for a specific hotel.
GET /productAddon/{supplierId}/{hotelId}/{type}/{code}?distributorId={distributorId} HTTP/1.1 URL: {endpoint}/productAddon/{supplierId}/{hotelId}/{type}/{code}?distributorId={distributorId} Authorization:Bearer 53ac07777cdffac2d53000002d698728ce964432d7167596bc005c5fc Accept-Encoding: gzip Content-Encoding: gzip Content-Type: application/json;charset=utf-8
Request Parameters
Name | Description | Required | Type | Example |
---|---|---|---|---|
supplierId | Supplier ID in DerbySoft's system | Yes | string | DISNEY |
hotelId | Supplier's hotel ID | Yes | string | 06 |
type | Type of product addon | Yes | string | DisneyTicket |
code | Code of product addon | Yes | string | / |
distributorId | Distributor ID in DerbySoft's system | Yes | string | / |
Response Example
- Success Response (HTTP Status 200)
{ "supplierId": "DISNEY", "hotelId": "06", "productAddon": { "code": "code", "name": "name", "type": "DisneyTicket", "policies": [ "policy", "policy" ], "restrictions": { "officeIds": [ "officeId", "officeId" ], "discountGroups": [ "group", "group" ], "ageQualifyingTypes": [ { "type": "Adult", "minAge": 18, "maxAge": 99 } ], "saleDateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "usageDateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "durationDays": 3, "usageBufferDays": 3 }, "rates": [ { "dateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "rate": { "ageQualifyingType": { "type": "Adult", "minAge": 18, "maxAge": 99 }, "currency": "USD", "amountBeforeTax": 123.23, "amountAfterTax": 134.34 } } ], "parkReservationRequired": true, "attractions": [ { "attractionId": "magic-kingdom", "attractionName": "Magic Kingdom Park" }, { "attractionId": "animal-kingdom", "attractionName": "Disney's Animal Kingdom Theme Park" } ] } }
- Error Response (HTTP Status 403)
{ "error": "Key not authorized" }
- Error Response (HTTP Status 500)
{ "errorCode": "InvalidField", "errorMessage": "Invalid Message" }
Response Specification
Attribute | Type | Required | Description | Example |
---|---|---|---|---|
supplierId | string | Yes | Supplier ID in DerbySoft's system | DISNEY |
hotelId | string | Yes | Supplier's hotel ID | 06 |
productAddon | object | No | / | / |
@code | string | Yes | Product addon code | / |
@name | string | Yes | Product addon name | / |
@type | string | Yes | Product addon type | DisneyTicket |
productAddon/policies | array[string] | No | / | / |
productAddon/restrictions | object | No | / | / |
restrictions/officeIds | array[string] | No | The distributor identifier for each of their offices or points of sale | [SC-1_SCUSA001] |
restrictions/discountGroups | array[string] | No | / | / |
restrictions/ageQualifyingTypes | array[object] | No | / | / |
@type | enum | Yes | Enum: [Adult, Child] | Adult |
@minAge | integer | Yes | / | 18 |
@maxAge | integer | Yes | / | 99 |
restrictions/saleDateRange | object | Yes | / | / |
@startDate | string | Yes | format with yyyy-MM-dd | 2022-01-01 |
@endDate | string | Yes | format with yyyy-MM-dd | 2022-01-04 |
restrictions/usageDateRange | object | Yes | / | / |
@startDate | string | Yes | format with yyyy-MM-dd | 2022-01-01 |
@endDate | string | Yes | format with yyyy-MM-dd | 2022-01-04 |
restrictions/durationDays | integer | Yes | / | 3 |
restrictions/usageBufferDays | integer | Yes | / | 3 |
productAddon/rates | array[object] | No | / | / |
rates/dateRange | object | Yes | / | / |
@startDate | string | Yes | start date of date range, format with yyyy-MM-dd | 2022-01-01 |
@endDate | string | Yes | end date of date range, format with yyyy-MM-dd | 2022-01-04 |
rates/rate | array[object] | Yes | / | / |
rate/ageQualifyingType | object | No | / | / |
@type | enum | Yes | Enum: [Adult, Child] | Adult |
@minAge | integer | Yes | / | 18 |
@maxAge | integer | Yes | / | 99 |
rate/currency | string | Yes | / | USD |
rate/amountBeforeTax | number | No | / | 123.23 |
rate/amountAfterTax | number | No | / | 134.34 |
productAddon/parkReservationRequired | boolean | No | The flag indicates whether this addon needs reservation or not. | true |
productAddon/attractions | array[object] | No | / | / |
@attractionId | string | Yes | Theme Park's ID | magic-kingdom |
@attractionName | string | Yes | Theme Park's name | Magic Kingdom Park |
Product Addon Availability
This API is used to check real-time availability for certain product addons. It will hit the hotel suppliers' system to get real-time results.
POST /productAddon/availability HTTP/1.1 URL: {endpoint}/productAddon/availability Authorization:Bearer 53ac07777cdffac2d53000002d698728ce964432d7167596bc005c5fc Accept-Encoding: gzip Content-Encoding: gzip Content-Type: application/json;charset=utf-8
Request Example
{ "header": { "supplierId": "DISNEY", "distributorId": "SUNCOAST", "version": "v4", "token": "18393849028490234" }, "bookingChannel": "string", "officeId": "string", "hotelId": "06", "date": "2022-01-01", "productAddonType": "DisneyTicket", "productAddonCandidates": [ { "code": "string", "quantity": 1 } ] }
Request Specification
Attribute | Type | Required | Description | Example |
---|---|---|---|---|
header | object | Yes | / | / |
@supplierId | string | Yes | Max Length: 32 Supplier ID in DerbySoft's system | DISNEY |
@distributorId | string | Yes | Max Length: 32 Distributor ID in DerbySoft's system | SUNCOAST |
@version | string | Yes | Max Length: 20 Version of API | v4 |
@token | string | Yes | Max Length: 64 A unique ID to identify requests and responses, usually it's a UUID identity. | 18393849028490234 |
bookingChannel | string | No | Sub-distributor or office ID, This attribute is optional when Disney offers the distributor with only 1 bookingChannel code. | / |
officeId | string | No | The distributor identifier for each of their offices or points of sale. NOTE: This attribute is mandatory when requesting product addon availability from Disney. And for other suppliers, it depends. | / |
hotelId | string | Yes | Hotel ID in supplier's system | 06 |
date | string | Yes | format with yyyy-MM-dd | 2022-01-01 |
productAddonType | string | Yes | the type of product addon | DisneyTicket |
productAddonCandidates | array[object] | Yes | / | / |
@code | string | Yes | product addon code | / |
@quantity | integer | Yes | / | 1 |
Response Example
- Success Response (HTTP Status 200)
{ "header": { "supplierId": "DISNEY", "distributorId": "SUNCOAST", "version": "v4", "token": "18393849028490234" }, "bookingChannel": "string", "officeId": "string", "hotelId": "06", "date": "2022-01-01", "productAddonType": "DisneyTicket", "productAddons": [ { "code": "string", "rates": [ { "ageQualifyingType": { "type": "Adult", "minAge": 18, "maxAge": 99 }, "currency": "USD", "amountBeforeTax": 123.23, "amountAfterTax": 134.34 } ] } ] }
- Error Response (HTTP Status 401)
{ "error": "Key not authorized" }
- Error Response (HTTP Status 500)
{ "errorCode": "InvalidField", "errorMessage": "Invalid Message" }
Response Specification
Name | Description | Required | Type | Example |
---|---|---|---|---|
header | object | Yes | / | / |
@supplierId | string | Yes | MaxLength: 32 Supplier ID in DerbySoft's system | DISNEY |
@distributorId | string | Yes | MaxLength: 32 Distributor ID in DerbySoft's system | SUNCOAST |
@version | string | Yes | MaxLength: 20 Version of API | v4 |
@token | string | Yes | MaxLength: 64 A unique ID to identify requests and responses, normally it should be a UUID identity. | 18393849028490234 |
bookingChannel | string | No | Sub-distributor ID | / |
officeId | string | No | The distributor identifier for each of their offices or points of sale. | / |
hotelId | string | Yes | Hotel ID in supplier's system | 06 |
date | string | No | format with yyyy-MM-dd | 2022-01-01 |
productAddonType | string | No | the type of product addon | DisneyTicket |
productAddons | array[object] | No | / | / |
@code | string | Yes | product addon code | |
productAddons/rates | array[object] | Yes | / | / |
rates/ageQualifyingType | object | No | / | / |
@type | enum | Yes | Enum: [Adult, Child] | Adult |
@minAge | integer | Yes | / | 18 |
@maxAge | integer | Yes | / | 99 |
rates/currency | string | Yes | / | USD |
rates/amountBeforeTax | number | No | / | 123.23 |
rates/amountAfterTax | number | No | / | 134.34 |
Product Addon Park Reservation
This API was used by Distributors to book the parks with product add-ons. It will be forwarded to the hotel supplier system to get real-time results.
Disney has a "parkReservationRequired" true/false flag in their API for ticket products. When this is "true", the park pass reservation is required and this API can be used instead of the customer going directly to Disney. Any modification or cancellation for the park pass reservations would require the customer to contact Disney directly.
Distributors can use the Park Reservation API to plan their visit to the park and make reservations in advance if necessary. Distributors can send reservation requests to the product Addon Reservation API and provide the attraction IDs, the entry date, and the reservation IDs of the room package.
How to use:
① Distributors can send reservation dates in separate requests for a reservation id.The response will contain both success and error messages for the reservations. Distributors need to parse the full messages.
② If the park pass reservation fails, Distributors can send requests for a different date or a different park.
③ Only 1 park needs to be reserved for a ticket if visiting on the same date. If the visits are for two different dates, the request need to be made for the entire entry period.
POST /productAddon/parkReservation HTTP/1.1 URL: {endpoint}/productAddon/parkReservation Authorization:Bearer 53ac07777cdffac2d53000002d698728ce964432d7167596bc005c5fc Accept-Encoding: gzip Content-Encoding: gzip Content-Type: application/json;charset=utf-8
Request Example
{ "header": { "supplierId": "DISNEY", "distributorId": "SUNCOAST", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "productAddonAttractions": [ { "productAddonCode": "3LXRE", "officeId": "SC-1 SCUSA001", "attractionsDetail": [ { "attractionId": "magic-kingdom", "entryDate": "2023-07-13" }, { "attractionId": "magic-kingdom", "entryDate": "2023-07-13" } ] }, { "productAddonCode": "3LBFE", "officeId": "SC-1 SCUSA001", "attractionsDetail": [ { "attractionId": "animal-kingdom", "entryDate": "2023-07-14" }, { "attractionId": "animal-kingdom", "entryDate": "2023-07-14" } ] } ] }
Request Specification
Attribute | Type | Required | Description | Example |
---|---|---|---|---|
header | object | Yes | / | / |
@supplierId | string | Yes | Max Length: 32 Supplier ID in DerbySoft's system | DISNEY |
@distributorId | string | Yes | Max Length: 32 Distributor ID in DerbySoft's system | SUNCOAST |
@version | string | Yes | Max Length: 20 Version of API | v4 |
@token | string | Yes | Max Length: 64 A unique ID to identify requests and responses, normally it should be a UUID identity. | 18393849028490234 |
reservationIds | object | Yes | / | / |
@distributorResId | string | Yes | Distributor's reservation ID. Distributors should keep the ID unique on their system to avoid any potential issues caused by duplicate reservation IDs. | C2084DFL0 |
@derbyResId | string | No | Reservation ID in DerbySoft's system, This is a unique ID as DerbySoft would do splitting reservations. | D15F893D34DF |
@supplierResId | string | No | Reservation ID in Suppliers' system | 89389494 |
productAddonAttractions | array[object] | Yes | / | / |
@productAddonCode | string | Yes | product addon code | 3LXRE |
@officeId | string | Yes | The distributor identifier for each of their offices or points of sale. Note: The pre-assigned ID from the supplier. This attribute is mandatory when requesting addOn availability from Disney | 3C-1_SCUSA001 |
productAddonAttractions/attractionsDetail | array[object] | Yes | / | / |
@attractionId | string | Yes | The attraction ID of the product addon | magic-kingdom |
@entryDate | string | Yes | The entry date to the attraction( format: YYYY-MM-DD) | 2023-07-13 |
Response Example
- Success Response (HTTP Status 200)
{ "header": { "supplierId": "DISNEY", "distributorId": "SUNCOAST", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "productAddonAttractions": [ { "productAddonCode": "3LXRE", "officeId": "SC-1 SCUSA001", "productAddonResId": "string", "attractionsDetail": [ { "attractionId": "magic-kingdom", "entryDate": "2023-07-13", "attractionResId": "string" }, { "attractionId": "magic-kingdom", "entryDate": "2023-07-13", "attractionResId": "string" } ] }, { "productAddonCode": "3LBFE", "officeId": "SC-1 SCUSA001", "productAddonResId": "string", "attractionsDetail": [ { "attractionId": "animal-kingdom", "entryDate": "2023-07-14", "attractionResId": "string" }, { "attractionId": "animal-kingdom", "entryDate": "2023-07-14", "failCause": { "errorCode": "string", "errorMessage": "string" } } ] } ] }
- Error Response (HTTP Status 403)
{ "error": "Key not authorized" }
- Error Response (HTTP Status 500)
{ "errorCode": "InvalidField", "errorMessage": "Invalid Message" }
Response Specification
Attribute | Type | Required | Description | Example |
---|---|---|---|---|
header | object | Yes | / | / |
@supplierId | string | Yes | Max Length: 32 Supplier ID in DerbySoft's system | DISNEY |
@distributorId | string | Yes | Max Length: 32 Distributor ID in DerbySoft's system | SUNCOAST |
@version | string | Yes | Max Length: 20 Version of API | v4 |
@token | string | Yes | Max Length: 64 A unique ID to identify requests and responses, normally it should be a UUID identity. | 18393849028490234 |
reservationIds | object | Yes | / | / |
@distributorResId | string | No | Distributor's reservation ID. Distributors should keep the ID unique on their system to avoid any potential issues caused by duplicate reservation IDs. | C2084DFL0 |
@derbyResId | string | No | Reservation ID in DerbySoft’s system. The ID is unique | D15F893D34DF |
@supplierResId | string | Yes | Reservation ID in suppliers' system | 89389494 |
productAddonAttractions | array[object] | Yes | / | / |
@productAddonCode | string | Yes | product addon code | 3LXRE |
@officeId | string | Yes | The distributor identifier for each of their offices or points of sale. Note: The pre-assigned Id from the supplier. This attribute is mandatory when requesting addOn availability from Disney | 3C-1_SCUSA001 |
@productAddonResId | string | Yes | The reservation id of the product addon returned from the supplier. This is a mandatory attribute when sending reservation requests to Disney | 1234 |
productAddonAttractions/attractionsDetail | array[object] | Yes | / | / |
@attractionId | string | Yes | The attraction ID of product addon | magic-kingdom |
@entryDate | string | Yes | The entry date to the attraction( format: YYYY-MM-DD) | 2023-07-13 |
@attractionResId | string | No | If the attractionResId is returned, it means the reservation is successful | 12345 |
failCause | object | No | / | / |
@errorCode | string | Yes | error code | / |
@errorMessage | string | Yes | error message | / |
Did you find it helpful? Yes No
Send feedback