Engine · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Engine Omni Partner API

9 actions 9 updates update extends ../openapi/_original/hotel-engine-omni-partner-api-openapi.yml
Derived by API Evangelist Built from the contracts Engine publishes. Engine did not publish this file.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-notex-rate-limitx-agentic-consequencex-idempotentx-human-in-the-loopx-apievangelist-providerx-apievangelist-artifactsx-authentication

Targets 9

$.info
$.paths['/book/v1/lodging/booking'].put
$.paths['/book/v1/lodging/booking/submit-cancellation'].post
$.paths['/book/v1/lodging/confirm-offer'].post
$.paths['/book/v1/lodging/booking'].post
$.paths['/book/v1/lodging/booking/generate-folio'].post
$.paths['/shop/v1/lodging/best-offers'].post
$.paths['/content/v1/property'].get
$.paths['/content/v1/properties'].post

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Engine Omni Partner API
  version: 1.0.0
x-generated: '2026-08-04'
x-method: generated
x-source: openapi/_original/hotel-engine-omni-partner-api-2.4.0-swagger-original.json
x-note: >-
  Captures API Evangelist's enhancements over Engine's published Swagger 2.0 document without
  mutating it. The dominant gap this overlay records: the contract declares no
  securityDefinitions and no security requirement, yet mutual TLS is mandatory on every call —
  a client generated from the spec alone will fail the handshake with no indication why. Also
  records the undeclared 429 and the gRPC-only streaming RPCs that the HTTP/JSON projection
  drops. Swagger 2.0 cannot express mutualTLS, so this is annotation, not a securityDefinitions
  patch; the durable fix is for Engine to publish OpenAPI 3.1 (which its own
  engine-public/protoc-gen-openapi already emits).
extends: ../openapi/_original/hotel-engine-omni-partner-api-openapi.yml
actions:
  - target: $.info
    update:
      x-apievangelist-provider: hotel-engine
      x-apievangelist-artifacts:
        authentication: authentication/hotel-engine-authentication.yml
        conventions: conventions/hotel-engine-conventions.yml
        errors: errors/hotel-engine-problem-types.yml
        lifecycle: lifecycle/hotel-engine-lifecycle.yml
        rate_limits: rate-limits/hotel-engine-rate-limits.yml
        data_model: data-model/hotel-engine-data-model.yml
        grpc: grpc/_index.yml
        skills: skills/_index.yml
      x-authentication:
        type: mutualTLS
        note: >-
          Mandatory client-certificate authentication on every operation, documented at
          https://engine-public.github.io/engine-partner-api/integration-guide.html and
          verified by live TLS probe. Not expressible in Swagger 2.0 securityDefinitions,
          therefore absent from this document.
        credential_request: omni-partnerships@engine.com
      x-request-id-header: com-engine-request-id
      x-idempotency:
        supported: false
        note: >-
          No idempotency key. Replay safety depends on the single-use continuation_token
          handed from ConfirmOffer to Book; a timed-out Book must be reconciled with
          GetBookings, never retried.
      x-rate-limit:
        headers: [ratelimit-limit, ratelimit-remaining, ratelimit-reset]
        throttled_status: 429
        model: per-endpoint burst (minute) + sustained (hour)
        docs: https://engine-public.github.io/engine-partner-api/rate-limits.html
        note: 429 is documented but declared on no operation in this document.
      x-error-envelope:
        format: google.rpc.Status
        discriminate_on: details[] typed error message field presence
        rfc9457: false
      x-companion-surface:
        protocol: gRPC
        endpoint: partner-api.engine.com:443
        note: >-
          The protos are the source of truth; this document is generated from them by
          grpc-gateway protoc-gen-openapiv2. Two RPCs carry no google.api.http annotation and
          therefore do not appear here at all.
        grpc_only_rpcs:
          - engine.shop.lodging.service.v1.LodgingShoppingService.FindBestOffersStreaming
          - engine.book.lodging.service.v1.LodgingBookingService.GetBookingsStreaming
      x-spec-gaps:
        - No securityDefinitions despite mandatory mTLS.
        - No 401/403 responses declared on any operation.
        - No 429 response declared despite published per-endpoint rate limits.
        - ContentService_GetProperties declares a 400 with no schema — the only untyped error in the contract.
        - Swagger 2.0 rather than OpenAPI 3.x.
  - target: $.paths['/book/v1/lodging/booking'].put
    update:
      x-agentic-consequence: physical
      x-idempotent: false
      x-human-in-the-loop: recommended
      x-note: >-
        Spends real money and cannot be safely retried. On ambiguity call
        LodgingBookingService_GetBookings to reconcile.
      x-non-retriable-errors: [needsReview, paymentProcessing]
  - target: $.paths['/book/v1/lodging/booking/submit-cancellation'].post
    update:
      x-agentic-consequence: physical
      x-idempotent: false
      x-human-in-the-loop: recommended
      x-note: >-
        Irreversible and refund-bearing. Call LodgingBookingService_PreviewCancellation first
        to obtain the expected refund before submitting.
  - target: $.paths['/book/v1/lodging/confirm-offer'].post
    update:
      x-price-lock: true
      x-note: >-
        Returns a Quote whose price is locked for a limited window. The quote is perishable —
        re-confirm rather than booking against a stale one.
  - target: $.paths['/book/v1/lodging/booking'].post
    update:
      x-partial-failure: true
      x-note: >-
        GetBookingsError.errors[] carries one GetBookingError per booking that could not be
        retrieved; some ids can succeed while others fail in the same call. This is also the
        reconciliation endpoint after an ambiguous Book.
  - target: $.paths['/book/v1/lodging/booking/generate-folio'].post
    update:
      x-response-encoding: binary
      x-note: Returns google.api.HttpBody — an Engine-branded folio PDF, not a JSON envelope.
  - target: $.paths['/shop/v1/lodging/best-offers'].post
    update:
      x-note: >-
        Returns one best-priced offer per property plus a continuation_token; NOT the
        exhaustive rate set. Pass the token to FindAvailability for the full room/offer detail.
      x-grpc-streaming-variant: FindBestOffersStreaming
  - target: $.paths['/content/v1/property'].get
    update:
      x-pagination:
        style: page-token
        request: [page_size, page_token]
        response: [next_page_token]
      x-rate-limit: {burst_per_minute: 400, sustained_per_hour: 18000}
  - target: $.paths['/content/v1/properties'].post
    update:
      x-note: The 400 response declares no schema — clients receive only the rpcStatus message string.

Work with this as data

Every overlay here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for openapi overlays

4 MCP tools reach this
  • find_overlaysBrowse and filter every overlay in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This overlay
curl "https://apis.io/api/v1/overlays/hotel-engine-omni-partner-api-overlay"
All openapi overlays
curl "https://apis.io/api/v1/overlays?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.