NAV
shell

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:

To view those API endpoints, you need an access token:

Authentication

Pass the token as a header parameter X-Oi-Authorization when 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:

A customer should not do more requests without written consent from Lighthouse

Also note:

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_searches in subscribed_features will 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:
  • 0: Flight searches on Meta/OTA
  • 1: Hotel searches on GDS
  • 2: Hotel searches on Meta/OTA
  • 3: Flight searches on GDS
Searches on Meta/OTA are considered to be made for leisure purposes. Searches on GDS are considered to be made for business purposes. The search types vary based on the destination of your hotel. Some destinations do not support all types of searches.

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:
  • Filter not applied: 0
  • Breakfast included: 1
  • Half board included: 2
  • Full board included: 3
  • All inclusive: 4
  • Room only: 5
Default: filter not applied.
roomType string Filter to only return rates of a roomtype. One of:
  • dormitory
  • sharedbathroom
  • suite
  • family
  • apartment
  • parkandfly
  • camper
  • villa
  • bungalow
  • budget
  • premium
  • standard
  • single
Default: filter not applied.
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:
  • No mealtype included: 0
  • Breakfast included: 1
  • Half board included: 2
  • Full board included: 3
  • All inclusive: 4
  • Room only: 5
message string An error message, one of:
  • general.missing: no rates shopped
  • rates.soldout: no availability
  • rates.no_bar: no Best Flex rate found
  • rates.no_person.1: no rates for 1 person found
  • rates.meal.missing.1: mealtype breakfast is missing
  • rates.roomtypes.unavailable: standard roomtype is missing
  • rates.restrictionlos2: Only availability for LOS2 or above
If a message is supplied, the rate 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:
  • general.missing: no rates shopped
  • rates.soldout: no availability
  • rates.no_bar: no Best Flex rate found
  • rates.no_person.1: no rates for 1 person found
  • rates.meal.missing.1: mealtype breakfast is missing
  • rates.roomtypes.unavailable: standard roomtype is missing
  • rates.restrictionlos2: Only availability for LOS2 or above
If a message is supplied, the ratechange 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:
  • Filter not applied: 0
  • Breakfast included: 1
  • Half board included: 2
  • Full board included: 3
  • All inclusive: 4
  • Room only: 5
Default: filter not applied.
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:
  • If the subscription has Market Insight, you're allowed to request a maximum of 352 days of data.
  • If the subscription does not have Market Insight, you're allowed to request a maximum of 61 days of data.
  • Demand data for an arrival date that falls outside of this allowed date range, will be returned with an appropriate message.
    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:
    • general.missing: not yet calculated demand
    • demand.outside_allowed_date_range: you requested demand data for an arrival date that is outside the allowed date range
    If a message is supplied, the 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:
    • general.missing: no ranking shopped
    • ranking.soldout: no availability
    • rates.restrictionlos2: Only availability for LOS2 or above
    If a message is supplied, the 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
    • monthly
    Aggregation period of the average ranking. Default is 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:
    • general.missing: no ranking shopped
    • ranking.soldout: no availability
    If a message is supplied, the 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
    • monthly
    Aggregation period of the average reviewscores. Default is 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:
    • general.missing: no reviews shopped
    If a message is supplied, the 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:
    • Filter not applied: 0
    • Breakfast included: 1
    • Half board included: 2
    • Full board included: 3
    • All inclusive: 4
    • Room only: 5
    Default: filter not applied. When this filter is applied, the api won't return any metasearch rates.
    roomType string Filter to only return rates of a roomtype. One of:
    • dormitory
    • sharedbathroom
    • suite
    • family
    • apartment
    • parkandfly
    • camper
    • villa
    • bungalow
    • budget
    • premium
    • standard
    • single
    Default: filter not applied.
    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:
    • No mealtype included: 0
    • Breakfast included: 1
    • Half board included: 2
    • Full board included: 3
    • All inclusive: 4
    • Room only: 5
    message string An error message, one of:
    • general.missing: no rates shopped
    • rates.soldout: no availability
    • rates.no_bar: no Best Flex rate found
    • rates.no_person.1: no rates for 1 person found
    • rates.meal.missing.1: mealtype breakfast is missing
    • rates.roomtypes.unavailable: standard roomtype is missing
    • rates.restrictionlos2: Only availability for LOS2 or above
    If a message is supplied, the rate 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:
    • The rate is available, but the baserate is not: -2
    • The rate is lower than the baserate, taking into account a certain margin: -1
    • The rate is equal to the baserate, within a certain margin, or both the rate and the baserate are not available: 0
    • The rate is higher than the baserate, taking into account a certain margin: 1
    • The rate is not available, but the baserate is: 2
    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:
    • week
    • month

    Default: week
    aggregations List[string] Filter to return a subset of the aggregations. Multiple aggregations can be specified. Must be comma-separated. Possible aggregations:
    • all
    • channel
    • source

    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: No members rates (public rates)
    • 1: Members only rates
    Default: 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
    • 1: Bed and breakfast
    • 2: Half board
    • 3: Full board
    • 4: All inclusive
    • 5: Room only
    Default: 0: Any meal plan.
    rate_type int Return parity scores for the specified rate type. One of:
    • 0: Lowest
    • 1: Best flex
    Default: 0: Lowest.
    platform int Filter to only return the results of a specific platform. One of:
    • 0: desktop
    • 1: mobile web
    • 2: mobile app

    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:
    • 1: Very Low
    • 2: Low
    • 3: Normal
    • 4: Elevated
    • 5: High
    • 6: Very High
    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:
    • 1: Very Low
    • 2: Low
    • 3: Normal
    • 4: Elevated
    • 5: High
    • 6: Very High
    demand_raw float Raw market demand forecasted for the submarket of the requested subscription, where:
    • 0: Normal demand level
    • >0: Higher demand level
    • <0: Lower demand level
    The values are limited by -1 from the bottom, but are not limited from the top.
    message string An error message, one of:
    • general.missing: No data available
    • rates.price_level_missing: price_level is not available
    If the 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:
    • 0: Flight searches on Meta/OTA
    • 1: Hotel searches on GDS
    • 2: Hotel searches on Meta/OTA
    • 3: Flight searches on GDS
    Searches on Meta/OTA are considered to be made for leisure purposes. Searches on GDS are considered to be made for business purposes. The search types vary based on the destination of your hotel. Some destinations do not support all types of searches.
    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:
    • 0: Lower
    • 1: Normal
    • 2: Higher
    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:
    • There are no country searches for hotel searches on GDS
    • This breakdown is only available if enough data is present to reliably determine it
    message string An error message, one of:
    • general.missing: No data available
    If the 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

    6 February 2026

    19 December 2025

    14 July 2025

    9 November 2023

    1 June 2023

    28 November 2022

    04 November 2022

    31 October 2022

    26 September 2022

    12 September 2022

    30 May 2022

    11 January 2022

    17 December 2021

    22 June 2021

    12 March 2021

    01 March 2021

    15 December 2020

    19 November 2020

    06 July 2020

    05 March 2020

    22 February 2021

    25 November 2019

    14 February 2019

    4 February 2019

    24 December 2018

    21 December 2018

    23 November 2018

    17 July 2018

    13 July 2018

    08 May 2018

    25 Apr 2018

    05 Feb 2018

    12 Jan 2018

    11 Jan 2018

    16 Oct 2017

    21 Sep 2017

    18 Sep 2017

    13 Sep 2017

    31 May 2017

    28 Mar 2017

    17 Mar 2017

    30 Jan 2017

    11 Jan 2017

    10 Jan 2017

    04 Jan 2017

    19 Aug 2016

    08 Apr 2016

    17 Feb 2016