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:
- Request a Site Admin to be added to your closed user group site (if you don't already have one)
- Get a token for the Site Admin
- Create a member using the Site Admin's token
- 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 |
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 |
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
Availability Search
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:
hotelIds
: A list of integers, separated by commas if more than one. Max of 50 hotel IDs may be specified at one time. May be substituted withrefHotelId
orlocationId
orlatitude
+longitude
+radius
.refHotelId
: A single hotel ID used to look up the city and return results from that city, as if we had searched bylocationId
. May be substituted withhotelIds
orlocationId
orlatitude
+longitude
+radius
.locationId
: A location ID used to return hotels from within the location's city. May be substituted withhotelIds
orrefHotelId
orlatitude
+longitude
+radius
.latitude
+longitude
+radius
(Do not sendradius
if doinglatitude
/longitude
based deal search) **radius
: Measured in miles. NOTE: If doing a market deal search, leave off radius and just passlatitude
andlongitude
.
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:
- Request a Site Admin to be added to your closed user group site (if you don't already have one)
- Get a token for the Site Admin
- Create a member using the Site Admin's token
- 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 |
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 |
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.
- Get available inventory using an Availability Search
- Get inventory details
- 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​
.
- 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.
- Get available inventory using an Availability Search using
gateway=16
(to select from contracted inventory only) - Create a Hold based on search results
- Get inventory details using
gateway=20
(to select from held inventory only) - 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
RoomTypeId
=RoomCode
: The ID associated with a room type (as seen in Hold responses and Detail request params).RatePlanCode
: "ARN" +RoomTypeId
(string concatenation) (as seen when creating a Reservation and Detail request params)HotelId
=PropertyId
: These terms are synonmous (as seen in Availability Search responses, Detail responses, and used in a comma separated value list for thehotelids
parameter value in a Detail request). You may also use these values to look up more details on an individual property using the Property Detail call.
When creating a reservation, use this mapping to find the appropriate values to use for these required parameters:
roomCostCurrencyCode
:@CurrencyCode
roomCostPrice
:NightlyRate@Price
roomCostTaxAmount
:Tax@Amount
roomCostGatewayFee
:GatewayFee@Amount
roomCostTotalAmount
:Total@Amount
bookingFeeCurrencyCode
:BookingFee@CurrencyCode
bookingFeeAmount
:BookingFee@Amount
Availability Search
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:
hotelIds
: A list of integers, separated by commas if more than one. Max of 50 hotel IDs may be specified at one time. May be substituted withrefHotelId
orlocationId
orlatitude
+longitude
+radius
.refHotelId
: A single hotel ID used to look up the city and return results from that city, as if we had searched bylocationId
. May be substituted withhotelIds
orlocationId
orlatitude
+longitude
+radius
.locationId
: A location ID used to return hotels from within the location's city. May be substituted withhotelIds
orrefHotelId
orlatitude
+longitude
+radius
.latitude
+longitude
+radius
(and maybecandidatesearch
) (Do not sendradius
if doinglatitude
/longitude
based deal search) **radius
: Measured in miles. NOTE: If doing a market deal search, leave off radius and just passlatitude
andlongitude
. **candidatesearch
: If a location based search is being made, this attribute can be sent to specify that no rates and availability should be returned. When set to true, and in conjunction with a location based search, only the list of candidate properties are returned (very fast). This allows calls to be made for each individual property asynchronously for actual rates and availability.
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.
Featured Locations
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 . |
Featured Hotels
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 . |
Location ID Search
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. |