Update LOS pricing rates
Use the los_pricing endpoint to set pricing for your inventory using the Length of Stay (LOS) pricing model.
Before using this API, LOS pricing must be enabled for your property. For more information on pricing models, see Pricing Models.
Usage recommendations
Specify availability in advance: You should specify the availability of your connected properties at least 12 months in advance.
Use Delta Updates Only
- Utilize the roomRateAvailability API to compare system states
- Send only changes (deltas), not full system refreshes
Single Hotel Per Request
- All updates in a request must belong to one hotel
- Do not mix multiple hotels in the same request
Monthly Batching
- Break down updates by month
- Each request should cover a single month period
Room-Rate Grouping
- Multiple room-rates can be grouped together in the same request
- Must be for the same hotel and same month period
Endpoint
POST https://supply-xml.booking.com/hotels/csv/los_pricingWhat is LOS pricing?
LOS (Length of Stay) pricing allows you to provide specific pricing for every possible length of stay (up to 90 nights) and occupancy level, based on the check-in date. Instead of providing per-night pricing and having Booking.com calculate the total, you specify the exact price for each stay duration.
Advantages of LOS pricing
- Precise control: Set exact prices for specific stay lengths rather than relying on per-night calculations
- Flexible availability: Control which stay lengths are available by setting prices to 0 for unavailable durations
- Extended planning: Set prices up to 729 days in advance
- Occupancy-based: Different prices for different numbers of guests
Request
Headers
| Header | Description | Type | Required | Notes |
|---|---|---|---|---|
Accept-Version | Specify the version number to get the API functionality specific to that version | string | Optional | Currently supports version 1.1 (default). |
Content-Type | Request content type | string | Required | Must be application/csv |
Content-Length | Number of character bytes in POST data | integer | Required | Must 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
| Field | Description | Type | Required | Notes |
|---|---|---|---|---|
checkin | Check-in date | date | Required | Format: YYYY-MM-DD. Can be up to 729 days in the future or 1 day in the past (Central European Time) |
occupancy | Number of adult guests | integer | Required | Must not exceed MaxAdultOccupancy of the room type. Using MaxOccupancy returns a warning |
room_id | Booking.com room type ID | integer | Required | Must be an active room for the authenticated property |
rate_id | Booking.com rate plan ID | integer | Required | Must be an active rate for the specified room |
currency_code | ISO 4217 currency code | string | Required | Must match the property's configured currency |
1_night | Price for 1-night stay | decimal | Required | Format: ###.## (max 2 decimal places). Set to 0 to make unavailable |
| ... | Prices for additional nights | decimal | Optional | Continue up to 90 nights. Price is the total price for staying for N nights. Omitted nights default to 0 (unavailable) |
90_nights | Total Price for 90-night stay | decimal | Optional | Format: ###.## (max 2 decimal places). Maximum supported length of stay |
URL encoding
The CSV data must be URL-encoded with the following escape sequences:
| Character | Encoding | Description |
|---|---|---|
, (comma) | %2C | Field separator |
\n (line feed) | %0A | Row separator |
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,820URL-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%2C820This 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,820URL-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%2C820Guests 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,3100URL-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%0AResponse
This section contains examples of successful and unsuccessful responses. For a detailed description of 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}| Field | Description | Type | Notes |
|---|---|---|---|
method | API method name | string | Always los_pricing |
status | Request status | string | ok for success |
fault_code | HTTP error code | integer | Only present in error responses. Same meaning as HTTP status codes |
fault_message | Error description | string | Only present in error responses |
ticket_id | Unique request identifier | string | RUID. Use for tracking and support requests |
Response examples
Success response
method,status,ticket_id
los_pricing,ok,abcdef0123456789Error 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
Each row must include:
- Check-in date
- Occupancy
- Room ID
- Rate ID
- Currency code
- At least one night price (additional nights are optional)
There is no way to express a default per-night price. Each length of stay must have an explicit price or be set to 0 (unavailable).
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.
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_DATEerror
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.