---
title: "Book a quote"
url: "https://portal.konghotels.cloud/apis/kong-hotels-partner-api-1/versions/23cc133a-2f87-4d55-9490-0b8b2bb7dd78/operations/createReservation"
---

> Full API specification: https://portal.konghotels.cloud/apis/kong-hotels-partner-api-1/versions/23cc133a-2f87-4d55-9490-0b8b2bb7dd78.md

# Book a quote

`POST` `/reservations`

Operation ID: `createReservation`

**Write.** Confirms a quote. Requires `Idempotency-Key`. Availability is re-checked under a lock, so two partners can never book the last room. If the quote has an active hold, the hold is converted.

## Header parameters

- `Idempotency-Key` (string, required) - Required. A unique key (UUID recommended) per booking attempt; reuse it when retrying.

## Request body (required)

Content types: `application/json`

## Responses

- `201` - Reservation confirmed.
- `400` - Bad request.
- `403` - The API is in read-only mode.
- `404` - Not found, or owned by another partner.
- `409` - Inventory or state conflict.
- `410` - The quote has expired.
- `422` - Invalid input or a booking rule violation.
- `429` - Rate limit exceeded.

## OpenAPI definition

```yaml
openapi: 3.1.0
info:
  title: Kong Hotels Partner API
  version: 1.0.0
servers:
  - url: https://api.konghotels.cloud
    description: Kong Gateway
paths:
  /reservations:
    post:
      tags:
        - Reservations
      operationId: createReservation
      summary: Book a quote
      description: >
        **Write.** Confirms a quote. Requires `Idempotency-Key`. Availability is
        re-checked under a lock, so

        two partners can never book the last room. If the quote has an active
        hold, the hold is converted.
      x-write: true
      parameters:
        - $ref: "#/components/parameters/IdempotencyKeyRequired"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/ReservationRequest"
            example:
              quote_id: qt_01jbx4m6n2kz9v8c7d5e3f1g0h
              payment_model: pay_at_hotel
              partner_reference: BKG-88231001
              guest:
                first_name: Ann
                last_name: Darrow
                email: ann.darrow@example.com
                phone: +1 212 555 0100
                country_code: US
              additional_guests:
                - first_name: Jack
                  last_name: Driscoll
              special_requests: High floor, away from the elevator.
              estimated_arrival_time: 18:30
      responses:
        "201":
          description: Reservation confirmed.
          headers:
            Location:
              $ref: "#/components/headers/Location"
            Idempotent-Replayed:
              $ref: "#/components/headers/IdempotentReplayed"
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: "#/components/schemas/Reservation"
        "400":
          $ref: "#/components/responses/BadRequest"
        "403":
          $ref: "#/components/responses/WritesDisabled"
        "404":
          $ref: "#/components/responses/NotFound"
        "409":
          $ref: "#/components/responses/Conflict"
        "410":
          $ref: "#/components/responses/Gone"
        "422":
          $ref: "#/components/responses/ValidationFailed"
        "429":
          $ref: "#/components/responses/RateLimited"
security:
  - KongKeyAuth: []
  - KongConsumer: []
components:
  parameters:
    IdempotencyKeyRequired:
      name: Idempotency-Key
      in: header
      required: true
      description: Required. A unique key (UUID recommended) per booking attempt;
        reuse it when retrying.
      schema:
        type: string
        maxLength: 255
        examples:
          - 8e03978e-40d5-43e8-bc93-6894a57f9324
  schemas:
    ReservationRequest:
      type: object
      required:
        - quote_id
        - payment_model
        - guest
      properties:
        quote_id:
          type: string
        payment_model:
          $ref: "#/components/schemas/PaymentModel"
        partner_reference:
          type:
            - string
            - "null"
          maxLength: 64
          description: Your booking reference; searchable via GET
            /reservations?partner_reference=.
        guest:
          $ref: "#/components/schemas/Guest"
        additional_guests:
          type: array
          items:
            type: object
            required:
              - first_name
              - last_name
            properties:
              first_name:
                type: string
              last_name:
                type: string
        children_ages:
          type: array
          items:
            type: integer
            minimum: 0
            maximum: 17
        special_requests:
          type:
            - string
            - "null"
          maxLength: 2000
        estimated_arrival_time:
          type:
            - string
            - "null"
          pattern: ^\d{2}:\d{2}$
    Reservation:
      type: object
      properties:
        confirmation_number:
          type: string
          examples:
            - KH7Q4M2X9
        partner_reference:
          type:
            - string
            - "null"
        status:
          $ref: "#/components/schemas/ReservationStatus"
        property:
          type: object
          properties:
            code:
              type: string
            name:
              type: string
            phone:
              type: string
            check_in_time:
              type: string
            check_out_time:
              type: string
        room_type:
          type: object
          properties:
            code:
              type: string
            name:
              type: string
        rate_plan:
          type: object
          properties:
            code:
              type: string
            name:
              type: string
            meal_plan:
              $ref: "#/components/schemas/MealPlan"
        check_in:
          type: string
          format: date
        check_out:
          type: string
          format: date
        nights:
          type: integer
        rooms:
          type: integer
        adults:
          type: integer
        children:
          type: integer
        children_ages:
          type:
            - array
            - "null"
          items:
            type: integer
        guest:
          $ref: "#/components/schemas/Guest"
        additional_guests:
          type: array
          items:
            type: object
        special_requests:
          type:
            - string
            - "null"
        estimated_arrival_time:
          type:
            - string
            - "null"
        loyalty:
          type:
            - object
            - "null"
          properties:
            member_number:
              type: string
            tier:
              type: string
            benefits:
              type: array
              items:
                type: string
        promotion_code:
          type:
            - string
            - "null"
        payment_model:
          $ref: "#/components/schemas/PaymentModel"
        pricing:
          $ref: "#/components/schemas/Pricing"
        cancellation_policy:
          $ref: "#/components/schemas/CancellationTerms"
        cancellation:
          type:
            - object
            - "null"
          properties:
            cancellation_number:
              type: string
            cancelled_at:
              type: string
              format: date-time
            fee:
              $ref: "#/components/schemas/Money"
            reason:
              type:
                - string
                - "null"
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
        links:
          type: object
          properties:
            self:
              type: string
              format: uri
            folio:
              type: string
              format: uri
            cancellation_quote:
              type: string
              format: uri
    PaymentModel:
      type: string
      description: >
        `pay_at_hotel`: the guest pays the property; `partner_collect`: you
        collected payment and settle

        with Kong Hotels under your contract (shown as a prepayment on the
        folio).
      enum:
        - pay_at_hotel
        - partner_collect
    Guest:
      type: object
      required:
        - first_name
        - last_name
        - email
      properties:
        first_name:
          type: string
          maxLength: 100
        last_name:
          type: string
          maxLength: 100
        email:
          type: string
          format: email
        phone:
          type:
            - string
            - "null"
        country_code:
          type:
            - string
            - "null"
          minLength: 2
          maxLength: 2
    ReservationStatus:
      type: string
      enum:
        - confirmed
        - checked_in
        - checked_out
        - cancelled
        - no_show
    MealPlan:
      type: string
      enum:
        - room_only
        - breakfast
        - half_board
        - all_inclusive
    Pricing:
      type: object
      description: >
        `room_subtotal` = Σ `nightly_rates` × `rooms`. Percentage taxes apply to

        (`room_subtotal` − `discount_total` + `add_ons_total`); fixed taxes per
        room, per adult or per stay.

        `total` = `room_subtotal` − `discount_total` + `add_ons_total` +
        `tax_total`.
      properties:
        currency:
          type: string
          examples:
            - USD
        nights:
          type: integer
        rooms:
          type: integer
        nightly_rates:
          type: array
          description: Per-room rate for each night after the rate plan's adjustment.
          items:
            type: object
            properties:
              date:
                type: string
                format: date
              amount:
                $ref: "#/components/schemas/Money"
        average_nightly_rate:
          $ref: "#/components/schemas/Money"
        room_subtotal:
          $ref: "#/components/schemas/Money"
        discounts:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
              name:
                type: string
              amount:
                $ref: "#/components/schemas/Money"
        discount_total:
          $ref: "#/components/schemas/Money"
        add_ons:
          type: array
          items:
            $ref: "#/components/schemas/AddOnLine"
        add_ons_total:
          $ref: "#/components/schemas/Money"
        taxes:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
              name:
                type: string
              type:
                type: string
                enum:
                  - percent
                  - per_room_per_night
                  - per_person_per_night
                  - per_stay
              rate:
                type: string
                description: Percentage
                or the unit amount for fixed taxes.: null
              amount:
                $ref: "#/components/schemas/Money"
        tax_total:
          $ref: "#/components/schemas/Money"
        total:
          $ref: "#/components/schemas/Money"
      examples:
        - currency: USD
          nights: 3
          rooms: 1
          nightly_rates:
            - date: 2026-12-04
              amount: "427.00"
            - date: 2026-12-05
              amount: "449.00"
            - date: 2026-12-06
              amount: "388.00"
          average_nightly_rate: "421.33"
          room_subtotal: "1264.00"
          discounts:
            - code: KONGWEEKEND
              name: King of the Weekend
              amount: "151.68"
          discount_total: "151.68"
          add_ons:
            - code: BRKFST
              name: Breakfast
              pricing_unit: per_guest_per_night
              unit_price: "34.00"
              quantity: 1
              amount: "204.00"
          add_ons_total: "204.00"
          taxes:
            - code: NYC_OCC
              name: NY state & city occupancy tax
              type: percent
              rate: "14.75"
              amount: "194.16"
            - code: NYC_UNIT
              name: NYC hotel unit fee
              type: per_room_per_night
              rate: "2.00"
              amount: "6.00"
            - code: NYC_JAVITS
              name: Javits Center fee
              type: per_room_per_night
              rate: "1.50"
              amount: "4.50"
          tax_total: "204.66"
          total: "1520.98"
    CancellationTerms:
      type: object
      description: The policy applied to a specific stay, with a concrete deadline and
        penalty amount.
      properties:
        code:
          type: string
        name:
          type: string
        is_refundable:
          type: boolean
        free_cancellation_until:
          type:
            - string
            - "null"
          format: date-time
          examples:
            - 2026-12-03T16:00:00-05:00
        penalty_after_deadline:
          $ref: "#/components/schemas/Money"
        currency:
          type: string
        summary:
          type: string
          examples:
            - Free cancellation until Thu 3 Dec 2026, 16:00 EST. After that, 1
              night(s) of room charges (427.00 USD) apply.
    Money:
      type: string
      pattern: ^-?\d+\.\d{2}$
      description: Decimal amount in the property currency.
      examples:
        - "389.00"
    Problem:
      type: object
      description: RFC 9457 problem details. Extra members (e.g. `available_units`,
        `restrictions`, `reasons`) may be present.
      required:
        - type
        - title
        - status
      properties:
        type:
          type: string
          format: uri
        title:
          type: string
        status:
          type: integer
        detail:
          type: string
        instance:
          type: string
        request_id:
          type: string
      additionalProperties: true
    ValidationProblem:
      allOf:
        - $ref: "#/components/schemas/Problem"
        - type: object
          properties:
            errors:
              type: object
              additionalProperties:
                type: array
                items:
                  type: string
            restrictions:
              type: array
              items:
                type: string
    AddOnLine:
      type: object
      properties:
        code:
          type: string
        name:
          type: string
        pricing_unit:
          type: string
          enum:
            - per_stay
            - per_night
            - per_guest_per_night
        unit_price:
          $ref: "#/components/schemas/Money"
        quantity:
          type: integer
        amount:
          $ref: "#/components/schemas/Money"
          description: unit_price × quantity × (1 | nights | guests × nights)
  headers:
    Location:
      description: URL of the created resource.
      schema:
        type: string
        format: uri
    IdempotentReplayed:
      description: "`true` when the response was replayed from an earlier request with
        the same Idempotency-Key."
      schema:
        type: string
        enum:
          - "true"
    RetryAfter:
      description: Seconds to wait before retrying.
      schema:
        type: integer
    RateLimitLimit:
      description: Requests allowed per minute in this bucket.
      schema:
        type: integer
    RateLimitRemaining:
      description: Requests left in the current window.
      schema:
        type: integer
  responses:
    BadRequest:
      description: Bad request.
      content:
        application/problem+json:
          schema:
            $ref: "#/components/schemas/Problem"
          example:
            type: https://developers.konghotels.example/problems/idempotency-key-required
            title: Idempotency-Key header required
            status: 400
            detail: Send a unique Idempotency-Key header (e.g. a UUID) so this request can
              be retried safely.
            instance: /reservations
            request_id: 4f1c8a0e-2b7d-4f0a-9d8e-3c2b1a0f9e8d
    WritesDisabled:
      description: The API is in read-only mode.
      content:
        application/problem+json:
          schema:
            $ref: "#/components/schemas/Problem"
          example:
            type: https://developers.konghotels.example/problems/writes-disabled
            title: Write operations are disabled
            status: 403
            detail: The Kong Hotels partner API is currently read-only. POST requests will
              be enabled in a later phase.
            instance: /quotes
            request_id: 0b7e2c9a-5d41-4e8b-a1f3-6c9d8e7f6a5b
    NotFound:
      description: Not found, or owned by another partner.
      content:
        application/problem+json:
          schema:
            $ref: "#/components/schemas/Problem"
          example:
            type: https://developers.konghotels.example/problems/not-found
            title: Resource not found
            status: 404
            detail: Property not found.
            instance: /properties/KXXXX
            request_id: 9a8b7c6d-5e4f-4a3b-2c1d-0e9f8a7b6c5d
    Conflict:
      description: Inventory or state conflict.
      content:
        application/problem+json:
          schema:
            $ref: "#/components/schemas/Problem"
          examples:
            roomUnavailable:
              value:
                type: https://developers.konghotels.example/problems/room-unavailable
                title: Room unavailable
                status: 409
                detail: Tower King is not available for the requested stay.
                instance: /quotes
                request_id: 3c2b1a0f-9e8d-4c7b-6a5f-4e3d2c1b0a9f
                available_units: 0
                restrictions:
                  - stop_sell
            invalidState:
              value:
                type: https://developers.konghotels.example/problems/invalid-state
                title: Invalid state for this operation
                status: 409
                detail: Reservation KH4DEMO06 is cancelled and can no longer be changed.
                instance: /reservations/KH4DEMO06/cancel
                request_id: 1f2e3d4c-5b6a-4978-8a9b-0c1d2e3f4a5b
    Gone:
      description: The quote has expired.
      content:
        application/problem+json:
          schema:
            $ref: "#/components/schemas/Problem"
          example:
            type: https://developers.konghotels.example/problems/quote-expired
            title: Quote expired
            status: 410
            detail: The quote expired at 2026-10-24T06:09:42Z. Request a new quote to
              re-check price and availability.
            instance: /reservations
            request_id: 6d5c4b3a-2f1e-4d0c-9b8a-7f6e5d4c3b2a
    ValidationFailed:
      description: Invalid input or a booking rule violation.
      content:
        application/problem+json:
          schema:
            $ref: "#/components/schemas/ValidationProblem"
          examples:
            validation:
              value:
                type: https://developers.konghotels.example/problems/validation-failed
                title: Validation failed
                status: 422
                detail: One or more fields are invalid.
                instance: /quotes
                request_id: 7e6d5c4b-3a2f-4e1d-8c0b-9a8f7e6d5c4b
                errors:
                  check_out:
                    - The check out field must be a date after check in.
            bookingRule:
              value:
                type: https://developers.konghotels.example/problems/booking-rule-violation
                title: Booking rule violation
                status: 422
                detail: Rate plan ADV cannot be sold for these dates.
                instance: /quotes
                request_id: 8f7e6d5c-4b3a-4f2e-9d1c-0b9a8f7e6d5c
                restrictions:
                  - min_advance_purchase
    RateLimited:
      description: Rate limit exceeded.
      headers:
        Retry-After:
          $ref: "#/components/headers/RetryAfter"
        X-RateLimit-Limit:
          $ref: "#/components/headers/RateLimitLimit"
        X-RateLimit-Remaining:
          $ref: "#/components/headers/RateLimitRemaining"
      content:
        application/problem+json:
          schema:
            $ref: "#/components/schemas/Problem"
          example:
            type: https://developers.konghotels.example/problems/rate-limited
            title: Too many requests
            status: 429
            detail: Rate limit exceeded. Retry after the number of seconds in the
              Retry-After header.
            instance: /availability
            request_id: 5b4a3f2e-1d0c-4b9a-8f7e-6d5c4b3a2f1e
  securitySchemes:
    KongKeyAuth:
      type: apiKey
      in: header
      name: apikey
      description: Your API key, validated by Kong Gateway. The header name depends on
        the gateway's key-auth configuration.
    KongConsumer:
      type: apiKey
      in: header
      name: X-Consumer-ID
      description: "**Local development only.** Simulates the consumer identity Kong
        Gateway injects after authentication."
```
