Introduction
Version: 3.1 Last Update: 12 February 2026
The Lighthouse API offers customers the ability to create custom extracts on a periodic basis. For a full version of our API usage policy, visit https://www.mylighthouse.com/terms-and-conditions.
Advanced Documentation
Most API endpoints are accessible to all users, but some advanced endpoints require a valid API token for access:
- Live rateshopping API
- Raw rates API
To view those API endpoints, you need an access token:
Authentication
Pass the token as a header parameter
X-Oi-Authorizationwhen calling the API, like so:
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" https://api.mylighthouse.com/v3/hotels
Requests are authorized using an API token.
A token is bound to your Lighthouse account, and with it you can request data for all subscriptions attached to your account.
Please get in touch should you want your token to be renewed or revoked.
Limits
We apply a fair usage restriction on your API usage:
- max 20 requests/api/subscription over a 24-hour period;
- max of 120 requests/minute enforced across all APIs.
A customer should not do more requests without written consent from Lighthouse
Also note:
- The API is only intended to be used for reporting purposes.
- It is not intended for use in live commercial applications.
- Explicit prior written consent must be obtained from Lighthouse for commercial visualization of data extracted from the Lighthouse API in either raw or aggregated form to end users.
A rate-limited request will be returned with a 429 Too Many Requests status code.
Hotels API
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/hotels?page=1&per_page=100"
This will return a JSON, like:
{
"meta": {
"total_results": 314,
"per_page": 100,
"total_pages": 4,
"page": 1
},
"hotels": [
{
"id": 1001,
"subscription_id": 2008,
"name": "Client Hotel 1",
"stars": 3,
"brand_code": "AB123",
"competitors": [
{
"id": 2001,
"name": "Competitor hotel 1",
"stars": 2,
},
{
"id": 2002,
"name": "Competitor hotel 2",
"stars": null,
}
],
"competitor_sets": [
{
"id": -1,
"name": "RMS",
"competitor_ids": [
2001
]
},
{
"id": 1,
"name": "App Primary",
"competitor_ids": [
2001,
2002
]
}
],
"subscribed_features": [
{
"id": "rates",
"otas": [
"bookingdotcom",
"expedia",
"branddotcom"
]
},
{
"id": "ranking",
"otas": [
"bookingdotcom",
"expedia",
"tripadvisor"
]
},
{
"id": "marketinsight_searches",
"supported_search_types": [
0,
1,
2,
3
]
}
],
},
{
"id": 1002,
"subscription_id": 2009,
"name": "Client Hotel 2",
"stars": 4,
"brand_code": "",
"competitors": [
{
"id": 2003,
"name": "Competitor hotel 3",
"stars": 3,
}
],
"competitor_sets": [
{
"id": -1,
"name": "RMS",
"competitor_ids": [
2003
]
}
],
"subscribed_features": [
{
"id": "rates",
"otas": [
"bookingdotcom",
"expedia",
"branddotcom"
]
}
],
},
// ... 98 more results
]
}
If you don't have Market searches, the
marketinsight_searchesinsubscribed_featureswill not be present.In CSV format this looks like:
HotelID,HotelName,HotelStars,CompetitorID,CompetitorName,CompetitorStars,CompsetID,CompsetName,SubscriptionID,BrandCode
1001,Client Hotel 1,3,2001,Competitor hotel 1,2,-1,RMS,2008,AB123
1001,Client Hotel 1,3,2001,Competitor hotel 1,2,1,App Primary,2008,AB123
1001,Client Hotel 1,3,2002.Competitor hotel 2,,1,App Primary,2008,AB123
1002,Client Hotel 2,4,2003,Competitor hotel 3,3,-1,RMS,2009,
...
This endpoint will return the list of hotels that you can query data for, plus their compsets.
The competitor_sets resource contains a mapping of which competitor ids are in which compset. This can be used to determine which compset to query.
The compsets can not be set from the API; they can only be configured from the Lighthouse dashboard.
You can check which APIs you can access for the client hotel via the subscribed_features resource. For the relevant APIs you can also see which OTAs the client hotel is subscribed to. This resource is only exported through the JSON API.
This endpoint supports pagination to enable fetching large amounts of hotels efficiently. We recommend using pagination when requesting more than 100 results. When no pagination parameters are passed, no pagination will be done.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| format | string |
Specify the output format. Supported formats are: json (the default) and csv. |
| page | int |
The page of results to return. Starts from 1. When ommitted, no pagination will be done. If the requested page is out of bounds, an error will be returned along with the status code 400. |
| per_page | int |
The maximum number of results to return in one request. Only applies when the page parameter is specified.Default: 100, Min: 1, Max: 100. |
Objects returned
Client Hotel:
| Property | Type | Description |
|---|---|---|
| id | int |
Unique ID of the physical client hotel. |
| subscription_id | int |
Unique ID of the client subscription. This ID can be used to query the other APIs. |
| name | string |
Name of the client hotel. |
| stars | int |
Amount of stars of the client hotel. If unknown: null in json format, empty string in csv format. |
| brand_code | string |
Brand code of the hotel. If unknown: empty string. |
| competitors | list |
Competitors of the client hotel. |
| competitor_sets | list |
Compsets of the client hotel. |
| subscribed_features | list |
APIs you can access for the client hotel. |
Competitor hotel:
| Property | Type | Description |
|---|---|---|
| id | int |
Unique ID of the competitor hotel. |
| name | string |
Name of the competitor hotel. |
| stars | int |
Amount of stars of the competitor hotel. If unknown: null in json format, empty string in csv format. |
Compset:
| Property | Type | Description |
|---|---|---|
| id | int |
Unique ID of the compset, relative to the hotel. This ID can be used to query specific compsets. |
| competitor_ids | list[int] |
Competitor IDs of the client hotel contained in this compset. |
| name | string |
Name of the compset. |
Subscribed features:
| Property | Type | Description |
|---|---|---|
| id | string |
Unique id of the API resource that the client hotel has access to. |
| otas | list[string] |
OTAs the client hotel is subscribed to for the given API resource Note: this field is not present in the subscribed feature for the Market Insight Searches API (subscribed feature id marketinsight_searches). |
| supported_search_types | list[int] |
The supported search types indicate which types of searches are available through the API:
Note: this field is only present in the subscribed feature for the Market Insight Searches API (subscribed feature id marketinsight_searches). |
When pagination is enabled, meta information is returned if the format is json. The meta object contains the following properties:
| Property | Type | Description |
|---|---|---|
| page | int |
Requested page of results. |
| per_page | int |
Maximum number of hotels per page. |
| total_pages | int |
Total number of pages for this pagination configuration. |
| total_results | int |
Total number of hotels that can be requested. |
Markets API
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/markets?page=1&per_page=10"
This will return a JSON, like:
{
{
"meta": {
"page": 1,
"per_page": 10,
"total_pages": 4,
"total_results": 34
},
"markets": [
{
"id": 1000,
"name": "Client Market 1",
"subscriptions": [
{
"id": 1234
},
{
"id": 1235
},
// ... all linked subscriptions
],
"subscribed_features": [
{
"id": "parityinsight",
"name": "Parity Insight"
}
]
},
{
"id": 1001,
"name": "Client Market 2",
"subscriptions": [
{
"id": 4321
},
{
"id": 5321
},
// ... all linked subscriptions
],
"subscribed_features": [
{
"id": "parityinsight",
"name": "Parity Insight"
}
]
},
// ... 8 more results
]
}
In CSV format this looks like:
MarketID,MarketName,SubscriptionID
1000,Client Market 1,1234
1000,Client Market 1,1235
1001,Client Market 2,4321
1001,Client Market 2,5321
...
This endpoint will return the list of markets that you can query data for.
You can check which APIs you can access for the client market via the subscribed_features resource. This resource is only exported through the JSON API.
This endpoint supports pagination to enable fetching large amounts of markets efficiently. We recommend using pagination when requesting more than 10 results. When no pagination parameters are passed, no pagination will be done.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| format | string |
Specify the output format. Supported formats are: json (the default) and csv. |
| page | int |
The page of results to return. Starts from 1. When omitted, no pagination will be done. If the requested page is out of bounds, an error will be returned along with the status code 400. |
| per_page | int |
The maximum number of results to return in one request. Only applies when the page parameter is specified.Default: 100, Min: 1, Max: 100. |
Objects returned
Client Market:
| Property | Type | Description |
|---|---|---|
| id | int |
Unique ID of the client market. |
| name | string |
Name of the client market. |
| subscriptions | list |
Client subscriptions of the client market. |
| subscribed_features | list |
APIs you can access for the client market. |
Client Subscription:
| Property | Type | Description |
|---|---|---|
| id | int |
Unique ID of the client subscription. |
Subscribed features:
| Property | Type | Description |
|---|---|---|
| id | string |
Unique id of the API resource that the client market has access to. |
| name | string |
Human readable name of the API resource that the client market has access to. |
When pagination is enabled, meta information is returned if the format is json. The meta object contains the following properties:
| Property | Type | Description |
|---|---|---|
| page | int |
Requested page of results. |
| per_page | int |
Maximum number of markets per page. |
| total_pages | int |
Total number of pages for this pagination configuration. |
| total_results | int |
Total number of markets that can be requested. |
Lowest Rates API
# Lowest available Booking.com rates (LOS1, 2p or more).
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/rates?subscriptionId=1234&ota=bookingdotcom"
# Lowest available Booking.com rates (LOS1, 2p or more).
# + ratechanges compared to 7 and 14 days ago.
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/rates?subscriptionId=1234&ota=bookingdotcom&changeDays=7,14"
# Cancellable Booking.com rates for LOS2 for 1p or more.
# All Inclusive, only suites.
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/rates?subscriptionId=1234&ota=bookingdotcom&bar=true\
&los=2&persons=1&mealType=4&roomType=suite"
# Lowest available Brand.com rates (LOS1, 2p or more)
# for the next year.
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/rates?subscriptionId=1234&ota=branddotcom&shopLength=365"
# Lowest available Booking.com rates (LOS1, 2p or more)
# for compsets -1 and 1
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/rates?subscriptionId=1234&ota=bookingdotcom&compsetIds=-1,1"
This will return a JSON, like:
{
"rates": [
{
"hotelId": 1001,
"hotelName": "Client Hotel 1",
"extractDateTime": "2016-01-01T00:00:00",
"arrivalDate": "2016-01-01",
"los": 1,
"value": 100.10,
"currency": "EUR",
"cancellable": true,
"best_flex": true,
"vatIncl": true,
"cityTaxIncl": false,
"otherTaxesIncl": false,
"roomName": "Standard Room",
"roomType": "standard",
"maxPersons": 2,
"mealTypeIncluded": 1,
"message": "",
"changes": {
"1": {
"value": 100.10,
"cancellable": true,
"best_flex": true,
"roomName": "Standard Room",
"roomType": "standard",
"message": ""
}
}
},
{
"hotelId": 2001,
"name": "Competitor hotel 1",
"extractDateTime": "2016-01-01T00:00:00",
"arrivalDate": "2016-01-01",
"los": 1,
"value": 160.00,
"currency": "EUR",
"cancellable": false,
"best_flex": false,
"vatIncl": true,
"cityTaxIncl": false,
"otherTaxesIncl": false,
"roomName": "Executive Suite",
"roomType": "suite",
"maxPersons": 2,
"mealTypeIncluded": 1,
"message": "",
"changes": {
"1": {
"value": 110.50,
"cancellable": true,
"best_flex": true,
"roomName": "Double Room",
"roomType": "standard",
"message": ""
}
}
},
{
"hotelId": 2002,
"name": "Competitor hotel 2",
"extractDateTime": "2016-01-01T00:00:00",
"arrivalDate": "2016-01-01",
"los": 1,
"value": 0,
"currency": "",
"cancellable": false,
"best_flex": false,
"vatIncl": false,
"cityTaxIncl": false,
"otherTaxesIncl": false,
"roomName": "",
"roomType": "",
"maxPersons": 2,
"mealTypeIncluded": 0,
"message": "rates.soldout",
"changes": {
"1": {
"value": 90.00,
"cancellable": false,
"best_flex": false,
"roomName": "Double Room",
"roomType": "standard",
"message": ""
}
}
}
]
}
In CSV format this looks like:
HotelID,HotelName,ExtractDateTime,ArrivalDate,Los,Value,Currency,Cancellable,Best_Flex,VatIncl,CityTaxIncl,OtherTaxesIncl,RoomName,RoomType,MaxPersons,MealTypeIncluded,Message
1001,Client Hotel 1,2016-01-01T00:00:00,2016-01-01,1,100.10,EUR,true,true,true,false,false,Standard Room, standard,2,1,
2001,Competitor hotel 1,2016-01-01T00:00:00,2016-01-01,1,160.00,EUR,false,true,true,false,false,Executive Suite,suite,2,1,
2002,Competitor hotel 2,2016-01-01T00:00:00,2016-01-01,1,0,,false,false,false,false,false,,,2,0,rates.soldout
This endpoint will return the lowest rates for the client hotel plus its (selected) compset. The returned rates are the latest data we extracted for each arrival date.
This endpoint will return the most recently shopped rate per hotel per arrival date.
Query Parameters
The API returns the lowest rate that applies to your filters.
| Parameter | Type | Description |
|---|---|---|
| subscriptionId | int |
Required ID of your subscription. |
| ota | string |
Available OTAs for the subscription can be queried using the Hotels API. Default: bookingdotcom. |
| los | int |
Length of stay. Default: 1, Min: 1, Max: 45. |
| bar | bool |
Filter to return only Best Flex rates. Can not be applied for hostelworld.Default: false. |
| persons | int |
Filter to return rates that accommodate at least this amount of persons. Default: 2, Min: 1, Max: 10 for bookingdotcom, 2 for others. |
| mealType | int |
Filter to only return rates that include a mealtype. One of:
|
| roomType | string |
Filter to only return rates of a roomtype. One of:
|
| fromDate | string |
Format: YYYY-MM-DD. Return rates starting from this arrival date. This can be in the past as well as in the future. |
| changeDays | list[int] |
Days with which to calculate ratechanges, relative to the local hotel date. Must be comma-separated. E.g. 1,3,7 returns changes with 1, 3 and 7 days in the past.Default: no ratechanges, min: 1, max: 30. Max 3 values allowed.Can not be used when a fromDate in the past is given. |
| shopLength | int |
Amount of days to return, starting from the current hotel's date, or from the fromDate if it was provided.Max: 365. |
| compsetIds | list[int] |
IDs of the compsets from which you want to include the competitors. Default: 1, the primary compset which can be configured in the app. |
| currency | string |
Specify desired currency of the returned rates. Value is the 3-letter currency code (see e.g. World Currency Symbols). Default: currency of the hotel. |
| format | string |
Specify the output format. Supported formats are: json (the default) and csv. The csv output has the same values. |
Response
Type: application/json
Encoding: gzip supported
A list of Rate objects are returned, with the following properties.
| Property | Type | Description |
|---|---|---|
| hotelId | int |
Unique ID for the hotel that published the rate. |
| hotelName | string |
Name for the hotel that published the rate. |
| extractDateTime | string |
UTC timestamp upon which the rate was shopped. Format: YYYY-MM-DDTHH:MM:SS. |
| arrivalDate | string |
Arrival date. Format: as YYYY-MM-DD. |
| los | int |
Length of stay. |
| value | float |
Value of the rate. |
| currency | string |
Currency of the rate. |
| shopCurrency | string |
Original currency that the rate was shopped in. |
| cancellable | bool |
Whether the rate is cancellable. |
| best_flex | bool |
Whether the rate is the best flex rate. |
| vatIncl | bool |
Whether VAT is included. |
| cityTaxIncl | bool |
Whether city taxes are included. |
| otherTaxesIncl | bool |
Whether other taxes or extra charges are included. |
| roomName | string |
Name of the room. |
| roomType | string |
Type of the room. |
| maxPersons | int |
Maximum amount of adults the room can accommodate. |
| mealTypeIncluded | int |
Which mealtype is included. One of:
|
| message | string |
An error message, one of:
value will be 0. |
| changes | map[string]RateChange |
A map keyed on the offset to the extractdate. |
Each Rate object can contain up to 3 RateChange objects, with the following properties.
| Property | Type | Description |
|---|---|---|
| value | float |
Value of the rate, x days ago. |
| cancellable | bool |
Whether the rate was cancellable, x days ago. |
| best_flex | bool |
Whether the rate is the best flex rate. |
| roomName | string |
Name of the room. |
| roomType | string |
Type of the room. |
| message | string |
An error message, one of:
value will be 0. |
Lowest Rates per Roomtype
# Lowest Rates for all roomtypes
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" "https://api.mylighthouse.com/v3/roomtyperates?subscriptionId=1234"
This endpoint will return the Lowest Rates for the client hotel plus its (selected) compset for every available roomtype. The returned rates are the latest data we extracted for each arrival date.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| subscriptionId | int |
Required ID of your subscription. |
| ota | string |
Available OTAs for the subscription can be queried using the Hotels API. Default: bookingdotcom. |
| los | int |
Length of stay. Default: 1, Min: 1, Max: 45. |
| bar | bool |
Filter to return only Best Flex rates. Can not be applied for hostelworld.Default: false. |
| persons | int |
Filter to return rates that accommodate at least this amount of persons. Default: 2, Min: 1, Max: 10 for bookingdotcom, 2 for others. |
| mealType | int |
Filter to only return rates that include a mealtype. One of:
|
| fromDate | string |
Format: YYYY-MM-DD. Return rates starting from this arrival date. This can be in the past as well as in the future. |
| shopLength | int |
Amount of days to return, starting from the current hotel's date, or from the fromDate if it was provided.Default: depends on the subscription's shop configuration. Max: 365. |
| compsetIds | list[int] |
IDs of the compsets from which you want to include the competitors. Default: 1, the primary compset which can be configured in the app. |
| currency | string |
Specify desired currency of the returned rates. Value is the 3-letter currency code (see e.g. World Currency Symbols). Default: currency of the hotel. |
| format | string |
Specify the output format. Supported formats are: json (the default) and csv. The csv output has the same values. |
Response
This will return a JSON, like:
{
"rates": [
{
"hotelId": 1001,
"hotelName": "Client Hotel 1",
"extractDateTime": "2016-01-01T00:00:00",
"arrivalDate": "2016-01-01",
"los": 1,
"value": 100.10,
"currency": "EUR",
"cancellable": true,
"best_flex": true,
"vatIncl": true,
"cityTaxIncl": false,
"otherTaxesIncl": false,
"roomName": "Standard Room",
"roomType": "standard",
"maxPersons": 2,
"mealTypeIncluded": 1,
"message": ""
},
{
"hotelId": 1001,
"name": "Client Hotel 1",
"extractDateTime": "2016-01-01T00:00:00",
"arrivalDate": "2016-01-01",
"los": 1,
"value": 160.00,
"currency": "EUR",
"cancellable": true,
"best_flex": true,
"vatIncl": true,
"cityTaxIncl": false,
"otherTaxesIncl": false,
"roomName": "Executive Suite",
"roomType": "suite",
"maxPersons": 2,
"mealTypeIncluded": 1,
"message": ""
},
{
"hotelId": 1001
"name": "Client Hotel 1",
"extractDateTime": "2016-01-01T00:00:00",
"arrivalDate": "2016-01-01",
"los": 1,
"value": 120,
"currency": "EUR",
"cancellable": true,
"best_flex": true,
"vatIncl": true,
"cityTaxIncl": false,
"otherTaxesIncl": false,
"roomName": "Premium Room",
"roomType": "premium",
"maxPersons": 2,
"mealTypeIncluded": 1,
"message": ""
}
]
}
Lowest Historic Rates per Roomtype
# Lowest Rates for all roomtypes, as extracted on the specified date
curl -H "X-Oi-Authorization: <YOURAPITOKEN>"\
"https://api.mylighthouse.com/v3/historic/roomtyperates?subscriptionId=1234&extractDate=2022-07-01"
This extracts the lowest rates per roomtype that were extracted on a specific date. The interface to the API is the same as for the Lowest Rates per Roomtype API, except for the endpoint URL and the definition of a few parameters which are listed in the table below. This endpoint is not available for trial subscriptions.
| Parameter | Type | Description |
|---|---|---|
| extractDate | string |
Format: YYYY-MM-DD. Return rates that were extracted on this specific date. The extractDate parameter accepts a date up to 365 days in the past. |
Lowest Historic Rates
# Lowest available Booking.com rates (LOS1, 2p or more), as extracted on the specified date.
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/historic/rates?subscriptionId=1234&ota=bookingdotcom&extractDate=2022-07-01"
The lowest rates that were extracted on a specific date can be exported as well. The interface to the API is the same as for the Lowest Rates API, except for the endpoint URL and the definition of a few parameters which are listed in the table below. This endpoint is not available for trial subscriptions.
| Parameter | Type | Description |
|---|---|---|
| extractDate | string |
Format: YYYY-MM-DD. Return rates that were extracted on this specific date. The extractDate parameter accepts a date up to 365 days in the past. |
| changeDays | list[int] |
Days with which to calculate ratechanges, relative to the given extract date. Must be comma-separated. E.g. 1,3,7 returns changes with 1, 3 and 7 days in the past.Default: no ratechanges, min: 1, max: 30. Max 3 values allowed. |
Demand API
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/demand?subscriptionId=1234"
This will return a JSON, like:
{
"demands": [
{
"hotelId": 1001,
"hotelName": "Client Hotel 1",
"extractDateTime": "2016-02-10",
"arrivalDate": "2016-02-10",
"demand": 0.5278,
"message": ""
},
{
"hotelId": 1001,
"hotelName": "Client Hotel 1",
"extractDateTime": "2016-02-10",
"arrivalDate": "2016-02-11",
"demand": 0.7325,
"message": ""
},
{
"hotelId": 1001,
"hotelName": "Client Hotel 1",
"extractDateTime": "2016-02-10",
"arrivalDate": "2016-02-12",
"demand": 0,
"message": "general.missing"
}
]
}
In CSV format this looks like:
HotelID,HotelName,ExtractDateTime,ArrivalDate,Demand,Message
1001,Client Hotel 1,2016-02-10,2016-02-10,0.5278,
1001,Client Hotel 1,2016-02-10,2016-02-11,0.7325,
1001,Client Hotel 1,2016-02-10,2016-02-12,0,general.missing
This endpoint will return the most recent market demand prediction per arrival date.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| subscriptionId | int |
Required ID of your subscription. |
| numberOfArrivalDates | int |
Specify the number of arrival dates you want to receive demand data for. Note: |
| format | string |
Specify the output format. Supported formats are: json (the default) and csv. The csv output has the same values. |
Objects returned
Type: application/json
Encoding: gzip supported
A list of Demand objects are returned, one for each arrival date, with the following properties.
| Property | Type | Description |
|---|---|---|
| hotelId | int |
Unique ID for the hotel. |
| hotelName | string |
Name for the hotel. |
| extractDateTime | string |
UTC timestamp upon which the demand was calculated. Format: YYYY-MM-DD. |
| arrivalDate | string |
Arrival date. Format: as YYYY-MM-DD. |
| demand | float |
The forecasted market demand. |
| message | string |
An error message, one of:
demand will be 0. |
Ranking API
# Booking.com ranking.
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/ranking?subscriptionId=1234&ota=bookingdotcom"
This will return a JSON, like:
{
"rankings": [
{
"hotelId": 1001,
"hotelName": "Client Hotel 1",
"extractDateTime": "2016-02-10",
"arrivalDate": "2016-02-10",
"ranking": 1,
"availableHotels": 100,
"message": ""
},
{
"hotelId": 2001,
"name": "Competitor hotel 1",
"extractDateTime": "2016-02-10",
"arrivalDate": "2016-02-10",
"ranking": 0,
"availableHotels": 0,
"message": "ranking.soldout"
},
{
"hotelId": 2002,
"name": "Competitor hotel 2",
"extractDateTime": "2016-02-10",
"arrivalDate": "2016-02-10",
"ranking": 3,
"availableHotels": 100,
"message": ""
}
]
}
In CSV format this looks like:
HotelID,HotelName,ExtractDateTime,ArrivalDate,Ranking,AvailableHotels,Message
1001,Client Hotel 1,2016-02-10,2016-02-10,1,100,
2001,Competitor hotel 1,2016-02-10,2016-02-10,0,0,ranking.soldout
2002,Competitor hotel 2,2016-02-10,2016-02-10,3,100,
This endpoint will return ranking position for each arrival date for the client hotel plus its (selected) compset.
This endpoint will return the most recently shopped ranking per arrival date, for the next 90 days.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| subscriptionId | int |
Required ID of your subscription. |
| ota | string |
Available OTAs for the subscription can be queried using the Hotels API. Default: bookingdotcom. |
| compsetIds | list[int] |
IDs of the compsets from which you want to include the competitors. Default: 1, the primary compset which can be configured in the app. |
| format | string |
Specify the output format. Supported formats are: json (the default) and csv. The csv output has the same values. |
Objects returned
Type: application/json
Encoding: gzip supported
A list of Ranking objects are returned, with the following properties.
| Property | Type | Description |
|---|---|---|
| hotelId | int |
Unique ID for the hotel. |
| hotelName | string |
Name for the hotel. |
| extractDateTime | string |
UTC timestamp upon which the ranking was extracted. Format: YYYY-MM-DD. |
| arrivalDate | string |
Arrival date. Format: as YYYY-MM-DD. |
| ranking | int |
The hotel's position when searching for hotels in its city. |
| availableHotels | int |
The amount of available hotels in the city. |
| message | string |
An error message, one of:
ranking will be 0. |
Ranking summaries API
# Booking.com ranking summaries.
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/rankingsummaries?subscriptionId=1234&ota=bookingdotcom"
This will return a JSON, like:
{
"rankingsummaries": [
{
"hotelId": 1001,
"hotelName": "Client Hotel 1",
"extractDateTime": "2016-02-10",
"ranking": 1,
"availableHotels": 100,
"year": 2016,
"month": 2,
"week": 5,
"message": "",
"los": 1
},
{
"hotelId": 2001,
"name": "Competitor hotel 1",
"extractDateTime": "2016-02-10",
"ranking": 0,
"availableHotels": 0,
"year": 2016,
"month": 2,
"week": 5,
"message": "ranking.soldout",
"los": 1
},
{
"hotelId": 2002,
"name": "Competitor hotel 2",
"extractDateTime": "2016-02-10",
"ranking": 3,
"availableHotels": 100,
"year": 2016,
"month": 2,
"week": 5,
"message": "",
"los": 1
}
]
}
In CSV format this looks like:
HotelID,HotelName,ExtractDateTime,Ranking,AvailableHotels,Year,Month,Week,Message,Los
1001,Client Hotel 1,2016-02-10,1,100,2016,2,5,,1
2001,Competitor hotel 1,2016-02-10,0,0,2016,2,5,ranking.soldout,,1
2002,Competitor hotel 2,2016-02-10,3,100,2016,2,5,,1
This endpoint will return the average ranking for the client hotel plus its (selected) compset.
This endpoint will return the average ranking, for the past 12 months or 12 weeks (based on selected granularity).
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| subscriptionId | int |
Required ID of your subscription. |
| ota | string |
Required ota id. Available OTAs for the subscription can be queried using the Hotels API. |
| granularity | string |
One of:
weekly. |
| compsetIds | list[int] |
IDs of the compsets from which you want to include the competitors. Default: 1, the primary compset which can be configured in the app. |
| format | string |
Specify the output format. Supported formats are: json (the default) and csv. The csv output has the same values. |
Objects returned
Type: application/json
Encoding: gzip supported
A list of Rankingsummary objects are returned, with the following properties.
| Property | Type | Description |
|---|---|---|
| hotelId | int |
Unique ID for the hotel. |
| hotelName | string |
Name for the hotel. |
| extractDateTime | string |
UTC timestamp upon which the ranking was extracted. Format: YYYY-MM-DD. |
| ranking | int |
The hotel's position when searching for hotels in its city. |
| availableHotels | int |
The amount of available hotels in the city. |
| year | int |
The year of this ranking summary. |
| month | int |
The month of this ranking summary. |
| week | int |
The week of this ranking summary. |
| message | string |
An error message, one of:
ranking will be 0. |
| los | int |
The length of stay for this ranking summary. |
Review summaries API
# Booking.com review summaries.
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/reviews?subscriptionId=1234&ota=bookingdotcom&granularity=weekly"
This will return a JSON, like:
{
"reviews": [
{
"hotelId": 1001,
"hotelName": "Client Hotel 1",
"reviews": 1955,
"score": 7.900000000000004,
"year": 2016,
"month": 10,
"week": 39,
"granularity": "monthly",
"message": "",
"maxScore": 10
},
{
"hotelId": 2001,
"hotelName": "Competitor hotel 1",
"reviews": 3344,
"score": 8.722580645161285,
"year": 2016,
"month": 10,
"week": 39,
"granularity": "monthly",
"message": "",
"maxScore": 10
},
{
"hotelId": 2002,
"hotelName": "Competitor hotel 2",
"reviews": 2261,
"score": 8.599999999999998,
"year": 2016,
"month": 10,
"week": 39,
"granularity": "monthly",
"message": "",
"maxScore": 10
}
]
}
In CSV format this looks like:
csv HotelID, HotelName, Reviews, Score, Year, Month, Week, Granularity, Message, MaxScore 1001,Client hotel 1,1955,7.9,2016,10,39,monthly,,10 2001,Competitor hotel 1,3344,8.72,2016,10,39,monthly,,10 2002,Competitor hotel 2,2261,8.60,2016,10,39,monthly,,10
This endpoint will return reviewscores for the client hotel plus its(selected) compset.
This endpoint will return the average reviewscore, for the past 12 months or 12 weeks(based on selected granularity).
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| subscriptionId | int |
Required ID of your subscription. |
| ota | string |
Required ota id. Available OTAs for the subscription can be queried using the Hotels API. |
| granularity | string |
One of:
weekly. |
| compsetIds | list[int] |
IDs of the compsets from which you want to include the competitors. Default: 1, the primary compset which can be configured in the app. |
| format | string |
Specify the output format. Supported formats are: json (the default) and csv. The csv output has the same values. |
Objects returned
Type: application / json
Encoding: gzip supported
A list of ** Review ** objects are returned, with the following properties.
| Property | Type | Description |
|---|---|---|
| hotelId | int |
Unique ID for the hotel. |
| hotelName | string |
Name for the hotel. |
| reviews | int |
The number of reviews this average is based on. |
| score | float |
The reviewscore. |
| year | int |
The year of this reviewscore. |
| month | int |
The month of this reviewscore. |
| week | int |
The week of this reviewscore. |
| message | string |
An error message, one of:
score will be 0. |
| maxScore | int |
The maximum reviewscore available on the requested OTA. |
Parity API
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/parities?subscriptionId=1234"
This will return a JSON, like:
{
"parities": [{
"hotelId": 1000,
"hotelName": "Client Hotel 1",
"arrivalDate": "2016-01-01",
"los": 1,
"currency": "EUR",
"rates": [{
"hotelId": 1000,
"hotelName": "Client Hotel 1",
"extractDateTime": "2016-01-01T00:00:00",
"arrivalDate": "2016-01-01",
"los": 1,
"value": 295.50,
"currency": "EUR",
"cancellable": true,
"best_flex": true,
"vatIncl": true,
"cityTaxIncl": false,
"otherTaxesIncl": false,
"roomName": "Standard Room",
"roomType": "standard",
"maxPersons": 2,
"mealTypeIncluded": 1,
"message": "",
"ota": "bookingdotcom",
"isBaserate": false,
"positionToBaserate": 1,
"channel": "bookingdotcom"
},
{
"hotelId": 1000,
"hotelName": "Client Hotel 1",
"extractDateTime": "2016-01-01T00:00:00",
"arrivalDate": "2016-01-01",
"los": 1,
"value": 279.10,
"currency": "EUR",
"cancellable": true,
"best_flex": true,
"vatIncl": true,
"cityTaxIncl": false,
"otherTaxesIncl": false,
"roomName": "Standard Room",
"roomType": "standard",
"maxPersons": 2,
"mealTypeIncluded": 1,
"message": "",
"ota": "branddotcom",
"isBaserate": true,
"positionToBaserate": 0,
"channel": "branddotcom"
}]
},
{
"hotelId": 1000,
"hotelName": "Client Hotel 1",
"arrivalDate": "2016-01-02",
"los": 1,
"currency": "EUR",
"rates": [{
"hotelId": 1000,
"hotelName": "Client Hotel 1",
"extractDateTime": "2016-01-01T00:00:00",
"arrivalDate": "2016-01-02",
"los": 1,
"value": 281.30,
"currency": "EUR",
"cancellable": true,
"best_flex": true,
"vatIncl": true,
"cityTaxIncl": false,
"otherTaxesIncl": false,
"roomName": "Standard Room",
"roomType": "standard",
"maxPersons": 2,
"mealTypeIncluded": 1,
"message": "",
"ota": "bookingdotcom",
"isBaserate": false,
"positionToBaserate": 0,
"channel": "bookingdotcom"
},
{
"hotelId": 1000,
"hotelName": "Client Hotel 1",
"extractDateTime": "2016-01-01T00:00:00",
"arrivalDate": "2016-01-02",
"los": 1,
"value": 280.10,
"currency": "EUR",
"cancellable": true,
"best_flex": true,
"vatIncl": true,
"cityTaxIncl": false,
"otherTaxesIncl": false,
"roomName": "Standard Room",
"roomType": "standard",
"maxPersons": 2,
"mealTypeIncluded": 1,
"message": "",
"ota": "branddotcom",
"isBaserate": true,
"positionToBaserate": 0,
"channel": "branddotcom"
}]
}]
}
In CSV format this looks like:
HotelID,HotelName,ArrivalDate,Los,Currency,Ota,IsBaserate,PositionToBaserate,Channel,ExtractDateTime,Value,Cancellable,Best_Flex,VatIncl,CityTaxIncl,OtherTaxesIncl,RoomName,RoomType,MaxPersons,MealTypeIncluded,Message,ShopCurrency
1000,Client Hotel 1,2016-01-01,1,EUR,bookingdotcom,false,1,bookingdotcom,2016-01-01T00:00:00,295.50,true,true,true,false,false,Standard Room,standard,2,1,,EUR
1000,Client Hotel 1,2016-01-01,1,EUR,branddotcom,true,0,branddotcom,2016-01-01T00:00:00,279.10,true,true,true,false,false,Standard Room,standard,2,1,,EUR
1000,Client Hotel 1,2016-01-02,1,EUR,bookingdotcom,false,0,bookingdotcom,2016-01-01T00:00:00,280.10,true,true,true,false,false,Standard Room,standard,2,1,,EUR
1000,Client Hotel 1,2016-01-02,1,EUR,branddotcom,true,0,branddotcom,2016-01-01T00:00:00,280.10,true,true,true,false,false,Standard Room,standard,2,1,,EUR
This endpoint will return the most recent parity rates per arrival date.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| subscriptionId | int |
Required ID of your subscription. |
| los | int |
Length of stay. Default: 1, Min: 1, Max: 7. |
| bar | bool |
Filter to return only Best Flex rates. Default: false. When this filter is applied with the value of true, the api won't return any metasearch rates. |
| persons | int |
Filter to return rates that accommodate at least this amount of persons. Default: 2, Min: 1, Max: 2. |
| mealType | int |
Filter to only return rates that include a mealtype. One of:
|
| roomType | string |
Filter to only return rates of a roomtype. One of:
|
| fromDate | string |
Format: YYYY-MM-DD. Return rates starting from this arrival date. This date should be greater than or equal to the current local date of the hotel. |
| shopLength | int |
Amount of days to return, starting from the current hotel's date, or from the fromDate if it was provided.Default: depends on the subscription's shop configuration. Max: 365. |
| currency | string |
Specify desired currency of the returned rates. Value is the 3-letter currency code (see e.g. World Currency Symbols). Default: currency of the hotel. |
| format | string |
Specify the output format. Supported formats are: json (the default) and csv. The csv output has the same values. |
Objects returned
Type: application/json
Encoding: gzip supported
A list of Parity objects are returned, with the following properties.
| Property | Type | Description |
|---|---|---|
| hotelId | int |
Unique ID for the hotel. |
| hotelName | string |
Name for the hotel. |
| arrivalDate | string |
Arrival date. Format: as YYYY-MM-DD. |
| los | int |
Length of stay. |
| currency | string |
Currency of the rates. |
| rates | list[Rate] |
A list of rates. |
Each Parity object can contain several Rate objects, one for each ota, with the following properties.
| Property | Type | Description |
|---|---|---|
| hotelId | int |
Unique ID for the hotel that published the rate. |
| hotelName | string |
Name for the hotel that published the rate. |
| extractDateTime | string |
UTC timestamp upon which the rate was shopped. Format: YYYY-MM-DDTHH:MM:SS. |
| arrivalDate | string |
Arrival date. Format: as YYYY-MM-DD. |
| los | int |
Length of stay. |
| value | float |
Value of the rate. |
| currency | string |
Currency of the rate. |
| shopCurrency | string |
Original currency that the rate was shopped in. |
| cancellable | bool |
Whether the rate is cancellable. |
| best_flex | bool |
Whether the rate is the best flex rate. |
| vatIncl | bool |
Whether VAT is included. |
| cityTaxIncl | bool |
Whether city taxes are included. |
| otherTaxesIncl | bool |
Whether other taxes or extra charges are included. |
| roomName | string |
Name of the room. |
| roomType | string |
Type of the room. |
| maxPersons | int |
Maximum amount of adults the room can accommodate. |
| mealTypeIncluded | int |
Which mealtype is included. One of:
|
| message | string |
An error message, one of:
value will be 0. |
| ota | string |
Online Travel Agency. |
| isBaserate | bool |
Whether the rate is used as reference for the other rates within the same parity. |
| positionToBaserate | int |
How the rate compares to the baserate. One of:
|
| channel | string |
The channel on which the rate is published when the ota is a metasearch site, the ota itself otherwise. |
Parity Insight API
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/parityinsight?market_id=1000&extract_date=2019-01-02"
This will return a JSON, like:
{
"aggregations": [
{
"value": "all",
"aggregation_values": [
{
"value": "all",
"subscriptions": [
{
"id": "1000",
"parity_score": {
"win": 100,
"meet": 50,
"loss": 10,
"unavailable": 25
}
},
{
"id": "200",
"parity_score": {
"win": 200,
"meet": 300,
"loss": 50,
"unavailable": 100
}
}
]
}
]
},
{
"value": "channel",
"aggregation_values": [
{
"value": "bookingdotcom",
"subscriptions": [
{
"id": "1000",
"parity_score": {
"win": 50,
"meet": 20,
"loss": 10,
"unavailable": 10
}
},
{
"id": "2000",
"parity_score": {
"win": 75,
"meet": 100,
"loss": 5,
"unavailable": 50
}
}
]
},
{
"value": "expedia",
"subscriptions": [
{
"id": "1000",
"parity_score": {
"win": 50,
"meet": 30,
"loss": 1,
"unavailable": 15
}
},
{
"id": "2000",
"parity_score": {
"win": 125,
"meet": 200,
"loss": 5,
"unavailable": 30
}
}
]
}
]
},
{
"value": "source",
"aggregation_values": [
{
"value": "direct",
"subscriptions": [
{
"id": "1000",
"parity_score": {
"win": 35,
"meet": 10,
"loss": 0,
"unavailable": 0
}
},
{
"id": "2000",
"parity_score": {
"win": 100,
"meet": 100,
"loss": 0,
"unavailable": 0
}
}
]
},
{
"value": "tripadvisor",
"subscriptions": [
{
"id": "1000",
"parity_score": {
"win": 35,
"meet": 10,
"loss": 5,
"unavailable": 10
}
},
{
"id": "2000",
"parity_score": {
"win": 50,
"meet": 100,
"loss": 50,
"unavailable": 25
}
}
]
},
{
"value": "trivago",
"subscriptions": [
{
"id": "1000",
"parity_score": {
"win": 30,
"meet": 10,
"loss": 5,
"unavailable": 25
}
},
{
"id": "2000",
"parity_score": {
"win": 50,
"meet": 100,
"loss": 50,
"unavailable": 75
}
}
]
}
]
}
]
}
This endpoint returns the parity scores for the subscriptions within a market aggregated by different aggregations.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| market_id | int |
Required ID of your market. |
| extract_date | string |
Date of extraction. Format: YYYY-MM-DD. Default: Last known extract_date. |
| date_aggregation | string |
Indications whether monthly or weekly aggregations should be returned. One of:
Default: week
|
| aggregations | List[string] |
Filter to return a subset of the aggregations. Multiple aggregations can be specified. Must be comma-separated. Possible aggregations:
Default: Filter is not applied and all aggregations are returned. |
| subscription_ids | List[int] |
Filter to return the results of a subset of subscription. Must be comma-separated. Default: No filter is applied and data for all subscriptions is returned. |
| source | string |
Filter to only return the results of a specific source. |
| channel | string |
Filter to only return the results of a specific channel. |
| base_membership_type | int |
Return parity scores where for the base rates in the parity comparisons, the specified membership type is used. One of:
0 (public rates). |
| los | int |
Return parity scores for the specified length of stay. Default: your subscription's default LOS setting. |
| pos | string |
Return parity scores for the specified point of sale. Default: unspecified (i.e. your "default POS": for a given channel we use your hotel's country as POS if we have the support for it, otherwise we fallback to a sensible default). |
| mealtype | int |
Return parity scores for the specified meal type. One of:
0: Any meal plan. |
| rate_type | int |
Return parity scores for the specified rate type. One of:
0: Lowest. |
| platform | int |
Filter to only return the results of a specific platform. One of:
|
Objects returned
Type: application/json
Encoding: gzip supported
A list of Aggregation objects is returned. An Aggregation object has the following properties:
| Property | Type | Description |
|---|---|---|
| value | string |
The name of the aggregation. |
| aggregation_values | List[AggregationValue] |
A List of all the aggregation values within the aggregation. |
Each AggregationValue corresponds with a specific value of the Aggregation and has the following properties
| Property | Type | Description |
|---|---|---|
| value | string |
The name of the aggregation value |
| subscriptions | List[Subscription] |
A List of all subscriptions together |
Each Subscription object within a AggregationValue contains the ParityScore for that specific AggregationValue.
The Subscription object has the following properties:
| Property | Type | Description |
|---|---|---|
| id | string |
Unique identifier for the subscription |
| parity_score | ParityScore |
A List of all subscriptions together. |
The Parity Score has the actual score for the specific subscription and has the following properties:
| Property | Type | Description |
|---|---|---|
| win | int |
Number of shops for which the rate is higher than the brand.com rate. |
| meet | int |
Number of shops for which the rate is equal to the brand.com rate. |
| loss | int |
Number of shops for which the rate is lower than the brand.com rate. |
| unavailable | int |
Number of unavailable rates for the given segmentation. |
Market Insight Demand API
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/marketinsight?subscriptionId=1234"
This will return a JSON, like:
{
"summaries": [
{
"stay_date": "2021-05-31",
"price_level": 6,
"demand_index": 6,
"demand_raw": 0.2970510064859896,
"message": ""
},
{
"stay_date": "2021-06-01",
"price_level": 3,
"demand_index": 5,
"demand_raw": 0.2685118997552884,
"message": ""
},
{
"stay_date": "2021-06-02",
"price_level": 1,
"demand_index": 1,
"demand_raw": -0.2545039663338059,
"message": ""
},
{
"stay_date": "2021-06-03",
"price_level": 3,
"demand_index": 4,
"demand_raw": 0.07745381444151601,
"message": ""
},
{
"stay_date": "2021-06-04",
"price_level": 0,
"demand_index": 0,
"demand_raw": 0.0,
"message": "general.missing"
}
]
}
This endpoint returns the demand summaries for the next 351 days.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| subscriptionId | int |
Required ID of your subscription. |
Objects returned
Type: application/json
A list of Summary objects is returned. A Summary object has the following properties:
| Property | Type | Description |
|---|---|---|
| stay_date | string |
Date of stay. Format: as YYYY-MM-DD. |
| price_level | int |
The requested subscription’s pricing level compared to their “usual” price which is a smart weighted average we establish as a benchmark for the exact same combination of room type and rate plan for all future days for that subscriber. The room type used to return this value is considered the most representative room type, assuming a rather steady hierarchy amongst room types within the hotel. One of:
|
| demand_index | int |
Market demand forecasted for the submarket of the requested subscription. The levels and their boundaries are calculated dynamically every day depending on the distribution of the underlying raw demand index. One of:
|
| demand_raw | float |
Raw market demand forecasted for the submarket of the requested subscription, where:
-1 from the bottom, but are not limited from the top. |
| message | string |
An error message, one of:
general.missing message is supplied, the price_level, demand_index and demand_raw will be 0. If the rates.price_level_missing message is supplied price_level will be 0. |
Market Insight Searches API
curl -H "X-Oi-Authorization: <YOURAPITOKEN>" \
"https://api.mylighthouse.com/v3/marketinsight/searches?subscriptionId=1234"
This will return a JSON, like:
{
"searches": [
{
"stay_date": "2022-09-19",
"type": 0,
"search_level": 2,
"search_index": 3.14,
"most_searched_los": 2,
"country_searches": [
{
"country": "BE",
"search_fraction": 0.3002339238,
"average_los": 4.1614555313
},
{
"country": "NL",
"search_fraction": 0.103371291,
"average_los": 4.6568052242
},
{
"country": "FR",
"search_fraction": 0.0728167280,
"average_los": 5.0816721938
},
],
"message": ""
},
{
"stay_date": "2022-09-19",
"type": 1,
"search_level": 0,
"search_index": 2.23,
"most_searched_los": 2,
"country_searches": [],
"message": ""
},
{
"stay_date": "2022-09-20",
"type": 0,
"search_level": 1,
"search_index": 0,
"most_searched_los": 0,
"country_searches": [],
"message": "general.missing"
},
{
"stay_date": "2022-09-20",
"type": 1,
"search_level": 1,
"search_index": 2.72,
"most_searched_los": 2,
"country_searches": [],
"message": ""
}
]
}
This endpoint returns the search summaries for the next 351 days.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| subscriptionId | int |
Required ID of your subscription. |
Objects returned
Type: application/json
A list of SearchSummary objects is returned. A SearchSummary object summarizes the number of flight/hotel searches of the hotel's destination.
A SearchSummary object has the following properties:
| Property | Type | Description |
|---|---|---|
| stay_date | string |
The stay date for which the SearchSummary summarizes search data.Format: as YYYY-MM-DD.
|
| type | int |
The type of search data the SearchSummary object summarizes. There are multiple types of sources from which we obtain search data. One of:
|
| search_level | int |
Level of searches for the given stay date. It is a value that indicates whether the number of searches on the given stay date is Lower/Normal/Higher compared to what is usually observed for similar leadtimes for the destination of your hotel. One of:
|
| search_index | float |
Normalized search volume for the given stay date. It is a continuous number between 0 and +∞ that indicates how high the search volume is for a given stay date compared to all 351 future stay dates. For the normalization, only the search data of the same search type is used. |
| most_searched_los | int |
The LOS that appears most often in the searches for the given stay date. |
| country_searches | list[CountrySearchSummary] |
The top 10 countries searching for the given stay date. Note:
|
| message | string |
An error message, one of:
general.missing message is supplied, search_level will be 1, search_index will be 0, most_searched_los will be 0 and country_searches will be an empty list. |
A CountrySearchSummary object has the following properties:
| Property | Type | Description |
|---|---|---|
| country | string |
ISO alpha-2 country code of the origin country of the searches. |
| search_fraction | float |
The fraction of the searches originated in this country. |
| average_los | float |
The average LOS of the searches originating from this origin country. Note: the average LOS is calculated based on the arrival date. |
Changelog
12 February 2026
- Most endpoints are documented without the need for an API token.
6 February 2026
- The Parity Insight API now supports the following query parameters:
los,pos,mealtype,rate_type,platform.
19 December 2025
- The Parity Insight API now supports the
base_membership_typequery parameter.
14 July 2025
- The demand API now supports the
numberOfArrivalDatesquery parameter.
9 November 2023
- The domain of the API has been updated to api.mylighthouse.com
1 June 2023
- Add the
losfield to theRankingSummaryobject and to the latest column of the csv export ofRankingSummary. - Add the
maxScorefield to theReviewobject in the Review summaries API and to the latest column of the csv.
28 November 2022
- Add the
search_indexfield to theSearchSummaryobject - Fix the
search_levelin the example output of the external searches API where theSearchSummaryisgeneral.missing
04 November 2022
- Add the
supported_search_typesfield to the documentation of the Hotels API's subscribed features.
31 October 2022
- Update description of the
country_searchesbreakdown of theSearchSummaryobject.
26 September 2022
- Added Market Insight Searches API.
- Changed header of Market Insight API to Market Insight Demand API.
12 September 2022
- New endpoint for Historic rate API's. Old endpoint has been deprecated and will disappear in the near future
30 May 2022
- V2 support has been dropped
11 January 2022
- V3 of the api is released. Changes include:
- The API token is passed through the header instead of a query parameter
-
cancellationfield is deprecated -
cancellableandbest_flexfields have been added
- V2 is deprecated. We advise you to switch to V3,
but if you still need the V2 documentation, it is available here. V2 will be available until 30 May 2022
17 December 2021
- Changed the upper bound for the LOS parameter to 45 (instead of 30) for the rates API.
22 June 2021
- Fix bug in navigation of documentation
- Allow a max
shoplengthof 365 for the Lowest Rates per Roomtype API (up from 90) - Prevented Demand API from returning one demand too many, with message
general.missing
12 March 2021
- Update descriptions of
price_level,demand_indexandraw_demand.
01 March 2021
- Added
hotelsdotcomto Hotels, Rates API.
15 December 2020
- Added the demand_raw field to the Market Insight API.
19 November 2020
- Added Market Insight API.
06 July 2020
- Changed all references of BAR rates to Best Flex rates
05 March 2020
- Simplified API docs.
- Mealtype filtering is now available for all otas.
22 February 2021
- Added
rates.price_value_missingmessage to the Market Insight API
25 November 2019
- Added Market API.
- Added Parity Insight API.
14 February 2019
- Allow higher values for the los request parameter for all OTAs.
4 February 2019
- Added brand code to the Hotels API.
24 December 2018
- Added pagination to the Hotels API.
21 December 2018
- Added
travelokato list of OTAs for rates API.
23 November 2018
- Remove support for hotelId as a request parameter for all APIs.
17 July 2018
- Add support for subscriptionId and deprecate the usage of hotelId.
13 July 2018
- Restrict access to historic rates API.
08 May 2018
- Added Parity API.
25 Apr 2018
- Added
currencyparameter to Rates API.
05 Feb 2018
- Raw Rates API added.
12 Jan 2018
- Removed
expediafrom list of supported OTAs for ranking API.
11 Jan 2018
- Added Ranking summaries API.
16 Oct 2017
- Added
hrsto list of OTAs for rates API.
21 Sep 2017
- Added
makemytripto list of OTAs for rates API. - BAR - filter is allowed for
rakutenin the rates API.
18 Sep 2017
- Added Review API.
13 Sep 2017
- Added
starsproperty to the hotels API.
31 May 2017
- Added subscribed_features field to the hotels API.
28 Mar 2017
- Added the possibility to fetch historical rates using the extractDate and fromDate parameters.
17 Mar 2017
- Added the original shop currency to the rate response.
30 Jan 2017
- Added the
CSVexport format.
11 Jan 2017
- Added the 'room only' mealtype filter.
10 Jan 2017
- Removed Tripadvisor from list of OTAs for rankings API.
04 Jan 2017
- Added GDS to list of OTAs for rates API.
19 Aug 2016
- API and documentation updated to include the selection of compsets. Backwards compatibility is ensured.
08 Apr 2016
- The API is released in production on api.otainsight.com.
17 Feb 2016
- API documentation released on otainsight.com/api.