Create or update LOS pricing rates
Use the los_pricing
endpoint to set pricing for your inventory using the LOS pricing model. You must use the URL-encoded CSV format to send your request body.
POST https://supply-xml.booking.com/hotels/csv/los_pricing
Changes introduced in v1.1
The los_pricing
endpoint supports two versions currently.
- 1.0 (current version)
- 1.1 (new version)
The following are the changes implemented in the v1.1 los_pricing
endpoint:
- The occupancy value cannot exceed the value set in the
MaxAdultOccupancy
. Specifying the maximum occupancy value (MaxOccupancy
) in v 1.0 doesn't return a warning. Whereas, in v 1.1 the endpoint returns a warning. Make sure to specify a value not exceeding theMaxAdultOccupancy
value. - If the specified price per night exceeds the maximum price (€50000 or equivalent) , then the API rejects the price update request. This differs from the previous behaviour: where the API sets the price to 0 and automatically closes the room.
- While setting up pricing for an inventory using rate IDs that are configured as child rates, make sure the request doesn't set values for fields that are configured to inherit from the parent rate plan. For example, if you try to set a price for a child rate while the child rate is configured to follow price, the API returns a partial success response with an error message. To resolve the error, specify a rate plan ID that is either configured as a parent rate, or a child rate that does not have the
FollowsPrice
restriction set. - Accepts past date updates up to 1 day in the past (follows Central European Time (CET) timezone). Updates more than 1 day in the past returns a
NOT_A_VALID_DATE
error. - Improved error handling and error description.
- Improved latency.
For a complete list of new and changed behaviour, see the migration guide.
Header parameter
Header | Description | Type | Required/ Optional | Notes |
---|---|---|---|---|
Accept-Version | Specify the version number to get the API functionality specific to that version. | string | optional | Supports the following values: - 1.1: New version. - 1.0: Previous version. |
Sample header
POST 'https://supply-xml.booking.com/hotels/csv/los_pricing' \ --header 'Accept-Version: 1.1' \ --header 'Authorization: Basic THVjLVNhbXVlbMblhWTdlOCghQ29qaU9pNmxlWSpIWXU9OigvS2meQpQ12puj' \ --header 'Content-Type: application/csv'
Advantage of using LOS pricing
Instead of giving us pricing details per day and having us calculate the final price for a stay -- or whether it should even be available considering restrictions -- properties can provide the pricing detail for every possible length of stay (up to 90 nights) and occupancy (up to the maximum number of adults of the room), given a check-in date.
Starting from the day of the request, you can send prices for up to 729 days into the future.
Format
The request accepts CSV data where 1 row has the following format:
{checkin},{occupancy},{room id},{rate id},{currency code},{1 night},{2 nights},{3 nights},...
For example:
2022-12-20,2,1444301,23543,EUR,100,210,270,390,550,580,650,820
For inventories that are unavailable for a particular length of stay, the price should be set to 0:
2022-12-20,2,1444301,23543,EUR,100,210,0,390,550,580,0,820
From the above request, guests will not be able to book the room for 3 or 7 nights if the check-in date is 2022-12-20. Any price beyond last price specified is assumed to be 0 and therefore the length of stay more than 8 nights is not available for reservation from the above example.
Rules
When using LOS pricing, make sure to note the following:
- Each row must have the check-in date, occupancy, room ID , rate ID and currency code followed by a value set for every possible length of stay.
- There is no way to express a default per night price, due to determining the difference between an unavailable length of stay and a default price length of stay.
- All pricing is in the property's default currency.
- A maximum of two decimal places is supported for each price value.
- The room and rate IDs are Booking.com identifiers, and are set up prior to calling the request.
- The room and rate IDs must belong to a property for which the login account has permission to modify availability and pricing details.
- All room and rate IDs must be active combinations for the property.
- Maximum number of nights is 90. If you provide more than 90 nights, the remaining nights are ignored and only the first 90 nights are considered.
- Only rooms belonging to one property are allowed per call. To update room pricing across multiple properties, you must send separate requests.
The maximum price you can set for a room is €50000 (or equivalent) per night. If you try to set a higher price, we set the price to zero, which automatically closes the room. The v1.0 endpoint returns the following warning message.
method,status,ticket_id,warnings los_pricing,ok,8dd66019d5720001,Line number 1 . Price 182000000 for room ID 74115904 and rate ID 8958505 is higher than Maximum System Rate. We have closed the room as a precaution.
Transmission details
When building the request body, make sure to note the following:
- Send the request as an HTTP POST, and provide the CSV data as a form value of the name "CSV".
- Do not include any other form values in the request.
- Each request header must contain a "Content-length" item that contains the number of character bytes of the POST data.
- The CSV commas and line feeds must be URL encoded, in that each comma and newline is an escape sequence.
- The content length must be the full character count including the extra bytes due to the escape sequences.
You can use the following escape sequences, but more can be added if required:
Character | Encoding |
---|---|
, (comma) | %2C |
\n (line feed) | %0A |
Following is an example HTTP request (without the required authorization header) containing three sample lines:
POST https://supply-xml.booking.com/hotels/csv/los_pricing Content-Length: 721 Content-Type: application/csv CSV=2022-03-15%2C1000201%2C58848%2CEUR%2C100%2C200%2C300%2C400%2C500%2C600%2C700%2C800%2C900%2C1000%2C1100%2C1200%2C1300%2C1400%2C1500%2C1600%2C1700%2C1800%2C1900%2C2000%2C2100%2C2200%2C2300%2C2400%2C2500%2C2600%2C2700%2C2800%2C2900%2C3000%2C3100%0A2022-03-16%2C1000201%2C58848%2CEUR%2C100%2C200%2C300%2C400%2C500%2C600%2C700%2C800%2C900%2C1000%2C1100%2C1200%2C1300%2C1400%2C1500%2C1600%2C1700%2C1800%2C1900%2C2000%2C2100%2C2200%2C2300%2C2400%2C2500%2C2600%2C2700%2C2800%2C2900%2C3000%2C3100%0A2022-03-15%2C1000201%2C50587%2CEUR%2C100%2C200%2C300%2C400%2C500%2C600%2C700%2C800%2C900%2C1000%2C1100%2C1200%2C1300%2C1400%2C1500%2C1600%2C1700%2C1800%2C1900%2C2000%2C2100%2C2200%2C2300%2C2400%2C2500%2C2600%2C2700%2C2800%2C2900%2C3000%2C3100%0A
Successful response
Example of a successful response:
method,status,ticket_id los_pricing,ok,abcdef0123456789
Example of a successful response where some nights are ignored in line 2 in the request:
method,status,ticket_id,warnings los_pricing,ok,abcdef0123456789,The following lines has too many nights and only the first 90 nights were considered%2C2
Error handling
If there are any errors during request handling, the error response follows this format:
method,fault_code,fault_message los_pricing,<fault_code>,<error_message> {check-in date},{number of occupants},{room ID},{rate ID},{request line number},{specific error message}
- Fault_code has the same meaning as HTTP codes.
- {request line number} refers to the line from the CSV request in which the error occurred.
The following is an error response example:
method,fault_code,fault_message los_pricing,400,file contained some invalid records 2020-05-07, 2, 533481201, 15127847, 1, Price is too Low for Room 532581201 and Rate 15207847 2020-07-22, 2, 533481201, 15127847, 142, Price is too Low for Room 532581201 and Rate 15207847
RUID
You can find the RUID details in the response header as 'X-RUID'.