NAV Navbar
shell

Introduction

Welcome to the QuintRooms API! You can use our API to access QuintRooms API endpoints, which can get information on hundreds of thousands of hotels, their availability, details, as well as create and cancel reservations.

We have language bindings in Shell, Ruby, Python, and JavaScript! You can view code examples in the dark area to the right, and you can switch the programming language of the examples with the tabs in the top right.

This example API documentation page was created with Slate. Feel free to edit it and use it as a base for your own API's documentation.

Authentication

Query String

QuintRooms uses a querystring username and password to allow access to the API. You can request QuintRooms API credentials by partnering with us and emailing support.

The API credentials are expected in all API requests to the server in the querystring like the following:

&username={API-USERNAME}&password={API-PASSWORD}&siteid={SITEID}

Single Sign On (SSO)

If you wish to integrate our closed user group portal/site with your own applications and user group, you can utilize our SSO functionality.

Process:

  1. Request a Site Admin to be added to your closed user group site (if you don't already have one)
  2. Get a token for the Site Admin
  3. Create a member using the Site Admin's token
  4. Use the member's token in queries on the user's behalf

Common value maps

currency

Supported currencies are located in our static database files. Request access if needed. Major 3-letter currency references (e.g., "USD", "CNY", "CAD", etc.) are supported.

gateway

Optional filter. This should be either left empty to return all sources of supply or specified by a single integer or comma separated list of integers.

Please contact us for an updated list of gateways.

propertyAmenities

Optional filter. This should either be an integer or a list of comma separated integers represented by the following:

Amenity ID Amenity
1 Airport shuttle
2 Social hour
3 Fitness center
4 Internet access
5 Free local calls
6 Complimentary breakfast
7 Pets allowed
8 Pool
9 Restaurant on-site
10 Kitchen / kitchenette

propertyClasses

Optional filter. This should either be an integer or a list of comma separated integers represented by the following.

Property Class Star Rating Description
1 1 Economy
2 2 Budget
3 3 Moderate
4 4 Premium
5 5 Luxury

propertyTypes

Optional filter. This should either be an integer or a list of comma separated integers represented by the following:

Property Type ID Property Type
1 Hotel
5 Motel
6 Resort
8 Extended stay property
9 Bed and breakfast
12 Vacation rental

roomCode

This is the ArnResponse.Availability.HotelAvailability.Hotel.RatePlan.Room.@Code value specified in the Availability Search results for the room type you are interested.

ratePlanCode

This is the ArnResponse.Availability.HotelAvailability.Hotel.RatePlan.@Code value specified in the Availability Search results for the rate plan you are interested in.

Closed user groups

This section is only for those using the SSO Authentication feature and pertains to managing users and their authentication tokens.

You will need a Site Admin user in your closed user group site. If you don't already have one, please request one be added for your portal/site.

Get a Token for a Site Admin

This endpoint returns an auth token for an administrative user, valid for 1 hour, which may be used to create or update new (non-administrative) users and their tokens.

Along with the other common parameters to replace, additionally you must replace {ADMIN-USERNAME} with the username the Site Admin user uses to login to the site/portal.

curl "https://api.travsrv.com/MemberAPI.aspx?\
username={API-USERNAME}\
&password={API-PASSWORD}\
&siteid={SITEID}\
&token=ARNUSER-{ADMIN-USERNAME}"

The above command returns JSON structured like this:

{
    "MemberId": 918236,
    "Rewards": 0,
    "Points": 0,
    "RedemptionMultiplier": 1,
    "EarnMultiplier": 1,
    "Names": [
        {
            "FirstName": "Joe",
            "LastName": "Schmoe",
            "BirthDate": null,
            "Email": "[email protected]",
            "Address1": "",
            "Address2": null,
            "City": "",
            "State": null,
            "Country": null,
            "Postal": "",
            "Longitude": null,
            "Latitude": null,
            "HomePhone": null,
            "Referral": "",
            "ReferralId": "",
            "Password": null,
            "IsActive": true,
            "DeleteMember": false,
            "UpdateMemberUsername": false,
            "FullName": "Joe Schmoe"
        }
    ],
    "DebugData": "Retrieval Time: 3ms",
    "Error": null,
    "CurrentToken": "%2bzkm8%2feXTB11eE0%2fIoDmDQruFMVpaxVX7WHx%2bT%2fT%2bkUPwOEtWBPPI3mKIItze5fXabC*(&ehmkxTPbnCvp4llCDhxS37DyiKrSiaLHUeydpMnzU3Wc4AusJZHzaylHUNmDfhMs%2fpG39VDoeQ47T0wehE%2fVjWV%2f3bZ5qUARYGzAvLP884khJxCYWvopS5w1V%2bXtSWXQeBw4Sqvz9Fz4dr7Oc58%2bKLuF99D8t3VfJvOMt9y%2bGdUK87DAXzQ0kpmLbR1vUCMpmPx3KDBtapqow8RoYInQtICzMUV18%2fv8jp6wgg4GPFPfy7X3n8GcMyj3HPfibBqlP054zu3c%2fmnk07EvtFpeHy4uAR6CEIg7wZa52I3xBJQeaQwKtp6Ju8Y4FbcHsewPPlSMpkSFHFGSeyK62U4PsPEWMEWwlUR28gZ0VcBBriuySb5pwZ8OHqBmCMr9NPsywSnqBRkI22cihTHmDL5wKvSkPAmxuf0Y3xmG3E9Pe7HTHhVD%2b7K2pE5iaQwtYD5H3yoTHwQNxDqmGuFQIVEZxjysyVNM1ddfqNnVenT%2fT1RMZpoPOIEQKzMKldPBn67UTYDNs489XbwOxg86WqYNM5il%2fv79ebducj8htsAViLxuT7sFp%2fVGvUdkcP3bN3%2ftqNg",
    "TransactionResponse": null,
    "MetaTag": "{\"MemberId\":918236,\"Rewards\":0,\"Points\":0,\"RedemptionMultiplier\":1.0,\"EarnMultiplier\":1.0,\"Names\":[{\"FirstName\":\"Joe\",\"LastName\":\"Schmoe\",\"BirthDate\":null,\"Email\":\"[email protected]\",\"Address1\":\"\",\"Address2\":null,\"City\":\"\",\"State\":null,\"Country\":null,\"Postal\":\"\",\"Longitude\":null,\"Latitude\":null,\"HomePhone\":null,\"Referral\":\"\",\"ReferralId\":\"\",\"Password\":null,\"IsActive\":true,\"DeleteMember\":false,\"UpdateMemberUsername\":false,\"FullName\":\"Joe Schmoe\"}],\"DebugData\":null,\"Error\":null,\"CurrentToken\":null,\"TransactionResponse\":null,\"MetaTag\":null,\"MemberUsername\":\"[email protected]\",\"MemberProvider\":\"ReserveTravel\",\"IsArnProvider\":true,\"AdditionalInfo\":null,\"MemberType\":\"Wholesale\"}",
    "MemberUsername": "[email protected]",
    "MemberProvider": "ReserveTravel",
    "IsArnProvider": true,
    "AdditionalInfo": null,
    "MemberType": "Wholesale"
}

HTTP Request

GET https://api.travsrv.com/MemberAPI.aspx

Query Parameters

Parameter Type Required Description
username string Yes Provided by QuintRooms
password string Yes Provided by QuintRooms
siteid integer Yes Provided by QuintRooms
token string Yes ARNUSER- concatonated with the Site Admin's username

Create a New Member

Using the Site Admin's token you may create a new member by POSTing a URI encoded JSON string to this endpoint. Calling this endpoint successfully generates a member token, found in the CurrentToken property, which you should save for them if you want to use the "Get a Member by Token" call.

You may notice this call is exactly the same as the "Update an Existing Member" call.

The JSON data to stringify and encode may look something like this (not yet encoded):

{
    "Points": 100,
    "Names": [{
        "ReferralId": "[email protected]",
        "FirstName": "Testme",
        "LastName": "Tester",
        "Email": "[email protected]",
        "Address1": "123 Main Street",
        "HomePhone": "5551231212"
    }]
}

Encoded and POSTed via curl:

curl -X POST \
  https://api.travsrv.com/MemberAPI.aspx \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'siteid={SITEID}&token={ADMIN-TOKEN}&memberData=%7B%22Points%22%3A100%2C%22Names%22%3A%5B%7B%22ReferralId%22%3A%22mytestuser1%40gmail.com%22%2C%22FirstName%22%3A%22Testme%22%2C%22LastName%22%3A%22Tester%22%2C%22Email%22%3A%22mytestuser1%40gmail.com%22%2C%22Address1%22%3A%22123%20Main%20Street%22%2C%22HomePhone%22%3A%225551231212%22%7D%5D%7D'

The above command returns JSON structured like this:

{
    "MemberId": 54321,
    "Rewards": 0,
    "Points": 100,
    "RedemptionMultiplier": 1.0,
    "EarnMultiplier": 1.0,
    "Names": [{
        "FirstName": "Testme",
        "LastName": "Tester",
        "BirthDate": null,
        "Email": "[email protected]",
        "Address1": "123 Main Street",
        "Address2": null,
        "City": null,
        "State": null,
        "Country": null,
        "Postal": null,
        "Longitude": null,
        "Latitude": null,
        "HomePhone": "5551231212",
        "Referral": null,
        "ReferralId": "[email protected]",
        "Password": null,
        "IsActive": true,
        "DeleteMember": false,
        "UpdateMemberUsername": false,
        "FullName": "Testme Tester"
    }],
    "DebugData": " Successful creation of Member [email protected]",
    "Error": null,
    "CurrentToken": "E7MUlbdRdlq2RwSs8V4%2fhza25Xwca%2fZLodi%2faddmPl%2bJfpCU7VovYjoSKaMk34PvkSDpD1mqvezzQG0abXzuXP1%2baaiIKCLw7ehGaiI7BNI7Pb%2fYK%2fGJf4fCxKCz5EodA79iweA6gc2nCEOdWmkarTuy4Cd%2f5WtNkU043rF42sshCKGkg%2bIavKgJ6emdL7msPJRykM2hf%2fmHjdDOV%2b7jtuOHpk5bAVVIc5jhUqmqJMa5908EK0VoX1OUT60SkDcw2YLBeXEg6sYPu1Q7mTPc5VUhJ%2b6C6wHM08eOKMrKt6LNRxoB0kXcPyVS1azt1LR48yAegw%2fKXPbdgrCBycjsDedm0ItP9SmW1C6Byw4nt5zivxf%2f0ZIMF07wtZ4JhWVqGuhetKPDE3ddzOLRPyjNgetWddHqoq8Tba%2bKWDcIADYnqgH5NVdVSKvyH5VWY3vMHyhlZQiW23z1a6lZReASYfMMycNfDU2X4EhDOEa0tvUYajpsRlnDIkNcLjxT4KPyrZhl5tVsHECCY0Sasy%2f6zh9ce%2b3HE%2bOEtux%2bEHKfBWrkzwt1vpwyn%2fnXzVd%2bQumpQLw5DOZ2DltHZs%2bfmQ96MoMrBgSx8jS%2bQkR3NQjGAysUOqXK%2fAl38ryHzGe0nSeMkLo5BRYEgiEJK%2bftnZqsEQbZC98E8Fyt2zMGiofGQrR1i5v3gRoOCfqjNYJQAft4ru6GCR5kpm0CsvVvOnKmnA%3d%3d",
    "TransactionResponse": "true",
    "MetaTag": null,
    "MemberUsername": "[email protected]",
    "MemberProvider": null,
    "IsArnProvider": true,
    "MemberType": "Member"
}

HTTP Request

POST https://api.travsrv.com/MemberAPI.aspx

memberData JSON Object Properties

Parameter Type Required Description
siteid integer Yes Provided by QuintRooms
token string Yes Site Admin Token
Points integer No Number of points for the user
Names string Yes Stringified, URI encoded JSON array of JSON object containing the params below
ReferralId string Yes The email address of the user (used as the "username")
FirstName string Yes The user's first name
LastName string Yes The user's last name
Email string Yes The email address of the user
Address1 string No The user's full address
HomePhone string No The user's phone number

Update an Existing Member

Using the Site Admin's token you may update an existing member by POSTing a URI encoded JSON string to this endpoint. Successfully calling this endpoint also generates a new member token for the user in the CurrentToken property, which you should save for them if you want to use the "Get a Member by Token" call.

You may notice this call is exactly the same as the "Create a New Member" call.

The JSON data to stringify and encode may look something like this (not yet encoded):

{
    "Points": 100,
    "Names": [{
        "ReferralId": "[email protected]",
        "FirstName": "Testme",
        "LastName": "Tester",
        "Email": "[email protected]",
        "Address1": "123 Main Street",
        "HomePhone": "5551231212"
    }]
}

Encoded and POSTed via curl:

curl -X POST \
  https://api.travsrv.com/MemberAPI.aspx \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'siteid={SITEID}&token={ADMIN-TOKEN}&memberData=%7B%22Points%22%3A100%2C%22Names%22%3A%5B%7B%22ReferralId%22%3A%22mytestuser1%40gmail.com%22%2C%22FirstName%22%3A%22Testme%22%2C%22LastName%22%3A%22Tester%22%2C%22Email%22%3A%22mytestuser1%40gmail.com%22%2C%22Address1%22%3A%22123MainStreet%22%2C%22HomePhone%22%3A%225551231212%22%7D%5D%7D'

The above command returns JSON structured like this:

{
    "MemberId": 54321,
    "Rewards": 0,
    "Points": 100,
    "RedemptionMultiplier": 1.0,
    "EarnMultiplier": 1.0,
    "Names": [{
        "FirstName": "Testme",
        "LastName": "Tester",
        "BirthDate": null,
        "Email": "[email protected]",
        "Address1": "123 Main Street",
        "Address2": null,
        "City": null,
        "State": null,
        "Country": null,
        "Postal": null,
        "Longitude": null,
        "Latitude": null,
        "HomePhone": "5551231212",
        "Referral": null,
        "ReferralId": "[email protected]",
        "Password": null,
        "IsActive": true,
        "DeleteMember": false,
        "UpdateMemberUsername": false,
        "FullName": "Testme Tester"
    }],
    "DebugData": " Successful Existing Member [email protected]",
    "Error": null,
    "CurrentToken": "E7MUlbdRdlq2RwSs8V4%2fhza25Xwca%2fZLodi%2faddmPl%2bJfpCU7VovYjoSKaMk34PvkSDpD1mqvezzQG0abXzuXP1%2baaiIKCLw7ehGaiI7BNI7Pb%2fYK%2fGJf4fCxKCz5EodA79iweA6gc2nCEOdWmkarTuy4Cd%2f5WtNkU043rF42sshCKGkg%2bIavKgJ6emdL7msPJRykM2hf%2fmHjdDOV%2b7jtuOHpk5bAVVIc5jhUqmqJMa5908EK0VoX1OUT60SkDcw2YLBeXEg6sYPubiUEmc223Z4JhWVqGuhetKPDE3ddzOLRPyjNgetWddHqoq8Tba%2bKWDcIADYnqgH5NVdVSKvyH5VWY3vMHyhlZQiW23z1a6lZReASYfMMycNfDUhDOEa0tvUYajpsRlnDIkNcLjxT4KPyrZhl5tVsHECCY0Sasy%2f6zh9ce%2b3HE%2bOEtux%2bEHKfBWrkzwt1vpwyn%2fnXzVd%2bQumpQLw5DOZ2DltHZs%2bfmQ96MoMrBgSx8jS%2bQkR3NQjGAysUOqXKn83CdkKJDjeGe0nSeMkLo5BRYEgiEJK%2bftnZqsEQbZC98E8Fyt2zMGiofGQrR1i5v3gRoOCfqjNYJQAft4ru6GCR5kpm0CsvVvOnKmnA%3d%3d",
    "TransactionResponse": "true",
    "MetaTag": null,
    "MemberUsername": "[email protected]",
    "MemberProvider": null,
    "IsArnProvider": true,
    "MemberType": "Member"
}

HTTP Request

POST https://api.travsrv.com/MemberAPI.aspx

memberData JSON Object Properties

Parameter Type Required Description
siteid integer Yes Provided by QuintRooms
token string Yes Site Admin Token
Points integer No Number of points for the user
Names string Yes Stringified, URI encoded JSON array of JSON object containing the params below
ReferralId string Yes The email address of the user (used as the "username")
FirstName string Yes The user's first name
LastName string Yes The user's last name
Email string Yes The email address of the user
Address1 string No The user's full address
HomePhone string No The user's phone number
DeleteMember boolean No Set to true to deactivate a member
ReactivateMember boolean No Set to true to reactivate a deactivated member

Get a Member by Token

This endpoint retrieves a member using their member token. Successfully calling this endpoint also generates a new member token for the user in the CurrentToken property, which you should save for them if you want to call this endpoint again in the future.

curl "https://api.travsrv.com/MemberAPI.aspx?\
&siteid={SITEID}\
&token={MEMBER-TOKEN}"

The above command returns JSON structured like this:

{
    "MemberId": 54321,
    "Rewards": 0,
    "Points": 0,
    "RedemptionMultiplier": 1.0,
    "EarnMultiplier": 1.0,
    "Names": [{
        "FirstName": "Testme",
        "LastName": "Tester",
        "BirthDate": null,
        "Email": "[email protected]",
        "Address1": "123 Main Street",
        "Address2": null,
        "City": null,
        "State": null,
        "Country": null,
        "Postal": null,
        "Longitude": null,
        "Latitude": null,
        "HomePhone": "5551231212",
        "Referral": null,
        "ReferralId": "[email protected]",
        "Password": null,
        "IsActive": true,
        "DeleteMember": false,
        "UpdateMemberUsername": false,
        "FullName": "Testme Tester"
    }],
    "DebugData": " Successful creation of Member [email protected]",
    "Error": null,
    "CurrentToken": "E7MUlbdRdlq2RwSs8V4%2fhza25Xwca%2fZLodi%2faddmPl%2bJfpCU7VovYjoSKaMk34PvkSDpD1mqvezzQG0abXzuXP1%2baaiIKCLw7ehGaiI7BNI7Pb%2fYK%2fGJf4fCxKCz5EodA79iweA6gc2nCEOdWmkarTuy4Cd%2f5WtNkU043rF42sshCKGkg%2bIavKgJ6emdL7msPJRykM2hf%2fmHjdDOV%2b7jtuOHpk5bAVVIc5jhUqmqJMa5908EK0VoX1OUT60SkDcw2YLBeXEg6sYPu1Q7mTPc5VUhJ%2b6C6wHM08eOKMrKt6LNRxoB0kXcPyVS1azt1LR48yAegw%2fKXPbdgrCBycjsDedm0ItP9SmW1C6Byw4nt5zivxf%2f0ZIMF07wtZ4JhWVqGuhetKPDE3ddzOLRPyjNgetWddHqoq8Tba%2bKWDcIADYnqgH5NVdVSKvyH5VWYyhlZQiW23z1a6lZReASYfMMycNfDU2X4EhDOEa0tvUYajpsRlnDIkNcLjxT4KPyrZhl5tVsHECCY0Sasy%2f6zh9ce%2b3HE%2bOEtux%2bEHKfBWrkzwt1vpwyn%2fnXzVd%2bQumpQLw5DOZ2DltHZs%2bfmQ96MoMrBgSx8jS%2bQkR3NQjGAysUOqXK%2fAl38ryHzGe0nSeMkLo5BRYEgiEJK%2bftnZqsEQbZC98E8Fyt2zMGiofGQrR1i5v3gRoOCfqjNYJQAft4ru6GCR5kpm0CsvVvOnKmnA%3d%3d",
    "TransactionResponse": "true",
    "MetaTag": null,
    "MemberUsername": "[email protected]",
    "MemberProvider": null,
    "IsArnProvider": true,
    "MemberType": "Member"
}

HTTP Request

GET https://api.travsrv.com/MemberAPI.aspx

Query Parameters

Parameter Type Required Description
siteid integer Yes Provided by QuintRooms
token string Yes Token for the member (not Site Admin's)

Create/Update a Coupon/Code

"Coupons" or "Codes" can be used to give users a pre-defined number of "Points" (in API requests/responses). The points (1 point = 1 USD) may be used to discount select purchases within a closed user group. The codes may either be used during checkout, or easier, added to a user account and automatically applied at checkout for the user for the maximum discount allowed for that transaction.

This endpoint creates a single coupon/code.

The JSON data to stringify and encode may look something like this (not yet encoded):

{
  "Code": "123-4567890",
  "SiteId": 12345,
  "Data": {
    "IsActive": true,
    "IsUsed": false,
    "Discount": 500,
    "MinNights": 1,
    "ExpiresOn": "2018-11-06",
    "MaxUses": 1,
    "IsPercentage": false,
    "Terms": ""
  }
}
curl "https://api.travsrv.com/Coupon.aspx?\
username={API-USERNAME}\
&password={API-PASSWORD}\
&siteid={SITEID}\
&type=save\
&coupon=%7B%22Code%22%3A%22123-4567890%22%2C%22SiteId%22%3A12345%2C%22Data%22%3A%7B%22IsActive%22%3Atrue%2C%22IsUsed%22%3Afalse%2C%22Discount%22%3A500%2C%22MinNights%22%3A1%2C%22ExpiresOn%22%3A%222018-11-06%22%2C%22MaxUses%22%3A1%2C%22IsPercentage%22%3Afalse%2C%22Terms%22%3A%22%22%7D%7D"

The above command returns JSON structured like this:

{
  "IsValid": true,
  "Code": "123-4567890",
  "SiteId": 12345,
  "Message": "Is Valid For Up To 500 Off Purchase",
  "Data": {
    "IsActive": true,
    "IsUsed": false,
    "Discount": 500.0,
    "MinNights": 1,
    "ExpiresOn": "1/1/2018",
    "MaxUses": 1,
    "IsPercentage": false,
    "Terms": null
  }
}

Codes which have been used would return something like this:

{
  "IsValid": false,
  "Code": "123-4567890",
  "SiteId": 12345,
  "Message": "Is Already Used",
  "Data": {
    "IsActive": true,
    "IsUsed": true,
    "Discount": 500.0,
    "MinNights": 1,
    "ExpiresOn": "11/6/2018",
    "MaxUses": 1,
    "IsPercentage": false,
    "Terms": null
  }
}

HTTP Request

POST https://api.travsrv.com/Coupon.aspx

Query Parameters

Parameter Type Required Description
username string Yes Provided by QuintRooms
password string Yes Provided by QuintRooms
siteid integer Yes Provided by QuintRooms
type string Yes save
coupon string Yes Stringified, URI encoded JSON object containing the params below
Code string Yes The code string you want generated
SiteId integer Yes Provided by QuintRooms
Data object Yes JSON object containing the params below
IsActive boolean Yes true if not expired and not redeemed
IsUsed boolean Yes true if not yet redeemed
Discount decimal Yes Amount the coupon is worth
MinNights integer Yes Min requirement of nights to be able to use the code
ExpiresOn date Yes Expiration date of this code (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
MaxUses integer Yes Maximum number of times this code may be used
IsPercentage boolean Yes true if Discount is a percentage of reservation amount. false if Discount is a real amount (1 = 1 USD).
Terms string Yes Set to "".

Get a Coupon/Code

"Coupons" or "Codes" can be used to give users a pre-defined number of "Points" (in API requests/responses). The points (1 point = 1 USD) may be used to discount select purchases within a closed user group. The codes may either be used during checkout, or easier, added to a user account and automatically applied at checkout for the user for the maximum discount allowed for that transaction.

This endpoint retrieves the data related to a single coupon/code. The response will validate the code is legitimate, whether the code has been used already or not, the expiration date, and the discount (in points) that is available.

curl "https://api.travsrv.com/Coupon.aspx?\
username={API-USERNAME}\
&password={API-PASSWORD}\
&siteid={SITEID}\
&type=get\
&couponcode={COUPON-CODE}"

The above command returns JSON structured like this:

{
  "IsValid": true,
  "Code": "123-4567890",
  "SiteId": 12345,
  "Message": "Is Valid For Up To 500.00 Off Purchase",
  "Data": {
    "IsActive": true,
    "IsUsed": false,
    "Discount": 500.0,
    "MinNights": 1,
    "ExpiresOn": "11/6/2018",
    "MaxUses": 1,
    "IsPercentage": false,
    "Terms": null
  }
}

Codes which have been used would return something like this:

{
  "IsValid": false,
  "Code": "114-4567890",
  "SiteId": 12345,
  "Message": "Is Already Used",
  "Data": {
    "IsActive": true,
    "IsUsed": true,
    "Discount": 500.0,
    "MinNights": 1,
    "ExpiresOn": "11/6/2018",
    "MaxUses": 1,
    "IsPercentage": false,
    "Terms": null
  }
}

HTTP Request

GET https://api.travsrv.com/Coupon.aspx

Query Parameters

Parameter Type Required Description
username string Yes Provided by QuintRooms
password string Yes Provided by QuintRooms
siteid integer Yes Provided by QuintRooms
type string Yes get (in this case), or redeem (see below)
couponcode string Yes The code to lookup

Redeem a Coupon/Code

"Coupons" or "Codes" can be used to give users a pre-defined number of "Points" (in API requests/responses). The points (1 point = 1 USD) may be used to discount select purchases within a closed user group. The codes may either be used during checkout, or easier, added to a user account and automatically applied at checkout for the user for the maximum discount allowed for that transaction.

This endpoint sets a single coupon/code to isValid: false, effectively indicating it's been used and should not be able to be used again. If the code is valid and the call is successfull, the response will look the same as if you were calling a type=get (as specified above under "Get a Coupon/Code"). Successive calls to either type=get or type=redeem will return a response indicating the code is no longer valid.

curl "https://api.travsrv.com/Coupon.aspx?\
username={API-USERNAME}\
&password={API-PASSWORD}\
&siteid={SITEID}\
&type=redeem\
&couponcode={COUPON-CODE}"

The above command returns JSON structured like this:

{
  "IsValid": true,
  "Code": "123-4567890",
  "SiteId": 12345,
  "Message": "Is Valid For Up To 500.00 Off Purchase",
  "Data": {
    "IsActive": true,
    "IsUsed": false,
    "Discount": 500.0,
    "MinNights": 1,
    "ExpiresOn": "11/6/2018",
    "MaxUses": 1,
    "IsPercentage": false,
    "Terms": null
  }
}

Subsequent calls will return the following:

{
  "IsValid": false,
  "Code": "123-4567890",
  "SiteId": 12345,
  "Message": "Is Already Used",
  "Data": {
    "IsActive": true,
    "IsUsed": true,
    "Discount": 500.0
    "MinNights": 1,
    "ExpiresOn": "11/6/2018",
    "MaxUses": 1,
    "IsPercentage": false,
    "Terms": null
  }
}

HTTP Request

GET https://api.travsrv.com/Coupon.aspx

Query Parameters

Parameter Type Required Description
username string Yes Provided by QuintRooms
password string Yes Provided by QuintRooms
siteid integer Yes Provided by QuintRooms
type string Yes get (see above), or redeem (in this case)
couponcode string Yes The code to invalidate

Hotels

This endpoint retrieves all hotels which have availability for the dates and locations (or individual hotels) specified.

Make this request for the total number of rooms and the total number of guests. The response will return a maximum of 50 hotels per request, thus you must use pagination techniques if you need more than 50. That said, 50 is the maximum but may not be the best performing. Use smaller batches to get faster responses.

Responses will contain available rate plans and room types from various suppliers we call "gateways".

Responses may contain full nightly rates and tax information, only first night rates with or without tax information, or the highest or average nightly rate. This response depends on the supplier/gateway but the most common from most gateways is the first night's rate, thus the property name in our responses (FirstNightRate).

Rates are always returned in the hotel's native currency. If you request another currency, the correct conversion rate from the hotel's native currency to the desired DisplayCurrency will be returned as DisplayCurrencyMultiplier. You may use this value to convert the hotel currency to the desired currency for display in your UI. This allows you to show both the original currency and display currency side by side.

curl "https://api.travsrv.com/hotel.aspx?\
username={API-USERNAME}\
&password={API-PASSWORD}\
&siteid={SITEID}\
&latitude=30.099016\
&longitude=-81.601370\
&radius=10\
&inDate=2018-10-20\
&outDate=2018-10-22\
&maxResults=1\
&rooms=1\
&adults=2\
&children=0\
&ipAddress=127.0.0.1\
&userAgent=shell\
&userLanguage=en\
&_type=json"

The above command returns JSON structured like this (edited for brevity):

{
  "ArnResponse": {
    "Info": {
      "@SiteID": "{SITEID}",
      "@Username": "{API-USERNAME}",
      "@IpAddress": "127.0.0.1",
      "@TimeReceived": "2018-04-13T16:01:13.510",
      "@TimeCompleted": "2018-04-13T16:01:13.651",
      "@Version": "1.0.0.0",
      "@ServiceUrl": "https://api.travsrv.com/hotel.aspx?inDate=2018-10-20&latitude=30.099016&longitude=-81.601370&maxResults=1&outDate=2018-10-22&password={API-PASSWORD}&radius=10&siteid={SITEID}&username={API-USERNAME}",
      "@RequestID": "436E177E-558F-4287-B55A-5DBD9F4C7579"
    },
    "Availability": {
      "@DisplayCurrency": "USD",
      "HotelAvailability": {
        "@InDate": "2018-10-20",
        "@OutDate": "2018-10-22",
        "@Rooms": "1",
        "@Adults": "2",
        "@Children": "0",
        "Hotel": {
          "@HotelID": "272393",
          "@IsEphemeral": "true",
          "RatePlan": [
            {
              "@Code": "F89648494F22FFE25A254AD1CE7D18FD27B862F1A609BD28872D9CD6DDA2E956B160BE3DB7EB0191B160BE3DB7EB01917EA3048807BEE935",
              "@Description": "Best Available",
              "@BuyerOnly": "false",
              "@Gateway": "41",
              "@CommissionStatus": "Commissionable",
              "@BalanceDueAtHotel": "false",
              "Room": {
                "@Code": "HRLM--_eJwFwcuaczAAANAHmgVRCRaziPRvxkyJadx3biWUfkFH9On_fc5BTlaYBzSSx4m6Iwz3cS_pRnKxCtkQzjqPQZm8Lh771NInUK3ri_pDYTzZL6lQtgl0H0_fOj_f5dRd1kT_pX8dtg_pq0LMTJYHFXNuPqi0PxdLuTjEAeTtKNfYZ3Gd3suIjMbm3_prdXk03gvS_pfpUJnL_poCL9kNoyIlpA2DURM1_fqAtELSKYuKh6e248vaSGk9hE9Dns4MYIncb5jC_fcZG_p_fOeSN3Z0N_fib2UqSpSLCPFgqPX2sQTP9rmXEv_ptXOMVOlVLoC_fujzlUz6tJvvFwUEonyP6njavHdzsVVF2EesNGSmILz3twKMBKm_fp7PK2XCcgV8ghjMc93ZaXrLkm622zmAYaTaPSItlgfYOcO2TSZ6hvwXlxw_fSAVdl9fv4Hwe6AJQ",
                "@Name": "Standard room",
                "@Description": "- 1 King Bed - Nonsmoking Room - Free Breakfast, Free Wifi, Fridge, Microwave",
                "@CurrencyCode": "USD",
                "@DisplayCurrencyMultiplier": "1",
                "@USDMultiplier": "1",
                "@ExchangeGMT": "2018-04-13T11:00:26.790",
                "@MaximumBookable": "99",
                "NightlyRate": [
                  {
                    "@Date": "2018-10-20",
                    "@Price": "114.44"
                  },
                  {
                    "@Date": "2018-10-21",
                    "@Price": "114.43"
                  }
                ],
                "Tax": {
                  "@Percent": "11.51",
                  "@Amount": "29.77"
                },
                "GatewayFee": {
                  "@Amount": "0.00"
                },
                "Total": {
                  "@Amount": "258.64",
                  "@IncludesBookingFee": "false"
                },
                "BookingFee": {
                  "@Amount": "0.00",
                  "@CurrencyCode": "USD",
                  "@DisplayCurrencyMultiplier": "1",
                  "@RoomCurrencyMultiplier": "1",
                  "@ExchangeGMT": "2018-04-13T11:00:26.790"
                }
              }
            }
          ]
        }
      }
    }
  }
}

HTTP Request

GET https://api.travsrv.com/hotel.aspx

Query Parameters

Parameter Type Required Description
username string Yes Provided by QuintRooms
password string Yes Provided by QuintRooms
siteid integer Yes Provided by QuintRooms
timeout int No Maximum time to allow for searching gateways, measured in seconds. Default: 15
maxResults int No Number of results to return. Default: 20. Maximum: 50.
hotelIds int* No See below.
refHotelId int No See below.
latitude float No See below.
longitude float No See below.
radius float No See below.
rooms int Yes Number of rooms needed. When searching for more than one room, responses are based on the same room type and occupancy for every room. Maximum: 9 (best results with no more than 4).
inDate date Yes Desired check-in date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
outDate date Yes Desired check-out date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
adults int Yes Total number of adults. For instance, if rooms=2&adults=2, the search is for 1 room per adult. Maximum 8 adults per room. Uneven/odd numbers of adults/rooms will be rounded up to support legacy providers.
children int Yes Total number of children. Maximum: 8. Note: Some legacy providers do not honor the children parameter.
sortType string/enum No One of bestvalue, dealpercent, dealamount. Default: bestvalue. See below.
currency string No Default: USD. See common value map.
name string No Partial hotel name filter. E.g., passing "ilton" would return properties like "Hilton Garden Inn", etc.
propertyClasses int* No See common value map.
propertyAmenities int* No See common value map.
propertyTypes int* No See common value map.
gateway int* No See common value map.
ipAddress string Yes The IPv4 address of the person browsing your website. This is used for fraud checking and preventing booking failures.
userAgent string Yes The userAgent of the app/browser of the person browsing your website. This is used for fraud checking and preventing booking failures.
userLanguage string Yes The language of the browser of the person browsing your website. This is used for fraud checking and preventing booking failures.
locale string No Specifies the response language. Default: "US"
page int No Specifies the results page to return (when more than one page of results is available).
_type string/enum No The response format. One of xml or json. Default: json.

hotelIds, locationId, refHotelId, latitude+longitude+radius

One of the following is required:

sortType

Sort Type Description
bestvalue The default sort type, based on previous booking trends and manual sorting options.
dealpercent Sorts the hotel results based on prices last seen and returns the best percentage savings we have found historically for the specified dates.
dealamount Sorts the hotel results based on prices last seen and returns the best amount savings we have found historically and for those dates.

Hotel Detail

This call confirms availability with the supplier / gateway (requests to skip any caching they have in place) and retrieves cancellation and booking policies to display prior to the user placing a reservation.

This call is only available for a single hotel ID, room code, and rate code.

Responses will contain nightly rates, taxes and fees associated with the room, and hotel, payment, and cancellation policies which apply to the rate.

This request is rate limited as it is an expensive request to make. Responses with a 429 status code are in response to over use, should you exceed the rate limit.

Failed responses indicate the rate is sold out. Subsequent availability calls will flush and re-cache this hotel's rates.

All fees, penalties, and policies from this response must be shown to the user before creating a reservation.

All room prices are based on the number of adults per room specified in the request. A response containing an extra adult fee of 0 may simply mean the pricing is not available. Adding more than the specified number of adults to the room because the extra adult fee is 0 will likely incur a price difference when the guest arrives at the hotel. To avoid this, we advise not depend on the extra adult fee specified in the response when it comes to pricing.

curl "https://api.travsrv.com/hotel.aspx?\
username={API-USERNAME}\
&password={API-PASSWORD}\
&siteid={SITEID}\
&hotelIds=272393\
&inDate=2018-10-20\
&outDate=2018-10-22\
&maxResults=1\
&rooms=1\
&adults=2\
&children=0\
&gateway=51\
&ratePlanCode=F89648494F22FFE25A254AD1CE7D18FD27B862F1A609BD28872D9CD6DDA2E956B160BE3DB7EB0191B160BE3DB7EB01917EA3048807BEE935\
&roomCode=HRLM--_eJwFwcuaczAAANAHmgVRCRaziPRvxkyJadx3biWUfkFH9On_fc5BTlaYBzSSx4m6Iwz3cS_pRnKxCtkQzjqPQZm8Lh771NInUK3ri_pDYTzZL6lQtgl0H0_fOj_f5dRd1kT_pX8dtg_pq0LMTJYHFXNuPqi0PxdLuTjEAeTtKNfYZ3Gd3suIjMbm3_prdXk03gvS_pfpUJnL_poCL9kNoyIlpA2DURM1_fqAtELSKYuKh6e248vaSGk9hE9Dns4MYIncb5jC_fcZG_p_fOeSN3Z0N_fib2UqSpSLCPFgqPX2sQTP9rmXEv_ptXOMVOlVLoC_fujzlUz6tJvvFwUEonyP6njavHdzsVVF2EesNGSmILz3twKMBKm_fp7PK2XCcgV8ghjMc93ZaXrLkm622zmAYaTaPSItlgfYOcO2TSZ6hvwXlxw_fSAVdl9fv4Hwe6AJQ\
&ipAddress=127.0.0.1\
&userAgent=shell\
&userLanguage=en\
&_type=json"

The above command returns JSON structured like this (edited for brevity):

{
  "ArnResponse": {
    "Info": {
      "@SiteID": "{SITEID}",
      "@Username": "{API-USERNAME}",
      "@IpAddress": "24.113.225.28",
      "@TimeReceived": "2018-04-17T00:41:27.367",
      "@TimeCompleted": "2018-04-17T00:41:27.804",
      "@Version": "1.0.0.0",
      "@ServiceUrl": "http://api.travsrv.com/hotel.aspx?_type=json&adults=2&children=0&gateway=51&hotelIds=272393&inDate=2018-10-20&ipAddress=127.0.0.1&maxResults=1&outDate=2018-10-22&password={API-PASSWORD}&ratePlanCode=&roomCode=HRLM--_eJwFwcuaczAAANAHmgVRCRaziPRvxkyJadx3biWUfkFH9On_fc5BTlaYBzSSx4m6Iwz3cS_pRnKxCtkQzjqPQZm8Lh771NInUK3ri_pDYTzZL6lQtgl0H0_fOj_f5dRd1kT_pX8dtg_pq0LMTJYHFXNuPqi0PxdLuTjEAeTtKNfYZ3Gd3suIjMbm3_prdXk03gvS_pfpUJnL_poCL9kNoyIlpA2DURM1_fqAtELSKYuKh6e248vaSGk9hE9Dns4MYIncb5jC_fcZG_p_fOeSN3Z0N_fib2UqSpSLCPFgqPX2sQTP9rmXEv_ptXOMVOlVLoC_fujzlUz6tJvvFwUEonyP6njavHdzsVVF2EesNGSmILz3twKMBKm_fp7PK2XCcgV8ghjMc93ZaXrLkm622zmAYaTaPSItlgfYOcO2TSZ6hvwXlxw_fSAVdl9fv4Hwe6AJQ&rooms=1&siteid={SITEID}&userAgent=shell&userLanguage=en&username={API-USERNAME}",
      "@RequestID": "2999AB6A-6DB9-4FFF-9586-BBED51BB6108"
    },
    "Availability": {
      "@DisplayCurrency": "USD",
      "HotelAvailability": {
        "@InDate": "2018-10-20",
        "@OutDate": "2018-10-22",
        "@Rooms": "1",
        "@Adults": "2",
        "@Children": "0",
        "Hotel": {
          "@HotelID": "272393",
          "@IsEphemeral": "true",
          "RatePlan": [
            {
              "@Code": "F89648494F22FFE25A254AD1CE7D18FD27B862F1A609BD28872D9CD6DDA2E956B160BE3DB7EB0191B160BE3DB7EB01917EA3048807BEE935",
              "@Description": "Best Available",
              "@BuyerOnly": "false",
              "@Gateway": "41",
              "@CommissionStatus": "Commissionable",
              "@BalanceDueAtHotel": "false",
              "Room": {
                "@Code": "",
                "@Name": "Standard room",
                "@Description": "- 1 King Bed - Nonsmoking Room - Free Breakfast, Free Wifi, Fridge, Microwave",
                "@CurrencyCode": "USD",
                "@DisplayCurrencyMultiplier": "1",
                "@USDMultiplier": "1",
                "@ExchangeGMT": "2018-04-17T00:00:06.027",
                "@MaximumBookable": "99",
                "NightlyRate": [
                  {
                    "@Date": "2018-10-20",
                    "@Price": "114.44"
                  },
                  {
                    "@Date": "2018-10-21",
                    "@Price": "114.43"
                  }
                ],
                "Tax": {
                  "@Percent": "11.51",
                  "@Amount": "29.77"
                },
                "GatewayFee": {
                  "@Amount": "0.00"
                },
                "Total": {
                  "@Amount": "258.64",
                  "@IncludesBookingFee": "false"
                },
                "BookingFee": {
                  "@Amount": "0.00",
                  "@CurrencyCode": "USD",
                  "@DisplayCurrencyMultiplier": "1",
                  "@RoomCurrencyMultiplier": "1",
                  "@ExchangeGMT": "2018-04-17T00:00:06.027"
                }
              }
            }
          ]
        }
      }
    }
  }
}

HTTP Request

GET https://api.travsrv.com/hotel.aspx

Query Parameters

Parameter Type Required Description
username string Yes Provided by QuintRooms
password string Yes Provided by QuintRooms
siteid integer Yes Provided by QuintRooms
timeout int No Maximum time to allow for searching gateways, measured in seconds. Default: 15
hotelIds int No The particular hotel id for which more detail is being requested.
rooms int Yes Number of rooms needed. When searching for more than one room, responses are based on the same room type and occupancy for every room. Maximum: 9 (best results with no more than 4).
inDate date Yes Desired check-in date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
outDate date Yes Desired check-out date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
adults int Yes Total number of adults. For instance, if rooms=2&adults=2, the search is for 1 room per adult. Maximum 8 adults per room. Uneven/odd numbers of adults/rooms will be rounded up to support legacy providers.
children int Yes Total number of children. Maximum: 8. Note: Some legacy providers do not honor the children parameter.
currency string No Default: USD. See common value map.
ratePlanCode string Yes See common value map.
roomCode string Yes See common value map.
gateway int No See common value map.
ipAddress string Yes The IPv4 address of the person browsing your website. This is used for fraud checking and preventing booking failures.
userAgent string Yes The userAgent of the app/browser of the person browsing your website. This is used for fraud checking and preventing booking failures.
userLanguage string Yes The language of the browser of the person browsing your website. This is used for fraud checking and preventing booking failures.
locale string No Specifies the response language. Default: "US"
_type string/enum No The response format. One of xml or json. Default: json.

Hotel Reservation Creation

Generally speaking this call should be self explanatory. The parameters you will be sending in regarding the fees and costs will come from the detail request you likely would have just made. This is used to double confirm the costs the user was given will match up with the costs in the suppliers / gateways.

curl -X POST "https://api.travsrv.com/hotel.aspx?\
username={API-USERNAME}\
&password={API-PASSWORD}\
&siteid={SITEID}\
&rooms=1\
&hotelIds=10731\
&rooms=1\
&inDate=2007-03-30\
&outDate=2007-03-31\
&adults=2\
&children=1\
&ratePlanCode=AAA\
&roomCode=Z303AAA\
&guestFirstName=Eddie\
&guestLastName=Collins\
&[email protected]\
&guestPhoneCountry=1\
&guestPhoneArea=313\
&guestPhoneNumber=5555555\
&guestMessage=Smoking room requested.\
&addressAddress=123 main st\
&addressCity=detroit\
&addressRegion=MI\
&addressPostalCode=48234\
&addressCountryCode=US\
&roomCostPrice=98.95\
&roomCostTaxAmount=0.00\
&roomCostGatewayFee=0.00\
&roomCostTotalAmount=103.95\
&roomCostCurrencyCode=USD\
&bookingFeeAmount=5.00\
&creditCardType=VISA\
&creditCardNumber=4242424242424242\
&creditCardExpiration=01/21\
&creditCardCVV2=123\
&creditCardHolder=Eddie Collins\
&creditCardCity=Detroit\
&creditCardRegion=MI\
&creditCardPostalCode=48234\
&creditCardCountryCode=US\
&ipAddress=127.0.0.1\
&userAgent=shell\
&userLanguage=en\
&_type=json"

The above command returns JSON structured like this (edited for brevity):

{
  "ArnResponse": {
    "Info": {
      "@SiteID": "{SITEID}",
      "@Username": "{API-USERNAME}",
      "@IpAddress": "127.0.0.1",
      "@TimeReceived": "2007-03-30T22:14:28.484",
      "@TimeCompleted": "2007-03-30T22:14:32.046",
      "@Version": "1.0.0.0",
      "@ServiceUrl": "https://api.travsrv.com/hotel.aspx",
      "@RequestID": "D392A38B-79EC-4064-9C8F-E2C9AFC2EEE6"
    },
    "Reservation": {
      "@DisplayCurrency": "USD",
      "@ItineraryID": "678595",
      "@RecordLocator": "4fa67dc1-9d40-46f4-aa34-eb236117781c",
      "HotelReservation": {
        "@InDate": "2007-03-30",
        "@OutDate": "2007-03-31",
        "@Rooms": "1",
        "@Adults": "2",
        "@Children": "0",
        "@ReservationID": "860964",
        "@CustomerConfirmationNumber": "40156457",
        "Hotel": {
          "@HotelID": "10731",
          "RatePlan": {
            "@Code": "AAA",
            "@Description": "QUALIFYING MEMBER RATE: Aaa/CAA Rate 1 King Bed /1 Room Suite/Partial Room Divider /Microwave Refrigerator/Computer Hookup Guest Must Show Some Form Of Aaa Membership Rate Is Applicable To AAA Members Only And Only On Rooms They Stay In Themselv",
            "@Gateway": "4",
            "Room": {
              "@Code": "Z303AAA",
              "@Name": "Room",
              "@Description": "QUALIFYING MEMBER RATE: Aaa/CAA Rate 1 King Bed /1 Room Suite/Partial Room Divider /Microwave Refrigerator/Computer Hookup Guest Must Show Some Form Of Aaa Membership Rate Is Applicable To AAA Members Only And Only On Rooms They Stay In Themselv",
              "@CurrencyCode": "USD",
              "@DisplayCurrencyMultiplier": "1",
              "@USDMultiplier": "1",
              "@ExchangeGMT": "2007-03-30T17:15:04.627",
              "@MaximumBookable": "1",
              "NightlyRate": {
                "@Date": "2007-03-30",
                "@Price": "98.95"
              },
              "Tax": {
                "@Percent": "0.00",
                "@Amount": "0.00"
              },
              "GatewayFee": {
                "@Amount": "0.00"
              },
              "Total": {
                "@Amount": "98.95",
                "@IncludesBookingFee": "false"
              },
              "BookingFee": {
                "@Amount": "5.00",
                "@CurrencyCode": "USD",
                "@DisplayCurrencyMultiplier": "1",
                "@RoomCurrencyMultiplier": "1",
                "@ExchangeGMT": "2007-03-30T17:15:04.627"
              }
            },
            "Policy": {
              "ExtraPersonPrice": {
                "@Adult": "5.00",
                "@Child": "0.00",
                "@CurrencyCode": "USD",
                "@DisplayCurrencyMultiplier": "1",
                "@USDMultiplier": "1",
                "@ExchangeGMT": "2007-03-30T17:15:04.627"
              },
              "Guarantee": {
                "@Description": "RESERVATION WILL BE HELD TILL 4PM LOCAL TIME Booking fee is not included in the total and it's value is expressed in United States Dollars. Booking fee will be charged at the time of the booking."
              },
              "Cancel": {
                "@Description": "CANCEL BY 4 PM LOCAL HTL TIME DOA",
                "@LatestCancelTime": "2007-03-29T10:00:00.000",
                "@GMTOffSet": "0",
                "Fee": {
                  "@Amount": "0.00",
                  "@CurrencyCode": "USD",
                  "@DisplayCurrencyMultiplier": "1",
                  "@RoomCurrencyMultiplier": "1",
                  "@ExchangeGMT": "2007-03-30T17:15:04.627"
                },
                "Penalty": {
                  "@Amount": "98.95",
                  "@CurrencyCode": "USD",
                  "@DisplayCurrencyMultiplier": "1",
                  "@USDMultiplier": "1",
                  "@ExchangeGMT": "2007-03-30T17:15:04.627"
                }
              },
              "Deposit": {
                "@Description": "None"
              },
              "Payment": [
                {
                  "@Description": "Tax is not included in the total."
                },
                {
                  "@Description": "With your credit card information, the room(s) you book are guaranteed for late arrival."
                },
                {
                  "@Description": "This discount rate requires a $5.00 (USD) per room per night non-refundable service fee at time of reservation and will appear on your credit card under Alliance Reservations Network, Phoenix, AZ."
                }
              ],
              "Property": [
                {
                  "@Description": "Check-In Time",
                  "@Value": "150000"
                },
                {
                  "@Description": "Check-Out Time",
                  "@Value": "1100"
                }
              ]
            }
          }
        },
        "Guests": {
          "Primary": {
            "@Title": "",
            "@FirstName": "Eddie",
            "@MiddleName": "",
            "@LastName": "Collins",
            "@Message": "Smoking room requested.",
            "@Email": "[email protected]",
            "@PhoneCountry": "1",
            "@PhoneArea": "313",
            "@PhoneNumber": "5555555",
            "@PhoneExtension": "",
            "@AgeGroup": "Adult",
            "Address": {
              "@Address": "123 main st",
              "@City": "detroit",
              "@Region": "MI",
              "@PostalCode": "48234",
              "@CountryCode": "US",
              "@ExtraInfo": ""
            }
          }
        },
        "Service": {
          "@ExchangeGMT": "2007-03-30T17:15:04.627",
          "RoomCurrency": {
            "@CurrencyCode": "USD",
            "Cost": {
              "@Price": "98.95",
              "@TaxPercent": "0.00",
              "@TaxAmount": "0.00",
              "@GatewayFee": "0.00",
              "@BookingFee": "5.00",
              "@TotalAmount": "103.95",
              "@TotalAmountIncludesBookingFee": "true"
            },
            "Charge": {
              "@Paid": "5.00",
              "@Due": "98.95"
            }
          },
          "DisplayCurrency": {
            "@CurrencyCode": "USD",
            "Cost": {
              "@Price": "98.95",
              "@TaxPercent": "0.00",
              "@TaxAmount": "0.00",
              "@GatewayFee": "0.00",
              "@BookingFee": "5.00",
              "@TotalAmount": "103.95",
              "@TotalAmountIncludesBookingFee": "true"
            },
            "Charge": {
              "@Paid": "5.00",
              "@Due": "98.95"
            }
          },
          "USD": {
            "@CurrencyCode": "USD",
            "Cost": {
              "@Price": "98.95",
              "@TaxPercent": "0.00",
              "@TaxAmount": "0.00",
              "@GatewayFee": "0.00",
              "@BookingFee": "5.00",
              "@TotalAmount": "103.95",
              "@TotalAmountIncludesBookingFee": "true"
            },
            "Charge": {
              "@Paid": "5.00",
              "@Due": "98.95"
            }
          }
        }
      }
    }
  }
}

HTTP Request

POST https://api.travsrv.com/hotel.aspx?type=Reservation

Query Parameters

Parameter Type Required Description
username string Yes Provided by QuintRooms
password string Yes Provided by QuintRooms
siteid integer Yes Provided by QuintRooms
hotelIds int Yes The particular hotel id to reserve the room at.
agentRefNumber string No A reference ID you may use for your own tracking purposes. This is included in a reservation webhook, if used.
rooms int Yes Number of rooms needed. Maximum: 9.
inDate date Yes Desired check-in date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
outDate date Yes Desired check-out date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
adults int Yes Total number of adults. For instance, if rooms=2&adults=2, the search is for 1 room per adult. Maximum 8 adults per room. Uneven/odd numbers of adults/rooms will be rounded up to support legacy providers.
children int Yes Total number of children. Maximum: 8. Note: Some legacy providers do not honor the children parameter.
currency string No Default: USD. See common value map.
ratePlanCode string Yes See common value map.
roomCode string Yes See common value map.
gateway int yes See common value map.
campaignCode string No See below.
guestTitle string No Primary guest's title (e.g., "Mr.", "Mrs.", etc.)
guestFirstName string Yes Primary guest's first name
guestLastName string Yes Primary guest's last name.
guestEmail string Yes Primary guest's email address.
guestPhoneCountry string Yes Primary guest's phone number country code.
guestPhoneArea string Yes Primary guest's phone number area code.
guestPhoneNumber string Yes Primary guest's phone number (without country or area code)
guestPhoneExtension string No Primary guest's phone number extension.
guestMessage string No Guest special requests.
addressAddress string Yes Primary guest's address.
addressCity string Yes Primary guest's city.
addressRegion string Yes Primary guest's state / region.
addressPostalCode string Yes Primary guest's postal code.
addressCountryCode string Yes Primary guest's country code.
roomCostPrice decimal Yes See below.
roomCostTaxAmount decimal Yes See below.
roomCostGatewayFee decimal Yes See below.
roomCostTotalAmount decimal Yes See below.
roomCostCurrencyCode string Yes See below.
bookingFeeAmount decimal Yes See below.
bookingFeeCurrencyCode string See common value map for currency.
creditCardType string Yes Options: "AX" (AMEX), "CA" (MasterCard), "VI" (Visa), "DC" (Discover)
creditCardNumber string Yes Credit card number.
creditCardExpiration string Yes Credit card expiration date (format: MM/YY)
creditCardCVV2 int Yes Credit card CVV2 number.
creditCardHolder string Yes Name on credit card.
creditCardAddress string Yes Credit card billing address.
creditCardCity string Yes Credit card billing city.
creditCardRegion string Yes Credit card billing state / region.
creditCardPostalCode string Yes Credit card billing postal code.
creditCardCountryCode string Yes Credit card billing country code.
ipAddress string Yes The IPv4 address of the person browsing your website. This is used for fraud checking and preventing booking failures.
userAgent string Yes The userAgent of the app/browser of the person browsing your website. This is used for fraud checking and preventing booking failures.
userLanguage string Yes The language of the browser of the person browsing your website. This is used for fraud checking and preventing booking failures.
locale string No Specifies the response language. Default: "US"
_type string/enum No The response format. One of xml or json. Default: json.

campaignCode

You may pass in a string which you want to persist with the reservation. This is analagous to a "subid" and can be used for reconciling with your own marketing campaigns, or really anything else you want to do with it. The string you provide in this parameter will be added to the reservation being made and available in available reporting.

roomCostPrice

Send the exact same information received from the Hotel Detail Request (assuming the same currency designation in both requests. This is used to assure the expected reservation amounts match the actual prices the hotel has given.

roomCostTaxAmount

Send the exact same information received from the Hotel Detail Request (assuming the same currency designation in both requests. This is used to assure the expected reservation amounts match the actual prices the hotel has given.

roomCostGatewayFee

Send the exact same information received from the Hotel Detail Request (assuming the same currency designation in both requests. This is used to assure the expected reservation amounts match the actual prices the hotel has given.

roomCostTotalAmount

Send the exact same information received from the Hotel Detail Request (assuming the same currency designation in both requests. This is used to assure the expected reservation amounts match the actual prices the hotel has given.

roomCostCurrencyCode

Send the exact same information received from the Hotel Detail Request (assuming the same currency designation in both requests. This is used to assure the expected reservation amounts match the actual prices the hotel has given.

bookingFeeAmount

Send the exact same information received from the Hotel Detail Request (assuming the same currency designation in both requests. This is used to assure the expected reservation amounts match the actual prices the hotel has given.

Hotel Reservation Cancellation

To cancel a reservation you will need the reservationId and itineraryId returned in the reservation creation response.

curl -X POST "https://api.travsrv.com/hotel.aspx?\
username={API-USERNAME}\
&password={API-PASSWORD}\
&siteid={SITEID}\
&reservationId=915892\
&itineraryId=733525\
&ipAddress=127.0.0.1\
&userAgent=shell\
&userLanguage=en\
&_type=json"

The above command returns JSON structured like this (edited for brevity):

{
  "ArnResponse": {
    "Info": {
      "@SiteID": "{SITEID}",
      "@Username": "{API-USERNAME}",
      "@IpAddress": "127.0.0.1",
      "@TimeReceived": "2018-04-01T19:16:35.581",
      "@TimeCompleted": "2018-04-01T19:16:36.065",
      "@Version": "1.0.0.0",
      "@ServiceUrl": "https://api.travsrv.com/hotel.aspx",
      "@RequestID": "52AEC4E5-BBB9-44CB-BF09-CFEE7462FE97"
    },
    "Cancellation": {
      "@DisplayCurrency": "USD",
      "@ItineraryID": "733525",
      "HotelCancellation": {
        "@Success": "true",
        "@CancelGMT": "2018-04-01T19:16:36.065",
        "@CancellationID": "ARN342559-C",
        "@InDate": "2018-04-10",
        "@OutDate": "2018-04-12",
        "@Rooms": "1",
        "@Adults": "2",
        "@Children": "0",
        "@ReservationID": "915892",
        "@CustomerConfirmationNumber": "ARN342559",
        "Hotel": {
          "@HotelID": "219295",
          "RatePlan": {
            "@Code": "ARN",
            "@Description": "Internet Special",
            "@Gateway": "1",
            "Room": {
              "@Code": "3979",
              "@Name": "Double Room",
              "@Description": "Double Room - one double bed, satellite television, minibar, coffee maker, in-room safe, work desk, air conditioning, hairdryer, private bathroom, complimentary breakfast buffet. Rate includes transportation from the airport to the hotel. Please enter your Airline and Flight Number in the 'Other Special Requests' field when placing your reservation. Rates based on single or double occupancy. (Maximum 2 people)",
              "@CurrencyCode": "USD",
              "@DisplayCurrencyMultiplier": "1",
              "@USDMultiplier": "1",
              "@ExchangeGMT": "2018-04-01T17:15:03.443",
              "@MaximumBookable": "5",
              "NightlyRate": {
                "@Date": "2018-04-10",
                "@Price": "144.00"
              },
              "Tax": {
                "@Percent": "20.00",
                "@Amount": "28.80"
              },
              "GatewayFee": {
                "@Amount": "0.00"
              },
              "Total": {
                "@Amount": "172.80",
                "@IncludesBookingFee": "false"
              },
              "BookingFee": {
                "@Amount": "3.60",
                "@CurrencyCode": "USD",
                "@DisplayCurrencyMultiplier": "1",
                "@RoomCurrencyMultiplier": "1",
                "@ExchangeGMT": "2018-04-01T17:15:03.443"
              }
            },
            "Policy": {
              "ExtraPersonPrice": {
                "@Adult": "0.00",
                "@Child": "0.00",
                "@CurrencyCode": "USD",
                "@DisplayCurrencyMultiplier": "1",
                "@USDMultiplier": "1",
                "@ExchangeGMT": "2018-04-01T17:15:03.443"
              },
              "Guarantee": {
                "@Description": "No prices or hotel availability are guaranteed until full payment is received. Booking fee is not included in the total and it's value is expressed in United States Dollars. Booking fee will be charged at the time of the booking."
              },
              "Cancel": {
                "@Description": "You must cancel your reservation before 2:00 pm hotel time at least 1 day(s) prior to check-in or you will be charged for one night's room plus taxes & fees.",
                "@LatestCancelTime": "2018-04-08T14:00:00.000",
                "@GMTOffSet": "0",
                "Fee": {
                  "@Amount": "10.00",
                  "@CurrencyCode": "USD",
                  "@DisplayCurrencyMultiplier": "1",
                  "@RoomCurrencyMultiplier": "1",
                  "@ExchangeGMT": "2018-04-01T17:15:03.443"
                },
                "Penalty": {
                  "@Amount": "172.80",
                  "@CurrencyCode": "USD",
                  "@DisplayCurrencyMultiplier": "1",
                  "@USDMultiplier": "1",
                  "@ExchangeGMT": "2018-04-01T17:15:03.443"
                }
              },
              "Deposit": {
                "@Description": "Credit card is charged for the total cost of the room at the time of booking."
              },
              "Payment": [
                {
                  "@Description": "Tax is included in the total."
                },
                {
                  "@Description": "Total Room Cost includes tax recovery charge and fees."
                },
                {
                  "@Description": "This discount rate requires full payment of reservation at time of booking."
                },
                {
                  "@Description": "Payment will appear on your credit card under Alliance Reservations Network, Phoenix, AZ"
                },
                {
                  "@Description": "Rooms are guaranteed once full payment is received."
                }
              ],
              "Property": [
                {
                  "@Description": "Check-In Time",
                  "@Value": "1600"
                },
                {
                  "@Description": "Check-Out Time",
                  "@Value": "1100"
                }
              ]
            }
          }
        },
        "Guests": {
          "Primary": {
            "@Title": "",
            "@FirstName": "Mary",
            "@MiddleName": "",
            "@LastName": "Andersen",
            "@Message": "Non-smoking room requested.",
            "@Email": "[email protected]",
            "@PhoneCountry": "0047",
            "@PhoneArea": "0",
            "@PhoneNumber": "5555555",
            "@PhoneExtension": "",
            "@AgeGroup": "Adult",
            "Address": {
              "@Address": "Vaar Frue gt 2",
              "@City": "Zeud",
              "@Region": "",
              "@PostalCode": "7013",
              "@CountryCode": "NO",
              "@ExtraInfo": ""
            }
          }
        },
        "Service": {
          "@ExchangeGMT": "2018-04-01T17:15:03.443",
          "RoomCurrency": {
            "@CurrencyCode": "USD",
            "Cost": {
              "@Price": "144.00",
              "@TaxPercent": "20.00",
              "@TaxAmount": "28.80",
              "@GatewayFee": "0.00",
              "@BookingFee": "3.60",
              "@TotalAmount": "176.40",
              "@TotalAmountIncludesBookingFee": "true"
            },
            "Charge": {
              "@Paid": "176.40",
              "@Due": "0.00"
            }
          },
          "DisplayCurrency": {
            "@CurrencyCode": "USD",
            "Cost": {
              "@Price": "144.00",
              "@TaxPercent": "20.00",
              "@TaxAmount": "28.80",
              "@GatewayFee": "0.00",
              "@BookingFee": "3.60",
              "@TotalAmount": "176.40",
              "@TotalAmountIncludesBookingFee": "true"
            },
            "Charge": {
              "@Paid": "176.40",
              "@Due": "0.00"
            }
          },
          "USD": {
            "@CurrencyCode": "USD",
            "Cost": {
              "@Price": "144.00",
              "@TaxPercent": "20.00",
              "@TaxAmount": "28.80",
              "@GatewayFee": "0.00",
              "@BookingFee": "3.60",
              "@TotalAmount": "176.40",
              "@TotalAmountIncludesBookingFee": "true"
            },
            "Charge": {
              "@Paid": "176.40",
              "@Due": "0.00"
            }
          }
        }
      }
    }
  }
}

HTTP Request

POST https://api.travsrv.com/hotel.aspx?type=Cancellation

Query Parameters

Parameter Type Required Description
username string Yes Provided by QuintRooms
password string Yes Provided by QuintRooms
siteid integer Yes Provided by QuintRooms
reservationId string Yes The reservationId from the reservation creation response.
itineraryId string Yes The itineraryId from the reservation creation response.
_type string/enum No The response format. One of xml or json. Default: json.

Introduction

Welcome to the QuintRooms API! You can use our API to access QuintRooms API endpoints, which can get information on hundreds of thousands of hotels, their availability, details, as well as create and cancel reservations.

We have examples using a shell. You can view code examples in the dark area to the right, and (when languages become available) you can switch the programming language of the examples with the tabs in the top right.

Authentication

Basic Authentication

QuintRooms uses Basic Authentication to allow access to the API. You can request QuintRooms API credentials by partnering with us and emailing support.

All examples using CURL in this documentation specify the Basic Authentication header with the following: -H 'Authorization: Basic {BASE64-ENCODED-STRING}'

Please note that there are different domain names used in different endpoints described in this document. api.travsrv.com​ may use different credentials than ​groups.alliancereservations.com​. In some cases they may be the same, however. Your case is specific to your organization. Please contact support if you need assistnace with these credentials.

Single Sign On (SSO)

If you wish to integrate our closed user group portal/site with your own applications and user group, you can utilize our SSO functionality.

Process:

  1. Request a Site Admin to be added to your closed user group site (if you don't already have one)
  2. Get a token for the Site Admin
  3. Create a member using the Site Admin's token
  4. Use the member's token in queries on the user's behalf

Common value maps

currency

Supported currencies are located in our static database files. Request access if needed. Major 3-letter currency references (e.g., "USD", "CNY", "CAD", etc.) are supported.

gateway

Optional filter. This should be either left empty to return all sources of supply or specified by a single integer or comma separated list of integers.

Please contact us for an updated list of gateways.

propertyAmenities

Optional filter. This should either be an integer or a list of comma separated integers represented by the following:

Amenity ID Amenity
1 Airport shuttle
2 Social hour
3 Fitness center
4 Internet access
5 Free local calls
6 Complimentary breakfast
7 Pets allowed
8 Pool
9 Restaurant on-site
10 Kitchen / kitchenette

propertyClasses

Optional filter. This should either be an integer or a list of comma separated integers represented by the following.

Property Class Star Rating Description
1 1 Economy
2 2 Budget
3 3 Moderate
4 4 Premium
5 5 Luxury

propertyTypes

Optional filter. This should either be an integer or a list of comma separated integers represented by the following:

Property Type ID Property Type
1 Hotel
5 Motel
6 Resort
8 Extended stay property
9 Bed and breakfast
12 Vacation rental

roomCode / roomTypeId

This is the ArnResponse.Availability.HotelAvailability.Hotel.RatePlan.Room@Code value specified in the Availability Search results for the room type you are interested.

The terms roomCode and roomTypeId are synonymous.

ratePlanCode

This is the ArnResponse.Availability.HotelAvailability.Hotel.RatePlan@Code value specified in the Availability Search results for the rate plan you are interested in. It's simply the roomCode / roomTypeId with a prefixed "ARN" string in front of it.

HotelId / PropertyID

These two terms and their values are synonymous. You may use the values of these properties in a resulting hotelids parameter (comma-delimited).

Closed user groups

This section is only for those using the SSO Authentication feature and pertains to managing users and their authentication tokens.

You will need a Site Admin user in your closed user group site. If you don't already have one, please request one be added for your portal/site.

Get a Token for a Site Admin

This endpoint returns an auth token for an administrative user, valid for 1 hour, which may be used to create or update new (non-administrative) users and their tokens.

Along with the other common parameters to replace, additionally you must replace {ADMIN-USERNAME} with the username the Site Admin user uses to login to the site/portal.

curl "https://api.travsrv.com/MemberAPI.aspx?\
&siteid={SITEID}\
&token=ARNUSER-{ADMIN-USERNAME}" \
  -H 'Authorization: Basic {BASE64-ENCODED-STRING}'

The above command returns JSON structured like this:

{
    "MemberId": 918236,
    "Rewards": 0,
    "Points": 0,
    "RedemptionMultiplier": 1,
    "EarnMultiplier": 1,
    "Names": [
        {
            "FirstName": "Joe",
            "LastName": "Schmoe",
            "BirthDate": null,
            "Email": "[email protected]",
            "Address1": "",
            "Address2": null,
            "City": "",
            "State": null,
            "Country": null,
            "Postal": "",
            "Longitude": null,
            "Latitude": null,
            "HomePhone": null,
            "Referral": "",
            "ReferralId": "",
            "Password": null,
            "IsActive": true,
            "DeleteMember": false,
            "UpdateMemberUsername": false,
            "FullName": "Joe Schmoe"
        }
    ],
    "DebugData": "Retrieval Time: 3ms",
    "Error": null,
    "CurrentToken": "%2bzkm8%2feXTB11eE0%2fIoDmDQruFMVpaxVX7WHx%2bT%2fT%2bkUPwOEtWBPPI3mKIItze5fXabC*(&ehmkxTPbnCvp4llCDhxS37DyiKrSiaLHUeydpMnzU3Wc4AusJZHzaylHUNmDfhMs%2fpG39VDoeQ47T0wehE%2fVjWV%2f3bZ5qUARYGzAvLP884khJxCYWvopS5w1V%2bXtSWXQeBw4Sqvz9Fz4dr7Oc58%2bKLuF99D8t3VfJvOMt9y%2bGdUK87DAXzQ0kpmLbR1vUCMpmPx3KDBtapqow8RoYInQtICzMUV18%2fv8jp6wgg4GPFPfy7X3n8GcMyj3HPfibBqlP054zu3c%2fmnk07EvtFpeHy4uAR6CEIg7wZa52I3xBJQeaQwKtp6Ju8Y4FbcHsewPPlSMpkSFHFGSeyK62U4PsPEWMEWwlUR28gZ0VcBBriuySb5pwZ8OHqBmCMr9NPsywSnqBRkI22cihTHmDL5wKvSkPAmxuf0Y3xmG3E9Pe7HTHhVD%2b7K2pE5iaQwtYD5H3yoTHwQNxDqmGuFQIVEZxjysyVNM1ddfqNnVenT%2fT1RMZpoPOIEQKzMKldPBn67UTYDNs489XbwOxg86WqYNM5il%2fv79ebducj8htsAViLxuT7sFp%2fVGvUdkcP3bN3%2ftqNg",
    "TransactionResponse": null,
    "MetaTag": "{\"MemberId\":918236,\"Rewards\":0,\"Points\":0,\"RedemptionMultiplier\":1.0,\"EarnMultiplier\":1.0,\"Names\":[{\"FirstName\":\"Joe\",\"LastName\":\"Schmoe\",\"BirthDate\":null,\"Email\":\"[email protected]\",\"Address1\":\"\",\"Address2\":null,\"City\":\"\",\"State\":null,\"Country\":null,\"Postal\":\"\",\"Longitude\":null,\"Latitude\":null,\"HomePhone\":null,\"Referral\":\"\",\"ReferralId\":\"\",\"Password\":null,\"IsActive\":true,\"DeleteMember\":false,\"UpdateMemberUsername\":false,\"FullName\":\"Joe Schmoe\"}],\"DebugData\":null,\"Error\":null,\"CurrentToken\":null,\"TransactionResponse\":null,\"MetaTag\":null,\"MemberUsername\":\"[email protected]\",\"MemberProvider\":\"ReserveTravel\",\"IsArnProvider\":true,\"AdditionalInfo\":null,\"MemberType\":\"Wholesale\"}",
    "MemberUsername": "[email protected]",
    "MemberProvider": "ReserveTravel",
    "IsArnProvider": true,
    "AdditionalInfo": null,
    "MemberType": "Wholesale"
}

HTTP Request

GET https://api.travsrv.com/MemberAPI.aspx

Query Parameters

Parameter Type Required Description
siteid integer Yes Provided by QuintRooms
token string Yes ARNUSER- concatonated with the Site Admin's username

Create a New Member

Using the Site Admin's token you may create a new member by POSTing a URI encoded JSON string to this endpoint. Calling this endpoint successfully generates a member token, found in the CurrentToken property, which you should save for them if you want to use the "Get a Member by Token" call.

You may notice this call is exactly the same as the "Update an Existing Member" call.

The JSON data to stringify and encode may look something like this (not yet encoded):

{
    "Points": 100,
    "Names": [{
        "ReferralId": "777",
        "FirstName": "Testme",
        "LastName": "Tester",
        "Email": "[email protected]",
        "Address1": "123 Main Street",
        "HomePhone": "5551231212"
    }]
}

Encoded and POSTed via curl:

curl -X POST \
  https://api.travsrv.com/MemberAPI.aspx \
  -H 'Authorization: Basic {BASE64-ENCODED-STRING}' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'siteid={SITEID}&token={ADMIN-TOKEN}&memberData=%7B%22Points%22%3A100%2C%22Names%22%3A%5B%7B%22ReferralId%22%3A%22777%22%2C%22FirstName%22%3A%22Testme%22%2C%22LastName%22%3A%22Tester%22%2C%22Email%22%3A%22mytestuser1%40gmail.com%22%2C%22Address1%22%3A%22123%20Main%20Street%22%2C%22HomePhone%22%3A%225551231212%22%7D%5D%7D'

The above command returns JSON structured like this:

{
    "MemberId": 54321,
    "Rewards": 0,
    "Points": 100,
    "RedemptionMultiplier": 1.0,
    "EarnMultiplier": 1.0,
    "Names": [{
        "FirstName": "Testme",
        "LastName": "Tester",
        "BirthDate": null,
        "Email": "[email protected]",
        "Address1": "123 Main Street",
        "Address2": null,
        "City": null,
        "State": null,
        "Country": null,
        "Postal": null,
        "Longitude": null,
        "Latitude": null,
        "HomePhone": "5551231212",
        "Referral": null,
        "ReferralId": "777",
        "Password": null,
        "IsActive": true,
        "DeleteMember": false,
        "UpdateMemberUsername": false,
        "FullName": "Testme Tester"
    }],
    "DebugData": " Successful creation of Member RT-12345-777",
    "Error": null,
    "CurrentToken": "E7MUlbdRdlq2RwSs8V4%2fhza25Xwca%2fZLodi%2faddmPl%2bJfpCU7VovYjoSKaMk34PvkSDpD1mqvezzQG0abXzuXP1%2baaiIKCLw7ehGaiI7BNI7Pb%2fYK%2fGJf4fCxKCz5EodA79iweA6gc2nCEOdWmkarTuy4Cd%2f5WtNkU043rF42sshCKGkg%2bIavKgJ6emdL7msPJRykM2hf%2fmHjdDOV%2b7jtuOHpk5bAVVIc5jhUqmqJMa5908EK0VoX1OUT60SkDcw2YLBeXEg6sYPu1Q7mTPc5VUhJ%2b6C6wHM08eOKMrKt6LNRxoB0kXcPyVS1azt1LR48yAegw%2fKXPbdgrCBycjsDedm0ItP9SmW1C6Byw4nt5zivxf%2f0ZIMF07wtZ4JhWVqGuhetKPDE3ddzOLRPyjNgetWddHqoq8Tba%2bKWDcIADYnqgH5NVdVSKvyH5VWY3vMHyhlZQiW23z1a6lZReASYfMMycNfDU2X4EhDOEa0tvUYajpsRlnDIkNcLjxT4KPyrZhl5tVsHECCY0Sasy%2f6zh9ce%2b3HE%2bOEtux%2bEHKfBWrkzwt1vpwyn%2fnXzVd%2bQumpQLw5DOZ2DltHZs%2bfmQ96MoMrBgSx8jS%2bQkR3NQjGAysUOqXK%2fAl38ryHzGe0nSeMkLo5BRYEgiEJK%2bftnZqsEQbZC98E8Fyt2zMGiofGQrR1i5v3gRoOCfqjNYJQAft4ru6GCR5kpm0CsvVvOnKmnA%3d%3d",
    "TransactionResponse": "true",
    "MetaTag": null,
    "MemberUsername": "RT-12345-777",
    "MemberProvider": null,
    "IsArnProvider": true,
    "MemberType": "Member"
}

HTTP Request

POST https://api.travsrv.com/MemberAPI.aspx

memberData JSON Object Properties

Parameter Type Required Description
siteid integer Yes Provided by QuintRooms
token string Yes Site Admin Token
Points integer No Number of points for the user
Names string Yes Stringified, URI encoded JSON array of JSON object containing the params below
ReferralId string Yes The id of the user in your system
FirstName string Yes The user's first name
LastName string Yes The user's last name
Email string Yes The email address of the user
Address1 string No The user's full address
HomePhone string No The user's phone number

Update an Existing Member

Using the Site Admin's token you may update an existing member by POSTing a URI encoded JSON string to this endpoint. Successfully calling this endpoint also generates a new member token for the user in the CurrentToken property, which you should save for them if you want to use the "Get a Member by Token" call.

You may notice this call is exactly the same as the "Create a New Member" call.

The JSON data to stringify and encode may look something like this (not yet encoded):

{
    "Points": 100,
    "Names": [{
        "ReferralId": "777",
        "FirstName": "Testme",
        "LastName": "Tester",
        "Email": "[email protected]",
        "Address1": "123 Main Street",
        "HomePhone": "5551231212"
    }]
}

Encoded and POSTed via curl:

curl -X POST \
  https://api.travsrv.com/MemberAPI.aspx \
  -H 'Authorization: Basic {BASE64-ENCODED-STRING}' \
  -H 'Cache-Control: no-cache' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'siteid={SITEID}&token={ADMIN-TOKEN}&memberData=%7B%22Points%22%3A100%2C%22Names%22%3A%5B%7B%22ReferralId%22%3A%22mytestuser1%40gmail.com%22%2C%22FirstName%22%3A%22Testme%22%2C%22LastName%22%3A%22Tester%22%2C%22Email%22%3A%22mytestuser1%40gmail.com%22%2C%22Address1%22%3A%22123MainStreet%22%2C%22HomePhone%22%3A%225551231212%22%7D%5D%7D'

The above command returns JSON structured like this:

{
    "MemberId": 54321,
    "Rewards": 0,
    "Points": 100,
    "RedemptionMultiplier": 1.0,
    "EarnMultiplier": 1.0,
    "Names": [{
        "FirstName": "Testme",
        "LastName": "Tester",
        "BirthDate": null,
        "Email": "[email protected]",
        "Address1": "123 Main Street",
        "Address2": null,
        "City": null,
        "State": null,
        "Country": null,
        "Postal": null,
        "Longitude": null,
        "Latitude": null,
        "HomePhone": "5551231212",
        "Referral": null,
        "ReferralId": "777",
        "Password": null,
        "IsActive": true,
        "DeleteMember": false,
        "UpdateMemberUsername": false,
        "FullName": "Testme Tester"
    }],
    "DebugData": " Successful Existing Member RT-12345-777",
    "Error": null,
    "CurrentToken": "E7MUlbdRdlq2RwSs8V4%2fhza25Xwca%2fZLodi%2faddmPl%2bJfpCU7VovYjoSKaMk34PvkSDpD1mqvezzQG0abXzuXP1%2baaiIKCLw7ehGaiI7BNI7Pb%2fYK%2fGJf4fCxKCz5EodA79iweA6gc2nCEOdWmkarTuy4Cd%2f5WtNkU043rF42sshCKGkg%2bIavKgJ6emdL7msPJRykM2hf%2fmHjdDOV%2b7jtuOHpk5bAVVIc5jhUqmqJMa5908EK0VoX1OUT60SkDcw2YLBeXEg6sYPubiUEmc223Z4JhWVqGuhetKPDE3ddzOLRPyjNgetWddHqoq8Tba%2bKWDcIADYnqgH5NVdVSKvyH5VWY3vMHyhlZQiW23z1a6lZReASYfMMycNfDUhDOEa0tvUYajpsRlnDIkNcLjxT4KPyrZhl5tVsHECCY0Sasy%2f6zh9ce%2b3HE%2bOEtux%2bEHKfBWrkzwt1vpwyn%2fnXzVd%2bQumpQLw5DOZ2DltHZs%2bfmQ96MoMrBgSx8jS%2bQkR3NQjGAysUOqXKn83CdkKJDjeGe0nSeMkLo5BRYEgiEJK%2bftnZqsEQbZC98E8Fyt2zMGiofGQrR1i5v3gRoOCfqjNYJQAft4ru6GCR5kpm0CsvVvOnKmnA%3d%3d",
    "TransactionResponse": "true",
    "MetaTag": null,
    "MemberUsername": "RT-12345-777",
    "MemberProvider": null,
    "IsArnProvider": true,
    "MemberType": "Member"
}

HTTP Request

POST https://api.travsrv.com/MemberAPI.aspx

memberData JSON Object Properties

Parameter Type Required Description
siteid integer Yes Provided by QuintRooms
token string Yes Site Admin Token
Points integer No Number of points for the user
Names string Yes Stringified, URI encoded JSON array of JSON object containing the params below
ReferralId string Yes The id of the user in your system
FirstName string Yes The user's first name
LastName string Yes The user's last name
Email string Yes The email address of the user
Address1 string No The user's full address
HomePhone string No The user's phone number
DeleteMember boolean No Set to true to deactivate a member
ReactivateMember boolean No Set to true to reactivate a deactivated member

Get a Member by Token

This endpoint retrieves a member using their member token. Successfully calling this endpoint also generates a new member token for the user in the CurrentToken property, which you should save for them if you want to call this endpoint again in the future.

curl "https://api.travsrv.com/MemberAPI.aspx?\
&siteid={SITEID}\
&token={MEMBER-TOKEN}" \
  -H 'Authorization: Basic {BASE64-ENCODED-STRING}'

The above command returns JSON structured like this:

{
    "MemberId": 54321,
    "Rewards": 0,
    "Points": 0,
    "RedemptionMultiplier": 1.0,
    "EarnMultiplier": 1.0,
    "Names": [{
        "FirstName": "Testme",
        "LastName": "Tester",
        "BirthDate": null,
        "Email": "[email protected]",
        "Address1": "123 Main Street",
        "Address2": null,
        "City": null,
        "State": null,
        "Country": null,
        "Postal": null,
        "Longitude": null,
        "Latitude": null,
        "HomePhone": "5551231212",
        "Referral": null,
        "ReferralId": "777",
        "Password": null,
        "IsActive": true,
        "DeleteMember": false,
        "UpdateMemberUsername": false,
        "FullName": "Testme Tester"
    }],
    "DebugData": " Successful creation of Member RT-12345-777",
    "Error": null,
    "CurrentToken": "E7MUlbdRdlq2RwSs8V4%2fhza25Xwca%2fZLodi%2faddmPl%2bJfpCU7VovYjoSKaMk34PvkSDpD1mqvezzQG0abXzuXP1%2baaiIKCLw7ehGaiI7BNI7Pb%2fYK%2fGJf4fCxKCz5EodA79iweA6gc2nCEOdWmkarTuy4Cd%2f5WtNkU043rF42sshCKGkg%2bIavKgJ6emdL7msPJRykM2hf%2fmHjdDOV%2b7jtuOHpk5bAVVIc5jhUqmqJMa5908EK0VoX1OUT60SkDcw2YLBeXEg6sYPu1Q7mTPc5VUhJ%2b6C6wHM08eOKMrKt6LNRxoB0kXcPyVS1azt1LR48yAegw%2fKXPbdgrCBycjsDedm0ItP9SmW1C6Byw4nt5zivxf%2f0ZIMF07wtZ4JhWVqGuhetKPDE3ddzOLRPyjNgetWddHqoq8Tba%2bKWDcIADYnqgH5NVdVSKvyH5VWYyhlZQiW23z1a6lZReASYfMMycNfDU2X4EhDOEa0tvUYajpsRlnDIkNcLjxT4KPyrZhl5tVsHECCY0Sasy%2f6zh9ce%2b3HE%2bOEtux%2bEHKfBWrkzwt1vpwyn%2fnXzVd%2bQumpQLw5DOZ2DltHZs%2bfmQ96MoMrBgSx8jS%2bQkR3NQjGAysUOqXK%2fAl38ryHzGe0nSeMkLo5BRYEgiEJK%2bftnZqsEQbZC98E8Fyt2zMGiofGQrR1i5v3gRoOCfqjNYJQAft4ru6GCR5kpm0CsvVvOnKmnA%3d%3d",
    "TransactionResponse": "true",
    "MetaTag": null,
    "MemberUsername": "RT-12345-777",
    "MemberProvider": null,
    "IsArnProvider": true,
    "MemberType": "Member"
}

HTTP Request

GET https://api.travsrv.com/MemberAPI.aspx

Query Parameters

Parameter Type Required Description
siteid integer Yes Provided by QuintRooms
token string Yes Token for the member (not Site Admin's)

Create/Update a Coupon/Code

"Coupons" or "Codes" can be used to give users a pre-defined number of "Points" (in API requests/responses). The points (1 point = 1 USD) may be used to discount select purchases within a closed user group. The codes may either be used during checkout, or easier, added to a user account and automatically applied at checkout for the user for the maximum discount allowed for that transaction.

This endpoint creates a single coupon/code.

The JSON data to stringify and encode may look something like this (not yet encoded):

{
  "Code": "123-4567890",
  "SiteId": 12345,
  "Data": {
    "IsActive": true,
    "IsUsed": false,
    "Discount": 500,
    "MinNights": 1,
    "ExpiresOn": "2018-11-06",
    "MaxUses": 1,
    "IsPercentage": false,
    "Terms": ""
  }
}
curl "https://api.travsrv.com/Coupon.aspx?\
&siteid={SITEID}\
&type=save\
&coupon=%7B%22Code%22%3A%22123-4567890%22%2C%22SiteId%22%3A12345%2C%22Data%22%3A%7B%22IsActive%22%3Atrue%2C%22IsUsed%22%3Afalse%2C%22Discount%22%3A500%2C%22MinNights%22%3A1%2C%22ExpiresOn%22%3A%222018-11-06%22%2C%22MaxUses%22%3A1%2C%22IsPercentage%22%3Afalse%2C%22Terms%22%3A%22%22%7D%7D" \
  -H 'Authorization: Basic {BASE64-ENCODED-STRING}'

The above command returns JSON structured like this:

{
  "IsValid": true,
  "Code": "123-4567890",
  "SiteId": 12345,
  "Message": "Is Valid For Up To 500 Off Purchase",
  "Data": {
    "IsActive": true,
    "IsUsed": false,
    "Discount": 500.0,
    "MinNights": 1,
    "ExpiresOn": "1/1/2018",
    "MaxUses": 1,
    "IsPercentage": false,
    "Terms": null
  }
}

Codes which have been used would return something like this:

{
  "IsValid": false,
  "Code": "123-4567890",
  "SiteId": 12345,
  "Message": "Is Already Used",
  "Data": {
    "IsActive": true,
    "IsUsed": true,
    "Discount": 500.0,
    "MinNights": 1,
    "ExpiresOn": "11/6/2018",
    "MaxUses": 1,
    "IsPercentage": false,
    "Terms": null
  }
}

HTTP Request

POST https://api.travsrv.com/Coupon.aspx

Query Parameters

Parameter Type Required Description
siteid integer Yes Provided by QuintRooms
type string Yes save
coupon string Yes Stringified, URI encoded JSON object containing the params below
Code string Yes The code string you want generated
SiteId integer Yes Provided by QuintRooms
Data object Yes JSON object containing the params below
IsActive boolean Yes true if not expired and not redeemed
IsUsed boolean Yes true if not yet redeemed
Discount decimal Yes Amount the coupon is worth
MinNights integer Yes Min requirement of nights to be able to use the code
ExpiresOn date Yes Expiration date of this code (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
MaxUses integer Yes Maximum number of times this code may be used
IsPercentage boolean Yes true if Discount is a percentage of reservation amount. false if Discount is a real amount (1 = 1 USD).
Terms string Yes Set to "".

Get a Coupon/Code

"Coupons" or "Codes" can be used to give users a pre-defined number of "Points" (in API requests/responses). The points (1 point = 1 USD) may be used to discount select purchases within a closed user group. The codes may either be used during checkout, or easier, added to a user account and automatically applied at checkout for the user for the maximum discount allowed for that transaction.

This endpoint retrieves the data related to a single coupon/code. The response will validate the code is legitimate, whether the code has been used already or not, the expiration date, and the discount (in points) that is available.

curl "https://api.travsrv.com/Coupon.aspx?\
&siteid={SITEID}\
&type=get\
&couponcode={COUPON-CODE}" \
  -H 'Authorization: Basic {BASE64-ENCODED-STRING}'

The above command returns JSON structured like this:

{
  "IsValid": true,
  "Code": "123-4567890",
  "SiteId": 12345,
  "Message": "Is Valid For Up To 500.00 Off Purchase",
  "Data": {
    "IsActive": true,
    "IsUsed": false,
    "Discount": 500.0,
    "MinNights": 1,
    "ExpiresOn": "11/6/2018",
    "MaxUses": 1,
    "IsPercentage": false,
    "Terms": null
  }
}

Codes which have been used would return something like this:

{
  "IsValid": false,
  "Code": "114-4567890",
  "SiteId": 12345,
  "Message": "Is Already Used",
  "Data": {
    "IsActive": true,
    "IsUsed": true,
    "Discount": 500.0,
    "MinNights": 1,
    "ExpiresOn": "11/6/2018",
    "MaxUses": 1,
    "IsPercentage": false,
    "Terms": null
  }
}

HTTP Request

GET https://api.travsrv.com/Coupon.aspx

Query Parameters

Parameter Type Required Description
siteid integer Yes Provided by QuintRooms
type string Yes get (in this case), or redeem (see below)
couponcode string Yes The code to lookup

Redeem a Coupon/Code

"Coupons" or "Codes" can be used to give users a pre-defined number of "Points" (in API requests/responses). The points (1 point = 1 USD) may be used to discount select purchases within a closed user group. The codes may either be used during checkout, or easier, added to a user account and automatically applied at checkout for the user for the maximum discount allowed for that transaction.

This endpoint sets a single coupon/code to isValid: false, effectively indicating it's been used and should not be able to be used again. If the code is valid and the call is successfull, the response will look the same as if you were calling a type=get (as specified above under "Get a Coupon/Code"). Successive calls to either type=get or type=redeem will return a response indicating the code is no longer valid.

curl "https://api.travsrv.com/Coupon.aspx?\
&siteid={SITEID}\
&type=redeem\
&couponcode={COUPON-CODE}" \
  -H 'Authorization: Basic {BASE64-ENCODED-STRING}'

The above command returns JSON structured like this:

{
  "IsValid": true,
  "Code": "123-4567890",
  "SiteId": 12345,
  "Message": "Is Valid For Up To 500.00 Off Purchase",
  "Data": {
    "IsActive": true,
    "IsUsed": false,
    "Discount": 500.0,
    "MinNights": 1,
    "ExpiresOn": "11/6/2018",
    "MaxUses": 1,
    "IsPercentage": false,
    "Terms": null
  }
}

Subsequent calls will return the following:

{
  "IsValid": false,
  "Code": "123-4567890",
  "SiteId": 12345,
  "Message": "Is Already Used",
  "Data": {
    "IsActive": true,
    "IsUsed": true,
    "Discount": 500.0
    "MinNights": 1,
    "ExpiresOn": "11/6/2018",
    "MaxUses": 1,
    "IsPercentage": false,
    "Terms": null
  }
}

HTTP Request

GET https://api.travsrv.com/Coupon.aspx

Query Parameters

Parameter Type Required Description
siteid integer Yes Provided by QuintRooms
type string Yes get (see above), or redeem (in this case)
couponcode string Yes The code to invalidate

Inventory on hold

This section is only for those using the SSO Authentication feature and pertains to managing contracted inventory, specifically that which has been placed "on hold".

You will need a Site Admin user in your closed user group site. If you don't already have one, please request one be added for your portal/site.

To book a reservation for any held room type, simply use the roomTypeId identfier when creating a reservation.

Create a Hold

You may retrieve a list of the room types (you'll need the room code / room type id) available to put on hold via an Availability Search and specifying gateway 16 (contracted inventory) (authorized, as mentioned above, using a basic authentication header) to this endpoint.

NOTE: When setting the POST form-data Parameters (seen below), be sure the number of values in the comma separated list specified for "roomCountPerNight" match the number of nights (inclusive) specified in the "blockStartDate" / "blockEndDate" range. Further, the "blockStartDate" (ie, check-in date) must be > today's date. "blockEndDate" (ie, the day before the check-out date) must be > "blockStartDate". "blockReleaseDate" must be < "blockStartDate" and > today.

For instance, (assuming today's date is < Nov 30, 2019) if the "blockStartDate" = "12/01/2019" and the "blockEndDate" = "12/03/2019", the "roomCountPerNight" should have 3 values, like "1,1,1". The "blockReleaseDate" must be prior or equal to "11/30/2019".

Additionally, the "blockStartDate" and "blockEndDate" need to be within the parent room type's block dates or the system won't be able to allocate rooms from the parent to hold block.

curl -X POST \
"https://groups.alliancereservations.com/services/external/roomtypesonhold?&roomTypeId={ROOM-TYPE-ID}&createHold" \
-H 'Authorization: Basic {BASE64-ENCODED-STRING}'

The above command returns JSON structured like this:

{
    "SiteId": 12345,
    "EventId": 54321,
    "EventName": "2018 Test Event",
    "EventStartDate": "2022-02-01T00:00:00",
    "RoomTypeId": 111111,
    "PropertyInfoLink": "https://groups.alliancereservations.com/services/external/property?id=56789",
    "Description": "King\r\n\r\nThis is a test room. Reservatinons will not be honored.\r\n\r\nNo breakfast included. Rate based on occupancy of 1 persons per room.",
    "GroupName": "Some new block description",
    "MaxOccupancy": 2,
    "BaseOccupancy": null,
    "AdultExtraCharge": null,
    "ChildExtraCharge": 0,
    "ExtraAdultAge": null,
    "ReleaseDate": "2022-01-17T00:00:00",
    "PaymentPolicy": "",
    "CancellationPolicy": "Cancellation must be received 2 day(s) prior to day of arrival or will result in a penalty of 1 night's room plus tax",
    "Contacts": [
        {
            "FullName": "Eddie Collins",
            "Email": "[email protected]",
            "DaytimePhone": "888-555-1212",
            "EveningPhone": null,
            "IsPrimary": true
        }
    ],
    "BlockDates": [
        {
            "BlockDate": "2022-02-02T00:00:00",
            "Rate": 5,
            "MinimumNights": 1,
            "QuantityAvailable": 1
        },
        {
            "BlockDate": "2022-02-03T00:00:00",
            "Rate": 5,
            "MinimumNights": 1,
            "QuantityAvailable": 2
        }
    ]
}

HTTP Request

POST https://groups.alliancereservations.com/services/external/roomtypesonhold

Query Parameters

Parameter Type Required Description
roomTypeId integer Yes ArnResponse.Availability.HotelAvailability.Hotel.RatePlan.Room@Code from an Availability Search (parent block). This is specifying the room from the parent block that you want to create a hold (sub-block) out of.
createHold void Yes Specifies this is a create action

POST form-data Parameters

Parameter Type Required Description
blockDescription string Yes Name this on hold block (anything you would like)
roomCountPerNight integer Yes Comma delimited list of the number of rooms to hold for each night. (ie., "1,1,1" would be 1 room for all 3 nights of the date range)
blockStartDate date Yes Start date of held rooms (ie., check-in date) (format: mm/dd/yyyy) (must be > today's date)
blockEndDate date Yes Last night to hold (ie., the date prior to the check-out date) (format: mm/dd/yyyy) (must be > blockStartDate)
blockReleaseDate date Yes Date when hold will expire (must be > today and < blockStartDate).

Get All Holds

You may retrieve a list of the room types on hold via GET request, (authorized, as mentioned above, using a basic authentication header) to this endpoint. Calling this endpoint successfully will return an array of API endpoing URIs for each room type currently on hold.

You may use the resulting URI (and the roomTypeId specified within) to retrieve specific hold / room type information.

curl -X GET \
"https://groups.alliancereservations.com/services/external/roomtypesonhold?&siteId={SITE-ID}" \
-H 'Authorization: Basic {BASE64-ENCODED-STRING}'

The above command returns JSON structured like this:

{
    "TotalOnHoldRoomTypes":4,
    "OnHoldRoomTypes":[
        "https://groups.alliancereservations.com/services/external/roomtypesonhold?roomTypeId=1111",
        "https://groups.alliancereservations.com/services/external/roomtypesonhold?roomTypeId=2222",
        "https://groups.alliancereservations.com/services/external/roomtypesonhold?roomTypeId=3333",
        "https://groups.alliancereservations.com/services/external/roomtypesonhold?roomTypeId=4444"
    ]
}

HTTP Request

GET https://groups.alliancereservations.com/services/external/roomtypesonhold

Query Parameters

Parameter Type Required Description
siteId integer No Provided by QuintRooms
affiliateId integer No Provided by QuintRooms
includeExpired void No Response includes expired holds

Get Hold by Room ID

You may retrieve a specific hold / room type via GET request, (authorized, as mentioned above, using a basic authentication header) to this endpoint. Calling this endpoint successfully will return a specific hold / room type information.

Included in a successful response will be a PropertyInfoLink which is the API endpoint URI for the specific property information this hold / room type is related to.

curl -X GET \
"https://groups.alliancereservations.com/services/external/roomtypesonhold?&roomTypeId={ROOM-TYPE-ID}" \
-H 'Authorization: Basic {BASE64-ENCODED-STRING}'

The above command returns JSON structured like this:

{
    "SiteId": 12345,
    "EventId": 67890,
    "EventName": "My Crazy Awesome Event",
    "EventStartDate": "2018-02-09T00:00:00",
    "RoomTypeId": 888888,
    "PropertyInfoLink": "https://groups.alliancereservations.com/services/external/property?id=987654",
    "Description": "2 Double beds with mini-fridge, microwave, coffee maker, and 32-inch TV. No breakfast included. Rate based on occupancy of 4 persons per room. You must be at least 21 years old to check into room.",
    "GroupName": "BandMembers-Doubles",
    "MaxOccupancy": 4,
    "BaseOccupancy": null,
    "AdultExtraCharge": 0,
    "ChildExtraCharge": 0,
    "ExtraAdultAge": null,
    "ReleaseDate": "2018-01-21T00:00:00",
    "PaymentPolicy": "",
    "CancellationPolicy": "You must change or cancel your reservation before 2:00 pm hotel time at least 3 day(s) prior to check-in or you will be charged for one night's room plus taxes & fees unless otherwise noted in the room description.",
    "Contacts": [
        {
            "FullName": "Donna Summers",
            "Email": "[email protected]",
            "DaytimePhone": "(888) 555-1212",
            "EveningPhone": "(888) 555-1212",
            "IsPrimary": true
        }
    ],
    "BlockDates": [
        {
            "BlockDate": "2018-02-08T00:00:00",
            "Rate": 129,
            "MinimumNights": 1,
            "QuantityAvailable": 0
        },
        {
            "BlockDate": "2018-02-09T00:00:00",
            "Rate": 129,
            "MinimumNights": 1,
            "QuantityAvailable": 0
        },
        {
            "BlockDate": "2018-02-10T00:00:00",
            "Rate": 129,
            "MinimumNights": 1,
            "QuantityAvailable": 0
        },
        {
            "BlockDate": "2018-02-11T00:00:00",
            "Rate": 129,
            "MinimumNights": 1,
            "QuantityAvailable": 0
        }
    ]
}

HTTP Request

GET https://groups.alliancereservations.com/services/external/roomtypesonhold

Query Parameters

Parameter Type Required Description
roomTypeId integer Yes The hold / room type id

Get Property Info

You may retrieve specific property information via GET request, (authorized, as mentioned above, using a basic authentication header) to this endpoint. Calling this endpoint successfully will return a specific hold / room type's associated property information.

curl -X GET \
"https://groups.alliancereservations.com/services/external/property?id={PROPERTY-ID}" \
-H 'Authorization: Basic {BASE64-ENCODED-STRING}'

The above command returns JSON structured like this:

{
    "Id": 10165,
    "Name": "Courtyard by Marriott Orlando Lake Mary/North",
    "Address": "135 International Pkwy",
    "City": "Lake Mary",
    "State": "FL",
    "Postal": "32746",
    "Country": "US",
    "Phone": "1 800 555 9000",
    "Email": "[email protected]"
}

HTTP Request

GET https://groups.alliancereservations.com/services/external/property

Query Parameters

Parameter Type Required Description
id integer Yes The property id

Cancel a Hold

You may retrieve a list of the room types (you'll need the room code / room type id) available to put on hold via an Availability Search and specifying gateway 16 (contracted inventory) (authorized, as mentioned above, using a basic authentication header) to this endpoint. IMPORTANT NOTE: Calling this endpoint successfully will return a string (URL), not JSON-encoded.

curl -X POST \
"https://groups.alliancereservations.com/services/external/roomtypesonhold?&roomTypeId={ROOM-TYPE-ID}&cancelHold" \
-H 'Authorization: Basic {BASE64-ENCODED-STRING}'

The above command returns a string like this:

https://groups.alliancereservations.com/services/external/roomtypesonhold?&roomTypeId=111111

HTTP Request

POST https://groups.alliancereservations.com/services/external/roomtypesonhold

Query Parameters

Parameter Type Required Description
roomTypeId integer Yes The RoomTypeId you want to cancel a hold on
cancelHold void Yes Specifies this is a cancellation

POST form-data Parameters

Parameter Type Required Description
cancellationReason string Yes Reason for cancellation

Hotels and availability

Workflow overview

Creating a reservation

This is the typical workflow for creating a reservation. Each step contains information you will need to create the reservation. These steps exist by design to reduce fraud.

  1. Get available inventory using an Availability Search
  2. Get inventory details
  3. Create a Reservation based on details

Creating a reservation using a hold

Inventory on hold is only useful only for that inventory which is RFP'd and contracted using our Groups application. It does not pertain to GDS, OTA, or any other type of inventory other than that which you contract and load into the Groups app.

Once contracted inventory is added into the Groups app it becomes available in the API through an Availability Search using the parameter ​gateway=16​.

  1. Add contracted inventory to the Groups app (RFP and accept a bid). This is a pre-requisite manual step. All other steps can be done with this API.
  2. Get available inventory using an Availability Search using gateway=16 (to select from contracted inventory only)
  3. Create a Hold based on search results
  4. Get inventory details using gateway=20 (to select from held inventory only)
  5. Create a Reservation based on details using gateway=20 (to book against held inventory only)

Optionally, you may want to be able to cancel/expire a Hold and/or cancel a Reservation.

Common terms in this section

When creating a reservation, use this mapping to find the appropriate values to use for these required parameters:

This endpoint retrieves all hotels which have availability for the dates and locations (or individual hotels) specified.

Make this request for the total number of rooms and the total number of guests. The response will return a maximum of 50 hotels per request, thus you must use pagination techniques if you need more than 50. That said, 50 is the maximum but may not be the best performing. Use smaller batches to get faster responses.

Responses will contain available rate plans and room types from various suppliers we call "gateways".

Responses may contain full nightly rates and tax information, only first night rates with or without tax information, or the highest or average nightly rate. This response depends on the supplier/gateway but the most common from most gateways is the first night's rate, thus the property name in our responses (FirstNightRate).

Rates are always returned in the hotel's native currency. If you request another currency, the correct conversion rate from the hotel's native currency to the desired DisplayCurrency will be returned as DisplayCurrencyMultiplier. You may use this value to convert the hotel currency to the desired currency for display in your UI. This allows you to show both the original currency and display currency side by side.

curl "https://api.travsrv.com/hotel.aspx?\
&siteid={SITEID}\
&latitude=30.099016\
&longitude=-81.601370\
&radius=10\
&inDate=2018-10-20\
&outDate=2018-10-22\
&maxResults=1\
&rooms=1\
&adults=2\
&children=0\
&ipAddress=127.0.0.1\
&userAgent=shell\
&userLanguage=en\
&_type=json" \
  -H 'Authorization: Basic {BASE64-ENCODED-STRING}'

The above command returns JSON structured like this (edited for brevity):

{
  "ArnResponse": {
    "Info": {
      "@SiteID": "{SITEID}",
      "@Username": "{API-USERNAME}",
      "@IpAddress": "127.0.0.1",
      "@TimeReceived": "2018-04-13T16:01:13.510",
      "@TimeCompleted": "2018-04-13T16:01:13.651",
      "@Version": "1.0.0.0",
      "@ServiceUrl": "https://api.travsrv.com/hotel.aspx?inDate=2018-10-20&latitude=30.099016&longitude=-81.601370&maxResults=1&outDate=2018-10-22&radius=10&siteid={SITEID}",
      "@RequestID": "436E177E-558F-4287-B55A-5DBD9F4C7579"
    },
    "Availability": {
      "@DisplayCurrency": "USD",
      "HotelAvailability": {
        "@InDate": "2018-10-20",
        "@OutDate": "2018-10-22",
        "@Rooms": "1",
        "@Adults": "2",
        "@Children": "0",
        "Hotel": {
          "@HotelID": "272393",
          "@IsEphemeral": "true",
          "RatePlan": [
            {
              "@Code": "F89648494F22FFE25A254AD1CE7D18FD27B862F1A609BD28872D9CD6DDA2E956B160BE3DB7EB0191B160BE3DB7EB01917EA3048807BEE935",
              "@Description": "Best Available",
              "@BuyerOnly": "false",
              "@Gateway": "41",
              "@CommissionStatus": "Commissionable",
              "@BalanceDueAtHotel": "false",
              "Room": {
                "@Code": "HRLM--_eJwFwcuaczAAANAHmgVRCRaziPRvxkyJadx3biWUfkFH9On_fc5BTlaYBzSSx4m6Iwz3cS_pRnKxCtkQzjqPQZm8Lh771NInUK3ri_pDYTzZL6lQtgl0H0_fOj_f5dRd1kT_pX8dtg_pq0LMTJYHFXNuPqi0PxdLuTjEAeTtKNfYZ3Gd3suIjMbm3_prdXk03gvS_pfpUJnL_poCL9kNoyIlpA2DURM1_fqAtELSKYuKh6e248vaSGk9hE9Dns4MYIncb5jC_fcZG_p_fOeSN3Z0N_fib2UqSpSLCPFgqPX2sQTP9rmXEv_ptXOMVOlVLoC_fujzlUz6tJvvFwUEonyP6njavHdzsVVF2EesNGSmILz3twKMBKm_fp7PK2XCcgV8ghjMc93ZaXrLkm622zmAYaTaPSItlgfYOcO2TSZ6hvwXlxw_fSAVdl9fv4Hwe6AJQ",
                "@Name": "Standard room",
                "@Description": "- 1 King Bed - Nonsmoking Room - Free Breakfast, Free Wifi, Fridge, Microwave",
                "@CurrencyCode": "USD",
                "@DisplayCurrencyMultiplier": "1",
                "@USDMultiplier": "1",
                "@ExchangeGMT": "2018-04-13T11:00:26.790",
                "@MaximumBookable": "99",
                "NightlyRate": [
                  {
                    "@Date": "2018-10-20",
                    "@Price": "114.44"
                  },
                  {
                    "@Date": "2018-10-21",
                    "@Price": "114.43"
                  }
                ],
                "Tax": {
                  "@Percent": "11.51",
                  "@Amount": "29.77"
                },
                "GatewayFee": {
                  "@Amount": "0.00"
                },
                "Total": {
                  "@Amount": "258.64",
                  "@IncludesBookingFee": "false"
                },
                "BookingFee": {
                  "@Amount": "0.00",
                  "@CurrencyCode": "USD",
                  "@DisplayCurrencyMultiplier": "1",
                  "@RoomCurrencyMultiplier": "1",
                  "@ExchangeGMT": "2018-04-13T11:00:26.790"
                }
              }
            }
          ]
        }
      }
    }
  }
}

HTTP Request

GET https://api.travsrv.com/hotel.aspx

Query Parameters

Parameter Type Required Description
siteid integer Yes Provided by QuintRooms
timeout int No Maximum time to allow for searching gateways, measured in seconds. Default: 15
maxResults int No Number of results to return. Default: 20. Maximum: 50.
hotelIds int* No See below.
refHotelId int No See below.
latitude float No See below.
longitude float No See below.
radius float No See below.
candidatesearch boolean No See below.
rooms int Yes Number of rooms needed. When searching for more than one room, responses are based on the same room type and occupancy for every room. Maximum: 9 (best results with no more than 4).
inDate date Yes Desired check-in date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
outDate date Yes Desired check-out date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
adults int Yes Total number of adults. For instance, if rooms=2&adults=2, the search is for 1 room per adult. Maximum 8 adults per room. Uneven/odd numbers of adults/rooms will be rounded up to support legacy providers.
children int Yes Total number of children. Maximum: 8. Note: Some legacy providers do not honor the children parameter. We suggest usually setting this to 0.
sortType string/enum No One of bestvalue, dealpercent, dealamount. Default: bestvalue. See below.
currency string No Default: USD. See common value map.
name string No Partial hotel name filter. E.g., passing "ilton" would return properties like "Hilton Garden Inn", etc.
propertyClasses int* No See common value map.
propertyAmenities int* No See common value map.
propertyTypes int* No See common value map.
gateway int* No See common value map.
ipAddress string Yes The IPv4 address of the person browsing your website. This is used for fraud checking and preventing booking failures.
userAgent string Yes The userAgent of the app/browser of the person browsing your website. This is used for fraud checking and preventing booking failures.
userLanguage string Yes The language of the browser of the person browsing your website. This is used for fraud checking and preventing booking failures.
locale string No Specifies the response language. Default: "US"
page int No Specifies the results page to return (when more than one page of results is available).
_type string/enum No The response format. One of xml or json. Default: json.

hotelIds, locationId, refHotelId, latitude+longitude+radius

One of the following is required:

sortType

Sort Type Description
bestvalue The default sort type, based on previous booking trends and manual sorting options.
dealpercent Sorts the hotel results based on prices last seen and returns the best percentage savings we have found historically (not currently) for the specified dates.
dealamount Sorts the hotel results based on prices last seen and returns the best amount savings we have found historically (not currently) and for those dates.

Hotel Detail

This call confirms availability with the supplier / gateway (requests to skip any caching they have in place) and retrieves cancellation and booking policies to display prior to the user placing a reservation.

This call is only available for a single hotel ID, room code, and rate code.

Responses will contain nightly rates, taxes and fees associated with the room, and hotel, payment, and cancellation policies which apply to the rate.

This request is rate limited as it is an expensive request to make. Responses with a 429 status code are in response to over use, should you exceed the rate limit.

Failed responses indicate the rate is sold out. Subsequent availability calls will flush and re-cache this hotel's rates.

All fees, penalties, and policies from this response must be shown to the user before creating a reservation.

All room prices are based on the number of adults per room specified in the request. A response containing an extra adult fee of 0 may simply mean the pricing is not available. Adding more than the specified number of adults to the room because the extra adult fee is 0 will likely incur a price difference when the guest arrives at the hotel. To avoid this, we advise not to depend on the extra adult fee specified in the response when it comes to pricing.

curl "https://api.travsrv.com/hotel.aspx?\
&siteid={SITEID}\
&hotelIds=272393\
&inDate=2018-10-20\
&outDate=2018-10-22\
&maxResults=1\
&rooms=1\
&adults=2\
&children=0\
&gateway=51\
&ratePlanCode=987654321\
&roomCode=HRLM--_eJwFwcuaczAAANAHmgVRCRaziPRvxkyJadx3biWUfkFH9On_fc5BTlaYBzSSx4m6Iwz3cS_pRnKxCtkQzjqPQZm8Lh771NInUK3ri_pDYTzZL6lQtgl0H0_fOj_f5dRd1kT_pX8dtg_pq0LMTJYHFXNuPqi0PxdLuTjEAeTtKNfYZ3Gd3suIjMbm3_prdXk03gvS_pfpUJnL_poCL9kNoyIlpA2DURM1_fqAtELSKYuKh6e248vaSGk9hE9Dns4MYIncb5jC_fcZG_p_fOeSN3Z0N_fib2UqSpSLCPFgqPX2sQTP9rmXEv_ptXOMVOlVLoC_fujzlUz6tJvvFwUEonyP6njavHdzsVVF2EesNGSmILz3twKMBKm_fp7PK2XCcgV8ghjMc93ZaXrLkm622zmAYaTaPSItlgfYOcO2TSZ6hvwXlxw_fSAVdl9fv4Hwe6AJQ\
&ipAddress=127.0.0.1\
&userAgent=shell\
&userLanguage=en\
&_type=json" \
  -H 'Authorization: Basic {BASE64-ENCODED-STRING}' \

The above command returns JSON structured like this (edited for brevity):

{
  "ArnResponse": {
    "Info": {
      "@SiteID": "{SITEID}",
      "@Username": "{API-USERNAME}",
      "@IpAddress": "24.113.225.28",
      "@TimeReceived": "2018-04-17T00:41:27.367",
      "@TimeCompleted": "2018-04-17T00:41:27.804",
      "@Version": "1.0.0.0",
      "@ServiceUrl": "http://api.travsrv.com/hotel.aspx?_type=json&adults=2&children=0&gateway=51&hotelIds=272393&inDate=2018-10-20&ipAddress=127.0.0.1&maxResults=1&outDate=2018-10-22&&ratePlanCode=&roomCode=HRLM--_eJwFwcuaczAAANAHmgVRCRaziPRvxkyJadx3biWUfkFH9On_fc5BTlaYBzSSx4m6Iwz3cS_pRnKxCtkQzjqPQZm8Lh771NInUK3ri_pDYTzZL6lQtgl0H0_fOj_f5dRd1kT_pX8dtg_pq0LMTJYHFXNuPqi0PxdLuTjEAeTtKNfYZ3Gd3suIjMbm3_prdXk03gvS_pfpUJnL_poCL9kNoyIlpA2DURM1_fqAtELSKYuKh6e248vaSGk9hE9Dns4MYIncb5jC_fcZG_p_fOeSN3Z0N_fib2UqSpSLCPFgqPX2sQTP9rmXEv_ptXOMVOlVLoC_fujzlUz6tJvvFwUEonyP6njavHdzsVVF2EesNGSmILz3twKMBKm_fp7PK2XCcgV8ghjMc93ZaXrLkm622zmAYaTaPSItlgfYOcO2TSZ6hvwXlxw_fSAVdl9fv4Hwe6AJQ&rooms=1&siteid={SITEID}&userAgent=shell&userLanguage=en",
      "@RequestID": "2999AB6A-6DB9-4FFF-9586-BBED51BB6108"
    },
    "Availability": {
      "@DisplayCurrency": "USD",
      "HotelAvailability": {
        "@InDate": "2018-10-20",
        "@OutDate": "2018-10-22",
        "@Rooms": "1",
        "@Adults": "2",
        "@Children": "0",
        "Hotel": {
          "@HotelID": "272393",
          "@HotelInfo": "https://api.travsrv.com/api/content/findpropertyinfo?propertyid=272393&locale={{locale}}",
          "@Latitude": "30.2334",
          "@Longitude": "-97.74027",
          "@Name": "La Quinta Inn Austin Oltorf",
          "@Address1": "1603 East Oltorf Blvd",
          "@City": "Austin",
          "@CountryCode": "US",
          "@ImageThumbnail": "https://media.travsrv.com/272393/124017095_70.jpg",
          "@LocationDescription": "Near South Congress Avenue",
          "@TripAdvisorReviewCount": "377",
          "@TripAdvisorRating": "2.5",
          "@PriceClass": "2 Stars"
          "RatePlan": [
            {
              "@Code": "ARN987654321",
              "@Description": "Best Available",
              "@BuyerOnly": "false",
              "@Gateway": "41",
              "@CommissionStatus": "Commissionable",
              "@BalanceDueAtHotel": "false",
              "Room": {
                "@Code": "987654321",
                "@Name": "Standard room",
                "@Description": "- 1 King Bed - Nonsmoking Room - Free Breakfast, Free Wifi, Fridge, Microwave",
                "@CurrencyCode": "USD",
                "@DisplayCurrencyMultiplier": "1",
                "@USDMultiplier": "1",
                "@ExchangeGMT": "2018-04-17T00:00:06.027",
                "@MaximumBookable": "99",
                "NightlyRate": [
                  {
                    "@Date": "2018-10-20",
                    "@Price": "114.44"
                  },
                  {
                    "@Date": "2018-10-21",
                    "@Price": "114.43"
                  }
                ],
                "Tax": {
                  "@Percent": "11.51",
                  "@Amount": "29.77"
                },
                "GatewayFee": {
                  "@Amount": "0.00"
                },
                "Total": {
                  "@Amount": "258.64",
                  "@IncludesBookingFee": "false"
                },
                "BookingFee": {
                  "@Amount": "0.00",
                  "@CurrencyCode": "USD",
                  "@DisplayCurrencyMultiplier": "1",
                  "@RoomCurrencyMultiplier": "1",
                  "@ExchangeGMT": "2018-04-17T00:00:06.027"
                }
              }
            }
          ]
        }
      }
    }
  }
}

HTTP Request

GET https://api.travsrv.com/hotel.aspx

Query Parameters

Parameter Type Required Description
siteid integer Yes Provided by QuintRooms
timeout int No Maximum time to allow for searching gateways, measured in seconds. Default: 15
hotelIds int No The particular hotel id for which more detail is being requested.
rooms int Yes Number of rooms needed. When searching for more than one room, responses are based on the same room type and occupancy for every room. Maximum: 9 (best results with no more than 4).
inDate date Yes Desired check-in date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
outDate date Yes Desired check-out date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
adults int Yes Total number of adults. For instance, if rooms=2&adults=2, the search is for 1 room per adult. Maximum 8 adults per room. Uneven/odd numbers of adults/rooms will be rounded up to support legacy providers.
children int Yes Total number of children. Maximum: 8. Note: Some legacy providers do not honor the children parameter.
currency string No Default: USD. See common value map.
ratePlanCode string Yes See common value map.
roomCode string Yes See common value map.
gateway int No See common value map.
ipAddress string Yes The IPv4 address of the person browsing your website. This is used for fraud checking and preventing booking failures.
userAgent string Yes The userAgent of the app/browser of the person browsing your website. This is used for fraud checking and preventing booking failures.
userLanguage string Yes The language of the browser of the person browsing your website. This is used for fraud checking and preventing booking failures.
locale string No Specifies the response language. Default: "US"
_type string/enum No The response format. One of xml or json. Default: json.

Hotel Reservation Creation

Generally speaking this call should be self explanatory. The parameters you will be sending in regarding the fees and costs will come from the detail request you likely would have just made. This is used to double confirm the costs the user was given will match up with the costs in the suppliers / gateways.

curl -X POST "https://api.travsrv.com/hotel.aspx?\
&siteid={SITEID}\
&gateway=20\
&rooms=1\
&hotelIds=10731\
&rooms=1\
&inDate=2007-03-30\
&outDate=2007-03-31\
&adults=2\
&children=0\
&ratePlanCode=ARN987654321\
&roomCode=987654321\
&guestFirstName=Eddie\
&guestLastName=Collins\
&[email protected]\
&guestPhoneCountry=1\
&guestPhoneArea=313\
&guestPhoneNumber=5555555\
&guestMessage=Smoking room requested.\
&addressAddress=123 main st\
&addressCity=detroit\
&addressRegion=MI\
&addressPostalCode=48234\
&addressCountryCode=US\
&roomCostPrice=98.95\
&roomCostTaxAmount=0.00\
&roomCostGatewayFee=0.00\
&roomCostTotalAmount=103.95\
&roomCostCurrencyCode=USD\
&creditCardType=VI\
&creditCardNumber=4242424242424242\
&creditCardExpiration=01/21\
&creditCardCVV2=123\
&creditCardHolder=Eddie Collins\
&creditCardAddress=123 Main Street\
&creditCardCity=Detroit\
&creditCardRegion=MI\
&creditCardPostalCode=48234\
&creditCardCountryCode=US\
&ipAddress=127.0.0.1\
&userAgent=shell\
&userLanguage=en\
&_type=json" \
  -H 'Authorization: Basic {BASE64-ENCODED-STRING}'

The above command returns JSON structured like this (edited for brevity):

{
  "ArnResponse": {
    "Info": {
      "@SiteID": "{SITEID}",
      "@Username": "{API-USERNAME}",
      "@IpAddress": "127.0.0.1",
      "@TimeReceived": "2007-03-30T22:14:28.484",
      "@TimeCompleted": "2007-03-30T22:14:32.046",
      "@Version": "1.0.0.0",
      "@ServiceUrl": "https://api.travsrv.com/hotel.aspx",
      "@RequestID": "D392A38B-79EC-4064-9C8F-E2C9AFC2EEE6"
    },
    "Reservation": {
      "@DisplayCurrency": "USD",
      "@ItineraryID": "678595",
      "@RecordLocator": "4fa67dc1-9d40-46f4-aa34-eb236117781c",
      "HotelReservation": {
        "@InDate": "2007-03-30",
        "@OutDate": "2007-03-31",
        "@Rooms": "1",
        "@Adults": "2",
        "@Children": "0",
        "@ReservationID": "860964",
        "@CustomerConfirmationNumber": "40156457",
        "Hotel": {
          "@HotelID": "10731",
          "RatePlan": {
            "@Code": "ARN987654321",
            "@Description": "QUALIFYING MEMBER RATE: Aaa/CAA Rate 1 King Bed /1 Room Suite/Partial Room Divider /Microwave Refrigerator/Computer Hookup Guest Must Show Some Form Of Aaa Membership Rate Is Applicable To AAA Members Only And Only On Rooms They Stay In Themselv",
            "@Gateway": "4",
            "Room": {
              "@Code": "987654321",
              "@Name": "Room",
              "@Description": "QUALIFYING MEMBER RATE: Aaa/CAA Rate 1 King Bed /1 Room Suite/Partial Room Divider /Microwave Refrigerator/Computer Hookup Guest Must Show Some Form Of Aaa Membership Rate Is Applicable To AAA Members Only And Only On Rooms They Stay In Themselv",
              "@CurrencyCode": "USD",
              "@DisplayCurrencyMultiplier": "1",
              "@USDMultiplier": "1",
              "@ExchangeGMT": "2007-03-30T17:15:04.627",
              "@MaximumBookable": "1",
              "NightlyRate": {
                "@Date": "2007-03-30",
                "@Price": "98.95"
              },
              "Tax": {
                "@Percent": "0.00",
                "@Amount": "0.00"
              },
              "GatewayFee": {
                "@Amount": "0.00"
              },
              "Total": {
                "@Amount": "98.95",
                "@IncludesBookingFee": "false"
              },
              "BookingFee": {
                "@Amount": "5.00",
                "@CurrencyCode": "USD",
                "@DisplayCurrencyMultiplier": "1",
                "@RoomCurrencyMultiplier": "1",
                "@ExchangeGMT": "2007-03-30T17:15:04.627"
              }
            },
            "Policy": {
              "ExtraPersonPrice": {
                "@Adult": "5.00",
                "@Child": "0.00",
                "@CurrencyCode": "USD",
                "@DisplayCurrencyMultiplier": "1",
                "@USDMultiplier": "1",
                "@ExchangeGMT": "2007-03-30T17:15:04.627"
              },
              "Guarantee": {
                "@Description": "RESERVATION WILL BE HELD TILL 4PM LOCAL TIME Booking fee is not included in the total and it's value is expressed in United States Dollars. Booking fee will be charged at the time of the booking."
              },
              "Cancel": {
                "@Description": "CANCEL BY 4 PM LOCAL HTL TIME DOA",
                "@LatestCancelTime": "2007-03-29T10:00:00.000",
                "@GMTOffSet": "0",
                "Fee": {
                  "@Amount": "0.00",
                  "@CurrencyCode": "USD",
                  "@DisplayCurrencyMultiplier": "1",
                  "@RoomCurrencyMultiplier": "1",
                  "@ExchangeGMT": "2007-03-30T17:15:04.627"
                },
                "Penalty": {
                  "@Amount": "98.95",
                  "@CurrencyCode": "USD",
                  "@DisplayCurrencyMultiplier": "1",
                  "@USDMultiplier": "1",
                  "@ExchangeGMT": "2007-03-30T17:15:04.627"
                }
              },
              "Deposit": {
                "@Description": "None"
              },
              "Payment": [
                {
                  "@Description": "Tax is not included in the total."
                },
                {
                  "@Description": "With your credit card information, the room(s) you book are guaranteed for late arrival."
                },
                {
                  "@Description": "This discount rate requires a $5.00 (USD) per room per night non-refundable service fee at time of reservation and will appear on your credit card under Alliance Reservations Network, Phoenix, AZ."
                }
              ],
              "Property": [
                {
                  "@Description": "Check-In Time",
                  "@Value": "150000"
                },
                {
                  "@Description": "Check-Out Time",
                  "@Value": "1100"
                }
              ]
            }
          }
        },
        "Guests": {
          "Primary": {
            "@Title": "",
            "@FirstName": "Eddie",
            "@MiddleName": "",
            "@LastName": "Collins",
            "@Message": "Smoking room requested.",
            "@Email": "[email protected]",
            "@PhoneCountry": "1",
            "@PhoneArea": "313",
            "@PhoneNumber": "5555555",
            "@PhoneExtension": "",
            "@AgeGroup": "Adult",
            "Address": {
              "@Address": "123 main st",
              "@City": "detroit",
              "@Region": "MI",
              "@PostalCode": "48234",
              "@CountryCode": "US",
              "@ExtraInfo": ""
            }
          }
        },
        "Service": {
          "@ExchangeGMT": "2007-03-30T17:15:04.627",
          "RoomCurrency": {
            "@CurrencyCode": "USD",
            "Cost": {
              "@Price": "98.95",
              "@TaxPercent": "0.00",
              "@TaxAmount": "0.00",
              "@GatewayFee": "0.00",
              "@BookingFee": "5.00",
              "@TotalAmount": "103.95",
              "@TotalAmountIncludesBookingFee": "true"
            },
            "Charge": {
              "@Paid": "5.00",
              "@Due": "98.95"
            }
          },
          "DisplayCurrency": {
            "@CurrencyCode": "USD",
            "Cost": {
              "@Price": "98.95",
              "@TaxPercent": "0.00",
              "@TaxAmount": "0.00",
              "@GatewayFee": "0.00",
              "@BookingFee": "5.00",
              "@TotalAmount": "103.95",
              "@TotalAmountIncludesBookingFee": "true"
            },
            "Charge": {
              "@Paid": "5.00",
              "@Due": "98.95"
            }
          },
          "USD": {
            "@CurrencyCode": "USD",
            "Cost": {
              "@Price": "98.95",
              "@TaxPercent": "0.00",
              "@TaxAmount": "0.00",
              "@GatewayFee": "0.00",
              "@BookingFee": "5.00",
              "@TotalAmount": "103.95",
              "@TotalAmountIncludesBookingFee": "true"
            },
            "Charge": {
              "@Paid": "5.00",
              "@Due": "98.95"
            }
          }
        }
      }
    }
  }
}

HTTP Request

POST https://api.travsrv.com/hotel.aspx?type=Reservation

Query Parameters

Parameter Type Required Description
siteid integer Yes Provided by QuintRooms
hotelIds int Yes The particular hotel id to reserve the room at.
agentRefNumber string No A reference ID you may use for your own tracking purposes. This is included in a reservation webhook, if used.
rooms int Yes Number of rooms needed. Maximum: 9.
inDate date Yes Desired check-in date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
outDate date Yes Desired check-out date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
adults int Yes Total number of adults. For instance, if rooms=2&adults=2, the search is for 1 room per adult. Maximum 8 adults per room. Uneven/odd numbers of adults/rooms will be rounded up to support legacy providers.
children int Yes Total number of children. Maximum: 8. Note: Some legacy providers do not honor the children parameter. We suggest setting this value to 0 for most inquiries.
currency string No Default: USD. See common value map.
ratePlanCode string Yes See common value map.
roomCode string Yes See common value map.
gateway int yes See common value map.
campaignCode string No See below.
guestTitle string No Primary guest's title (e.g., "Mr.", "Mrs.", etc.)
guestFirstName string Yes Primary guest's first name
guestLastName string Yes Primary guest's last name.
guestEmail string Yes Primary guest's email address.
guestPhoneCountry string Yes Primary guest's phone number country code.
guestPhoneArea string Yes Primary guest's phone number area code.
guestPhoneNumber string Yes Primary guest's phone number (without country or area code)
guestPhoneExtension string No Primary guest's phone number extension.
guestMessage string No Guest special requests.
addressAddress string Yes Primary guest's address.
addressCity string Yes Primary guest's city.
addressRegion string Yes Primary guest's state / region.
addressPostalCode string Yes Primary guest's postal code.
addressCountryCode string Yes Primary guest's country code.
roomCostPrice decimal Yes See below.
roomCostTaxAmount decimal Yes See below.
roomCostGatewayFee decimal Yes See below.
roomCostTotalAmount decimal Yes See below.
roomCostCurrencyCode string Yes See below.
bookingFeeAmount decimal Yes See below.
bookingFeeCurrencyCode string See common value map for currency.
creditCardType string Yes Options: "AX" (AMEX), "CA" (MasterCard), "VI" (Visa), "DC" (Discover)
creditCardNumber string Yes Credit card number.
creditCardExpiration string Yes Credit card expiration date (format: MM/YY)
creditCardCVV2 int Yes Credit card CVV2 number.
creditCardHolder string Yes Name on credit card.
creditCardAddress string Yes Credit card billing address.
creditCardCity string Yes Credit card billing city.
creditCardRegion string Yes Credit card billing state / region.
creditCardPostalCode string Yes Credit card billing postal code.
creditCardCountryCode string Yes Credit card billing country code.
ipAddress string Yes The IPv4 address of the person browsing your website. This is used for fraud checking and preventing booking failures.
userAgent string Yes The userAgent of the app/browser of the person browsing your website. This is used for fraud checking and preventing booking failures.
userLanguage string Yes The language of the browser of the person browsing your website. This is used for fraud checking and preventing booking failures.
locale string No Specifies the response language. Default: "US"
_type string/enum No The response format. One of xml or json. Default: json.

campaignCode

You may pass in a string which you want to persist with the reservation. This is analagous to a "subid" and can be used for reconciling with your own marketing campaigns, or really anything else you want to do with it. The string you provide in this parameter will be added to the reservation being made and available in available reporting.

roomCostPrice

Send the exact same information received from the Hotel Detail Request (assuming the same currency designation in both requests. This is used to assure the expected reservation amounts match the actual prices the hotel has given.

roomCostTaxAmount

Send the exact same information received from the Hotel Detail Request (assuming the same currency designation in both requests. This is used to assure the expected reservation amounts match the actual prices the hotel has given.

roomCostGatewayFee

Send the exact same information received from the Hotel Detail Request (assuming the same currency designation in both requests. This is used to assure the expected reservation amounts match the actual prices the hotel has given.

roomCostTotalAmount

Send the exact same information received from the Hotel Detail Request (assuming the same currency designation in both requests. This is used to assure the expected reservation amounts match the actual prices the hotel has given.

roomCostCurrencyCode

Send the exact same information received from the Hotel Detail Request (assuming the same currency designation in both requests. This is used to assure the expected reservation amounts match the actual prices the hotel has given.

bookingFeeAmount

Send the exact same information received from the Hotel Detail Request (assuming the same currency designation in both requests. This is used to assure the expected reservation amounts match the actual prices the hotel has given.

Hotel Reservation Cancellation

To cancel a reservation you will need the reservationId and itineraryId returned in the reservation creation response. These values are mapped 1-to-1, so both are needed and they likely will not be the same values, but will be related to each other.

curl -X POST "https://api.travsrv.com/hotel.aspx?\
&siteid={SITEID}\
&reservationId=915892\
&itineraryId=733525\
&ipAddress=127.0.0.1\
&userAgent=shell\
&userLanguage=en\
&_type=json" \
  -H 'Authorization: Basic {BASE64-ENCODED-STRING}' \

The above command returns JSON structured like this (edited for brevity):

{
  "ArnResponse": {
    "Info": {
      "@SiteID": "{SITEID}",
      "@Username": "{API-USERNAME}",
      "@IpAddress": "127.0.0.1",
      "@TimeReceived": "2018-04-01T19:16:35.581",
      "@TimeCompleted": "2018-04-01T19:16:36.065",
      "@Version": "1.0.0.0",
      "@ServiceUrl": "https://api.travsrv.com/hotel.aspx",
      "@RequestID": "52AEC4E5-BBB9-44CB-BF09-CFEE7462FE97"
    },
    "Cancellation": {
      "@DisplayCurrency": "USD",
      "@ItineraryID": "733525",
      "HotelCancellation": {
        "@Success": "true",
        "@CancelGMT": "2018-04-01T19:16:36.065",
        "@CancellationID": "ARN342559-C",
        "@InDate": "2018-04-10",
        "@OutDate": "2018-04-12",
        "@Rooms": "1",
        "@Adults": "2",
        "@Children": "0",
        "@ReservationID": "915892",
        "@CustomerConfirmationNumber": "ARN342559",
        "Hotel": {
          "@HotelID": "219295",
          "RatePlan": {
            "@Code": "ARN987654321",
            "@Description": "Internet Special",
            "@Gateway": "1",
            "Room": {
              "@Code": "987654321",
              "@Name": "Double Room",
              "@Description": "Double Room - one double bed, satellite television, minibar, coffee maker, in-room safe, work desk, air conditioning, hairdryer, private bathroom, complimentary breakfast buffet. Rate includes transportation from the airport to the hotel. Please enter your Airline and Flight Number in the 'Other Special Requests' field when placing your reservation. Rates based on single or double occupancy. (Maximum 2 people)",
              "@CurrencyCode": "USD",
              "@DisplayCurrencyMultiplier": "1",
              "@USDMultiplier": "1",
              "@ExchangeGMT": "2018-04-01T17:15:03.443",
              "@MaximumBookable": "5",
              "NightlyRate": {
                "@Date": "2018-04-10",
                "@Price": "144.00"
              },
              "Tax": {
                "@Percent": "20.00",
                "@Amount": "28.80"
              },
              "GatewayFee": {
                "@Amount": "0.00"
              },
              "Total": {
                "@Amount": "172.80",
                "@IncludesBookingFee": "false"
              },
              "BookingFee": {
                "@Amount": "3.60",
                "@CurrencyCode": "USD",
                "@DisplayCurrencyMultiplier": "1",
                "@RoomCurrencyMultiplier": "1",
                "@ExchangeGMT": "2018-04-01T17:15:03.443"
              }
            },
            "Policy": {
              "ExtraPersonPrice": {
                "@Adult": "0.00",
                "@Child": "0.00",
                "@CurrencyCode": "USD",
                "@DisplayCurrencyMultiplier": "1",
                "@USDMultiplier": "1",
                "@ExchangeGMT": "2018-04-01T17:15:03.443"
              },
              "Guarantee": {
                "@Description": "No prices or hotel availability are guaranteed until full payment is received. Booking fee is not included in the total and it's value is expressed in United States Dollars. Booking fee will be charged at the time of the booking."
              },
              "Cancel": {
                "@Description": "You must cancel your reservation before 2:00 pm hotel time at least 1 day(s) prior to check-in or you will be charged for one night's room plus taxes & fees.",
                "@LatestCancelTime": "2018-04-08T14:00:00.000",
                "@GMTOffSet": "0",
                "Fee": {
                  "@Amount": "10.00",
                  "@CurrencyCode": "USD",
                  "@DisplayCurrencyMultiplier": "1",
                  "@RoomCurrencyMultiplier": "1",
                  "@ExchangeGMT": "2018-04-01T17:15:03.443"
                },
                "Penalty": {
                  "@Amount": "172.80",
                  "@CurrencyCode": "USD",
                  "@DisplayCurrencyMultiplier": "1",
                  "@USDMultiplier": "1",
                  "@ExchangeGMT": "2018-04-01T17:15:03.443"
                }
              },
              "Deposit": {
                "@Description": "Credit card is charged for the total cost of the room at the time of booking."
              },
              "Payment": [
                {
                  "@Description": "Tax is included in the total."
                },
                {
                  "@Description": "Total Room Cost includes tax recovery charge and fees."
                },
                {
                  "@Description": "This discount rate requires full payment of reservation at time of booking."
                },
                {
                  "@Description": "Payment will appear on your credit card under Alliance Reservations Network, Phoenix, AZ"
                },
                {
                  "@Description": "Rooms are guaranteed once full payment is received."
                }
              ],
              "Property": [
                {
                  "@Description": "Check-In Time",
                  "@Value": "1600"
                },
                {
                  "@Description": "Check-Out Time",
                  "@Value": "1100"
                }
              ]
            }
          }
        },
        "Guests": {
          "Primary": {
            "@Title": "",
            "@FirstName": "Mary",
            "@MiddleName": "",
            "@LastName": "Andersen",
            "@Message": "Non-smoking room requested.",
            "@Email": "[email protected]",
            "@PhoneCountry": "0047",
            "@PhoneArea": "0",
            "@PhoneNumber": "5555555",
            "@PhoneExtension": "",
            "@AgeGroup": "Adult",
            "Address": {
              "@Address": "Vaar Frue gt 2",
              "@City": "Zeud",
              "@Region": "",
              "@PostalCode": "7013",
              "@CountryCode": "NO",
              "@ExtraInfo": ""
            }
          }
        },
        "Service": {
          "@ExchangeGMT": "2018-04-01T17:15:03.443",
          "RoomCurrency": {
            "@CurrencyCode": "USD",
            "Cost": {
              "@Price": "144.00",
              "@TaxPercent": "20.00",
              "@TaxAmount": "28.80",
              "@GatewayFee": "0.00",
              "@BookingFee": "3.60",
              "@TotalAmount": "176.40",
              "@TotalAmountIncludesBookingFee": "true"
            },
            "Charge": {
              "@Paid": "176.40",
              "@Due": "0.00"
            }
          },
          "DisplayCurrency": {
            "@CurrencyCode": "USD",
            "Cost": {
              "@Price": "144.00",
              "@TaxPercent": "20.00",
              "@TaxAmount": "28.80",
              "@GatewayFee": "0.00",
              "@BookingFee": "3.60",
              "@TotalAmount": "176.40",
              "@TotalAmountIncludesBookingFee": "true"
            },
            "Charge": {
              "@Paid": "176.40",
              "@Due": "0.00"
            }
          },
          "USD": {
            "@CurrencyCode": "USD",
            "Cost": {
              "@Price": "144.00",
              "@TaxPercent": "20.00",
              "@TaxAmount": "28.80",
              "@GatewayFee": "0.00",
              "@BookingFee": "3.60",
              "@TotalAmount": "176.40",
              "@TotalAmountIncludesBookingFee": "true"
            },
            "Charge": {
              "@Paid": "176.40",
              "@Due": "0.00"
            }
          }
        }
      }
    }
  }
}

HTTP Request

POST https://api.travsrv.com/hotel.aspx?type=Cancellation

Query Parameters

Parameter Type Required Description
siteid integer Yes Provided by QuintRooms
reservationId string Yes The reservationId from the reservation creation response.
itineraryId string Yes The itineraryId from the reservation creation response.
_type string/enum No The response format. One of xml or json. Default: json.

Deals

Search for the best locations in the world for hotel deals, or the best hotel deals inside a specific market/location.

All parameters other than type are optional and if not provided will be defaulted.

curl "https://api.travsrv.com/Content.aspx?\
type=findfeaturedlocationdeals\
&mindiscount=10\
&maxdiscount=100\
&checkIn=2020-03-01\
&checkOut=2020-03-03\
&maxresults=2\
&_type=json"

The above command returns JSON structured like this:

[
    {
        "AvgDiscountPercent": 54,
        "AvgNightlyPrice": 406.73,
        "AvgNightlyPriceCurrency": "USD",
        "DealProperties": 9,
        "DealsFound": 151,
        "DealWeight": 8154,
        "LocationCountry": "US",
        "LocationId": 3626,
        "LocationImageUrl": "//media.travsrv.com/1146021/232355706_804480.jpg",
        "LocationImageUrlHighRes": "//media.travsrv.com/1146021/232355706_0.jpg",
        "LocationLatitude": 34.09,
        "LocationLongitude": -118.360833,
        "LocationName": "West Hollywood, CA",
        "MaxDiscountPercent": 75
    },
    {
        "AvgDiscountPercent": 49,
        "AvgNightlyPrice": 100.5,
        "AvgNightlyPriceCurrency": "USD",
        "DealProperties": 10,
        "DealsFound": 147,
        "DealWeight": 7203,
        "LocationCountry": "US",
        "LocationId": 10124,
        "LocationImageUrl": "//media.travsrv.com/12575/123690570_804480.jpg",
        "LocationImageUrlHighRes": "//media.travsrv.com/12575/123690570_0.jpg",
        "LocationLatitude": 33.679444,
        "LocationLongitude": -84.439444,
        "LocationName": "East Point, GA",
        "MaxDiscountPercent": 66
    }
]

HTTP Request

GET https://api.travsrv.com/Content.aspx

Query Parameters

Parameter Type Required Description
type string Yes Always "findfeaturedlocationdeals"
mindiscount int No Return only results >= this value
maxdiscount int No Return only results <= this value
checkIn date No Desired check-in date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
checkOut date No Desired check-in date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
maxresults int No Maximum number of results to return
_type string/enum No The response format. One of xml or json. Default: json.

All parameters other than type are optional and if not provided will be defaulted.

curl "https://api.travsrv.com/Content.aspx?\
type=findfeaturedhoteldeals\
&locationid=7151\
&mindiscount=10\
&maxdiscount=100\
&checkIn=2020-03-01\
&checkOut=2020-03-03\
&maxresults=2\
&_type=json"

The above command returns JSON structured like this:

[
    {
        "PropertyId": 182462,
        "DealsFound": 1111,
        "DealWeight": 51106,
        "MaxDiscountPercent": 72,
        "AvgDiscountPercent": 46,
        "ReferencePrice": 41.578,
        "ReferencePriceCurrency": "USD",
        "PropertyName": "Westgate Lakes Resort & Spa Universal Studios Area",
        "PropertyAddress": "9500 Turkey Lake Rd, Orlando, FL US",
        "LocationId": 7151,
        "PropertyLatitude": 28.42893,
        "PropertyLongitude": -81.47504,
        "PropertyImageUrl": "//media.travsrv.com/182462/124005548_804480.jpg",
        "PropertyImageUrlHighRes": "//media.travsrv.com/182462/124005548_0.jpg",
        "PropertyRating": "4 Stars",
        "TripAdvisorRating": 3.5,
        "TripAdvisorReviewCount": 6177,
        "RatingImageUrl": "//www.tripadvisor.com/img/cdsi/img2/ratings/traveler/3.5-39958-4.png",
        "CheckIn": "06/12/2019",
        "CheckOut": "06/15/2019"
    },
    {
        "PropertyId": 10507,
        "DealsFound": 990,
        "DealWeight": 39600,
        "MaxDiscountPercent": 55,
        "AvgDiscountPercent": 40,
        "ReferencePrice": 55.5,
        "ReferencePriceCurrency": "USD",
        "PropertyName": "Quality Suites",
        "PropertyAddress": "9350 Turkey Lake Rd, Orlando, FL US",
        "LocationId": 7151,
        "PropertyLatitude": 28.43031,
        "PropertyLongitude": -81.4751,
        "PropertyImageUrl": "//media.travsrv.com/10507/123830947_804480.jpg",
        "PropertyImageUrlHighRes": "//media.travsrv.com/10507/123830947_0.jpg",
        "PropertyRating": "2 Stars",
        "TripAdvisorRating": 3,
        "TripAdvisorReviewCount": 674,
        "RatingImageUrl": "//www.tripadvisor.com/img/cdsi/img2/ratings/traveler/3.0-39958-4.png",
        "CheckIn": "06/12/2019",
        "CheckOut": "06/15/2019"
    }
]

HTTP Request

GET https://api.travsrv.com/Content.aspx

Query Parameters

Parameter Type Required Description
type string Yes Always "findfeaturedhoteldeals"
locationid int No Found via locationid search
mindiscount int No Return only results >= this value
maxdiscount int No Return only results <= this value
checkIn date No Desired check-in date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
checkOut date No Desired check-in date (format: YYYY-MM-DD based on UTC -7 (MST) time zone)
maxresults int No Maximum number of results to return
_type string/enum No The response format. One of xml or json. Default: json.

Search for a Location ID by a string (ie, city and region)

curl "https://api.travsrv.com/widgetapi.aspx?\
type=cities\
&count=1\
&name=new+york"

The above command returns JSON structured like this:

[
    {
        "LocationId": 9044,
        "Name": "New York City, NY",
        "NumberOfHotels": 798
    }
]

HTTP Request

GET https://api.travsrv.com/widgetapi.aspx

Query Parameters

Parameter Type Required Description
type string Yes Always "cities".
count int No Maximum number of results to return. Defaults to 10.
name string Yes City (URL encoded) name to search for.

Errors

The QuintRooms API uses the following error codes:

Error Code Meaning
400 Bad Request -- Your request is invalid.
401 Unauthorized -- Your API credentials are wrong.
403 Forbidden -- You are not allowed in there.
404 Not Found -- The specified hotel or endpoint could not be found.
405 Method Not Allowed -- You tried to access an endpoint with an invalid method.
406 Not Acceptable -- You requested a format that isn't json or xml.
410 Gone -- The hotel requested has been removed from our servers.
418 I'm a teapot.
429 Too Many Requests -- You are sending requests too often! Slow down!
500 Internal Server Error -- We had a problem with our server. Try again later.
503 Service Unavailable -- We're temporarily offline for maintenance. Please try again later.