BookingUSB-Reservation APIs
Modified on: 2024-10-21 17:53
TABLE OF CONTENTS
Introduction
The Reservation APIs are used by distributors to support the real-time booking flow. In this article, 7 types of Reservation APIs will be introduced:
APIs marked with "☆" are mandatory for Distributors to implement, while those marked with "◎" are optional but recommended.
- ☆ Live Check(/availability)-This API is used to check real-time availability to get all available rooms and rates. A call will be sent to the hotel supplier’s system to get real-time results.
- ☆ Prebook(/reservation/prebook)-This API is used to do a final check before a booking. A call will be sent to the hotel supplier‘s system to get real-time results.
- ☆ Book(/reservation/book)-This API is used by distributors to book the rooms. A call will be sent to the hotel supplier’s system to get a real-time confirmation.
- ◎ Modify(/reservation/modify)-This API is used by distributors to modify an existing booking. A call will be sent to the hotel supplier's system to get a real-time confirmation. For any hotel supplier that cannot support a modification, it will be processed as a cancel->rebook strategy.Please be aware that distributors who connect with Disney are required to implement the API.
- ☆ Cancel(/reservation/cancel)-This API is used by distributors to cancel an existing booking. A call will be sent to the hotel supplier's system to get a real-time cancel confirmation.
- ◎ Query Reservation List(/reservations)-This API is used by distributors to query existing bookings.
- ◎ Query Reservation Detail(/reservation/detail)-This API is used by distributors to query existing bookings. It can be used to check the reservation status of some timeout booking requests.
Live Check
This API is used to check real-time availability to get all available rooms and rates from hotel suppliers. Please note that if hotel suppliers don't support the live check function, GO will call DerbySoft ARI cache instead. Besides, the maximum stay can be supported up to 61 days for a live check request if hotel suppliers support it.
POST /availability HTTP/1.1 URL: {endpoint}/availability Authorization:Bearer 53ac07777cdffac2d53000002d698728ce964432d7167596bc005c5fc Accept-Encoding: gzip Content-Encoding: gzip Content-Type: application/json;charset=utf-8
Request Example
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "hotelId": "GATHI", "stayRange": { "checkin": "2018-01-01", "checkout": "2018-01-04" }, "roomCriteria": { "roomCount": 2, "adultCount": 1, "childCount": 2, "childAges": [ 4, 8 ] }, "productCandidate": { "roomId": "K1D", "rateId": "ODAD01" }, "iata": "string", "loyaltyAccount": { "programCode": "BW", "accountId": "1234567890123457" }, "corpAccount": { "corpProgramCode": "CR", "corpId": "A-1232" }, "isAfterPromotion": false, "promoteCode": "string", "bookingChannel": "string", "extensions": { "key1": "value1", "key2": "value2" } }
Request Specification
Attribute | Type | Required | Description | Example |
---|---|---|---|---|
header | object | Yes | / | / |
@supplierId | string | Yes | MaxLength: 32 The ID of the hotel supplier in DerbySoft's system | HILTON |
@distributorId | string | Yes | MaxLength: 32 The ID of the distributor in DerbySoft's system | GTA |
@version | string | Yes | MaxLength: 20 Version of API | v4 |
@token | string | Yes | MaxLength: 64 A unique ID to identify request and response, normally it should be UUID. | 18393849028490234 |
hotelId | string | Yes | Hotel ID in supplier's system | GATHI |
stayRange | object | Yes | / | / |
@checkin | string | Yes | Check-in, format with yyyy-MM-dd | 2018-01-01 |
@checkout | string | Yes | Check out, format with yyyy-MM-dd | 2018-01-04 |
roomCriteria | object | Yes | / | / |
@roomCount | integer | Yes | Total room count per request | 2 |
@adultCount | integer | Yes | Adult count per room | 1 |
@childCount | integer | No | Child count per room | 2 |
@childAges | array | No | Child ages for each child, array size MUST be the same as a child count. | [ 4, 8 ] |
productCandidate | object | No | / | / |
@roomId | string | No | Room ID in supplier's system | K1D |
@rateId | string | No | Rate ID in supplier's system | ODAD01 |
iata | string | No | IATA of distributor | / |
loyaltyAccount | object | No | / | / |
@programCode | string | Yes | Loyalty program code of the supplier | BW |
@accountId | string | Yes | Loyalty program account ED | 1234567890123457 |
corpAccount | object | No | / | / |
@corpProgramCode | string | Yes | Corporate Hotel Program of hotel supplier | CR |
@corpId | string | Yes | Corporate ID in the program account | A-1232 |
isAfterPromotion | boolean | No | The flag indicates calculating the available room rates with the promotion rules or not.
| false |
promoteCode | string | No | Promote code defined by the hotel, is an optional field when you want to request the promotion rates (isAfterPromotion=true). If promote code is empty and there are multiple promotions available for one product at the same time, the promotion rule will be chosen according to multiPromotionsStategy. | / |
bookingChannel | string | No | Sub-distributor ID | / |
extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). Please don't transmit sensitive information through this field. For more information refer to: | / |
Response Example
- Success Response (HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "hotelId": "GATHI", "stayRange": { "checkin": "2018-01-01", "checkout": "2018-01-04" }, "roomCriteria": { "roomCount": 2, "adultCount": 1, "childCount": 2, "childAges": [ 4, 8 ] }, "productCandidate": { "roomId": "K1D", "rateId": "ODAD01" }, "iata": "string", "roomRates": [ { "inventory": 2, "isAfterPromotion": true, "promoteCode": "discount001", "roomId": "K1D", "rateId": "ODAD01", "currency": "USD", "amountBeforeTax": [ 100, 100, 120 ], "amountAfterTax": [ 110, 110, 130 ], "mealPlan": "RO", "paymentType": "PayNow", "guarantee": { "guaranteeType": "CCG" }, "fees": [ { "dateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "fee": { "name": "Service Charge", "type": "Exclusive", "amount": 10, "amountType": "Percent", "chargeType": "PerRoomPerNight", "paymentType": "PayNow", "effectivePerson": 0 } } ], "cancelPolicy": { "code": "AD100P_100P", "description": "Non Refundable", "cancelPenalties": [ { "noShow": true, "cancellable": true, "cancelDeadline": { "offsetTimeDropType": "BeforeArrival", "offsetTimeUnit": "D", "offsetTimeValue": 0, "deadline": "string" }, "penaltyCharge": { "chargeBase": "FullStay", "nights": 0, "amount": 0, "percent": 0 } } ] } } ], "extensions": { "key1": "value1", "key2": "value2" } }
- Successful Response from Exchange Connection and RETAIL Rate Model(HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "hotelId": "GATHI", "stayRange": { "checkin": "2018-01-01", "checkout": "2018-01-04" }, "roomCriteria": { "roomCount": 2, "adultCount": 1, "childCount": 2, "childAges": [ 4, 8 ] }, "productCandidate": { "roomId": "K1D", "rateId": "ODAD01" }, "iata": "string", "roomRates": [ { "inventory": 2, "isAfterPromotion": true, "promoteCode": "discount001", "roomId": "K1D", "rateId": "ODAD01", "connectionType": "Exchange", "commission": { "value": 10, "type": "percentage" }, "currency": "USD", "amountBeforeTax": [ 100, 100, 120 ], "amountAfterTax": [ 110, 110, 130 ], "mealPlan": "RO", "paymentType": "PayNow", "guarantee": { "guaranteeType": "CCG" }, "fees": [ { "dateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "fee": { "name": "Service Charge", "type": "Exclusive", "amount": 10, "amountType": "Percent", "chargeType": "PerRoomPerNight", "paymentType": "PayNow", "effectivePerson": 0 } } ], "cancelPolicy": { "code": "AD100P_100P", "description": "Non Refundable", "cancelPenalties": [ { "noShow": true, "cancellable": true, "cancelDeadline": { "offsetTimeDropType": "BeforeArrival", "offsetTimeUnit": "D", "offsetTimeValue": 0, "deadline": "string" }, "penaltyCharge": { "chargeBase": "FullStay", "nights": 0, "amount": 0, "percent": 0 } } ] } } ], "extensions": { "key1": "value1", "key2": "value2" } }
- Successful Response from Exchange Connection and NET Rate Model(HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "hotelId": "GATHI", "stayRange": { "checkin": "2018-01-01", "checkout": "2018-01-04" }, "roomCriteria": { "roomCount": 2, "adultCount": 1, "childCount": 2, "childAges": [ 4, 8 ] }, "productCandidate": { "roomId": "K1D", "rateId": "ODAD01" }, "iata": "string", "roomRates": [ { "inventory": 2, "isAfterPromotion": true, "promoteCode": "discount001", "roomId": "K1D", "rateId": "ODAD01", "connectionType": "Exchange", "currency": "USD", "amountBeforeTax": [ 100, 100, 120 ], "amountAfterTax": [ 110, 110, 130 ], "suggestedTotalPrice": { "amountBeforeTax": 600, "amountAfterTax": 700 }, "mealPlan": "RO", "paymentType": "PayNow", "guarantee": { "guaranteeType": "CCG" }, "fees": [ { "dateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "fee": { "name": "Service Charge", "type": "Exclusive", "amount": 10, "amountType": "Percent", "chargeType": "PerRoomPerNight", "paymentType": "PayNow", "effectivePerson": 0 } } ], "cancelPolicy": { "code": "AD100P_100P", "description": "Non Refundable", "cancelPenalties": [ { "noShow": true, "cancellable": true, "cancelDeadline": { "offsetTimeDropType": "BeforeArrival", "offsetTimeUnit": "D", "offsetTimeValue": 0, "deadline": "string" }, "penaltyCharge": { "chargeBase": "FullStay", "nights": 0, "amount": 0, "percent": 0 } } ] } } ], "extensions": { "key1": "value1", "key2": "value2" } }
- Error Response(HTTP Status 403)
{ "error": "Key not authorized" }
- Error Response (HTTP Status 500)
{ "errorCode": "string", "supplierErrorCode": "string", "errorMessage": "string" }
Response Specification
header | object | Yes | / | / |
@supplierId | string | Yes | MaxLength: 32 The ID of the hotel supplier in DerbySoft's system | HILTON |
@distributorId | string | Yes | MaxLength: 32 The ID of the distributor in DerbySoft's system | GTA |
@version | string | Yes | MaxLength: 20 Version of API | v4 |
@token | string | Yes | MaxLength: 64 A unique ID to identify request and response, normally it should be UUID. | 18393849028490234 |
hotelId | string | Yes | Hotel ID in supplier's system | GATHI |
stayRange | object | Yes | / | / |
@checkin | string | Yes | Check-in, format with yyyy-MM-dd | 2018-01-01 |
@checkout | string | Yes | Check out, format with yyyy-MM-dd | 2018-01-04 |
roomCriteria | object | Yes | / | / |
@roomCount | integer | Yes | Total room count per request | 2 |
@adultCount | integer | Yes | Adult count per room | 1 |
@childCount | integer | No | Child count per room | 2 |
@childAges | array | No | Child ages for each child, array size MUST be the same as the child count/ | [ 4, 8 ] |
productCandidate | object | No | / | / |
@roomId | string | No | Room ID in supplier system | K1D |
@rateId | string | No | Rate ID in supplier system | ODAD01 |
iata | string | No | IATA of distributor | / |
roomRates |
| Yes | Meal plan, fee, and cancel policy are optional fields as some distributors do not support these in the API. | / |
@inventory | integer | Yes | Available inventory count according to request criteria | 1 |
@isAfterPromotion | boolean | No | The flag indicates calculating the available room rates with the promotion rules or not. Default is false if null TRUE means to check the availability that is under the promotion rules provided by the supplier. FALSE means you do not need to check the availability under any promotions, basic live-check only. | false |
@promoteCode | string | No | the code for the promotion applied to this rate, It's required when isAfterPromotion = true. | discount001 |
@roomId | string | Yes | Room ID in supplier system | 10000101 |
@rateId | string | Yes | Rate ID in supplier system | 123456 |
@connectionType | enum | No | Enum: [Exchange, Standard] Indicates the connection type of product. Notes: If the field is omitted, it means the Connection Type is Standard. | Exchange |
roomRates/commission | object | No | Notes: If the connection type is "Exchange" and "RETAIL" Rate Model, the node will be visible; otherwise, it will not appear. | / |
@value | number | Yes | / | 10 |
@type | enum | Yes | Commission type Enum: [percentage, amount] | percentage |
@currency | string | Yes | Currency code [ISO-4217] | USD |
@amountBeforeTax | array[number] | No | The daily amount of rate without tax & fee | [ 100, 100, 120 ] |
@amountAfterTax | array[number] | No | The daily amount of rate with tax & fee | [ 110, 110, 130 ] |
rooomRates/suggestedTotalPrice | object | No | Notes: If the connection type is "Exchange" and "NET" Rate Model, the node will be visible; otherwise, it will not appear. | / |
@amountBeforeTax | number | No | / | 600 |
@amountAfterTax | number | No | / | 700 |
@mealPlan | string | No | For meal plan code, refer to the standard meal plan code list. | RO |
@paymentType | enum | No | Indicates the product is prepaid to the hotel (PayNow) or pay at the hotel (PayLater) | PayNow |
roomRates/guarantee | object | No | Guarantee information for this room rate. | / |
@guaranteeType | string | Yes | The type of guarantee method, refer to the standard guarantee type list. | CCG |
roomRates / fees | array[object] | No | Fee or tax by date range. | / |
fees/dateRange | object | Yes | / | / |
@startDate | string | Yes | Start date of date range, format with yyyy-MM-dd | 2018-01-01 |
@endDate | string | Yes | End date of date range, format with yyyy-MM-dd | 2018-01-04 |
fees/fee |
| Yes | / | / |
@name | string | Yes | Pattern: \w[\w\d]+ | Service Charge |
@type | enum | Yes | The fee or tax is included in the amount before tax or not. Enum: [ Inclusive, Exclusive ] | Exclusive |
@amount | number | Yes | Amount value of fee or tax | 10 |
@amountType | string | Yes | Indicates how to charge the tax, 10% per room per night in this example Enum: [ Fix, Percent ] | Percent |
@chargeType | string | Yes | Enum: [ PerRoomPerNight, PerPersonPerNight, PerRoomPerStay, PerPersonPerStay ] | PerRoomPerNight |
@paymentType | enum | No | Indicates the fee is prepaid to the hotel (PayNow) or pay at the hotel (PayLater) Enum: [ PayLater, PayNow ] | PayNow |
@effectivePerson | number | No | It indicates the fee will be charged starting from which occupancy, such as the "Extra Person Charge" fee. The EffectivePerson is 3, meaning an extra fee will be applied from the third person onward. | 3 |
roomRates/cancelPolicy | object | No | Cancellation policy defines what penalty will be charged when a guest cancels the booking at a certain advance time range. The penalty is related to No-show or a time range before No-show/ | / |
@code | string | Yes | Max Length: 128 Code of cancel policy | AD100P_100P |
@description | string | No | Max Length: 1024 the description of the cancel policy | Non Refundable |
cancelPolicy/cancelPenalties |
| Yes | Detail about the cancel Penalty | / |
@noShow | boolean | Yes | If true, it means the penaltyCharge applied for No-Show, and the cancellable, cancelDeadline will NOT exist. | / |
@cancellable | boolean | No | Indicates cancel is allowed or not. If false, it cannot be canceled. If true, the cancelDeadline will exist. | / |
cancelPenalties / cancelDeadline |
| No | / | / |
@offsetTimeDropType | enum | No | Enum: [ BeforeArrival ] An enumerated type indicates when the deadline drop time goes into effect. | / |
@offsetTimeUnit | enum | No | Enum: [ D, H ]
| / |
@offsetTimeValue | number | No | The number of offset times with the time unit. | / |
@deadline | string | No | local deadline time allowed for cancellation, like 4 PM, or 6 PM. | / |
cancelPenalties / penaltyCharge | / | / | / | / |
@chargeBase | enum | No | Enum: [ FullStay, NightBase ] if FullStay, it will be a percentage or amount, if NightBase, the nights are required. | / |
@nights | number | No | Exists if the penalty charge is based on the night, like the first night. | / |
@amount | number | No | Exists if the penalty charge is a flat charge, like USD 30.00. | / |
@percent | number | No | Exists if the penalty charge is percent, like 15.5 means 15.5%. | / |
extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). Please don't transmit sensitive information through this field. For more information refer to: | / |
PreBook
Final check availability of target room and rate before booking. The maximum length of stay is 61 for a reservation if hotel suppliers support it.
POST /reservation/prebook HTTP/1.1 URL: {endpoint}/reservation/prebook Authorization:Bearer 53ac07777cdffac2d53000002d698728ce964432d7167596bc005c5fc Accept-Encoding: gzip Content-Encoding: gzip Content-Type: application/json;charset=utf-8
Request Example
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0" }, "iata": "string", "hotelId": "GATHI", "stayRange": { "checkin": "2018-01-01", "checkout": "2018-01-04" }, "contactPerson": { "firstName": "Thomas", "lastName": "Hintz", "email": "[email protected]", "phone": "260-975-4091", "address": "3946 Freddy Locks" }, "roomCriteria": { "roomCount": 1, "adultCount": 2, "childCount": 1, "childAges": [ 5 ] }, "total": { "amountBeforeTax": 640, "amountAfterTax": 700 }, "payment": { "cardCode": "VI", "cardNumber": "4111111111111111", "cardHolderName": "Sherlock Holmes", "expireDate": "0119", "securityCode": "123" }, "loyaltyAccount": { "programCode": "BW", "accountId": "1234567890123457" }, "corpAccount": { "corpProgramCode": "CR", "corpId": "A-1232" }, "promoteCode": "string", "guests": [ { "firstName": "Thomas", "lastName": "Hintz", "email": "[email protected]", "phone": "260-975-4091", "address": "3946 Freddy Locks", "age": 32, "gender": "Male", "birthday": "1990-01-01", "type": "Adult", "index": 1, "extensions": { "key1": "value1", "key2": "value2" } }, { "firstName": "Hillary", "lastName": "Ullrich", "email": "[email protected]", "phone": "260-975-4091", "address": "3946 Freddy Locks", "age": 28, "gender": "Female", "birthday": "1994-01-01", "type": "Adult", "index": 1 }, { "firstName": "Alex", "lastName": "Hintz", "age": 5, "type": "Child", "index": 1 } ], "comments": [ "no smoking", "high floor" ], "roomRates": [ { "roomId": "K1D", "rateId": "ODAD01", "currency": "USD", "amountBeforeTax": [ 100, 100, 120 ], "amountAfterTax": [ 110, 110, 130 ], "mealPlan": "RO", "paymentType": "PayNow", "guarantee": { "guaranteeType": "CCG" }, "fees": [ { "dateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "fee": { "name": "Service Charge", "type": "Exclusive", "amount": 10, "amountType": "Percent", "chargeType": "PerRoomPerNight", "paymentType": "PayNow", "effectivePerson": 0 } } ], "cancelPolicy": { "code": "AD100P_100P", "description": "Non Refundable", "cancelPenalties": [ { "noShow": true, "cancellable": true, "cancelDeadline": { "offsetTimeDropType": "BeforeArrival", "offsetTimeUnit": "D", "offsetTimeValue": 0, "deadline": "string" }, "penaltyCharge": { "chargeBase": "FullStay", "nights": 0, "amount": 0, "percent": 0 } } ] } } ], "bookingChannel": "string", "productAddons": [ { "type": "DisneyTicket", "code": "code", "date": "2018-01-01", "quantity": 1, "officeId": "string", "rate": { "ageQualifyingType": { "type": "Adult", "minAge": 18, "maxAge": 99 }, "currency": "USD", "amountBeforeTax": 123.23, "amountAfterTax": 134.34 } } ], "extensions": { "key1": "value1", "key2": "value2" } }
Request Specification
Attribute | Type | Required | Description | Example |
---|---|---|---|---|
header | object | Yes | / | / |
@supplierId | string | Yes | Max Length: 32 The ID of hotel supplier in DerbySoft's system. | HILTON |
@distributorId | string | Yes | Max Length: 32 The ID of the distributor in DerbySoft's system | GTA |
@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 UUID. | 18393849028490234 |
reservationIds | / | 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. PS: If distributors don't generate reservation IDs during the stage, you can fill in a blank value in the request for the field like distributorResId="", but the null value doesn't be accepted since it's a mandatory field. | C2084DFL0 |
iata | string | No | IATA | / |
hotelId | string | Yes | Hotel ID in supplier's system | 100001 |
stayRange | object | Yes | / | / |
@checkin | string | Yes | Check-in, format with yyyy-MM-dd | 2018-01-01 |
@checkout | string | Yes | Check out, format with yyyy-MM-dd | 2018-01-04 |
contactPerson | object | Yes | / | / |
@firstName | string | Yes | First Name | James |
@lastName | string | Yes | Last Name | Bond |
string | No | |||
@phone | string | No | / | / |
@address | string | No | / | / |
roomCriteria | object | Yes | / | / |
@roomCount | integer | Yes | Total room count per request | / |
@adultCount | integer | Yes | Adult count per room | / |
@childCount | integer | No | Child count per room | / |
@childAges | array | No | Child ages for each child, array size MUST be the same as the child count/ | / |
total | object | Yes | / | / |
@amountBeforeTax | number | No | abbr. ABT It's required if AAT is not provided | 640 |
@amountAfterTax | number | No | abbr. AAT It's required if ABT is not provided | 700 |
payment |
| No | / | / |
@cardCode | string | Yes | VI, MC, AX, etc. Card Code | VI |
@cardNumber | string | Yes | Credit card number | 4111111111111111 |
@cardHolderName | string | Yes | Cardholder name | Sherlock Holmes |
@expireDate | string | Yes | It should be 2 digits for the month, and 2 digits for the year, as "MMYY". | 0119 |
@securityCode | string | No | Card verification value | 123 |
loyaltyAccount | object | No | / | / |
@programCode | string | Yes | Loyalty program code of the supplier | BW |
@accountId | string | Yes | Loyalty program account ID | 1234567890123457 |
corpAccount | object | No | / | / |
@corpProgramCode | string | Yes | Corporate Hotel Program of hotel supplier | CR |
@corpId | string | Yes | Corporate ID in the program account | A-1232 |
promoteCode | string | No | Promotion code defined by the hotel, the promotion code is required if making a reservation under the promotion | / |
guests | array[object] | Yes | / | / |
@firstName | string | Yes | First Name | James |
@lastName | string | Yes | Last Name | Bond |
string | No | |||
@phone | string | No | / | / |
@address | string | No | / | / |
@age | integer | No | Age of guest | / |
@gender | enum | No | Gender of guest Enum: [Male,Female ] | Male |
@birthday | string | No | Birthday of guest format with yyyy-MM-dd | 1970-12-20 |
@type | string | No | Type of guest Adult, Child, or Infant Enum: [ Adult, Child, Infant ] | / |
@index | integer | No | Indicate which guests will be allocated to which room. For one room reservation, the room index is 1 for all guests. For multi-room reservations, the index starts from 1 and the max room index is equal to the number of booked rooms. | index = 1, Indicate the guest will allocate to the first room. index = 2, Indicate the guest will allocate to the second room. |
@extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). | / |
comments | array[string] | No | / | [ "no smoking", "high floor" ] |
roomRates | array[object] | Yes | Min Items: 1 Max Items: 1 meal plan, fee, and cancel policy are optional fields as some distributors do not support these in the API. | / |
@roomId | string | Yes | Room ID in supplier's system | 10000101 |
@rateId | string | Yes | Rate ID in supplier's system | 123456 |
@currency | string | Yes | Currency code [ISO-4217] | USD |
@amountBeforeTax | array[number] | No | abbr. ABT The daily amount of rate without tax and fee It's required if AAT is not provided | [ 100, 100, 120 ] |
@amountAfterTax | array[number] | No | abbr. AT The daily amount of rate with tax and fee It's required if ABT is not provided | [ 110, 110, 130 ] |
@mealPlan | string | No | Meal plan code, refer to the standard meal plan code list. | RO |
@paymentType | enum | No | Indicates the product is prepaid to the hotel (PayNow) or pay at the hotel (PayLater) | PayNow |
roomRates/guarantee | object | No | Guarantee information for this room rate. | / |
@guaranteeType | string | Yes | The type of guarantee method, refer to the standard guarantee type list. | CCG |
roomRates/fees | array[object] | No | Fee or tax by date range. | / |
fees / dateRange | object | Yes | / | / |
@startDate | string | Yes | Start date of date range, format with yyyy-MM-dd | 2018-01-01 |
@endDate | string | Yes | End date of date range, format with yyyy-MM-dd | 2018-01-04 |
fees/fee |
| Yes | / | / |
@name | string | Yes | Pattern: \w[\w\d]+ | Service Charge |
@type | enum | Yes | The fee or tax is included in the amount before tax or not Enum: [ Inclusive, Exclusive ] | Exclusive |
@amount | number | Yes | Amount value of fee or tax | 10 |
@amountType | string | Yes | Indicates how to charge the tax, 10% per room per night in this example Enum: [ Fix, Percent ] | Percent |
@chargeType | string | Yes | Enum: [ PerRoomPerNight, PerPersonPerNight, PerRoomPerStay, PerPersonPerStay ] | PerRoomPerNight |
@paymentType | enum | No | Indicates the fee is prepaid to the hotel (PayNow) or pay at the hotel (PayLater) Enum: [ PayLater, PayNow ] | PayNow |
@effectivePerson | number | No | It indicates the fee will be charged starting from which occupancy, such as the "Extra Person Charge" fee. The EffectivePerson is 3, meaning an extra fee will be applied from the third person onward. | / |
roomRates/cancelPolicy | object | No | Cancellation policy defines what penalty will be charged when a guest cancels the booking at a certain advance time range. The penalty is related to No-show or a time range before No-show | / |
@code | string | Yes | MaxLength: 128 code of cancel policy | AD100P_100P |
@description | string | No | MaxLength: 1024 the description of the cancel policy | Non Refundable |
cancelPolicy/cancelPenalties |
| Yes | Detail about the cancel Penalty | / |
@noShow | boolean | Yes | If true, it means the penaltyCharge applied for No-Show, and the cancellable, cancelDeadline will NOT exist. | / |
@cancellable | boolean | No | Indicates cancel is allowed or not. If false, it cannot be canceled. If true, the cancelDeadline will exist. | / |
cancelPenalties/cancelDeadline | / | / | / | / |
@offsetTimeDropType | enum | No | Enum: [ BeforeArrival ] An enumerated type indicates when the deadline drop time goes into effect. | / |
@offsetTimeUnit | enum | No | Enum: [ D, H ]
| / |
@offsetTimeValue | number | No | The number of offset times with the time unit/ | / |
@deadline | string | No | local deadline allowed for cancellation, like | / |
cancelPenalties/penaltyCharge | / | / | / | / |
@chargeBase | enum | No | Enum: [ FullStay, NightBase ] if FullStay, it will be a percentage or amount, if NightBase, the nights are required. | / |
@nights | number | No | Exists if the penalty charge is based on the night, like the first night | / |
@amount | number | No | Exists if the penalty charge is a flat charge, like USD 30.00 | / |
@percent | number | No | Exists if the penalty charge is percent, like 15.5 means 15.5% | / |
bookingChannel | string | No | Sub-distributor ID | / |
productAddons | array[object] | No | / | / |
@type | string | Yes | product addon type | / |
@code | string | Yes | product addon code | / |
@date | string | Yes | format with yyyy-MM-dd | 2022-01-01 |
@quantity | integer | Yes | / | 1 |
@officeId | string | No | / | / |
productAddons/rate | object | No | / | / |
rate/ageQualifyingType | object | No | / | / |
@type | enum | Yes | Enum: [Adult, Child] | Adult |
@minAge | integer | Yes | / | 18 |
@maxAge | integer | Yes | / | 18 |
rate/currency | string | Yes | / | USD |
rate/amountBeforeTax | number | No | / | 123.23 |
rate/amountAfterTax | number | No | / | 134.34 |
extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). Please don't transmit sensitive information through this field. For more information refer to: | / |
Response Example
- Success Response (HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "bookingToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", "extensions": { "key1": "value1", "key2": "value2" } }
- Error Response (HTTP Status 403)
{ "error": "Key not authorised" }
- Error Response (HTTP Status 500)
{ "errorCode": "string", "supplierErrorCode": "string", "errorMessage": "string" }
Response Specification
header | object | Yes | / | / |
@supplierId | string | Yes | MaxLength: 32 The ID of the hotel supplier in DerbySoft's system | HILTON |
@distributorId | string | Yes | MaxLength: 32 The ID of the distributor in DerbySoft's system | GTA |
@version | string | Yes | MaxLength: 20 Version of API | v4 |
@token | string | Yes | MaxLength: 64 A unique ID to identify request and response, normally it should be UUID. | 18393849028490234 |
bookingToken | string | Yes | Booking token used for booking | / |
extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). Please don't transmit sensitive information through this field. For more information refer to: | / |
Book
This API is utilized by distributors to reserve rooms. A request is sent to the hotel supplier system to receive immediate confirmation.
POST /reservation/book HTTP/1.1 URL: {{endpoint}}/reservation/book Authorization:Bearer 53ac07777cdffac2d53000002d698728ce964432d7167596bc005c5fc Accept-Encoding: gzip Content-Encoding: gzip Content-Type: application/json;charset=utf-8
Request Example
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0" }, "iata": "string", "hotelId": "GATHI", "stayRange": { "checkin": "2018-01-01", "checkout": "2018-01-04" }, "contactPerson": { "firstName": "Thomas", "lastName": "Hintz", "email": "[email protected]", "phone": "260-975-4091", "address": "3946 Freddy Locks" }, "roomCriteria": { "roomCount": 1, "adultCount": 2, "childCount": 1, "childAges": [ 5 ] }, "total": { "amountBeforeTax": 640, "amountAfterTax": 700 }, "payment": { "cardCode": "VI", "cardNumber": "4111111111111111", "cardHolderName": "Sherlock Holmes", "expireDate": "0119", "securityCode": "123" }, "loyaltyAccount": { "programCode": "BW", "accountId": "1234567890123457" }, "corpAccount": { "corpProgramCode": "CR", "corpId": "A-1232" }, "promoteCode": "string", "guests": [ { "firstName": "Thomas", "lastName": "Hintz", "email": "[email protected]", "phone": "260-975-4091", "address": "3946 Freddy Locks", "age": 32, "gender": "Male", "birthday": "1990-01-01", "type": "Adult", "index": 1, "extensions": { "key1": "value1", "key2": "value2" } }, { "firstName": "Hillary", "lastName": "Ullrich", "email": "[email protected]", "phone": "260-975-4091", "address": "3946 Freddy Locks", "age": 28, "gender": "Female", "birthday": "1994-01-01", "type": "Adult", "index": 1 }, { "firstName": "Alex", "lastName": "Hintz", "age": 5, "type": "Child", "index": 1 } ], "comments": [ "no smoking", "high floor" ], "roomRates": [ { "roomId": "K1D", "rateId": "ODAD01", "currency": "USD", "amountBeforeTax": [ 100, 100, 120 ], "amountAfterTax": [ 110, 110, 130 ], "mealPlan": "RO", "paymentType": "PayNow", "guarantee": { "guaranteeType": "CCG" }, "fees": [ { "dateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "fee": { "name": "Service Charge", "type": "Exclusive", "amount": 10, "amountType": "Percent", "chargeType": "PerRoomPerNight", "paymentType": "PayNow", "effectivePerson": 0 } } ], "cancelPolicy": { "code": "AD100P_100P", "description": "Non Refundable", "cancelPenalties": [ { "noShow": true, "cancellable": true, "cancelDeadline": { "offsetTimeDropType": "BeforeArrival", "offsetTimeUnit": "D", "offsetTimeValue": 0, "deadline": "string" }, "penaltyCharge": { "chargeBase": "FullStay", "nights": 0, "amount": 0, "percent": 0 } } ] } } ], "bookingChannel": "string", "productAddons": [ { "type": "DisneyTicket", "code": "code", "date": "2018-01-01", "quantity": 1, "officeId": "string", "rate": { "ageQualifyingType": { "type": "Adult", "minAge": 18, "maxAge": 99 }, "currency": "USD", "amountBeforeTax": 123.23, "amountAfterTax": 134.34 } } ], "threeDomainSecurity": { "cavv": "string", "eci": "string", "xid": "string", "threeDomainSecurityVersion": "string", "transactionId": "string", "merchantName": "string", "channelCode": "EC", "exemptionType": "SC", "extensions": { "key1": "value1", "key2": "value2" } }, "bookingToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", "extensions": { "key1": "value1", "key2": "value2" } }
Request Specification
header | object | Yes | / | / |
@supplierId | string | Yes | Max Length: 32 The ID of the hotel supplier in DerbySoft's system | HILTON |
@distributorId | string | Yes | Max Length: 32 The ID of distributor in DerbySoft's system | GTA |
@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 UUID. | 18393849028490234 |
reservationIds |
| 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 |
iata | string | No | IATA | / |
hotelId | string | Yes | Hotel ID in supplier's system | 100001 |
stayRange | object | Yes | / | / |
@checkin | string | Yes | Check-in, format with yyyy-MM-dd | 2018-01-01 |
@checkout | string | Yes | Check out, format with yyyy-MM-dd | 2018-01-04 |
contactPerson | object | Yes | / | / |
@firstName | string | Yes | First Name | James |
@lastName | string | Yes | Last Name | Bond |
string | No | |||
@phone | string | No | / | / |
@address | string | No | / | / |
roomCriteria | object | Yes | / | / |
@roomCount | integer | Yes | Total room count per request | / |
@adultCount | integer | Yes | Adult count per room | / |
@childCount | integer | No | Child count per room | / |
@childAges | array | No | For child ages for each child, the array size MUST be the same as the child count. | / |
total | object | Yes | / | / |
@amountBeforeTax | number | No | abbr. ABT It's required if AAT is not provided | 640 |
@amountAfterTax | number | No | abbr. AAT It's required if ABT is not provided | 700 |
payment | / | No | / | / |
@cardCode | string | Yes | VI, MC, AX, etc. Card Code | VI |
@cardNumber | string | Yes | Credit card number | 4111111111111111 |
@cardHolderName | string | Yes | Cardholder name | Sherlock Holmes |
@expireDate | string | Yes | It should be 2 digits for the month, 2 digits for the year, as "MMYY" | 0119 |
@securityCode | string | No | Card verification value | 123 |
loyaltyAccount | object | No | / | / |
@programCode | string | Yes | Loyalty program code of the supplier | BW |
@accountId | string | Yes | Loyalty program account ID | 1234567890123457 |
corpAccount | object | No | / | / |
@corpProgramCode | string | Yes | Corporate Hotel Program of hotel supplier | CR |
@corpId | string | Yes | Corporate ID in the program account | A-1232 |
promoteCode | string | No | Promotion code defined by the hotel, the promotion code is required if making a reservation under the promotion | / |
guests | array[object] | Yes | / |
|
@firstName | string | Yes | First Name | James/ |
@lastName | string | Yes | Last Name | Bond |
string | No | |||
@phone | string | No | / | / |
@address | string | No | / | / |
@age | integer | No | Age of guest | / |
@gender | enum | No | Gender of guest Enum: [Male, Female] | Male |
@birthday | string | No | Birthday of guest format with yyyy-MM-dd | 1970-12-20 |
@type | string | No | Type of guest, Adult, Child, or Infant Enum: [ Adult, Child, Infant ] | / |
@index | integer | No | Indicate which guests will be allocated to which room.
For one room reservation, the room index is 1 for all guests. For multi-room reservations, the index starts from 1 and the max room index is equal to the number of booked rooms. | index = 1, Indicate the guest will allocate to the first room. index = 2, Indicate the guest will allocate to the second room. |
@extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). | / |
comments | array[string] | No | / | [ "no smoking", "high floor" ] |
roomRates | array[object] | Yes | Min Items: 1 Max Items: 1 Meal plan, fee, and cancel policy are optional fields as some distributors do not support these in the API | / |
@roomId | string | Yes | Room ID in supplier's system | 10000101 |
@rateId | string | Yes | Rate ID in supplier's system | 123456 |
@currency | string | Yes | Currency code [ISO-4217] | USD |
@amountBeforeTax | array[number] | No | abbr. ABT It's required if AAT is not provided | [ 100, 100, 120 ] |
@amountAfterTax | array[number] | No | abbr. AAT The daily amount of rate with tax and fee. | [ 110, 110, 130 ] |
@mealPlan | string | No | Meal plan code, refer to the standard meal plan code list. | RO |
@paymentType | enum | No | Indicates the product is prepaid to hotel (PayNow) or pay at hotel (PayLater). | PayNow |
roomRates/guarantee | object | No | Guarantee information for this room rate. | / |
@guaranteeType | string | Yes | The type of guarantee method, refer to the standard guarantee type list. | CCG |
roomRates/fees | array[object] | No | Fee or tax by date range. | / |
fees/dateRange | object | Yes | / | / |
@startDate | string | Yes | Start date of date range, format with yyyy-MM-dd | 2018-01-01 |
@endDate | string | Yes | End date of date range, format with yyyy-MM-dd | 2018-01-04 |
fees/fee |
| Yes | / | / |
@name | string | Yes | Pattern: \w[\w\d]+ | Service Charge |
@type | enum | Yes | The fee or tax is included in the amount before tax or not Enum: [ Inclusive, Exclusive ] | Exclusive |
@amount | number | Yes | Amount value of fee or tax | 10 |
@amountType | string | Yes | Indicates how to charge the tax, 10% per room per night in this example Enum: [ Fix, Percent ] | Percent |
@chargeType | string | Yes | Enum: [ PerRoomPerNight, PerPersonPerNight, PerRoomPerStay, PerPersonPerStay ] | PerRoomPerNight |
@paymentType | enum | No | Indicates the fee is prepaid to the hotel (PayNow) or pay at the hotel (PayLater). Enum: [ PayLater, PayNow ] | PayNow |
@effectivePerson | number | No | It indicates the fee will be charged starting from which occupancy, such as the "Extra Person Charge" fee. The EffectivePerson is 3, meaning an extra fee will be applied from the third person onward. | / |
roomRates/cancelPolicy | object | No | Cancellation policy defines what penalty will be a charge when a guest cancels the booking at a certain advance time range. The penalty is related to No-show or a time range before No-show. | / |
@code | string | Yes | Max Length: 128 code of cancel policy | AD100P_100P |
@description | string | No | Max Length: 1024 the description of the cancellation policy | Non Refundable |
cancelPolicy/cancelPenalties |
| Yes | Detail about the cancel Penalty | / |
@noShow | boolean | Yes | If true, it means the penaltyCharge applied for No-Show, and the cancellable, cancelDeadline will NOT exist | / |
@cancellable | boolean | No | Indicates cancel is allowed or not. If false, it cannot be canceled. If true, the cancelDeadline will exist. | / |
cancelPenalties/cancelDeadline | / | / | / | / |
@offsetTimeDropType | enum | No | Enum: [ BeforeArrival ] An enumerated type indicates when the deadline drop time goes into effect. | / |
@offsetTimeUnit | enum | No | Enum: [ D, H ]
| / |
@offsetTimeValue | number | No | The number of offset times with the time unit | / |
@deadline | string | No | Local deadline times allowed for cancellation, like 4 PM, or 6 PM | / |
cancelPenalties/penaltyCharge | / | / | / | / |
@chargeBase | enum | No | Enum: [ FullStay, NightBase ] If FullStay, it will be a percentage or amount, if NightBase, the nights are required. | / |
@nights | number | No | It exists if the penalty charge is based on the night, like the first night. | / |
@amount | number | No | It exists if the penalty charge is a flat charge, like USD 30.00. | / |
@percent | number | No | It exists if the penalty charge is percent, like 15.5 means 15.5%. | / |
bookingChannel | string | No | Sub-distributor ID | / |
productAddons | array[object] | No | / | / |
@type | string | Yes | product addon type | / |
@code | string | Yes | product addon code | / |
@date | string | Yes | format with yyyy-MM-dd | 2022-01-01 |
@quantity | integer | Yes | / | 1 |
@officeId | string | No | / | / |
productAddons/rate | object | No | / | / |
rate/ageQualifyingType | object | No | / | / |
@type | enum | Yes | Enum: [Adult, Child] | Adult |
@minAge | string | Yes | / | 18 |
@maxAge | integer | Yes | / | 18 |
rate/currency | string | Yes | / | USD |
rate/amountBeforeTax | number | No | / | 123.23 |
rate/amountAfterTax | number | No | / | 134.34 |
threeDomainSecurity | object | No | / | / |
@cavv | string | No | Cardholder Authentication Verification Value Information is retrieved from the 3DS provider when authentication is successful. | / |
@eci | string | No | The electronic commerce indicator. | / |
@xid | string | No | Transaction identifier for a 3DS Version 1 provider, assigned by the Directory Server to identify a single transaction. | / |
@threeDomainSecurityVersion | string | No | Include this only for 3D Secure 2. | / |
@transactionId | string | No | Transaction identifier for a 3DS Version 2 provider, assigned by the Directory Server to identify a single transaction. | / |
@merchantName | string | No | Identifier of the merchant completing the 3DS transaction. | / |
@channelCode | enum | No | Specify the collection channel of payment cards Enum: [TO, EC, MO, FA] Refer to: PSD2-Channel Code | EC |
@exemptionType | enum | No | Determines which exemption was used by the Payment Service Provider (PSP) Enum: [SC, DA, TA, TB, LV] Refer to: PSD2-Exemption Type | SC |
bookingToken | string | Yes | Booking token used for booking | / |
extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). Please don't transmit sensitive information through this field. For more information refer to: | / |
Response Example
- Success Response (HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "extensions": { "key1": "value1", "key2": "value2" } }
Successful Response from Exchange Connection and RETAIL Rate Model(HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "connectionType": "Exchange", "commission": { "value": 10, "type": "percentage" }, "extensions": { "key1": "value1", "key2": "value2" } }
Successful Response from Exchange Connection and NET Rate Model(HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "connectionType": "Exchange", "suggestedTotalPrice": { "amountBeforeTax": 600, "amountAfterTax": 700 }, "extensions": { "key1": "value1", "key2": "value2" } }
Error Response (HTTP Status 403)
{ "error": "Key not authorized" }
- Error Response (HTTP Status 500)
{ "errorCode": "string", "supplierErrorCode": "string", "errorMessage": "string" }
Response Specification
header | object | Yes | / | / |
@supplierId | string | Yes | Max Length: 32 The ID of the hotel supplier in DerbySoft's system | HILTON |
@distributorId | string | Yes | Max Length: 32 The ID of the distributor in DerbySoft's system | GTA |
@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 UUID. | 18393849028490234 |
reservationIds |
| 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 system, this is a unique ID as DerbySoft would be splitting the reservation. | D15F893D34DF |
@supplierResId | string | No | Reservation ID in supplier's system | 89389494 |
connectionType | enum | No | Enum: [Exchange, Standard] Indicates the connection type of product. Notes: If the field is omitted, it means the Connection Type is Standard. | Exchange |
commission | object | No | Notes: If the connection type is "Exchange" and "RETAIL" Rate Model, the node will be visible; otherwise, it will not appear. | / |
@value | number | Yes | / | 10 |
@type | enum | Yes | Commission type Enum: [percentage, amount] | percentage |
suggestedTotalPrice | object | No | Notes: If the connection type is "Exchange" and "NET" Rate Model, the node will be visible; otherwise, it will not appear. | / |
@amountBeforeTax | number | No | / | 600 |
@amountAfterTax | number | No | / | 700 |
extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). Please don't transmit sensitive information through this field. For more information refer to: | / |
Modify
Distributors utilize this API to make changes to an existing booking. Upon calling the hotel supplier system, a real-time confirmation will be obtained. In cases where the hotel supplier cannot facilitate modifications, the process will involve canceling the booking and rebooking it.
POST /reservation/modify HTTP/1.1 URL: {endpoint}/reservation/modify Authorization:Bearer 53ac07777cdffac2d53000002d698728ce964432d7167596bc005c5fc Accept-Encoding: gzip Content-Encoding: gzip Content-Type: application/json;charset=utf-8
Request Example
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "iata": "string", "hotelId": "GATHI", "stayRange": { "checkin": "2018-01-01", "checkout": "2018-01-04" }, "contactPerson": { "firstName": "Thomas", "lastName": "Hintz", "email": "[email protected]", "phone": "260-975-4091", "address": "3946 Freddy Locks" }, "roomCriteria": { "roomCount": 1, "adultCount": 2, "childCount": 1, "childAges": [ 5 ] }, "total": { "amountBeforeTax": 640, "amountAfterTax": 700 }, "payment": { "cardCode": "VI", "cardNumber": "4111111111111111", "cardHolderName": "Sherlock Holmes", "expireDate": "0119", "securityCode": "123" }, "loyaltyAccount": { "programCode": "BW", "accountId": "1234567890123457" }, "corpAccount": { "corpProgramCode": "CR", "corpId": "A-1232" }, "promoteCode": "string", "guests": [ { "firstName": "Thomas", "lastName": "Hintz", "email": "[email protected]", "phone": "260-975-4091", "address": "3946 Freddy Locks", "age": 32, "gender": "Male", "birthday": "1990-01-01", "type": "Adult", "index": 1 }, { "firstName": "Hillary", "lastName": "Ullrich", "email": "[email protected]", "phone": "260-975-4091", "address": "3946 Freddy Locks", "age": 28, "gender": "Female", "birthday": "1994-01-01", "type": "Adult", "index": 1, "extensions": { "key1": "value1", "key2": "value2" } }, { "firstName": "Alex", "lastName": "Hintz", "age": 5, "type": "Child", "index": 1 } ], "comments": [ "no smoking", "high floor" ], "roomRates": [ { "roomId": "K1D", "rateId": "ODAD01", "currency": "USD", "amountBeforeTax": [ 100, 100, 120 ], "amountAfterTax": [ 110, 110, 130 ], "mealPlan": "RO", "paymentType": "PayNow", "guarantee": { "guaranteeType": "CCG" }, "fees": [ { "dateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "fee": { "name": "Service Charge", "type": "Exclusive", "amount": 10, "amountType": "Percent", "chargeType": "PerRoomPerNight", "paymentType": "PayNow", "effectivePerson": 0 } } ], "cancelPolicy": { "code": "AD100P_100P", "description": "Non Refundable", "cancelPenalties": [ { "noShow": true, "cancellable": true, "cancelDeadline": { "offsetTimeDropType": "BeforeArrival", "offsetTimeUnit": "D", "offsetTimeValue": 0, "deadline": "string" }, "penaltyCharge": { "chargeBase": "FullStay", "nights": 0, "amount": 0, "percent": 0 } } ] } } ], "bookingChannel": "string", "productAddons": [ { "type": "DisneyTicket", "code": "code", "date": "2018-01-01", "quantity": 1, "officeId": "string", "rate": { "ageQualifyingType": { "type": "Adult", "minAge": 18, "maxAge": 99 }, "currency": "USD", "amountBeforeTax": 123.23, "amountAfterTax": 134.34 } } ], "threeDomainSecurity": { "cavv": "string", "eci": "string", "xid": "string", "threeDomainSecurityVersion": "string", "transactionId": "string", "merchantName": "string", "channelCode": "EC", "exemptionType": "SC", "extensions": { "key1": "value1", "key2": "value2" } }, "extensions": { "key1": "value1", "key2": "value2" } }
Request Specification
header | object | Yes | / | / |
@supplierId | string | Yes | Max Length: 32 The ID of the hotel's source is in DerbySoft's system. | HILTON |
@distributorId | string | Yes | Max Length: 32 The ID of the distributor in DerbySoft's system. | GTA |
@version | string | Yes | Max Length: 20 Version of API | v4 |
@token | string | Yes | Max Length: 64 A unique ID to identify request and response, normally it should be UUID. | 18393849028490234 |
reservationIds |
| 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 | Yes | Reservation ID in DerbySoft's system, it's a unique ID as DerbySoft would be splitting the reservation | D15F893D34DF |
@supplierResId | string | Yes | Reservation ID in supplier's system | 89389494 |
iata | string | No | IATA | / |
hotelId | string | Yes | Hotel ID in supplier's system | 100001 |
stayRange | object | Yes | / | / |
@checkin | string | Yes | Check-in, format with yyyy-MM-dd | 2018-01-01 |
@checkout | string | Yes | Check out, format with yyyy-MM-dd | 2018-01-04 |
contactPerson | object | Yes | / | / |
@firstName | string | Yes | First Name | James/ |
@lastName | string | Yes | Last Name | Bond |
string | No | |||
@phone | string | No | / | / |
@address | string | No | / | / |
@extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). Please don't transmit sensitive information through this field. For more information refer to: | { "key": "value"} |
roomCriteria | object | Yes | / | / |
@roomCount | integer | Yes | Total room count per request | / |
@adultCount | integer | Yes | Adult count per room | / |
@childCount | integer | No | Child count per room | / |
@childAges | array | No | For child ages for each child, array size MUST be the same as the child count. | / |
total | object | Yes | / | / |
@amountBeforeTax | number | No | / | 640 |
@amountAfterTax | number | No | / | 700 |
payment | / | No | / | / |
@cardCode | string | Yes | VI, MC, AX, etc. Refer to Appendix: Credit Card Code | VI |
@cardNumber | string | Yes | Credit card number | 4111111111111111 |
@cardHolderName | string | Yes | Cardholder name | Sherlock Holmes |
@expireDate | string | Yes | It should be 2 digits for the month, and 2 digits for the year, as "MMYY" | 0119 |
@securityCode | string | No | Card verification value | 123 |
loyaltyAccount | object | No | / | / |
@programCode | string | Yes | Loyalty program code of the supplier | BW |
@accountId | string | Yes | Loyalty program account ID | 1234567890123457 |
corpAccount | object | No | / | / |
@corpProgramCode | string | Yes | Corporate Hotel Program of hotel supplier | CR |
@corpId | string | Yes | Corporate ID in the program account | A-1232 |
promoteCode | string | No | The promotion code is defined by the hotel, the promotion code is required if making a reservation under the promotion. | / |
guests | array[object] | Yes | / | / |
@firstName | string | Yes | First Name | James |
@lastName | string | Yes | Last Name | Bond |
string | No | |||
@phone | string | No | / | / |
@address | string | No | / | / |
@age | integer | No | Age of guest | / |
@gender | enum | No | Gender of guest Enum: [Male, Female] | / |
@birthday | string | No | Birthday of guest | / |
@type | string | No | Type of guest: Adult, Child, or Infant. Enum: [ Adult, Child, Infant ] | / |
@extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). Please don't transmit sensitive information through this field. For more information refer to: | { "key": "value"} |
@index | integer | No | Indicate which guests will be allocated to which room.
For one room reservation, the room index is 1 for all guests. For multi-room reservations, the index starts from 1 and the max room index is equal to the number of booked rooms. | index = 1, Indicate the guest will allocate to the first room. index = 2, Indicate the guest will allocate to the second room. |
@extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). | |
comments | array[string] | No | / | [ "no smoking", "high floor" ] |
roomRates | array[object] | Yes | Min Items: 1 max Item: 1 Meal plan, fee, and cancel policy are optional fields as some distributors do not support these in the API. | / |
@roomId | string | Yes | Room ID in supplier system | 10000101 |
@rateId | string | Yes | Rate ID in supplier system | 123456 |
@currency | string | Yes | currency code [ISO-4217] | USD |
@amountBeforeTax | array[number] | No | The daily amount rate without tax and fee | [ 100, 100, 120 ] |
@amountAfterTax | array[number] | No | The daily amount of rate with tax and fee | [ 110, 110, 130 ] |
@mealPlan | string | No | Meal plan code, refer to the standard meal plan code list. | RO |
@paymentType | enum | No | Indicates the product is prepaid to the hotel (PayNow) or pay at the hotel (PayLater). | PayNow |
roomRates/guarantee | object | No | Guarantee information for this room rate | / |
@guaranteeType | string | Yes | The type of guarantee method, refer to the standard guarantee type list. | CCG |
roomRates/fees | array[object] | No | Fee or tax by date range | / |
fees / dateRange | object | Yes | / | / |
@startDate | string | Yes | Start date of date range, format with yyyy-MM-dd | 2018-01-01 |
@endDate | string | Yes | End date of date range, format with yyyy-MM-dd | 2018-01-04 |
fees/fee |
| Yes | / | / |
@name | string | Yes | Pattern: \w[\w\d]+ | Service Charge |
@type | enum | Yes | Whether the fee or tax is included in the amount before tax or not Enum: [ Inclusive, Exclusive ] | Exclusive |
@amount | number | Yes | Amount value of fee or tax | 10 |
@amountType | string | Yes | Indicates how to charge the tax, 10% per room per night in this example. Enum: [ Fix, Percent ] | Percent |
@chargeType | string | Yes | Enum: [ PerRoomPerNight, PerPersonPerNight, PerRoomPerStay, PerPersonPerStay ] | PerRoomPerNight |
@paymentType | enum | No | Indicates the fee is prepaid to hotel (PayNow) or Pay at Hotel (PayLater) Enum: [ PayLater, PayNow ] | PayNow |
roomRates / cancelPolicy | object | No | The cancellation policy defines what penalty will be charged when a guest cancels the booking at a certain advance time range. The penalty is related to No-show or a time range before No-show. | / |
@code | string |
| Max Length: 128 Code of cancellation policy | AD100P_100P |
@description | string |
| Max Length: 1024 the description of the cancellation policy | Non Refundable |
bookingChannel | string | No | Sub-distributor ID | / |
productAddons | array[object] | No | ||
@type | string | Yes | product addon type | |
@code | string | Yes | product addon code | |
@date | string | Yes | format with yyyy-MM-dd | 2022-01-01 |
@quantity | integer | Yes | / | 1 |
@officeId | string | No | / | / |
productAddons/rate | object | No | / | / |
rate/ageQualifyingType | object | No | / | / |
@type | enum | Yes | Enum: [Adult, Child] | Adult |
@minAge | integer | Yes | / | 18 |
@maxAge | integer | Yes | / | 18 |
rate/currency | string | Yes | / | USD |
rate/amountBeforeTax | number | No | / | 123 |
rate/amountAfterTax | number | Yes | / | |
threeDomainSecurity | object | No | / | / |
@cavv | string | No | Cardholder Authentication Verification Value Information is retrieved from the 3DS provider when authentication is successful. | / |
@eci | string | No | The electronic commerce indicator. | / |
@xid | string | No | Transaction identifier for a 3DS Version 1 provider, assigned by the Directory Server to identify a single transaction. | / |
@threeDomainSecurityVersion | string | No | Include this only for 3D Secure 2. | / |
@transactionId | string | No | Transaction identifier for a 3DS Version 2 provider, assigned by the Directory Server to identify a single transaction. | / |
@merchantName | string | No | Identifier of the merchant completing the 3DS transaction. | / |
@channelCode | enum | No | Specify the collection channel of payment cards Enum: [TO, EC, MO, FA] Refer to: PSD2-Channel Code | EC |
@exemptionType | enum | No | Determines which exemption was used by the Payment Service Provider (PSP) Enum: [SC, DA, TA, TB, LV] Refer to: PSD2-Exemption Type | SC |
@extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). Please don't transmit sensitive information through this field. For more information refer to: | / |
Response Example
- Success Response (HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "extensions": { "key": "value" } }
- Successful Response from Exchange Connection and RETAIL Rate Model(HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "connectionType": "Exchange", "commission": { "value": 10, "type": "percentage" }, "extensions": { "key1": "value1", "key2": "value2" } }
- Successful Response from Exchange Connection and NET Rate Model(HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "connectionType": "Exchange", "suggestedTotalPrice": { "amountBeforeTax": 600, "amountAfterTax": 700 }, "extensions": { "key1": "value1", "key2": "value2" } }
- Error Response (HTTP Status 403)
{ "error": "Key not authorized" }
- Error Response (HTTP Status 500)
{ "errorCode": "string", "supplierErrorCode": "string", "errorMessage": "string" }
Response Specification
header | object | Yes | / | / |
@supplierId | string | Yes | Max Length: 32 The ID of hotel suppliers in DerbySoft's system. | HILTON |
@distributorId | string | Yes | Max Length: 32 The ID of the distributor in DerbySoft's system | GTA |
@version | string | Yes | Max Length: 20 Version of API | v4 |
@token | string | Yes | Max Length: 64 A unique ID to identify requests and response, normally it should be UUID. | 18393849028490234 |
reservationIds | object | Yes | / | 100001 |
@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 | Yes | Reservation ID in Derbysoft's system, it's a unique ID as DerbySoft would be splitting the reservation. | D15F893D34DF |
@supplierResId | string | Yes | Reservation ID in supplier's system | 89389494 |
connectionType | enum | No | Enum: [Exchange, Standard] Indicates the connection type of product. Notes: If the field is omitted, it means the Connection Type is Standard. | Exchange |
commission | object | No | Notes: If the connection type is "Exchange" and "RETAIL" Rate Model, the node will be visible; otherwise, it will not appear. | / |
@value | number | Yes | / | 10 |
@type | enum | Yes | Commission type Enum: [percentage, amount] | percentage |
suggestedTotalPrice | object | No | Notes: If the connection type is "Exchange" and "NET" Rate Model, the node will be visible; otherwise, it will not appear. | / |
@amountBeforeTax | number | No | / | 600 |
@amountAfterTax | number | Yes | / | 700 |
extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). Please don't transmit sensitive information through this field. For more information refer to: | / |
Cancel
This is an API for DerbySoft to call suppliers' systems to cancel a booking. Since DerbySoft does splitting on original reservations, the supplier should cancel the reservation by unique derbyResId or supplierResId.
POST /reservation/cancel HTTP/1.1 URL: {endpoint}/reservation/cancel Authorization: Bearer 53ac07777cdffac2d53000002d698728ce964432d7167596bc005c5fc Accept-Encoding: gzip Content-Encoding: gzip Content-Type: application/json;charset=utf-8
Request Example
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "extensions": { "key1": "value1", "key2": "value2" } }
Request Specification
header | object | Yes | / | / |
@supplierId | string | Yes | Max Length: 32 The ID of hotel supplier in DerbySoft's system. | HILTON |
@distributorId | string | Yes | Max Length: 32 The ID of the distributor in DerbySoft's system. | GTA |
@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 UUID. | 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, it's a unique ID as DerbySoft would be splitting the reservation. | D15F893D34DF |
@supplierResId | string | No | Reservation ID in supplier's system | 89389494 |
extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). Please don't transmit sensitive information through this field. For more information refer to: | {"key": "value"} |
Response Example
- Success Response (HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "cancellationId": "C89389494", "extensions": { "key1": "value1", "key2": "value2" } }
- Error Response (HTTP Status 403)
{ "error": "Key not authorized" }
- Error Response (HTTP Status 500)
{ "errorCode": "string", "supplierErrorCode": "string", "errorMessage": "string" }
Response Specification
header | object | Yes | / | / |
@supplierId | string | Yes | Max Length: 32 The ID of hotel suppliers is in DerbySoft's system. | HILTON |
@distributorId | string | Yes | Max Length: 32 The ID of the distributor in DerbySoft's system | GTA |
@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 UUID. | 18393849028490234 |
reservationIds | object | Yes | / | 100001 |
@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 | Yes | Reservation ID in Derbysoft's system, It's a unique ID as DerbySoft would be splitting the reservation. | D15F893D34DF |
@supplierResId | string | Yes | Reservation ID in supplier's system | 89389494 |
cancellationId | string | Yes | Cancellation confirmation number in supplier's system | C89389494 |
extensions | object | No | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format) | / |
Query Reservations
This is an API to query a reservation list in DerbySoft's system and supplier's system with a timestamp range of the reservation's last modified date. It should be implemented by both DerbySoft and the supplier.POST /reservations HTTP/1.1 URL: {endpoint}/reservations Authorization: Bearer 53ac07777cdffac2d53000002d698728ce964432d7167596bc005c5fc Accept-Encoding: gzip Content-Encoding: gzip Content-Type: application/json;charset=utf-8
Request Example
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "dateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "hotelId": "GATHI" }
Request Specification
header | object | Yes | / |
|
@supplierId | string | Yes | Max Length: 32 The ID of the hotel supplier in DerbySoft's system | HILTON |
@distributorId | string | Yes | Max Length: 32 The ID of the distributor in DerbySoft's system | GTA |
@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. | 18393849028490234 |
dateRange | / | / | Date range of last modified date of reservation | / |
@startDate | string | Yes | Start date of date range Format: yyyy-MM-dd | 2018-01-01 |
@endDate | string | Yes | End date of the date range Format: yyyy-MM-dd | 2018-01-04 |
hotelId | string | No | Supplier hotel ID in DerbySoft's system | GATHI |
Response Example
- Success Response (HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservations": [ { "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "iata": "string", "hotelId": "GATHI", "stayRange": { "checkin": "2018-01-01", "checkout": "2018-01-04" }, "roomCriteria": { "roomCount": 2, "adultCount": 1, "childCount": 2, "childAges": [ 4, 8 ] }, "total": { "amountBeforeTax": 640, "amountAfterTax": 700 }, "status": "Confirmed", "cancellationId": "C89389494", "result": "Successful", "failCause": { "errorCode": "string", "supplierErrorCode": "string", "errorMessage": "string" } } ] }
- Successful Response from Exchange Connection and RETAIL Rate Model(HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservations": [ { "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "iata": "string", "hotelId": "GATHI", "stayRange": { "checkin": "2018-01-01", "checkout": "2018-01-04" }, "contactPerson": { "firstName": "James", "lastName": "Bond", "email": "[email protected]", "phone": "string", "address": "string" }, "roomCriteria": { "roomCount": 2, "adultCount": 1, "childCount": 2, "childAges": [ 4, 8 ] }, "connectionType": "Exchange", "total": { "amountBeforeTax": 640, "amountAfterTax": 700 }, "commission": { "value": 10, "type": "percentage" }, "status": "Confirmed", "cancellationId": "C89389494", "result": "Successful" } ] }
- Successful Response from Exchange Connection and NET Rate Model(HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservations": [ { "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "iata": "string", "hotelId": "GATHI", "stayRange": { "checkin": "2018-01-01", "checkout": "2018-01-04" }, "contactPerson": { "firstName": "James", "lastName": "Bond", "email": "[email protected]", "phone": "string", "address": "string" }, "roomCriteria": { "roomCount": 2, "adultCount": 1, "childCount": 2, "childAges": [ 4, 8 ] }, "connectionType": "Exchange", "total": { "amountBeforeTax": 640, "amountAfterTax": 700 }, "suggestedTotalPrice": { "amountBeforeTax": 600, "amountAfterTax": 700 }, "status": "Confirmed", "cancellationId": "C89389494", "result": "Successful" } ] }
- Error Response (HTTP Status 403)
{ "error": "Key not authorized" }
- Error Response (HTTP Status 500)
{ "errorCode": "InvalidField", "errorMessage": "Invalid Message" }
Response Specification
header | object | Yes | / | / |
@supplierId | string | Yes | Max Length: 32 The ID of hotel supplier in DerbySoft's system | HILTON |
@distributorId | string | Yes | Max Length: 32 The ID of the distributor in DerbySoft's system | GTA |
@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 UUID. | 18393849028490234 |
reservations | array[object] | No | / | / |
reservations/reservationIds | object | No | / | / |
@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 | Yes | Reservation ID in Derbysoft's system, this is a unique ID as DerbySoft would be splitting the reservation. | D15F893D34DF |
@supplierResId | string | Yes | Reservation ID in supplier's system | 89389494 |
@iata | string | No | / | / |
@hotelId | string | Yes | Hotel ID in supplier’s system | 100001 |
reservations/stayRange | object | Yes | / | / |
@checkin | string | Yes | Check-in, format with yyyy-MM-dd | 2018-01-01 |
@checkout | string | Yes | Check out, format with yyyy-MM-dd | 2018-01-04 |
reservations/roomCriteria | object | Yes | / |
|
@roomCount | integer | Yes | Total room count per request |
|
@adultCount | integer | Yes | Adult count per room |
|
@childCount | integer | No | Child count per room |
|
@childAges | array | No | For child ages for each child, array size MUST be the same as the child count. | [ 4, 8 ] |
reservations/connectionType | enum | No | Enum: [Exchange, Standard] Indicates the connection type of product. Notes: If the field is omitted, it means the Connection Type is Standard. | Exchange |
reservations/total | object | Yes | / | / |
@amountBeforeTax | number | No | / | 640 |
@amountAfterTax | number | No | / | 700 |
reservations/commission | object | No | Notes: If the connection type is "Exchange" and "RETAIL" Rate Model, the node will be visible; otherwise, it will not appear. | / |
@value | number | Yes | / | 10 |
@type | enum | Yes | Commission type Enum: [percentage, amount] | percentage |
reservations/suggestedTotalPrice | object | No | Notes: If the connection type is "Exchange" and "NET" Rate Model, the node will be visible; otherwise, it will not appear. | / |
@amountBeforeTax | number | No | / | 600 |
@amountAfterTax | number | No | / | 700 |
@status | enum | Yes | Enum: [ Confirmed, Modified, Cancelled ] Status of reservation | / |
cancellationId | string | No | Cancel confirmation number in supplier's system | C89389494 |
@result | enum | Yes | Enum: [ Successful, Failed, Processing ] Status of the reservation to send to supplier | / |
reservations/failCause | object | No | Note: If the reservation fails, the node will be visible; otherwise, it will not appear. | / |
@errorCode | string | Yes | Refer to Error Code Appendix | / |
@supplierErrorCode | string | No | Error code from the supplier's system | / |
@errorMessage | string | Yes | Error message | / |
Query Reservation Detail
This API is used by distributors to query existing bookings. It can be used to check the reservation status of some timeout booking requests.
POST /reservation/detail HTTP/1.1 Authorization: Bearer 53ac07777cdffac2d53000002d698728ce964432d7167596bc005c5fc Accept-Encoding: gzip Content-Encoding: gzip Content-Type: application/json;charset=utf-8
Request Example
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" } }
Request Specification
Attribute | Type | Required | Description | Example |
---|---|---|---|---|
header | object | Yes | / | / |
@supplierId | string | Yes | Max Length: 32 The ID of the hotel supplier in DerbySoft's system. | HILTON |
@distributorId | string | Yes | Max Length: 32 The ID of the distributor in DerbySoft's system | GTA |
@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 UUID. | 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, it's a unique ID as DerbySoft would be splitting the reservation. | D15F893D34DF |
@supplierResId | string | No | Reservation ID in supplier's system | 89389494 |
Response Example
- Success Response (HTTP Status 200)
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservations": [ { "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "iata": "string", "hotelId": "GATHI", "stayRange": { "checkin": "2018-01-01", "checkout": "2018-01-04" }, "roomCriteria": { "roomCount": 2, "adultCount": 1, "childCount": 2, "childAges": [ 4, 8 ] }, "connectionType": "Exchange", "total": { "amountBeforeTax": 640, "amountAfterTax": 700 }, "commission": { "value": 10, "type": "percentage" }, "suggestedTotalPrice": { "amountBeforeTax": 600, "amountAfterTax": 700 }, "loyaltyAccount": { "programCode": "BW", "accountId": "1234567890123457" }, "corpAccount": { "corpProgramCode": "CR", "corpId": "A-1232" }, "promoteCode": "string", "comments": [ "no smoking", "high floor" ], "roomRates": [ { "roomId": "K1D", "rateId": "ODAD01", "currency": "USD", "amountBeforeTax": [ 100, 100, 120 ], "amountAfterTax": [ 110, 110, 130 ], "mealPlan": "RO", "paymentType": "PayNow", "guarantee": { "guaranteeType": "CCG" }, "fees": [ { "dateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "fee": { "name": "Service Charge", "type": "Exclusive", "amount": 10, "amountType": "Percent", "chargeType": "PerRoomPerNight", "paymentType": "PayNow", "effectivePerson": 0 } } ], "cancelPolicy": { "code": "AD100P_100P", "description": "Non Refundable", "cancelPenalties": [ { "noShow": true, "cancellable": true, "cancelDeadline": { "offsetTimeDropType": "BeforeArrival", "offsetTimeUnit": "D", "offsetTimeValue": 0, "deadline": "string" }, "penaltyCharge": { "chargeBase": "FullStay", "nights": 0, "amount": 0, "percent": 0 } } ] } } ], "bookingChannel": "string", "productAddons": [ { "type": "DisneyTicket", "code": "code", "date": "2018-01-01", "quantity": 1, "officeId": "string", "rate": { "ageQualifyingType": { "type": "Adult", "minAge": 18, "maxAge": 18 }, "currency": "USD", "amountBeforeTax": 123.23, "amountAfterTax": 134.34 } } ], "status": "Confirmed", "cancellationId": "C89389494", "result": "Successful", "failCause": { "errorCode": "string", "supplierErrorCode": "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 | MaxLength: 32 The ID of the hotel supplier in DerbySoft's system | HILTON |
@distributorId | string | Yes | MaxLength: 32 The ID of the distributor in DerbySoft's system | GTA |
@version | string | Yes | MaxLength: 20 version of API | v4 |
@token | string | Yes | MaxLength: 64 A unique ID to identify request and response, normally it should be UUID. | 18393849028490234 |
reservations | array[object] | No | / | / |
reservationIds | object | No | / | / |
@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 | Yes | Reservation ID in DerbySoft system, This is a unique ID as DerbySoft would be splitting the reservation. | D15F893D34DF |
@supplierResId | string | Yes | Reservation ID in supplier's system | 89389494 |
iata | string | No | / | / |
hotelId | string | Yes | Hotel ID in supplier’s system | 100001 |
stayRange | object | Yes | / | / |
@checkin | string | Yes | Check-in, format with yyyy-MM-dd | 2018-01-01 |
@checkout | string | Yes | Check out, format with yyyy-MM-dd | 2018-01-04 |
roomCriteria | object | Yes | / | / |
@roomCount | integer | Yes | Total room count per request | / |
@adultCount | integer | Yes | Adult count per room | / |
@childCount | integer | No | Child count per room |
|
@childAges | array | No | For child ages each child, the array size MUST be the same as the child count. | / |
connectionType | enum | No | Enum: [Exchange, Standard] Indicates the connection type of product. Notes: If the field is omitted, it means the Connection Type is Standard. | Exchange |
total | object | Yes | / | / |
@amountBeforeTax | number | No | / | 640 |
@amountAfterTax | number | No | / | 700 |
commission | object | No | Notes: If the connection type is "Exchange" and "RETAIL" Rate Model, the node will be visible; otherwise, it will not appear. | / |
@value | number | No | / | 10 |
@type | enum | No | Commission type Enum: [percentage, amount] | percentage |
suggestedTotalPrice | object | No | Notes: If the connection type is "Exchange" and "NET" Rate Model, the node will be visible; otherwise, it will not appear. | / |
@amountBeforeTax | number | No | / | 600 |
@amountAfterTax | number | No | / | 700 |
loyaltyAccount | object | No | / | / |
@programCode | string | Yes | The loyalty program code of the supplier | BW |
@accountId | string | Yes | Loyalty program account ID | 1234567890123457 |
corpAccount | object | No | / | / |
@corpProgramCode | string | Yes | Corporate Hotel Program of hotel supplier | CR |
@corpId | string | Yes | Corporate ID in the program account | A-1232 |
promoteCode | string | No | The promotion code is defined by the hotel, the promotion code is required if making a reservation under the promotion. | / |
comments | array[string] | No | / | [ "no smoking", "high floor" ] |
roomRates | array[object] | Yes | Min Items: 1 Max Item: 1 Meal plan, fee, and cancel policy are optional fields as some distributors do not support these in the API. | / |
@roomId | string | Yes | Room ID in supplier's system | 10000101 |
@rateId | string | Yes | Rate ID in supplier's system | 123456 |
@currency | string | Yes | Currency code [ISO-4217] | USD |
@amountBeforeTax | array[number] | No | The daily amount rate without tax and fee | [ 100, 100, 120 ] |
@amountAfterTax | array[number] | No | The daily amount of rate with tax and fee | [ 110, 110, 130 ] |
@mealPlan | string | No | Meal plan code, refer to the standard meal plan code list. | RO |
@paymentType | enum | No | Indicates the product is prepaid to the hotel (PayNow) or pay at the hotel (PayLater). | PayNow |
roomRates/guarantee | object | No | Guarantee information for this room rate. | / |
@guaranteeType | string | Yes | The type of guarantee method, refers to the standard guarantee type list. | CCG |
roomRates/fees | array[object] | No | Fee or tax by date range. | / |
fees/dateRange | object | Yes | / | / |
@startDate | string | Yes | Start date of date range, format with yyyy-MM-dd | 2018-01-01 |
@endDate | string | Yes | End date of date range, format with yyyy-MM-dd | 2018-01-04 |
fees/fee | object | Yes | / | / |
@name | string | Yes | Pattern: \w[\w\d]+ | Service Charge |
@type | enum | Yes | Indicates if the fee or tax is included in the amount before tax or not. Enum: [ Inclusive, Exclusive ] | Exclusive |
@amount | number | Yes | Amount value of fee or tax | 10 |
@amountType | string | Yes | Indicates how to charge the tax, 10% per room per night in this example Enum: [ Fix, Percent ] | Percent |
@chargeType | string | Yes | Enum: [ PerRoomPerNight, PerPersonPerNight, PerRoomPerStay, PerPersonPerStay ] | PerRoomPerNight |
@paymentType | enum | No | Indicates the fee is prepaid to the hotel (PayNow) or pay at the hotel (PayLater). Enum: [ PayLater, PayNow ] | PayNow |
@effectivePerson | number |
| It indicates the fee will be charged starting from which occupancy, such as the "Extra Person Charge" fee. The EffectivePerson is 3, meaning an extra fee will be applied from the third person onward. | / |
roomRates/cancelPolicy | object | No | Cancellation policy defines what penalty will be charged when a guest cancels the booking at a certain advance time range. The penalty is related to No-show or a time range before No-show. | / |
@code | string |
| Max Length: 128 Code of cancel policy | AD100P_100P |
@description | string |
| Max Length: 1024 The description of the cancellation policy | Non Refundable |
cancelPolicy/cancelPenalties |
| Yes | Detail about the canceled Penalty | / |
@noShow | boolean | Yes | If true, it means the penalty charge applied for No-Show, and the cancellable, cancelDeadline will NOT exist. | / |
@cancellable | boolean | No | Indicates if cancellation is allowed or not. If false, it cannot be canceled. If true, the cancellation deadline will exist. | / |
cancelPenalties/cancelDeadline | object | No | / | / |
@offsetTimeDropType | enum | No | Enum: [ BeforeArrival ] An enumerated type indicates when the deadline drop time goes into effect. | / |
@offsetTimeUnit | enum | No | Enum: [ D, H ]
| / |
@offsetTimeValue | number | No | The number of offset times with the time unit | / |
@deadline | string | No | Local deadline times allowed for cancellation, like 4 PM, or 6 PM. | / |
cancelPenalties/penaltyCharge | object | No | / | / |
@chargeBase | enum | No | Enum: [ FullStay, NightBase ] if FullStay, it will be a percentage or amount, if NightBase, the nights are required. | / |
@nights | number | No | It exists if the penalty charge is based on the night, like the first night. | / |
@amount | number | No | It exists if the penalty charge is a flat charge, like USD 30.00. | / |
@percent | number | No | It exists if the penalty charge is percent, like 15.5 means 15.5% | / |
bookingChannel | string | No | Sub-distributor ID | / |
productAddons | array[object] | No | / | / |
@type | string | Yes | / | DisneyTicket |
@code | string | Yes | / | / |
@date | string | Yes | format with yyyy-MM-dd | 2022-01-01 |
@quantity | integer | Yes | / | 1 |
@officeId | string | No | specific distributor office | / |
productAddons/rate | object | No | / | / |
rate/ageQualifyingType | object | No | / | / |
@type | enum | Yes | Enum: [Adult, Child] | Adult |
@minAge | integer | Yes | / | 18 |
@maxAge | integer | Yes | / | 18 |
rate/currency | string | Yes | / | USD |
rate/amountBeforeTax | number | No | / | 123.23 |
rate/amountAfterTax | number | No | / | 134.34 |
status | enum | Yes | Enum: [ Confirmed, Modified, Cancelled ] The latest status of the reservation
Please combine the status and result fields to determine the reservation whether successful, combination examples are as follows:
| / |
cancellationId | string | No | Cancellation confirmation number in suppliers' system | C89389494 |
result | enum | Yes | Enum: [ Successful, Failed, Processing ] result of the reservation to send to the supplier | / |
reservations/failCause | object | No | Note: If the reservation fails, the node will be visible; otherwise, it will not appear. | / |
@errorCode | string | Yes | / | |
@supplierErrorCode | string | No | Error code from the supply system | / |
@errorMessage | string | Yes | Error message | / |
Did you find it helpful? Yes No
Send feedback