Exchange Upgrade Guide
Modified on: 2025-01-10 11:28
As part of our design update, the screenshots are currently being revised.
TABLE OF CONTENTS
- Introduction
- How it works
- Changes in each API
- How to join in Exchange Platform
- How to establish connections with Exchange Hotel Suppliers
Introduction
Notes: We strongly recommend that GO Distributors update the API to version 4.9.5 to access valuable information related to Exchange. However, implementing this upgrade is not mandatory. This means that even if GO Distributors don't implement the Exchange fields, they can still join the Exchange Platform, but they won't be able to obtain relevant information. ① Only hotel suppliers who have joined the exchange will be able to provide relevant information to Exchange clients.
GO has released GO Distributor v4.9.5 to support Exchange clients to connect with hotel suppliers through GO. As for existing GO Distributor v4 clients, the guide can be referred to how to upgrade to v4.9.5. As for existing GO Distributor v3 clients, please contact your Client Manager to learn about the process.
The following APIs need to be upgraded or implemented to GO Distributor v4.9.5:
- Hotel Product
- Push ARI
- Shop ARI
- Live Check
- Book and Modify
- Query Reservations and Query Reservation Detail
How it works
GO Distributor v4.9.5 has introduced two new core fields to specify the connection type and rate model at the hotel product level.
- ConnectionType: Exchange/Standard
- RateModel: RETAIL/NET
If it's an exchange product, the connection type will be labeled as "Exchange". If the connection type is not specified or labeled as "Standard", it means it's a standard product. Additionally, the rate model will be indicated as well. If the rate model is labeled as "RETAIL", commission information will be provided. On the other hand, if it's labeled as "NET", the suggested selling pricing will be provided.
To clarify the semantic expression, GO Distributor v4.9.5 has created a new field called “collectBy” to replace “paymentType” within the “fee” node. There are two enum values for the "collectBy" field: Distributor and Property. Distributor means the fee will be collected by distributors when the guest makes the reservation. Property means the fee will be collected by the property when the guest checks in at the hotel.
Examples snippet:
"fee": {
"name": "Service Charge",
"type": "Exclusive",
"amount": 10,
"amountType": "Percent",
"chargeType": "PerRoomPerNight",
"paymentType": "PayNow/PayLater", // Removed
"collectBy": "Distributor/Property", // New
"effectivePerson": 0
}
The Following APIs need to be updated regarding the fee.collecyBy field.
- >BookingUSB: /hotel/{supplierId}/{hotelId} Response
- BookingUSB: /availability Response
- BookingUSB: /reservation/prebook Request
- BookingUSB: /reservation/book Request
- BookingUSB: /reservation/modify Request
- BookingUSB: /reservation/detail Response
- ShoppingEngine: /shopping/multihotels Response
Changes in each API
Hotel Product
Response example(Retail model):
{ "hotelId": "GATHI", "hotelName": "This is a test hotel", "supplierId": "HILTON", "status": "Actived", "chainCode": "Hilton", "brandCode": "Hampton", "longitude": "41.40338", "latitude": "2.17403", "city": "string", "country": "string", "state": "string", "address": [ "AddressLine1", "AddressLine2", "AddressLine3", "AddressLine4", "AddressLine5" ], "phone": { "countryAccessCode": "string", "areaCityCode": "string", "phoneNumber": "string" }, "settings": { "key1": "value1", "key2": "value2" }, "extensions": { "key1": "value1", "key2": "value2" }, "ariType": "Daily", "timezone": "America/Los_Angeles", "rateType": "AmountBeforeTax", "maxChildAge": 17, "childRateType": "ByAge", "products": [ { "roomId": "10000101", "rateId": "123456", // change start "rateModel": "RETAIL", "connectionType": "Exchange", // change end "stayType": "OverNightRoom", "status": "Actived", "roomName": "Double Room", "roomDescription": "Soak in city views in our Deluxe room, which features a well-appointed ensuite bathroom and up-to-date entertainment offerings.", "rateName": "Bar Rate", "rateDescription": "Begin your day with a hearty meal.", "occupancy": { "maxAdult": 3, "maxChild": 2, "maxOccupancy": 3 }, "paymentType": "PayNow", "guarantee": { "guaranteeType": "CCG" }, "cancelPolicies": [ { "dateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "cancelPolicy": { "code": "1D1N_1N", "description": "Cancellations or changes to bookings for this room will be charged the first night of the booking in 1 day before arrival date, if no show, will be charged the first night of the booking.", "cancelPenalties": [ { "noShow": false, "cancellable": true, "cancelDeadline": { "offsetTimeDropType": "BeforeArrival", "offsetTimeUnit": "D", "offsetTimeValue": 1 }, "penaltyCharge": { "chargeBase": "NightBase", "nights": 1 } }, { "noShow": true, "penaltyCharge": { "chargeBase": "NightBase", "nights": 1 } } ] } } ], "fees": [ { "dateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "fee": { "name": "Service Charge", "type": "Exclusive", "amount": 10, "amountType": "Percent", "chargeType": "PerRoomPerNight", // change start "collectBy": "Distributor", // change end "effectivePerson": 0 } } ], "bookingChannels": [ "channel", "channel" ], "sourceMarkets": [ "region", "region" ], "productAddons": [ { "type": "DisneyTicket", "required": true, "candidateCodes": [ "code", "code" ] } ], // change start "commissions": [ { "startDate": "2018-01-01", "endDate": "2018-01-04", "value": 10, "type": "percentage" } ] // change end } ] }
Response example(Net model):
{ "hotelId": "GATHI", "hotelName": "This is a test hotel", "supplierId": "HILTON", "status": "Actived", "chainCode": "Hilton", "brandCode": "Hampton", "longitude": "41.40338", "latitude": "2.17403", "city": "string", "country": "string", "state": "string", "address": [ "AddressLine1", "AddressLine2", "AddressLine3", "AddressLine4", "AddressLine5" ], "phone": { "countryAccessCode": "string", "areaCityCode": "string", "phoneNumber": "string" }, "settings": { "key1": "value1", "key2": "value2" }, "extensions": { "key1": "value1", "key2": "value2" }, "ariType": "Daily", "timezone": "America/Los_Angeles", "rateType": "AmountBeforeTax", "maxChildAge": 17, "childRateType": "ByAge", "products": [ { "roomId": "10000101", "rateId": "123456", // change start "rateModel": "NET", "connectionType": "Exchange", // change end "stayType": "OverNightRoom", "status": "Actived", "roomName": "Double Room", "roomDescription": "Soak in city views in our Deluxe room, which features a well-appointed ensuite bathroom and up-to-date entertainment offerings.", "rateName": "Bar Rate", "rateDescription": "Begin your day with a hearty meal.", "occupancy": { "maxAdult": 3, "maxChild": 2, "maxOccupancy": 3 }, "paymentType": "PayNow", "guarantee": { "guaranteeType": "CCG" }, "cancelPolicies": [ { "dateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "cancelPolicy": { "code": "1D1N_1N", "description": "Cancellations or changes to bookings for this room will be charged the first night of the booking in 1 day before arrival date, if no show, will be charged the first night of the booking.", "cancelPenalties": [ { "noShow": false, "cancellable": true, "cancelDeadline": { "offsetTimeDropType": "BeforeArrival", "offsetTimeUnit": "D", "offsetTimeValue": 1 }, "penaltyCharge": { "chargeBase": "NightBase", "nights": 1 } }, { "noShow": true, "penaltyCharge": { "chargeBase": "NightBase", "nights": 1 } } ] } } ], "fees": [ { "dateRange": { "startDate": "2018-01-01", "endDate": "2018-01-04" }, "fee": { "name": "Service Charge", "type": "Exclusive", "amount": 10, "amountType": "Percent", "chargeType": "PerRoomPerNight", // change start "collectBy": "Distributor", // change end "effectivePerson": 0 } } ], "bookingChannels": [ "channel", "channel" ], "sourceMarkets": [ "region", "region" ], "productAddons": [ { "type": "DisneyTicket", "required": true, "candidateCodes": [ "code", "code" ] } ] } ] }
Push ARI
GO will send the recommended selling price in the net model, there will be no changes in the retail model because the commission information will be sent via Hotel API.
Daily Pricing: Request Message Snippet (Net Model)
"dailyAris": [ { "roomId": "K1", "rateId": "BARB", // change start "connectionType": "Exchange", // change end "rates": { "type": "OccupancyRate", "rates": [ { "adultCount": 2, "childCount": 1, "amountBeforeTax": [ 502.19, 502.19, 502.19, 502.19 ], "amountAfterTax": [ 623.23, 623.23, 623.23, 623.23 ], // change start "suggestedSellingPriceBeforeTax": [ 650.00, 650.00, 650.00, 650.00 ], "suggestedSellingPriceAfterTax": [ 650.00, 650.00, 650.00, 650.00 ] // change end } ] } } ]
LOS Pricing: Request Message Snippet (Net Model)
"losAris": [ { "roomId": "K1", "rateId": "BARB", // change start "connectionType": "Exchange", // change end "los": 1, "rates": { "type": "OccupancyRate", "rates": [ { "adultCount": 2, "childCount": 1, "amountBeforeTax": [ 502.19, 502.19, 502.19, 502.19 ], "amountAfterTax": [ 623.23, 623.23, 623.23, 623.23 ], // change start "suggestedSellingPriceBeforeTax": [ 650.00, 650.00, 650.00, 650.00 ], "suggestedSellingPriceAfterTax": [ 650.00, 650.00, 650.00, 650.00 ] // change end } ] } }
Shop ARI
Response Message Snippet(Net Model):
"availHotels": [ { "supplierId": "HILTON", "hotelId": "GATHI", "status": "Actived", "stayRange": { "checkin": "2018-01-01", "checkout": "2018-01-04" }, "iata": "string", "availRoomRates": [ { "roomId": "K1D", "rateId": "ODAD01", // change start "connectionType": "Exchange", // change end "currency": "USD", "amountBeforeTax": [ 100, 100, 120 ], "amountAfterTax": [ 110, 110, 130 ], // change start "suggestedTotalPrice": { "amountBeforeTax": 600, "amountAfterTax": 700 } // change end } ] } ]
Live Check
Response(Retail Model):
{ "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", // change start "connectionType": "Exchange", "commission": { "value": 10, "type": "percentage" }, // change end "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", // change start "collectBy": "Distributor", // change end "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" } }
Response(Net Model):
{ "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", // change start "connectionType": "Exchange", // change end "currency": "USD", "amountBeforeTax": [ 100, 100, 120 ], "amountAfterTax": [ 110, 110, 130 ], // change start "suggestedTotalPrice": { "amountBeforeTax": 600, "amountAfterTax": 700 }, // change end "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", // change start "collectBy": "Distributor", // change end "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" } }
Book and Modify
Response(Retail Model):
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, // change start "connectionType": "Exchange", "commission": { "value": 10, "type": "percentage" }, // change end "extensions": { "key1": "value1", "key2": "value2" } }
Response(Net Model):
{ "header": { "supplierId": "HILTON", "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "reservationIds": { "distributorResId": "C2084DFL0", "derbyResId": "D15F893D34DF", "supplierResId": "89389494" }, // change start "connectionType": "Exchange", "suggestedTotalPrice": { "amountBeforeTax": 600, "amountAfterTax": 700 }, // change end "extensions": { "key1": "value1", "key2": "value2" } }
Query Reservations and Query Reservation Detail
GO will return the commission percentage in the retail model and the recommended selling price in the net model for both Query Reservations and Query Reservation Detail.
Below is an example response for the Query Reservations, which can also be referred to for the Query Reservation Detail as the changes are the same.
Response example of Query Reservations (Retail Model):
"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 ] }, // change start "connectionType": "Exchange", // change end "total": { "amountBeforeTax": 640, "amountAfterTax": 700 }, // change start "commission": { "value": 10, "type": "percentage" } // change end "status": "Confirmed", "cancellationId": "C89389494", "result": "Successful" } ] }
Response example of Query Reservations (Net Model):
{ "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 ] }, // change start "connectionType": "Exchange", // change end "total": { "amountBeforeTax": 640, "amountAfterTax": 700 }, // change start "suggestedTotalPrice": { "amountBeforeTax": 600, "amountAfterTax": 700 }, // change end "status": "Confirmed", "cancellationId": "C89389494", "result": "Successful" } ] }
How to join in Exchange Platform
- Log in to GO Console, navigate to the Connection menu, and click the “Join Now” button on the right banner.
- Click the "Submit" button to submit the request and wait for approval from the DerbySoft.
- Navigate to the Exchange menu populated and check the status, the initial status is "Pending" which means the request is not approved yet.
- After the request is approved, the status updates to "Active." Click the “Start Connection” button to establish connections.
How to establish connections with Exchange Hotel Suppliers
- Log in to the GO Console and navigate to the Connection menu. There is an exchange icon in the top right corner to indicate Exchange Hotel Suppliers.
- Click the "Start Connection" button, choose the appropriate connection mode, and then click the "Apply" button to submit the connection. Note: There are three connection mode options: Standard, Exchange, or Both.
If a client hasn’t yet joined the Exchange Platform, click the "Start Connection" button to initiate the connection process and select the Exchange Connection Mode. When they click the "Apply & Join Exchange" button, it will send two requests to DerbySoft: one to join the Exchange Platform and another to apply for the connection. - After the request is approved, the connection status updates from "Pending Approval" to "Implementing."
Did you find it helpful? Yes No
Send feedback