PULL
Modified on: 2025-07-29 18:09
TABLE OF CONTENTS
This API allows distributors to shop availability, rate, and inventory by querying the available room rates of multiple hotels. The Pull ARI Model enables distributors to retrieve data on demand, providing the flexibility to query the most up-to-date availability and pricing information whenever needed.
In this model, distributors can make requests to retrieve ARI data for up to 20 hotels and a maximum of 61 days of data in a single query. This offers flexibility for distributors who prefer to query specific hotels and date ranges as required, rather than receiving a continuous push of data.
In the following sections, we will provide the schemas and examples for the Pull ARI Model, outlining the structure of the data and guiding you on how to integrate the model into your system.
POST /shopping/multihotels HTTP/1.1 URL: {ShoppingEngine-Endpoint}/shopping/multihotels Authorization: 53ac07777cdffac2d53000002d698728ce964432d7167596bc005c5fc Accept-Encoding: gzip Content-Encoding: gzip Content-Type: application/json;charset=utf-8
PULL Request Schema
Level | Field Name | Data Type | Required | Description | Example |
---|---|---|---|---|---|
1 | header | object | Y | / | / |
2 | @distributorId | string | Y | The ID of distributor in DerbySoft's system. MaxLength: 32 | GTA |
2 | @version | string | Y | Version of API. MaxLength: 20 | 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 | hotels | array | Y | / | / |
2 | @supplierId | string | Y | The ID of hotel suppliers in DerbySoft's system. MaxLength: 32 | HILTON |
2 | @hotelId | string | Y | Hotel Supplier's Hotel ID | GATHI |
2 | @status | enum | N | Enum: [Actived, Deactived] Hotel status in distributor's system | Actived |
2 | @isAfterPromotion | boolean | N | The flag indicates calculate the available room rates with the promotion rules or not.
| false |
2 | @promoteCode | string | N | Promote code defined by the hotel, is an optional field when you want to request the promotion rates. (isAfterPromotion = true). If the promotion 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. | / |
2 | @onlyExactMatch | boolean | N | Used to specify if only requesting rates for the specific corpCodes or also the backup rates true: only rates related to the corpCode false: also other rates | false |
2 | corpCodes | array[string] | N | Corporate ID for a specific company, consortia, negotiated rate used to retrieve rates related to that code. Notes: 1. It depends on the corporate code mapping between Go Distributors and hotel suppliers. If the mapping is not in place and corporate codes are passed, an error will occur. 2. The maximum number of corpCodes allowed is 10. | ["IBM", "TXH"] |
1 | stayRange | object | Y | / | / |
2 | @checkin | string | Y | Check-in date expressed as YYYY-MM-DD | 2028-01-01 |
2 | @checkout | string | Y | Check out date expressed as YYYY-MM-DD | 2028-01-04 |
1 | roomCriteria | object | Y | / | / |
2 | @roomCount | integer | Y | Total room count per request | 2 |
2 | @adultCount | integer | Y | Number of adults staying per room | 1 |
2 | @childCount | integer | N | Number of children staying per room | 2 |
2 | @childAges | integer | N | Ensure the size of the child age array matches the number of children. | [4, 8] |
1 | IATA | string | N | IATA of distributor | / |
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. | { "key1": "value1", "key2": "value2" } |
PULL Request Example
{ "header": { "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "hotels": [ { "supplierId": "HILTON", "hotelId": "GATHI", "status": "Actived", "isAfterPromotion": false, "promoteCode": "string", "onlyExactMatch": false, "corpCodes": [ "CORPA", "CORPB" ] } ], "stayRange": { "checkin": "2028-01-01", "checkout": "2028-01-04" }, "roomCriteria": { "roomCount": 2, "adultCount": 1, "childCount": 2, "childAges": [ 4, 8 ] }, "iata": "string", "extensions": { "key1": "value1", "key2": "value2" } }
PULL Response Schema
Level | Field Name | Data Type | Required | Description | Example |
---|---|---|---|---|---|
1 | header | object | Y | / | / |
2 | @distributorId | string | Y | The ID of distributor in DerbySoft's system. MaxLength: 32 | GTA |
2 | @version | string | Y | Version of API. MaxLength: 20 | 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 | stayRange | object | Y | Note: Please use the new node instead of the deprecated availHotels.stayRange node mentioned below. | / |
2 | @checkin | string | Y | Check-in, expressed as YYYY-MM-DD | 2028-01-01 |
2 | @checkout | string | Y | Checkout, expressed as YYYY-MM-DD | 2028-01-01 |
1 | iata | string | N | IATA of distributor | / |
1 | availHotels | array | Y | / | / |
2 | @supplierId | string | Y | The ID of hotel suppliers in DerbySoft's system. MaxLength: 32 | HILTON |
2 | @hotelId | string | Y | Hotel ID in supplier's system | GATHI |
2 | @status | enum | N | Enum:[Actived,Deactived] Hotel status in distributor's system | Actived |
2 | stayRange | object | Y | Note: The 'stayRange' node is deprecated and will be replaced by a new 'stayRange' node at the parent level in the next one or two API version releases. | / |
3 | @checkin | string | Y | Check-in, expressed as YYYY-MM-DD | 2028-01-01 |
3 | @checkout | string | Y | Check out, expressed as YYYY-MM-DD | 2028-01-04 |
2 | iata | string | N | IATA of distributor | / |
2 | availRoomRates | array | Y | Meal plan, fee, and cancel policy are optional fields as some distributors do not support these inthe API. |
|
3 | @roomId | string | Y | Room ID in supplier's system | 10000101 |
3 | @rateId | string | Y | Rate ID in supplier's system | 123456 |
3 | corpCodes | array[string] | N | Corporate ID for a specific company, consortia, negotiated rate used to retrieve rates related to that code. | / |
3 | isLoyaltyEligible | boolean | N | Used to indicate if a specific rate is eligible for loyalty points. True: means that the rate is eligible. False: indicates the rate is not eligible for loyalty points. | true |
3 | commission | object | N | Object used to indicate if a specific rate is commissionable. | / |
4 | @value | number | C | Value of the commission | 10 |
4 | @type | enum | C | Enum: [Percent, Amount] Type of the commission | Percent |
3 | @currency | string | Y | Currency code [ISO-4217] | USD |
3 | @amountBeforeTax | array[number] | C | The daily amount of rate without tax and fee. Mandatory if AAT is not provided. | [100,100,120] |
3 | @amountAfterTax | array[number] | C | The daily amount of rate with tax and fee. Mandatory if ABT is not provided. | [110,110,130] |
3 | @mealPlan | string | N | For the meal plan code, refer to the meal plan code list. | RO |
3 | @paymentType | enum | N | Indicates the product is prepaid to the hotel (PayNow) or pay at the hotel (PayLater) | PayNow |
3 | guarantee | object | N | Guarantee information for this room rate. | / |
4 | @guaranteeType | string | C | The type of guarantee method refers to the guarantee type list. | CCG |
3 | fees | array[object] | C | Fee or tax by date range. | / |
4 | dateRange | object | C | / | / |
5 | @startDate | string | C | Start date of date range expressed as YYYY-MM-DD | 2028-01-01 |
5 | @endDate | string | C | End date of the date range expressed as YYYY-MM-DD | 2028-01-04 |
4 | fee | object | C | / | / |
5 | @name | string | C | Name of the fee. Use regex pattern: \w[\w\d]+ { starts with a word character (letter, number, or underscore) followed by one or more word characters or digits.} | Service Charge |
5 | @type | enum | C | Indicates whether or not the fee or tax is included in the amount before tax. Enum: [Inclusive, Exclusive]. | Exclusive |
5 | @amount | number | C | Amount value of the fee or tax | 10 |
5 | @amountType | string | C | Indicates how to charge the tax, 10% per room per night in this example. Enum: [ Fix, Percent ]. | Percent |
5 | @chargeType | enum | C | Enum: [ PerRoomPerNight, PerPersonPerNight, PerRoomPerStay, PerPersonPerStay ] | PerRoomPerNight |
5 | @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 |
5 | @effectivePerson | integer | 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. | 3 |
3 | 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 a No-Show or a time range before a No-Show. | / |
4 | @code | string | C | Code of cancellation policy. Max Length: 128 | AD100P_100P |
4 | @description | string | N | Max Length: 1024 Description of the cancellation policy. | Non Refundable |
4 | cancelPenalties | array | Y | Details about the cancellation penalty | / |
5 | @noShow | boolean | C | If true means the penalty charge was applied for a No-Show, the cancelable and cancelDeadline nodes will be omitted. | / |
5 | @cancellable | boolean | N | Specifies whether cancellation is allowed. If false, cancellation is not allowed. If true, the cancelDeadline node will be present. | / |
5 | cancelDeadline | object | N | / | / |
6 | @offsetTimeDropType | enum | N | An enumerated type indicates when the deadline drop time goes into effect. | / |
6 | @offsetTimeUnit | enum | N | Enum:[D,H] | / |
6 | @offsetTimeValue | string | N | The number of offset times with the time unit | / |
6 | @deadline | string | N | Deadline times for cancellation are typically based on the hotel's local time, usually at either 4 PM or 6 PM. | / |
5 | penaltyCharge | object | C | / | / |
6 | @chargeBase | enum | N | Enum:[FullStay, NightBase] If FullStay, it will be a percentage or amount. If NightBase, the 'nights' field will be provided. | / |
6 | @nights | number | N | Exists if the penalty charge is based on the night, like the first night. | / |
6 | @amount | number | N | Exists if the penalty charge is a flat charge, like USD 30.00 | / |
6 | @percent | number | N | Exists if the penalty charge is percent, like 15.5 means 15.5% | / |
3 | 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. | Standard |
3 | suggestedTotalPrice | object | N | Notes: If the connection type is "Exchange" and " Net" Rate Model, the node will be visible; otherwise, it will not appear. | / |
4 | @amountBeforeTax | number | N | Mandatory if AAT is not provided | 600 |
4 | @amountAfterTax | number | N | Mandatory if ABT is not provided | 700 |
3 | roomCriteria | object | Y | / | / |
4 | @roomCount | integer | Y | Total room count per request | 2 |
4 | @adultCount | integer | Y | Number of adults staying per room | 1 |
4 | @childCount | integer | N | Number of children staying per room | 2 |
4 | @childAges | integer | N | Ensure the size of the child age array matches the number of children. | [4,8] |
3 | inventory | integer | Y | Available inventory count according to request criteria. | 2 |
3 | isAfterPromotion | boolean | N | The flag indicates calculate the available room rates with the promotion rules or not.
| false |
3 | promoteCode | string | N | Promote code defined by the hotel, it's an optional field when you want to request the promotion rates (isAfterPromotion = true). If the promotion code is empty and there are multiple promotions available for one product at the same time, the promotion rule will be chosen according to the multiPromotionsStategy. | / |
1 | error | string | N | error response | Key not authorized |
1 | errorCode | string | C | error response | InvalidField |
1 | errorMessage | string | C | error response | Invalid Message |
PULL Response Example
{ "header": { "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "stayRange": { "checkin": "2028-01-01", "checkout": "2028-01-04" }, "iata": "string", "availHotels": [ { "supplierId": "HILTON", "hotelId": "GATHI", "status": "Actived", "stayRange": { "checkin": "2028-01-01", "checkout": "2028-01-04" }, "iata": "string", "availRoomRates": [ { "roomId": "K1D", "rateId": "ODAD01", "corpCodes": [ "CORPA", "CORPB" ], "isLoyaltyEligible": true, "commission": { "value": 10, "type": "Percent" }, "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", "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", "collectBy": "Property", "effectivePerson": 0 } } ], "cancelPolicy": { "code": "AD100P_100P", "description": "Non Refundable", "cancelPenalties": [ { "noShow": true, "cancellable": true, "cancelDeadline": { "offsetTimeDropType": "BeforeArrival", "offsetTimeUnit": "D", "offsetTimeValue": 999, "deadline": "string" }, "penaltyCharge": { "chargeBase": "FullStay", "nights": 0, "amount": 0, "percent": 0 } } ] }, "roomCriteria": { "roomCount": 2, "adultCount": 1, "childCount": 2, "childAges": [ 4, 8 ] }, "inventory": 2, "isAfterPromotion": false, "promoteCode": "string" } ] } ] }
{ "header": { "distributorId": "GTA", "version": "v4", "token": "18393849028490234" }, "stayRange": { "checkin": "2028-01-01", "checkout": "2028-01-04" }, "iata": "string", "availHotels": [ { "supplierId": "HILTON", "hotelId": "GATHI", "status": "Actived", "stayRange": { "checkin": "2028-01-01", "checkout": "2028-01-04" }, "iata": "string", "availRoomRates": [ { "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", "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", "collectBy": "Property", "effectivePerson": 0 } } ], "cancelPolicy": { "code": "AD100P_100P", "description": "Non Refundable", "cancelPenalties": [ { "noShow": true, "cancellable": true, "cancelDeadline": { "offsetTimeDropType": "BeforeArrival", "offsetTimeUnit": "D", "offsetTimeValue": 999, "deadline": "string" }, "penaltyCharge": { "chargeBase": "FullStay", "nights": 0, "amount": 0, "percent": 0 } } ] }, "connectionType": "Exchange", "suggestedTotalPrice": { "amountBeforeTax": 600, "amountAfterTax": 700 }, "roomCriteria": { "roomCount": 2, "adultCount": 1, "childCount": 2, "childAges": [ 4, 8 ] }, "inventory": 2, "isAfterPromotion": false, "promoteCode": "string" } ] } ] }
{ "errorCode": "InvalidField", "errorMessage": " Unauthorized token" }
{ "errorCode": "InvalidField", "errorMessage": "Invalid Message" }
Did you find it helpful? Yes No
Send feedback