Last updated

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: You should specify the availability of your connected properties at least 12 months in advance.

  2. Use Delta Updates Only

  3. Single Hotel Per Request

    • All updates in a request must belong to one hotel
    • Do not mix multiple hotels in the same request
  4. Monthly Batching

    • Break down updates by month
    • Each request should cover a single month period
  5. 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_pricing

What 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

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 a warning
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 staydecimalRequiredFormat: ###.## (max 2 decimal places). Set to 0 to make unavailable
...Prices for additional nightsdecimalOptionalContinue 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 staydecimalOptionalFormat: ###.## (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

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}
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
  • At least one night price (additional nights are optional)
Default pricing behavior

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 nights limit

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.

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.