Modify
Modified on: 2025-07-29 18:29
TABLE OF CONTENTS
Modify API
The Modify API allows distributors to make changes to an existing booking, such as updating travel dates, guest details among others. Upon calling the hotel supplier's system, the API will return a real-time confirmation of the modification. If the hotel supplier or your system does not support direct modifications, the process will instead involve canceling the current booking and rebooking it with the updated details. This functionality provides flexibility in managing reservations, allowing distributors to accommodate customer changes efficiently. For distributors working with certain suppliers, such as Disney, this API is a mandatory requirement to handle modifications seamlessly.
POST /reservation/modify HTTP/1.1 URL: {BookingUSB-Endpoint}/reservation/modify Authorization: 53ac07777cdffac2d53000002d698728ce964432d7167596bc005c5fc Accept-Encoding: gzip Content-Encoding: gzip Content-Type: application/json;charset=utf-8
Modification Request Schema
Request(METHOD: POST) | |||||
---|---|---|---|---|---|
Level | Field Name | Data Type | Required | Description | Example |
1 | header | object | Y | / | / |
2 | @supplierId | string | Y | The ID of the hotel's source is in DerbySoft's system. Max Length: 32 | HILTON |
2 | @distributorId | string | Y | The ID of the distributor in DerbySoft's system MaxLength: 32 | GTA |
2 | @version | string | Y | Max Length: 20 Version of API | v4 |
2 | @token | string | Y | A unique identifier is used for requests and responses, typically a UUID. MaxLength: 64 Note that this is an echo token, not an access token. | 18393849028490234 |
1 | reservationIds | object | Y | / | / |
2 | @distributorResId | string | Y | Distributor's reservation ID. Distributors should keep the ID unique on their system to avoid any potential issues caused by duplicate reservation IDs. | C2084DFL0 |
2 | @derbyResId | string | Y | Reservation ID in DerbySoft's system, it's a unique ID as DerbySoft would be splitting the reservation | D15F893D34DF |
2 | @supplierResId | string | Y | Reservation ID in supplier's system | 89389494 |
1 | iata | string | N | IATA | / |
1 | hotelId | string | Y | Hotel IDs provided by hotel suppliers, only the following characters are allowed. 1. Digits (0-9) 2. Uppercase letters (A-Z) 3. Hyphen ('-') | 100001 GATHI 00016 PEP-B3T2 B8W7 |
1 | stayRange | object | Y | / | / |
2 | @checkin | string | Y | Check in date expressed YYYY-MM-DD | 2028-01-01 |
2 | @checkout | string | Y | Check out date expressed YYYY-MM-DD | 2028-01-04 |
1 | contactPerson | object | Y | / | / |
2 | @firstName | string | Y | Contact person first name | James/ |
2 | @lastName | string | Y | Contact person last name | Bond |
2 | string | N | Contact person email | 007@james.com | |
2 | @phone | string | N | Contact person phone number including country code | 34123456789 |
2 | @address | string | N | Contact person home address | King's Road in Chelsea, specifically in Wellington Square |
2 | @extensions | object | N | 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"} |
1 | roomCriteria | object | Y | / | / |
2 | @roomCount | integer | Y | Total room count per request | / |
2 | @adultCount | integer | Y | Adult count per room | / |
2 | @childCount | integer | N | Child count per room | / |
2 | @childAges | array | N | For child ages for each child, array size MUST be the same as the child count. | / |
1 | total | object | Y | Object used to share the total amount of the reservation, either ABT or AAT, or both | / |
2 | @amountBeforeTax | number | C | ABT, mandatory if AAT is not provided. The total room rate for the entire reservation, not including taxes and fees. | 640 |
2 | @amountAfterTax | number | C | AAT, mandatory if ABT is not provided. The total room rate for the entire reservation, including taxes and fees. | 700 |
1 | payment | object | N | It is used to share payment information with properties. If the credit card information is not going to be passed to the property, this information will be ignored. | / |
2 | @cardType | string | N | If the payment card type is not specified, it will be treated as the default value "CC" which stands for Credit Card. The type value can be one of the options listed below. | CC |
2 | @cardCode | string | Y | VI, MC, AX, etc. Refer to Appendix: Credit Card Code | VI |
2 | @cardNumber | string | Y | Credit card number | 4111111111111111 |
2 | @cardHolderName | string | Y | Cardholder name | Sherlock Holmes |
2 | @expireDate | string | Y | It should be 2 digits for month, 2 digits for year, expressed MMYY | 0119 |
2 | @securityCode | string | N | Card verification value | 123 |
2 | @vccEffectiveDate | string | C | The date the VCC becomes effective, expressed YYYY-MM-DD | 2025-06-30 |
2 | @vccInvalidDate | string | N | The expiry date of the VCC, expressed YYYY-MM-DD | 2025-07-30 |
2 | @vccAmountOnCard | number | N | Amount put on the virtual card | 1000.00 |
2 | @vccCurrency | string | N | The currency code [ISO-4217] of the amount | USD |
1 | loyaltyAccount | object | N | / | / |
2 | @programCode | string | Y | Loyalty program code of the supplier | BW |
2 | @accountId | string | Y | Loyalty program account ID | 1234567890123457 |
1 | corpAccount | object | N | Please note that the current feature will be deprecated. Instead, please implement the 'corpCodes' node. | / |
2 | @corpProgramCode | string | Y | Corporate Hotel Program of hotel supplier | CR |
2 | @corpId | string | Y | Corporate ID in the program account | A-1232 |
1 | promoteCode | string | N | The promotion code is defined by the hotel, the promotion code is required if making a reservation under the promotion. | / |
1 | guests | array[object] | Y | / | / |
2 | @firstName | string | Y | Guest First Name | James |
2 | @lastName | string | Y | Guest Last Name | Bond |
2 | string | N | Guest Email | 007@james.com | |
2 | @phone | string | N | Guest phone number including country code | 34123456789 |
2 | @address | string | N | Guest home address | King's Road in Chelsea, specifically in Wellington Square |
2 | @age | integer | N | Age of guest | / |
2 | @gender | enum | N | Gender of guest Enum: [Male, Female] | / |
2 | @birthday | string | N | Birthday of guest | / |
2 | @type | string | N | Type of guest: Adult, Child, or Infant. Enum: [ Adult, Child, Infant ] | / |
2 | @extensions | object | N | 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"} |
2 | @index | integer | N | Indicate which guests will be allocated to which room.
For a 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. |
2 | @extensions | object | N | Optional: Additional agreed-upon attributes between suppliers and distributors (DerbySoft will provide the specified format). | |
1 | comments | array[string] | N | Any preference or comment can be communicated in this field | [ "no smoking", "high floor" ] |
1 | roomRates | array[object] | Y | Min Item: 1; Max Item: 1 Meal plan, fee, and cancel policy are optional fields as some distributors do not support these in the API. | / |
2 | @roomId | string | Y | Room ID in supplier system | 10000101 |
2 | @rateId | string | Y | Rate ID in supplier system | 123456 |
2 | @currency | string | Y | currency code [ISO-4217] | USD |
2 | @amountBeforeTax | array[number] | N | ABT, mandatory if AAT is not provided The daily amount rate without tax and fee | [ 100, 100, 120 ] |
2 | @amountAfterTax | array[number] | C | AAT, mandatory if ABT is not provided The daily amount of rate with tax and fee | [ 110, 110, 130 ] |
2 | @mealPlan | string | N | Meal plan code, refers to the standard meal plan code list. | RO |
2 | @paymentType | enum | N | Indicates the product is prepaid to the hotel (PayNow) or pay at the hotel (PayLater). | PayNow |
2 | guarantee | object | N | Guarantee information for this room rate | / |
3 | @guaranteeType | string | Y | The type of guarantee method, refers to the standard guarantee type list. | CCG |
2 | fees | array[object] | N | Fee or tax by date range | / |
3 | dateRange | object | Y | / | / |
4 | @startDate | string | Y | Start date of date range, format with yyyy-MM-dd | 2028-01-01 |
4 | @endDate | string | Y | End date of date range, format with yyyy-MM-dd | 2028-01-04 |
3 | fee |
| Y | / | / |
4 | @name | string | Y | pattern: \w[\w\d]+ starts with a word character (letter, number, or underscore) followed by one or more word characters or digits. | Service Charge |
4 | @type | enum | Y | Whether the fee or tax is included in the amount before tax or not Enum: [ Inclusive, Exclusive ] | Exclusive |
4 | @amount | number | Y | Amount value of fee or tax | 10 |
4 | @amountType | string | Y | Indicates how to charge the tax, 10% per room per night in this example. Enum: [ Fix, Percent ] | Percent |
4 | @chargeType | string | Y | Enum: [ PerRoomPerNight, PerPersonPerNight, PerRoomPerStay, PerPersonPerStay ] | PerRoomPerNight |
4 | @paymentType | enum | N | Enum: [ PayLater, PayNow ] Indicates if the fee is prepaid to hotels(PayNow) or paid at the hotel(PayLater). Note: The 'paymentType' field will be replaced by 'collectBy' and removed from the API in the future. | PayNow |
4 | @collectBy | enum | N | Enum: [Distributor, Property] Indicates that the fee (e.g., City Tax, Tourist Tax) should be collected by the hotel(Property) at check-in or by distributors when guests make a reservation(Distributor). | Distributor |
4 | @effectivePerson | number | N | 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. | |
2 | cancelPolicy | object | N | 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. | / |
3 | @code | string | C | Code of cancellation policy | AD100P_100P |
3 | @description | string | N | The description of the cancel policy | Non Refundable |
3 | cancelPenalties | array[object] | C | Details about the cancel Penalty | / |
4 | @noShow | boolean | C | If true, it means the penaltyCharge applied for No-Show, and the cancellable, cancelDeadline will NOT exist | / |
4 | @cancellable | boolean | N | Indicates cancel is allowed or not. If false, it cannot be canceled. If true, the cancelDeadline will exist. | / |
4 | cancelDeadline | object | N | Object for cancel deadline | / |
5 | @offsetTimeDropType | enum | N | Enum: [ BeforeArrival ] An enumerated type indicates when the deadline drop time goes into effect. | / |
5 | @offsetTimeUnit | enum | N | Enum: [ D, H ] | / |
5 | @offsetTimeValue | number | N | The number of offset times with the time unit | / |
5 | @deadline | string | N | Local deadline times allowed for cancellation, like 4 PM or 6 PM | / |
4 | penaltyCharge | object | N | / | / |
5 | @chargeBase | enum | N | Enum: [ FullStay, NightBase ] If FullStay, it will be a percentage or an amount. If NightBase, the nights are required. | / |
5 | @nights | number | N | It exists if the penalty charge is based on the night, like the first night. | / |
5 | @amount | number | N | It exists if the penalty charge is a flat charge, like USD 30.00. | / |
5 | @percent | number | N | It exists if the penalty charge is a percent, like 15.5 means 15.5%. | / |
1 | bookingChannel | string | N | Sub-distributor ID | / |
1 | productAddons | array[object] | N | Only available for some suppliers | |
2 | @type | string | C | product addon type | |
2 | @code | string | C | product addon code | |
2 | @date | string | C | Expressed as YYYY-MM-DD | 2022-01-01 |
2 | @quantity | integer | C | / | 1 |
2 | @officeId | string | N | / | / |
2 | rate | object | N | / | / |
3 | ageQualifyingType | object | N | / | / |
4 | @type | enum | C | Enum: [Adult, Child] | Adult |
4 | @minAge | integer | C | / | 18 |
4 | @maxAge | integer | C | / | 18 |
3 | currency | string | C | / | USD |
3 | amountBeforeTax | number | N | / | 123 |
3 | amountAfterTax | number | Y | / | |
1 | corpCode | string | N | Corporate code in Distributor's system Note: This field is primarily used by Travel Management Companies (TMCs) distributors. | D_XXX |
1 | threeDomainSecurity | object | N | / | / |
2 | @cavv | string | N | Cardholder Authentication Verification Value Information is retrieved from the 3DS provider when authentication is successful. | / |
2 | @eci | string | N | The electronic commerce indicator. | / |
2 | @xid | string | N | Transaction identifier for a 3DS Version 1 provider, assigned by the Directory Server to identify a single transaction. | / |
2 | @threeDomainSecurityVersion | string | N | Include this only for 3D Secure 2. | / |
2 | @transactionId | string | N | Transaction identifier for a 3DS Version 2 provider, assigned by the Directory Server to identify a single transaction. | / |
2 | @merchantName | string | N | Identifier of the merchant completing the 3DS transaction. | / |
2 | @channelCode | enum | N | Specify the collection channel of payment cards Enum: [TO, EC, MO, FA] Refer to: PSD2-Channel Code | EC |
2 | @exemptionType | enum | N | Determines which exemption was used by the Payment Service Provider (PSP) Enum: [SC, DA, TA, TB, LV] Refer to: PSD2-Exemption Type | SC |
1 | extensions | object | N | 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: | / |
Modification Request Example
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "iata": "string", "hotelId": "GATHI", "stayRange": { "checkin": "2028-01-01", "checkout": "2028-01-04" }, "contactPerson": { "firstName": "Thomas", "lastName": "Hintz", "email": "Thomas.Hintz@yahoo.com", "phone": "260-975-4091", "address": "3946 Freddy Locks" }, "roomCriteria": { "roomCount": 1, "adultCount": 2, "childCount": 1, "childAges": [ 5 ] }, "total": { "amountBeforeTax": 640, "amountAfterTax": 700 }, "payment": { "cardType": "CC", "cardCode": "VI", "cardNumber": "4111111111111111", "cardHolderName": "Sherlock Holmes", "expireDate": "0119", "securityCode": "123", "vccEffectiveDate": "2028-01-01", "vccInvalidDate": "2028-01-02", "vccAmountOnCard": 502.19, "vccCurrency": "USD" }, "loyaltyAccount": { "programCode": "BW", "accountId": "1234567890123457" }, "corpAccount": { "corpProgramCode": "CR", "corpId": "A-1232" }, "promoteCode": "string", "guests": [ { "firstName": "Thomas", "lastName": "Hintz", "email": "Thomas.Hintz@yahoo.com", "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": "Xavier.Lind49@yahoo.com", "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": "2028-01-01", "endDate": "2028-01-04" }, "fee": { "name": "Service Charge", "type": "Exclusive", "amount": 10, "amountType": "Percent", "chargeType": "PerRoomPerNight", "paymentType": "PayNow", "collectBy": "Distributor", "effectivePerson": 0 } }, { "dateRange": { "startDate": "2028-01-01", "endDate": "2028-01-04" }, "fee": { "name": "City Tax", "type": "Exclusive", "amount": 5, "amountType": "Fix", "chargeType": "PerPersonPerNight", "paymentType": "PayLater", "collectBy": "Property", "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": "2028-01-01", "quantity": 1, "officeId": "string", "rate": { "ageQualifyingType": { "type": "Adult", "minAge": 18, "maxAge": 99 }, "currency": "USD", "amountBeforeTax": 123.23, "amountAfterTax": 134.34 } } ], "corpCode": "D_XXX", "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" } }
Modification Response Schema
Response | |||||
---|---|---|---|---|---|
Level | Field Name | Data Type | Required | Description | Example |
1 | header | object | Y | / | / |
2 | @supplierId | string | Y | The ID of hotel suppliers in DerbySoft's system. Max Length: 32 | HILTON |
2 | @distributorId | string | Y | The ID of the distributor in DerbySoft's system MaxLength: 32 | GTA |
2 | @version | string | Y | Max Length: 20 Version of API | v4 |
2 | @token | string | Y | A unique identifier is used for requests and responses, typically a UUID. Note that this is an echo token, not an access token. | 18393849028490234 |
1 | reservationIds | object | Y | / | 100001 |
2 | @distributorResId | string | Y | Distributor's reservation ID. Distributors should keep the ID unique on their system to avoid any potential issues caused by duplicate reservation IDs. | C2084DFL0 |
2 | @derbyResId | string | Y | Reservation ID in Derbysoft's system, it's a unique ID as DerbySoft would be splitting the reservation. | D15F893D34DF |
2 | @supplierResId | string | Y | Reservation ID in supplier's system | 89389494 |
1 | connectionType | enum | N | Enum: [Exchange, Standard] Indicates the connection type of products. Notes: If the field is omitted, it means the Connection Type is Standard. | Exchange |
1 | commission | object | N | Notes: If the connection type is "Exchange" and "Retail" Rate Model, the node will be visible; otherwise, it will not appear. | / |
2 | @value | number | C | / | 10 |
2 | @type | enum | C | Commission type Enum: [Percent, Amount] | Percent |
1 | suggestedTotalPrice | object | N | Notes: If the connection type is "Exchange" and "Net" Rate Model, the node will be visible; otherwise, it will not appear. | / |
2 | @amountBeforeTax | number | N | / | 600 |
2 | @amountAfterTax | number | Y | / | 700 |
1 | extensions | object | N | 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: | / |
1 | error | string | N | error response | Key not authorized |
1 | errorCode | string | C | error response | InvalidField |
1 | supplierErrorCode | string | C | error response | InvalidField |
1 | errorMessage | string | C | error response | Invalid Message |
Modification Response Example
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "extensions": { "key": "value" } }
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, "connectionType": "Exchange", "commission": { "value": 10, "type": "Percent" }, "extensions": { "key1": "value1", "key2": "value2" } }
{ "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": "Key not authorized" }
{ "errorCode": "string", "supplierErrorCode": "string", "errorMessage": "string" }
Did you find it helpful? Yes No
Send feedback