Klook · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Klook Open API (OCTO)

13 actions 13 updates documentation extends openapi/klook-octo-openapi-original.json
Generated by API Evangelist Written by API Evangelist tooling for Klook's API. It is a proposal applied on top of the contract, not a document Klook publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

descriptionoperationIdx-apievangelist-flowx-apievangelist-providerx-apievangelist-artifactsx-apievangelist-standardx-apievangelist-docsx-apievangelist-note

Targets 13

$.info
$.servers
$
$.components.securitySchemes.Auth
$.paths['/supplier'].get
$.paths['/products'].get
$.paths['/products/{id}'].get
$.paths['/availability'].post
$.paths['/availability/calendar'].post
$.paths['/bookings'].post
$.paths['/bookings/{uuid}/confirm'].post
$.paths['/bookings/{uuid}/cancel'].post
$.components

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Klook Open API (OCTO)
  version: 1.0.0
extends: openapi/klook-octo-openapi-original.json
x-generated: '2026-07-19'
x-method: generated
x-source: >-
  Enhancements derived from https://klook.gitbook.io/openapi and the repo
  artifacts. Applies API Evangelist metadata, adds the operationIds the
  published spec omits on five operations, applies the bearer security scheme
  uniformly (the prose documentation requires authentication on every endpoint
  while the spec applies it to only three), documents the required
  Octo-Capabilities header, replaces the placeholder server, and marks the
  documentation-deprecated Availability Calendar operation. The original spec is
  never mutated.
actions:
- target: $.info
  update:
    x-apievangelist-provider: klook
    x-apievangelist-artifacts: https://github.com/api-evangelist/klook
    x-apievangelist-standard: OCTO 1.0
    x-apievangelist-docs: https://klook.gitbook.io/openapi
    x-apievangelist-note: >-
      Published by OCTO Standards NP Inc and distributed by Klook as its Open
      API contract. Supplier-implemented: Klook is the API consumer.

- target: $.servers
  update:
  - url: https://{supplier_endpoint}/octo
    description: >-
      Supplier-hosted OCTO endpoint. Each supplier provides Klook with their own
      host during onboarding, in the documented form
      https://{your endpoint name}/octo/{path}.
    variables:
      supplier_endpoint:
        default: api.example.com
        description: The supplier's own API hostname.

- target: $
  update:
    security:
    - Auth: []

- target: $.components.securitySchemes.Auth
  update:
    description: >-
      Supplier-issued API key presented as an HTTP Bearer token. Required on all
      endpoints per https://klook.gitbook.io/openapi/getting-started/authentication.md.
      Use a single unique API key per reseller-supplier relationship.

- target: $.paths['/supplier'].get
  update:
    operationId: getSupplier
    tags:
    - Supplier
    description: >-
      Returns a single Supplier and associated contact details for the
      authenticated API key.

- target: $.paths['/products'].get
  update:
    operationId: getProducts
    description: >-
      Returns the list of Products available to the caller. No pagination is
      defined; Klook syncs the full catalog on a configurable cadence.

- target: $.paths['/products/{id}'].get
  update:
    operationId: getProduct
    description: Returns a single Product and associated details for a given Product ID.

- target: $.paths['/availability'].post
  update:
    operationId: checkAvailability
    description: >-
      Returns availability for a given Product and Option as one object per
      start time (or day). Critical to the booking flow — this is the only way
      to obtain the availabilityId required by Booking Reservation.

- target: $.paths['/availability/calendar'].post
  update:
    operationId: getAvailabilityCalendar
    deprecated: true
    description: >-
      DEPRECATED. Struck through in Klook's documentation. Returns availability
      as a single object per day, optimized for large date ranges and calendar
      population. Use POST /availability (Availability Check) instead — it is
      the only operation that returns an availabilityId.

- target: $.paths['/bookings'].post
  update:
    x-apievangelist-flow: >-
      Phase 1 of the two-phase booking model. Creates a booking in ON_HOLD
      status that reserves inventory while payment and contact details are
      collected. Must be followed by POST /bookings/{uuid}/confirm before the
      hold expires, or extended with POST /bookings/{uuid}/extend.
    x-apievangelist-idempotency: >-
      No idempotency key is defined. Retry safety comes from the expiring
      ON_HOLD reservation rather than from request deduplication.

- target: $.paths['/bookings/{uuid}/confirm'].post
  update:
    x-apievangelist-flow: >-
      Phase 2 of the two-phase booking model. Finalizes a previously reserved
      booking. Returns INVALID_BOOKING_UUID if the reservation has already
      expired.

- target: $.paths['/bookings/{uuid}/cancel'].post
  update:
    x-apievangelist-precondition: >-
      Only permitted when booking.cancellable is TRUE and the request is within
      the booking cancellation cut-off window. Otherwise returns
      UNPROCESSABLE_ENTITY.
    x-apievangelist-operationid-note: >-
      The published spec names this operation "delete-bookings-:uuid" even
      though it is a POST to /bookings/{uuid}/cancel. Left unchanged to preserve
      referential integrity with the original document.

- target: $.components
  update:
    x-apievangelist-error-envelope:
      description: >-
        All error responses use the OCTO envelope, not RFC 9457 problem+json.
      content_type: application/json
      shape:
        error: string — machine-readable error code
        errorMessage: string — human readable, localized via Accept-Language
      codes:
      - INVALID_PRODUCT_ID
      - INVALID_OPTION_ID
      - INVALID_UNIT_ID
      - INVALID_AVAILABILITY_ID
      - INVALID_BOOKING_UUID
      - BAD_REQUEST
      - UNPROCESSABLE_ENTITY
      - INTERNAL_SERVER_ERROR
      - UNAUTHORIZED
      - FORBIDDEN
      catalog: errors/klook-error-codes.yml
    x-apievangelist-required-headers:
      Octo-Capabilities: >-
        Required on every request. Comma-separated list of capability IDs to
        activate, e.g. "octo/content, octo/pricing". A _capabilities query
        parameter is available as a fallback. Echoed back on the response.
      Content-Type: application/json on POST, PATCH and DELETE.
      Accept-Language: Selects the language of errorMessage.
      catalog: conventions/klook-conventions.yml