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.
- Specify availability in advance: Provide availability for at least 12 months ahead.
- Use Delta Updates Only: Send only changes using the roomRateAvailability API, not full refreshes.
- Single Hotel Per Request: All updates must belong to one hotel only.
- Monthly Batching: Break down updates by month: one month per request.
- Room-Rate Grouping: Multiple room-rates can be grouped in the same request for the same hotel and month.
POST https://supply-xml.booking.com/hotels/csv/los_pricingLOS (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.
- 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
| 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) |
The request body must be URL-encoded CSV data submitted as a form value named "CSV".
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}| 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 |
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).
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)
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.
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%0AThis 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.
The response is returned in CSV format.
method,status,ticket_id
los_pricing,ok,{unique_ticket_id}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 |
method,status,ticket_id
los_pricing,ok,abcdef0123456789method,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'.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.
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
- 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
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.