GET https://data.xotelo.com/api/rates
"rates" : [
{
"code": "HotelsCom2",
"name": "Hotels.com",
"rate": 5259.00
},{
"code": "Expedia",
"name": "Expedia",
"rate": 5399.50
},
[...]
]
The Xotelo API is capable of delivering real-time hotel or hostel prices data. The API comes with multiple endpoints, each serving a different use case. Endpoint functionalities include getting the latest prices data for all available OTA based with TripAdvisor website.
The reponse data is made available through a powerful RESTful api in a structured JSON format.
We simplify the process of Hotel booking api integration and help power your hotel backend so you can focus on delivering value to your customers.
The Xotelo API comes with 3 API endpoints, each providing a different functionality.
/rates
) /heatmap
) /list
) /search
) Definition | Description | Default |
---|---|---|
Hotel Key (hotel_key)* | A unique key assigned to each Hotel used to matching with TripAdvisor. How to get Hotel Key | |
Currency (currency) | Refers to the three-letter currency code of a given currency (USD, GBP, EUR, CAD, CHF, AUD, JPY, CNY, INR, THB, BRL, HKD, RUB, BZD) | USD |
Check-in Date (chk_in)* | Check-In date. (Format YYYY-MM-DD ex. 2025-05-31 for 31 May 2025) | |
Check-out Date (chk_out)* | Check-Out date. (Format YYYY-MM-DD ex. 2025-05-31 for 31 May 2025) | |
Rooms (rooms) | Number of rooms. (maximum value is 8) | 1 |
Adults (adults) | Number of adults. (maximum value is 32) | 1 |
Age of children (age_of_children) |
Age of children, separate by comma (,). Ex: 0,4,7 for 3 children) - If age is 0-1 years old, should put 0 - Available age is between 0 to 17 |
https://data.xotelo.com/api
Endpoint: rates
Method: GET
Example: CLICK TO TEST
https://data.xotelo.com/api/rates ? hotel_key = HOTEL_KEY & chk_in = CHECK_IN_DATE & chk_out = CHECK_OUT_DATE
OTA rates delivered by the Xotelo API are by default relative to USD. All data is returned in standard JSON format and can be parsed easily using any programming language.
Example Response: Below you will find an example API response carrying a rate of common available deals, all relative time stamped at the exact time they were collected.
{ "error": null, // Return error message if the request could not be completed "timestamp": 1519296206, "result": { "chk_in": "2025-06-13", "chk_out": "2025-06-16", "rates" : [ { "code": "HotelsCom2", "name": "Hotels.com", "rate": 5259.00 // Price per room per night }, { "code": "Expedia", "name": "Expedia", "rate": 5399.50 // Price per room per night }, { "code": "BookingCom", "name": "Booking.com", "rate": 5399.20 // Price per room per night }, { "code": "Agoda", "name": "Agoda.com", "rate": 5250.00 // Price per room per night }, [...] ] } }
As illustrated above, the API's response - when queried for
real-time rates - always contains a timestamp
object
containing a standard UNIX time stamp indicating the time the given
rate data was collected, a error
object containing the
error message if the request could not be completed, a
result
object containing the result data, and a
rates
object of result object containing the actual
rate data for each available deals.
Definition | Description | Default |
---|---|---|
Hotel Key (hotel_key)* | A unique key assigned to each Hotel used to matching with TripAdvisor. How to get Hotel Key | |
Check-out Date (chk_out)* | Check-Out date. (Format YYYY-MM-DD ex. 2025-05-31 for 31 May 2025) |
https://data.xotelo.com/api
Endpoint: heatmap
Method: GET
Example: CLICK TO TEST
https://data.xotelo.com/api/heatmap ? hotel_key = HOTEL_KEY & chk_out = CHECK_OUT_DATE
{ "error": null, // Return error message if the request could not be completed "timestamp": 1519296206, "result": { "chk_out": "2025-07-30", "heatmap" : { "average_price_days": [ "2025-06-13", "2025-06-14", "2025-06-15", "2025-06-16" ... ], "cheap_price_days": [ "2025-06-17", "2025-06-18", "2025-06-19", "2025-06-20" ... ], "high_price_days": [...] } } }
Definition | Description | Default |
---|---|---|
Location Key (location_key)* | A unique key assigned to each Location used to matching with TripAdvisor. How to get Location Key | |
Limit (limit) | Limit of hotel list. (maximum value is 100) | 30 |
Offset (offset) | The number of rows to skip from the beginning of the returned data before presenting the results (minimum value is 0) | 0 |
Sort By (sort) |
Value to sort by. (available values are: best_value , popularity , distance )
|
best_value |
https://data.xotelo.com/api
Endpoint: list
Method: GET
Example: CLICK TO TEST
https://data.xotelo.com/api/list ? location_key = LOCATION_KEY & offset = OFFSET_NUMBER & limit = LIMIT_NUMBER
{ "error": null, // Return error message if the request could not be completed "timestamp": 1519296206, "result": { "total_count": 4049, "limit": 30, "offset": 0, "list" : [ { "name": "FooBar and Resort", "key": "g1234567-d12345678", "accommodation_type": "Hotel", "image": "https://...html", "url": "https://.....html", "review_summary": { "rating": 4, "count": 1 }, "price_ranges": { "maximum": 17, "minimum": 16 }, "geo": { "latitude": 6.8545, "longitude": 101.21789 }, "mentions": [ "Trendy", "Modern", "Charming" ], } [...] ] } }
As illustrated above, the API's response - when queried for
real-time rates - always contains a timestamp
object
containing a standard UNIX time stamp indicating the time the given
list data was collected, a error
object containing the
error message if the request could not be completed, a
result
object containing the result data, and a
list
object of result object containing the actual
list data for each available location.
Definition | Description | Default |
---|---|---|
Query (query)* | The search term used to find hotels. This can be a hotel name, city, landmark, or any relevant keyword. For example, entering "Bangkok", "Hilton", or "Eiffel Tower" will return hotels matching the query. This field is required. | |
Location Type (location_type) |
Specifies the type of location to search for. Possible values are:
accommodation .
|
accommodation |
https://data.xotelo.com/api
Endpoint: search
Method: GET
Example: CLICK TO TEST
https://data.xotelo.com/api/list
? query = QUERY
{ "error": null, // Return error message if the request could not be completed "timestamp": 1519296206, "result": { "query": "tokyo", "list" : [ { "hotel_key": "g14xxxx-d31xxxx", "location_key": "g14xxxx", "name": "The Tokyo Hotel", "location_id": "31xxxx", "parent_id": "14xxxx", "place_name": ""place_name": "Chiyoda, Tokyo, Tokyo Prefecture, Kanto, Japan, Asia", "street_address": "1-1-1", "short_place_name": "Marunouchi, Tokyo Prefecture, Japan", "url": "https://....com/Hotel-Review-g-d", "image": "https://....com/image.jpg", } [...] ] } }
As illustrated above, the API's response when queried for searching hotels always contains a timestamp
object indicating the time the search data was collected, an error
object containing the error message if the request could not be completed, a result
object containing the result data, and a list
object within the result containing the actual hotel search results matching the query.