Update Booking.com Promotion

Change some fields of a Booking.com promotion: discount, name, audience, minimum stay, non-refundable, stay dates and weekdays, additional dates, booking date and time windows, last-minute or early-booker window, rooms and rate plans. Only the fields you send change; everything else stays as it is on Booking.com, including the excluded dates (change them with POST /channel_accounts/booking/promotions/excluded_dates). rooms, parent_rates, additional_dates and stay_date.active_weekdays replace the whole list. book_date: null and book_time: null remove those limits; send a JSON body for that, since a form body cannot tell an empty value from null (400). The promotion type cannot be changed.

  • Booking.com activates a promotion on every successful update, so an inactive promotion returns 409 unless you send activate: true.
  • Some promotions, such as new_property_deal, cannot be changed (409). geo_rate promotions only accept discount, and mobile_rate promotions only accept discount, target_channel and parent_rates, because Booking.com does not return their other fields; other fields return 409.
  • Sending the same request again is safe.
  • Returns 501 while creating and editing promotions is not enabled for your account (it is enabled separately from POST /channel_accounts/booking/promotions/excluded_dates).
  • Limited to 10 promotion writes per minute per Booking.com property, shared with POST /channel_accounts/booking/promotions/excluded_dates, in addition to the account rate limits; 429 responses include Retry-After.
  • Values Booking.com rejects return 400 with the Booking.com code in error_msg (for example DISCOUNT_NOT_IN_RANGE, ROOMS_INVALID, TARGET_CHANNEL_NO_ACCESS).
  • 502 means Booking.com was unavailable or the result could not be confirmed; the change may still be applied within the next few minutes.

Requires a writable access token.

Path Params
string
required

The Booking.com promotion id, promotions[].id from GET /channel_accounts/booking/promotions.

Body Params
integer
required

The id of a Booking.com channel account, from GET /channel_accounts. A Booking.com channel account is one Booking.com property; promotions belong to the property, not to a single room.

boolean
Defaults to false

Booking.com activates a promotion on every successful update. Updating an inactive promotion therefore puts it back on sale, so it is rejected with 409 unless you send activate: true. Has no effect on active promotions. Default: false.

string
length ≤ 255

Promotion name, at most 255 characters. Only visible to you in the Booking.com Extranet, not to guests.

integer
1 to 99

New discount percentage, an integer. The range depends on the promotion type, see POST /channel_accounts/booking/promotions; Booking.com rejects values outside it with 400.

string

Who sees the promotion. basic, last_minute, early_booker: public (default) or subscribers (Genius / subscribed members). mobile_rate: app (default) or all. geo_rate: the Booking.com country channel, required; copy it from an existing georate promotion (GET /channel_accounts/booking/promotions) or the Booking.com Extranet, since not every property can use every country. Not used by `campaign*`.

integer
0 to 30

Minimum length of stay in nights. basic, last_minute, early_booker: 0-30, where 0 follows the rate plan's minimum stay and 1 means no minimum. geo_rate, mobile_rate: 1-30. Not used by campaign_*.

boolean

true to offer the promotion only on non-refundable terms. ⚠️ If the property has no non-refundable policy yet, Booking.com automatically creates a 3-day non-refundable policy and applies it. Not used by campaign_*.

stay_date
object

Changes the stay dates. Send start and end together, active_weekdays, or both; fields you omit stay as they are. Excluded dates cannot be changed here: use POST /channel_accounts/booking/promotions/excluded_dates.

additional_dates
array of dates

Replaces the additional stay dates. Must be sent together with stay_date.start and stay_date.end, and every date must be outside that range.

additional_dates
book_date
object | null

New booking date window, or null to remove the limit.

book_time
object | null

New booking time window, or null to remove the limit.

last_minute
object

How close to check-in the promotion becomes bookable. Required for last_minute (unit hour or day, value 1-1000). geo_rate and mobile_rate accept at most one of last_minute (unit must be day, value 1-365) or early_booker.

integer
1 to 500

How many days in advance guests must book (early_booker: 1-500; geo_rate / mobile_rate: 1-365).

rooms
array of strings

Replaces the Booking.com room ids the promotion applies to. Send the full list; an empty list is rejected.

rooms
parent_rates
array of strings

Replaces the Booking.com rate plan ids the promotion applies to. Send the full list; an empty list is rejected.

parent_rates
Response

Language
Credentials
Header
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json