---
title: "Amend booking checkin, checkout or occupancies"
method: POST
path: "/bookings/{bookingId}/alternative-prebooks"
tags: ["Manage bookings"]
---

# Amend booking checkin, checkout or occupancies

`POST /bookings/{bookingId}/alternative-prebooks`

## Overview

**Hard Amendment** — Search for alternative rates at the same hotel and create ready-to-book prebook sessions for a confirmed booking. Used when the guest needs to change their check-in/check-out dates or room occupancy.

## When to Use

- **Date changes** — Guest needs different check-in or check-out dates
- **Occupancy changes** — Guest needs a different number of adults or children
- **Hard amendments** — Situations where the booking must be cancelled and re-booked with new parameters

## How It Works

1. The system searches for live availability at the same hotel with the new parameters.
2. Up to `maxPrebooks` alternative rates are selected (sorted by price ascending). Defaults to 3 when omitted; capped at 10 (any larger value is silently clamped to 10).
3. A prebook session is created for each rate.
4. The caller receives a list of `prebookId` values ready to be used with `POST /rates/rebook`.

## What You Get

- **Up to `maxPrebooks` prebook sessions** — Each with a `prebookId`, final pricing, cancellation policies, and room details
- **Price comparison** — `priceDifferencePercent` shows how each alternative compares to the **original booking's selling price** (negative = cheaper than what the guest paid, positive = more expensive)
- **Policy change flags** — `cancellationChanged` and `boardChanged` highlight any policy differences

## Completing the Amendment

Pass the chosen `prebookId` and the original `bookingId` as `existingBookingId` to `POST /rates/rebook`. On success, the new booking is created **and the original booking is automatically cancelled** — no separate cancellation call is needed.

## Key Notes

- The booking must be in **CONFIRMED** status.
- If the original booking is non-refundable, only non-refundable alternatives are returned (unless overridden with `refundableRatesOnly`).
- **Payment type is honoured** — only rates that support the original booking's payment type are returned. A pay-at-property booking only sees `PROPERTY_PAY` alternatives; every other booking (including pay-later, succeeded, credit_line) only sees `NUITEE_PAY` alternatives. Pay-later eligibility additionally requires a refundable rate, which is enforced automatically when the original booking was refundable.
- The nationality and currency of the original booking are used for the availability search.
- If the cancellation of the original booking fails after the new booking is created, the error is logged but the new booking is still returned.

## Quick Start

1. Call this endpoint with the `bookingId` and new `occupancies`/dates — get back up to `maxPrebooks` `prebookId` values.
2. Call `POST /rates/rebook` with the chosen `prebookId` and `existingBookingId` — new booking confirmed, original cancelled.

## Path parameters

- `bookingId` string, required

## Request body

- object
  - `occupancies` object[], required — The desired room occupancies for the amended stay. One entry per room.
    - `adults` integer, required — Number of adults for this room.
    - `children` integer[] — Ages of children for this room (empty array if no children).
  - `checkin` string, date — The new check-in date in YYYY-MM-DD format. Must be before `checkout`.
  - `checkout` string, date — The new check-out date in YYYY-MM-DD format. Must be after `checkin`.
  - `refundableRatesOnly` boolean — When true, only fully refundable alternative rates are returned. Defaults to false (or true if the original booking was refundable).
  - `boardType` string — Filter results by board/meal-plan type (e.g. `RO` for Room Only, `BB` for Bed & Breakfast). Leave empty to return all board types.
  - `maxPrebooks` integer — Maximum number of alternative prebook sessions to create. Defaults to 3 when omitted. Values above 10 are silently capped at 10; values ≤ 0 fall back to the default. The response may contain fewer entries when the hotel does not have enough distinct alternative offers.

## Response `200`

Up to `maxPrebooks` (default 3, max 10) alternative prebook sessions created successfully.

- object
  - `data` object[] — Array of up to `maxPrebooks` alternative prebook sessions, sorted by price ascending.
    - `prebookId` string — Unique prebook session ID. Use this with `POST /rates/rebook` (along with `existingBookingId`) to complete the hard amendment. The original booking will be automatically cancelled on success.
    - `offerId` string — The offer ID for this alternative rate.
    - `hotelId` string — The hotel ID — same as the original booking.
    - `checkin` string — The check-in date for this alternative in YYYY-MM-DD format.
    - `checkout` string — The check-out date for this alternative in YYYY-MM-DD format.
    - `currency` string — Currency for all prices in this prebook — inherited from the original booking.
    - `termsAndConditions` string — Terms and conditions for this alternative rate.
    - `price` number — Total price for all rooms in this prebook session.
    - `priceType` string — Pricing model. `commission` means the price includes the client commission.
    - `priceDifferencePercent` number — Percentage difference between this alternative's total price and the **original booking's selling price** (currency-converted into this alternative's currency). 0 means the same price; positive values mean the alternative is more expensive, negative values mean it is cheaper. Floored to an integer.
    - `commission` number — Client commission amount included in the total price.
    - `suggestedSellingPrice` number — Minimum public selling price (MSP) for all rooms combined.
    - `cancellationChanged` boolean — True if the cancellation policy for this alternative differs from the original offer.
    - `boardChanged` boolean — True if the meal plan (board type) for this alternative differs from the original offer.
    - `supplier` string — Name of the supplier providing this rate.
    - `supplierId` integer — Numeric identifier of the supplier.
    - `paymentTypes` string[] — Supported payment methods for this prebook session.
    - `roomTypes` object[] — Room and rate details for this alternative.
      - `name` string — Room type name.
      - `rates` object[] — One rate entry per occupancy in the request.
        - `rateId` string — Unique rate identifier.
        - `occupancyNumber` integer — Which occupancy slot this rate belongs to.
        - `name` string — Room name for this rate.
        - `boardType` string — Meal plan code (e.g. `RO`, `BB`).
        - `boardName` string — Full meal plan name (e.g. `Room Only`, `Bed & Breakfast`).
        - `adultCount` integer — Number of adults for this rate.
        - `childCount` integer — Number of children for this rate.
        - `childrenAges` integer[] — Ages of children included in this rate.
        - `priceType` string — Pricing model for this rate.
        - `commission` object[] — Commission breakdown per stay night or per room.
          - `amount` number
          - `currency` string
        - `retailRate` object — Final pricing breakdown including taxes and fees.
          - `total` object[]
            - `amount` number — Total amount due for this room.
            - `currency` string
          - `suggestedSellingPrice` object[]
            - `amount` number
            - `currency` string
            - `source` string
          - `taxesAndFees` object[] — Itemised taxes and fees.
            - `included` boolean — Whether the fee is included in the total.
            - `description` string
            - `amount` number
            - `currency` string
        - `cancellationPolicies` object
          - `cancelPolicyInfos` object[]
            - `cancelTime` string — Deadline before a fee applies (ISO 8601).
            - `amount` number — Cancellation fee amount (0 = fully refundable).
            - `currency` string
            - `type` string — Fee type, e.g. `amount`.
            - `timezone` string
          - `hotelRemarks` string[]
          - `refundableTag` string — `RFN` for refundable, `NRFN` for non-refundable.
        - `paymentTypes` string[]
  - `guestLevel` integer — Guest loyalty level used for loyalty programme pricing.
  - `sandbox` boolean — Present and `true` when the request was made in sandbox mode.

## Other responses

- `400` — Bad request. Invalid or missing fields.
- `401` — Unauthorized. Invalid or missing API key.
- `404` — Booking not found, not confirmed, or no availability for the requested parameters.
- `500` — Internal server error. Could not create alternative prebooks.

---

[API](https://skmtc.net/liteapi/apis/api-search.md) · [All operations](https://skmtc.net/liteapi/apis/api-search/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/liteapi/api-search/versions/315ba2a4dcf4/schema)
