Last updated

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 the MaxAdultOccupancy 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

HeaderDescriptionTypeRequired/
Optional
Notes
Accept-VersionSpecify the version number to get the API functionality specific to that version.stringoptionalSupports 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.
v1.0 behaviour: €50000 maximum price

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:

CharacterEncoding
, (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'.