---
title: "Create/update reservation"
method: POST
path: "/reservation"
tags: ["PMS/CM endpoints"]
---

# Create/update reservation

`POST /reservation`

Used to create, update, and cancel reservations.

The exact behavior depends on the agreed communication scheme between Termino and your system.

### 1 - Reservation Status Workflow
#### A Dual-request mode (default)
- First request — `status: option`
  - Sent without customer data.
  - Blocks the room for the requested stay.
- Second request — `status: confirmed`
  - Includes customer data and final confirmation details.
  - Finalizes the reservation.

This approach allows **gradual state transitions** and is the recommended mode for most partners.
> ⚠️ Important: Both `option` and `confirmed` statuses are expected to **block the room** in your system.
#### B Single-request mode

  - The first `option` request already contains full customer data and voucher code.
  - A subsequent `confirmed` request may still be sent but does not need to be processed or relayed to the hotel.
  - This mode is best suited for OTAs and other systems that cannot modify reservations after creation (except through cancel & rebook).

You should confirm the preferred mode during your integration setup.

### 2 - Reservation ID

  - You can use **your ID** (returned in the first response) or **Termino's ID** (preferred)
  - Using Termino's ID simplifies recovery from communication failures
  - Rooms must be blocked once an `option` request is processed successfully


### Usage:

 - Called with status `option` and then `confirmed` when creating a new reservation (see above)
 - Called with `canceled` status to cancel the reservation
 - Called when changing booking date on customer's request

Grouped reservations are currently not implemented; one request always contains only one reservation. Reservation group ID is the same as reservation ID. Reservation response should contain the same data as the request.

## Request body

- ReservationRequest
  - `accessToken` string, required — Access token to your API.
  - `hotelId` union, required — Your hotel id.
    - string
    - integer
  - `reservationGroup` ReservationGroup, required
    - `id` union, required — Reservation group id.
      - string
      - integer
    - `description` string, required — Textual description of the package bought.
    - `reservations` Reservation[], required
      - `id` union, required — Id of reservation.
        - string
        - integer
      - `status` 'option' | 'confirmed' | 'canceled' | 'modified', required — Reservation status.
      - `roomTypeId` union, required — Id of room type.
        - string
        - integer
      - `ratePlanId` union — Id of associated rate plan. Filled only if rate plans are set-up.
        - string
        - integer
      - `roomId` union — Id of room.
        - string
        - integer
      - `term` DateInterval, required — DateInterval is [start, end) – end date is exclusive.
        - `start` string, date, required — Start date in the format 'yyyy-mm-dd'.
        - `end` string, date, required — End date in the format 'yyyy-mm-dd'. Exclusive.
      - `price` Price, required
        - `amount` string, decimal, required — Money amount represented as decimal string with dot as decimal separator.
        - `currency` string, ISO 4271 currency code, required — Currency code.
      - `meal` 'none' | 'breakfast' | 'half_board' | 'full_board' | 'all_inclusive' — Meal type included in package.
      - `adultsCount` integer, required — Count of adults.
      - `childrenCount` integer — Count of children (with or without bed entitlement). This is deprecated, use children instead.
      - `children` object[], nullable — List of children ages and bed entitlement.
        - `age` integer — Age of child.
        - `bedEntitlement` boolean — Whether child is entitled to a separate bed.
      - `guestNote` string, nullable — Customers note related to reservation. May be an empty string.
      - `voucher` string, nullable — Slevomat voucher code for customer/hotel.
      - `contact` object — Contact to guest/customer.
        - `name` string, required — Contact person name.
        - `phone` string, required — Contact person phone number.
        - `email` string, required — Contact person email address.
    - `totalPrice` Price, required
      - `amount` string, decimal, required — Money amount represented as decimal string with dot as decimal separator.
      - `currency` string, ISO 4271 currency code, required — Currency code.

## Response `200`

Successful response

- ReservationResponse
  - `hotelId` union
    - string
    - integer
  - `accessToken` string
  - `reservationGroup` ReservationGroup
    - `id` union, required — Reservation group id.
      - string
      - integer
    - `description` string, required — Textual description of the package bought.
    - `reservations` Reservation[], required
      - `id` union, required — Id of reservation.
        - string
        - integer
      - `status` 'option' | 'confirmed' | 'canceled' | 'modified', required — Reservation status.
      - `roomTypeId` union, required — Id of room type.
        - string
        - integer
      - `ratePlanId` union — Id of associated rate plan. Filled only if rate plans are set-up.
        - string
        - integer
      - `roomId` union — Id of room.
        - string
        - integer
      - `term` DateInterval, required — DateInterval is [start, end) – end date is exclusive.
        - `start` string, date, required — Start date in the format 'yyyy-mm-dd'.
        - `end` string, date, required — End date in the format 'yyyy-mm-dd'. Exclusive.
      - `price` Price, required
        - `amount` string, decimal, required — Money amount represented as decimal string with dot as decimal separator.
        - `currency` string, ISO 4271 currency code, required — Currency code.
      - `meal` 'none' | 'breakfast' | 'half_board' | 'full_board' | 'all_inclusive' — Meal type included in package.
      - `adultsCount` integer, required — Count of adults.
      - `childrenCount` integer — Count of children (with or without bed entitlement). This is deprecated, use children instead.
      - `children` object[], nullable — List of children ages and bed entitlement.
        - `age` integer — Age of child.
        - `bedEntitlement` boolean — Whether child is entitled to a separate bed.
      - `guestNote` string, nullable — Customers note related to reservation. May be an empty string.
      - `voucher` string, nullable — Slevomat voucher code for customer/hotel.
      - `contact` object — Contact to guest/customer.
        - `name` string, required — Contact person name.
        - `phone` string, required — Contact person phone number.
        - `email` string, required — Contact person email address.
    - `totalPrice` Price, required
      - `amount` string, decimal, required — Money amount represented as decimal string with dot as decimal separator.
      - `currency` string, ISO 4271 currency code, required — Currency code.

## Other responses

- `400` — Expected error

---

[API](https://skmtc.net/slevomat/apis/termino-hotel-api.md) · [All operations](https://skmtc.net/slevomat/apis/termino-hotel-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/slevomat/termino-hotel-api/revisions/776409ba477b/schema)
