Skip to content

Update LOS pricing rates

Use the los_pricing endpoint to set pricing for your inventory using the Length of Stay (LOS) pricing model.

LOS pricing must be enabled first

Before using this API, LOS pricing must be enabled for your property. For more information on pricing models, see Pricing Models.

Usage recommendations

  1. Specify availability in advance: Provide availability for at least 12 months ahead.
  2. Use Delta Updates Only: Send only changes, not full refreshes. Use the roomRateAvailability API to retrieve current values before sending updates.
  3. Single Hotel Per Request: All updates must belong to one hotel only.
  4. Monthly Batching: Break down updates by month: one month per request.
  5. Room-Rate Grouping: Multiple room-rates can be grouped in the same request for the same hotel and month.

Endpoint

POST https://supply-xml.booking.com/hotels/csv/los_pricing

What is LOS pricing?

LOS pricing lets you set exact prices for every combination of stay length (up to 90 nights) and occupancy level, per check-in date. You specify the full stay price directly rather than relying on per-night calculations.

Key capabilities:

  • Set prices up to 729 days in advance
  • Set price to 0 to make a stay length unavailable
  • Specify different prices per occupancy level

Request

Headers

HeaderDescriptionTypeRequiredNotes
Accept-VersionSpecify the version number to get the API functionality specific to that versionstringOptionalCurrently supports version 1.1 (default).
Content-TypeRequest content typestringRequiredMust be application/csv
Content-LengthNumber of character bytes in POST dataintegerRequiredMust include extra bytes from URL encoding (escape sequences)

Request body

The request body must be URL-encoded CSV data submitted as a form value named "CSV".

CSV format

Each row in the CSV represents pricing for a specific check-in room, rate , date, and occupancy combination:

{checkin},{occupancy},{room_id},{rate_id},{currency_code},{1_night},{2_nights},{3_nights},...,{90_nights}

CSV fields

FieldDescriptionTypeRequiredNotes
checkinCheck-in datedateRequiredFormat: YYYY-MM-DD. Can be up to 729 days in the future or 1 day in the past (Central European Time)
occupancyNumber of adult guestsintegerRequiredMust not exceed MaxAdultOccupancy of the room type. Using MaxOccupancy returns an OCCUPANCY_EXCEEDS_MAX_PERSONS error
room_idBooking.com room type IDintegerRequiredMust be an active room for the authenticated property
rate_idBooking.com rate plan IDintegerRequiredMust be an active rate for the specified room
currency_codeISO 4217 currency codestringRequiredMust match the property's configured currency
1_nightPrice for 1-night stayfloatRequiredFormat: ###.## (max 2 decimal places). Set to 0 to make unavailable
...Prices for additional nightsfloatOptionalContinue up to 90 nights. Price is the total price for staying for N nights. Omitted nights default to 0 (unavailable)
90_nightsTotal Price for 90-night stayfloatOptionalFormat: ###.## (max 2 decimal places). Maximum supported length of stay

URL encoding

The CSV data must be URL-encoded with the following escape sequences:

CharacterEncodingDescription
, (comma)%2CField separator
\n (line feed)%0ARow separator
Content-Length calculation

The Content-Length header must include the full character count including extra bytes from escape sequences (e.g., %2C counts as 3 characters, not 1).

Request examples

Example 1: Basic LOS pricing update

Setting prices for room 1444301, rate 23543, for 2 guests checking in on 2025-12-20:

Unencoded CSV:

2025-12-20,2,1444301,23543,EUR,100,210,270,390,550,580,650,820

URL-encoded request:

POST https://supply-xml.booking.com/hotels/csv/los_pricing
Content-Type: application/csv
Content-Length: 89

CSV=2025-12-20%2C2%2C1444301%2C23543%2CEUR%2C100%2C210%2C270%2C390%2C550%2C580%2C650%2C820

This sets:

  • 1 night: €100
  • 2 nights: €210
  • 3 nights: €270
  • 4 nights: €390
  • 5 nights: €550
  • 6 nights: €580
  • 7 nights: €650
  • 8 nights: €820
  • 9+ nights: €0 (unavailable)

Example 2: LOS pricing with unavailable lengths

Making 3-night and 7-night stays unavailable:

Unencoded CSV:

2025-12-20,2,1444301,23543,EUR,100,210,0,390,550,580,0,820

URL-encoded request:

POST https://supply-xml.booking.com/hotels/csv/los_pricing
Content-Type: application/csv
Content-Length: 85

CSV=2025-12-20%2C2%2C1444301%2C23543%2CEUR%2C100%2C210%2C0%2C390%2C550%2C580%2C0%2C820

Guests cannot book 3-night or 7-night stays for this check-in date.

Example 3: Multiple rows (different dates and rates)

Unencoded CSV:

2025-03-15,2,1000201,58848,EUR,100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000,3100
2025-03-16,2,1000201,58848,EUR,100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000,3100
2025-03-15,2,1000201,50587,EUR,100,200,300,400,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100,2200,2300,2400,2500,2600,2700,2800,2900,3000,3100

URL-encoded request:

POST https://supply-xml.booking.com/hotels/csv/los_pricing
Content-Type: application/csv
Content-Length: 721

CSV=2025-03-15%2C2%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%0A2025-03-16%2C2%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%0A2025-03-15%2C2%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

Response

For all possible errors and warnings, see Troubleshooting B.XML availability error responses.

Response body

The response is returned in CSV format.

Success response format

method,status,ticket_id
los_pricing,ok,{unique_ticket_id}

Error response format

method,fault_code,fault_message
los_pricing,{http_error_code},{error_description}
{error_code},{error_message}
FieldDescriptionTypeNotes
methodAPI method namestringAlways los_pricing
statusRequest statusstringok for success
fault_codeHTTP error codeintegerOnly present in error responses. Same meaning as HTTP status codes
fault_messageError descriptionstringOnly present in error responses
ticket_idUnique request identifierstringRUID. Use for tracking and support requests

Response examples

Success response

method,status,ticket_id
los_pricing,ok,abcdef0123456789

Error response

method,fault_code,fault_message
los_pricing,400,file contained some invalid records
OCCUPANCY_EXCEEDS_MAX_PERSONS,Room '1234' has a maximum occupancy of '6'. You cannot set price for higher occupancy for rate '4567'.

Additional information

LOS pricing rules

Required fields

Each row must include: check-in date, occupancy, room ID, rate ID, currency code, and at least one night price. Additional nights are optional.

Default pricing behavior

There is no default per-night price. Each length of stay must have an explicit price or be set to 0 (unavailable).

Maximum nights limit

Maximum is 90 nights. Any prices beyond 90 nights are ignored.

Price limits

The maximum price you can set is €50,000 (or equivalent) per stay. If you try to set a higher price, the API rejects the price update request.

Setting availability for child rates

While setting up availability 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 price when FollowsPrice is set, the API returns an error.

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 following restrictions: FollowsPrice

Date range limits

  • Accepts dates up to 729 days in the future from the request date
  • 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 return a NOT_A_VALID_DATE error

Duplicate handling

The API does not accept duplicate date updates for the same room/rate/date/occupancy combination. The API returns a WARN_DUPLICATE_DATES warning if duplicates are detected.