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.

  • true means to check the availability under the promotion rules provided by the supplier.
  • false means no need to check the availability under any promotions, basic live-check only.

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@onlyExactMatchbooleanN

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
2corpCodesarray[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

/

1extensionsobjectNOptional: 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

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
stayRangeobject
YNote:
Please use the new node instead of the deprecated availHotels.stayRange node mentioned below.
/
2@checkinstringY

Check-in, expressed as YYYY-MM-DD

2028-01-01


2@checkoutstringY

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)
Enum:[PayLater,PayNow].

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@collectByenumN

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.
Enum: [BeforeArrival].

 /

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
NNotes: If the connection type is "Exchange" and " Net" Rate Model, the node will be visible; otherwise, it will not appear.
/
4
@amountBeforeTaxnumberN

Mandatory if AAT is not provided

600
4@amountAfterTaxnumberN

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.

  • true means to check the availability  under the promotion rules provided by the Supplier.
  • false means no need to check the availability under any promotions, basic live-check only.

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.

 /

1errorstringNerror responseKey not authorized
1errorCodestringCerror responseInvalidField
1errorMessagestringCerror responseInvalid Message

PULL Response Example

Success Response(HTTP Status 200)
{
    "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"
          }
        ]
      }
    ]
  }
Success Response for Exchange Connection and Net Rate Model(HTTP Status 200)
{
  "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"
        }
      ]
    }
  ]
}
Error Response (HTTP Status 403)
{
  "errorCode": "InvalidField",
  "errorMessage": "  Unauthorized token"
}
Error Response (HTTP Status 500)
{
  "errorCode": "InvalidField",
  "errorMessage": "Invalid Message"
}