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

OpenAPI specification document.

````json
{"openapi":"3.1.0","info":{"title":"Kong Hotels Partner API","version":"1.0.0","summary":"Content, live availability, pricing and booking for Kong Hotels distribution partners.","description":"The Kong Hotels Partner API gives online travel agencies, metasearch engines, wholesalers and\ncorporate booking tools direct access to every Kong hotel: descriptive content, live availability\nand rates, guaranteed quotes, inventory holds, reservations, and the change feed and webhooks\nyou need to keep your copy of our data fresh.\n\n## Brands\n\n| Brand | Segment | What to expect |\n|---|---|---|\n| **Kong Summit** | Luxury | Flagship hotels with butler service and destination dining. |\n| **Kong Tower** | Upper upscale | High-rise city hotels with Club Lounge rooms. |\n| **Kong Lagoon** | Resort | Beachfront villas with half-board and activity add-ons. |\n| **Kong Canopy** | Boutique | Nature-forward hideaways and treehouse lofts. |\n| **Kong Basecamp** | Select service | Smart, social city hotels with bunk rooms for groups. |\n\n## Authentication & partner identity\n\nAuthentication, API keys and quotas per contract are enforced by **Kong Gateway** in front of this\nservice. After authenticating you, the gateway forwards your consumer identity to us in\n`X-Consumer-Custom-ID`, `X-Consumer-ID` or `X-Consumer-Username` (first non-empty wins).\n\nThat identity is your **partner ID**. Quotes, holds, reservations, group requests and webhooks are\nprivate to the partner that created them; requests for another partner's resources return `404`.\n\n> **Local development:** call the service directly and send `X-Consumer-ID: your-partner-id` yourself.\n> Requests without a consumer header are treated as the `anonymous` partner. In production the service\n> must only be reachable through the gateway.\n\n## Read-only mode\n\nThe API currently runs in **read-only mode**. Every `GET` endpoint is live; every `POST`, `PATCH` and\n`DELETE` returns `403` with problem type `writes-disabled`. Operations marked **Write** below are fully\nimplemented and documented so you can build against them now; they will be switched on in a later\nphase (`KONG_WRITES_ENABLED=true`).\n\nSeeded demo reservations belonging to the partner `demo-partner` let you exercise the reservation,\nfolio and cancellation-quote endpoints while writes are off.\n\n## Booking flow\n\n| Step | Call | What it does |\n|---|---|---|\n| 1. Search | `GET /availability` | Which properties have rooms, with the cheapest offer at each. |\n| 2. Price | `GET /properties/{code}/availability` | Every room type × rate plan for the stay, fully priced. |\n| 3. Quote | `POST /quotes` | Locks the price for 15 minutes and returns a `quote_id`. |\n| 4. Hold *(optional)* | `POST /holds` | Takes the rooms off sale for 15 minutes while the guest pays. |\n| 5. Book | `POST /reservations` | Confirms the booking and returns a `confirmation_number`. Requires an `Idempotency-Key` header. |\n\nAfter booking:\n\n| Task | Call |\n|---|---|\n| Look up the reservation | `GET /reservations/{confirmation_number}` |\n| Change guest details or the stay (re-priced) | `PATCH /reservations/{confirmation_number}` |\n| Check the cancellation fee | `GET /reservations/{confirmation_number}/cancellation-quote` |\n| Cancel | `POST /reservations/{confirmation_number}/cancel` |\n\nEvery price you see is **all-in**: nightly room charges after rate-plan adjustments and discounts, plus\nadd-ons, plus every mandatory tax and fee itemised in `pricing.taxes`. Kong Hotels never charges resort\nor destination fees.\n\n## Money, dates & times\n\n* Amounts are **decimal strings** with two decimal places (`\"389.00\"`) in the property's local\n  `currency` (ISO 4217). Never parse them as floats.\n* Stay dates are `YYYY-MM-DD` in the property's local calendar. `check_out` is the departure date.\n* Timestamps are ISO 8601. Cancellation deadlines carry the property's UTC offset.\n\n## Idempotency\n\n`POST /reservations` **requires** an `Idempotency-Key` header (we recommend a UUID v4). Other `POST`\noperations accept one optionally. The first response for a key is stored for 24 hours; retrying with the\nsame key and body replays it with `Idempotent-Replayed: true`. Reusing a key with a different body\nreturns `422 idempotency-key-reused`; retrying while the first request is still running returns\n`409 idempotency-request-in-progress`. 5xx responses are not stored, so you can retry them safely.\n\n## Rate limits\n\nLimits apply per partner (or per client IP for anonymous requests) per minute, in three buckets:\n\n| Bucket | Default | Endpoints |\n|---|---|---|\n| `read` | 300/min | Content, reservations, feeds — every `GET` except the ones below |\n| `search` | 120/min | `/availability`, `/properties/{code}/availability`, `/properties/{code}/calendar` |\n| `write` | 60/min | Every `POST`, `PATCH`, `DELETE` |\n\nEvery response carries `X-RateLimit-Limit` and `X-RateLimit-Remaining`. When you exceed a limit you get\n`429 rate-limited` with `Retry-After` (seconds). Contracted quotas enforced at the gateway are separate.\n\n## Errors\n\nErrors use [RFC 9457 problem details](https://www.rfc-editor.org/rfc/rfc9457) with\n`Content-Type: application/problem+json`. Switch on `type`, not on `title` or `detail`:\n\n| `type` suffix | Status | Meaning |\n|---|---|---|\n| `validation-failed` | 422 | Field errors in `errors` (field → messages). |\n| `booking-rule-violation` | 422 | Valid input that breaks a rule, e.g. minimum stay or occupancy. `restrictions` may list codes. |\n| `membership-required` | 422 | Member-only rate requested without verified loyalty details. |\n| `loyalty-verification-failed` | 422 | Member number and last name don't match. |\n| `promotion-invalid` / `promotion-ineligible` | 422 | Unknown code, or not applicable (`reasons`). |\n| `modification-not-allowed` | 422 | The rate plan doesn't permit stay changes. |\n| `idempotency-key-reused` | 422 | Same key, different request body. |\n| `idempotency-key-required` | 400 | `POST /reservations` without `Idempotency-Key`. |\n| `writes-disabled` | 403 | The API is in read-only mode. |\n| `not-found` | 404 | Unknown resource, or one that belongs to another partner. |\n| `room-unavailable` | 409 | Inventory is gone. `available_units` shows what's left. |\n| `invalid-state` | 409 | E.g. cancelling a cancelled reservation, re-booking a used quote. |\n| `cancellation-fee-changed` | 409 | The fee rose above your `expected_fee`. |\n| `idempotency-request-in-progress` | 409 | Retry after `Retry-After` seconds. |\n| `quote-expired` | 410 | Request a new quote. |\n| `rate-limited` | 429 | See `Retry-After`. |\n| `internal-error` | 500 | Unexpected server error. `request_id` identifies the failed request. |\n\nEvery response, success or error, includes `X-Request-ID`. We reuse the gateway's `Kong-Request-ID` or\nyour own `X-Request-ID` when present.\n\n## Pagination\n\nList endpoints use **cursor pagination**: follow `links.next` (or pass `meta.next_cursor` as `cursor`)\nuntil it is `null`. `per_page` sets the page size. The change feed uses its own `since`/`next_cursor`\nsequence (see **Change Feed**).\n\n## Staying in sync\n\nDon't re-crawl everything. Poll `GET /changes?since={next_cursor}` every minute or two, or subscribe to\nwebhooks, and refetch only what changed:\n\n* `availability.changed` / `rates.changed` → refresh that room type's dates.\n* `property.updated` → refetch `/properties/{code}`.\n* `reservation.*` → your own bookings changed (including changes made at the property).\n\n### Verifying webhook signatures\n\nEach delivery is a `POST` of the same event envelope used by `/changes`, with these headers:\n\n* `Kong-Event`: the event type\n* `Kong-Delivery`: a unique delivery ID (use it to de-duplicate)\n* `Kong-Signature`: `t=<unix seconds>,v1=<hex HMAC-SHA256>`\n\nCompute `HMAC_SHA256(secret, \"<t>.<raw request body>\")` and compare it to `v1` in constant time. Reject\ndeliveries where `t` is more than 5 minutes old. Respond with any `2xx` within 10 seconds. Failed\ndeliveries are retried with backoff (30s, 2m, 10m, 30m, 1h) before being marked `failed`.\n\n```php\n[$t, $v1] = sscanf($_SERVER['HTTP_KONG_SIGNATURE'], 't=%d,v1=%s');\n$valid = hash_equals(hash_hmac('sha256', $t.'.'.file_get_contents('php://input'), $secret), $v1)\n    && abs(time() - $t) < 300;\n```\n\n## Test data\n\n| What | Values |\n|---|---|\n| Properties | `KTNYC`, `KBBRK`, `KCSFO`, `KSLON`, `KBLON`, `KTPAR`, `KTTYO`, `KBTYO`, `KLDPS`, `KLSYD`, `KTSYD`, `KCMTV` |\n| Kong Rewards members | `KR10000001` Darrow (silverback), `KR10000002` Driscoll (gold), `KR10000003` Denham (silver), `KR10000004` Raman (member) |\n| Promotions | `KONGWEEKEND` (12%, 2+ nights), `EARLYAPE` (15%, stays 60+ days out, city hotels), `BANANA25` (25%, Lagoon, 4+ nights, private), `MAYFAIR100` (£100 off KSLON), `SKULLISLAND` (expired) |\n| Demo reservations | `KH4DEMO01` … `KH4DEMO06` for partner `demo-partner` (`KH4DEMO05` is checked out and can be reviewed) |\n| Change feed | About two weeks of history: nightly `rates.changed` pushes, daytime `availability.changed`, a few `property.updated`, `promotion.published` and `review.published`, plus the lifecycle of the demo reservations (visible to `demo-partner` only) |\n| Webhooks | `demo-partner` has three subscriptions: bookings, availability & rates for NYC and London (with retries and three failed deliveries from a partner-side outage), and a paused staging listener |\n\nInventory is seeded for 365 days ahead with realistic seasonality, weekday pricing and occasional\nsell-outs, so some dates are deliberately unavailable.\n"},"servers":[{"url":"https://api.konghotels.cloud","description":"Kong Gateway"}],"security":[{"KongKeyAuth":[]},{"KongConsumer":[]}],"tags":[{"name":"Destinations","description":"Cities and regions with Kong properties."},{"name":"Properties","description":"Descriptive content, photos, amenities and house policies."},{"name":"Rooms & Rates","description":"Static room type and rate plan definitions."},{"name":"Availability","description":"Live, fully priced availability. Uses the `search` rate-limit bucket."},{"name":"Quotes & Holds","description":"Lock a price, then optionally hold the inventory while the guest pays."},{"name":"Reservations","description":"Book, retrieve, modify and cancel stays."},{"name":"Add-ons","description":"Extras such as breakfast, parking, transfers and spa treatments."},{"name":"Promotions","description":"Promotion codes and their eligibility rules."},{"name":"Loyalty","description":"Kong Rewards tiers and member verification."},{"name":"Reviews","description":"Guest reviews and verified-stay submissions."},{"name":"Group Requests","description":"Requests for blocks of 10 rooms or more, handled by property sales teams."},{"name":"Change Feed","description":"An ordered stream of changes to content, rates, availability and your bookings."},{"name":"Webhooks","description":"Push delivery of change events to your endpoints."}],"x-tagGroups":[{"name":"Content","tags":["Destinations","Properties","Rooms & Rates","Reviews"]},{"name":"Shopping","tags":["Availability","Promotions","Loyalty"]},{"name":"Booking","tags":["Quotes & Holds","Reservations","Add-ons","Group Requests"]},{"name":"Integration","tags":["Change Feed","Webhooks"]}],"paths":{"/destinations":{"get":{"tags":["Destinations"],"operationId":"listDestinations","summary":"List destinations","description":"Every destination with at least one active Kong property.","responses":{"200":{"description":"Destinations, alphabetically.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Destination"}}}}}}},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/destinations/{destinationCode}":{"get":{"tags":["Destinations"],"operationId":"getDestination","summary":"Get a destination","description":"A destination and summaries of its properties.","parameters":[{"name":"destinationCode","in":"path","required":true,"schema":{"type":"string","examples":["new-york"]}}],"responses":{"200":{"description":"The destination.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/DestinationDetail"}}}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/properties":{"get":{"tags":["Properties"],"operationId":"searchProperties","summary":"Search properties","description":"Search the catalogue by text, destination, country, city, brand, star rating, amenities or\ndistance. When `latitude`/`longitude` are given, results are sorted by distance and include\n`distance_km`.\n","parameters":[{"name":"q","in":"query","description":"Matches property name or city.","schema":{"type":"string","maxLength":100}},{"name":"destination","in":"query","schema":{"type":"string","examples":["london"]}},{"name":"country","in":"query","description":"ISO 3166-1 alpha-2.","schema":{"type":"string","minLength":2,"maxLength":2,"examples":["JP"]}},{"name":"city","in":"query","schema":{"type":"string"}},{"name":"brand","in":"query","schema":{"$ref":"#/components/schemas/BrandCode"}},{"name":"min_star_rating","in":"query","schema":{"type":"integer","minimum":1,"maximum":5}},{"name":"amenities","in":"query","description":"Comma-separated amenity codes; properties must have **all** of them.","schema":{"type":"string","examples":["spa,pool_indoor"]}},{"name":"latitude","in":"query","schema":{"type":"number","minimum":-90,"maximum":90}},{"name":"longitude","in":"query","schema":{"type":"number","minimum":-180,"maximum":180}},{"name":"radius_km","in":"query","description":"Defaults to 25.","schema":{"type":"number","minimum":0.1,"maximum":500}},{"$ref":"#/components/parameters/PerPage"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"A page of properties.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/CursorPage"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Property"}}}}]}}}},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/properties/{propertyCode}":{"get":{"tags":["Properties"],"operationId":"getProperty","summary":"Get a property","description":"Full content for one property, including room types, amenities and review score.","parameters":[{"$ref":"#/components/parameters/PropertyCode"}],"responses":{"200":{"description":"The property.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Property"}}}}}},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/properties/{propertyCode}/photos":{"get":{"tags":["Properties"],"operationId":"listPropertyPhotos","summary":"List photos","description":"Property and room photos in display order. Room photos carry `room_type_code`.","parameters":[{"$ref":"#/components/parameters/PropertyCode"}],"responses":{"200":{"description":"Photos.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Photo"}}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/properties/{propertyCode}/policies":{"get":{"tags":["Properties"],"operationId":"getPropertyPolicies","summary":"Get house policies","description":"Check-in/out, children, pets, smoking, payment, accessibility, taxes and cancellation terms by rate plan.","parameters":[{"$ref":"#/components/parameters/PropertyCode"}],"responses":{"200":{"description":"Policies.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PropertyPolicies"}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/properties/{propertyCode}/room-types":{"get":{"tags":["Rooms & Rates"],"operationId":"listRoomTypes","summary":"List room types","parameters":[{"$ref":"#/components/parameters/PropertyCode"}],"responses":{"200":{"description":"Room types, cheapest first.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RoomType"}}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/properties/{propertyCode}/room-types/{roomTypeCode}":{"get":{"tags":["Rooms & Rates"],"operationId":"getRoomType","summary":"Get a room type","parameters":[{"$ref":"#/components/parameters/PropertyCode"},{"$ref":"#/components/parameters/RoomTypeCode"}],"responses":{"200":{"description":"The room type.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/RoomType"}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/properties/{propertyCode}/rate-plans":{"get":{"tags":["Rooms & Rates"],"operationId":"listRatePlans","summary":"List rate plans","description":"Active rate plans with meal plan, restrictions and cancellation policy.","parameters":[{"$ref":"#/components/parameters/PropertyCode"}],"responses":{"200":{"description":"Rate plans.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RatePlan"}}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/properties/{propertyCode}/rate-plans/{ratePlanCode}":{"get":{"tags":["Rooms & Rates"],"operationId":"getRatePlan","summary":"Get a rate plan","parameters":[{"$ref":"#/components/parameters/PropertyCode"},{"$ref":"#/components/parameters/RatePlanCode"}],"responses":{"200":{"description":"The rate plan.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/RatePlan"}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/availability":{"get":{"tags":["Availability"],"operationId":"searchAvailability","summary":"Search availability across properties","description":"For metasearch and listing pages. Returns the cheapest sellable offer per property for a\ndestination, a list of properties, or a radius (one of `destination`, `properties` or\n`latitude`+`longitude` is required). Up to 50 properties are evaluated per call.\n","parameters":[{"name":"destination","in":"query","schema":{"type":"string","examples":["tokyo"]}},{"name":"properties","in":"query","description":"Comma-separated property codes.","schema":{"type":"string","examples":["KTNYC,KBBRK"]}},{"name":"latitude","in":"query","schema":{"type":"number"}},{"name":"longitude","in":"query","schema":{"type":"number"}},{"name":"radius_km","in":"query","schema":{"type":"number","default":25}},{"$ref":"#/components/parameters/CheckIn"},{"$ref":"#/components/parameters/CheckOut"},{"$ref":"#/components/parameters/Adults"},{"$ref":"#/components/parameters/Children"},{"$ref":"#/components/parameters/Rooms"},{"name":"max_total","in":"query","description":"Exclude properties whose cheapest total exceeds this amount (property currency).","schema":{"type":"number"}},{"name":"promotion_code","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Available properties.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilitySearchResponse"}}}},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/properties/{propertyCode}/availability":{"get":{"tags":["Availability"],"operationId":"getPropertyAvailability","summary":"Get rooms and rates for a stay","description":"Every sellable room type × rate plan for the stay, fully priced with taxes and concrete\ncancellation terms. Member-only offers are included and flagged `requires_membership`; you need\nverified loyalty details to quote them.\n\nIf `promotion_code` doesn't apply, offers are returned without it and `promotion.applied` is\n`false` with `reasons`.\n","parameters":[{"$ref":"#/components/parameters/PropertyCode"},{"$ref":"#/components/parameters/CheckIn"},{"$ref":"#/components/parameters/CheckOut"},{"$ref":"#/components/parameters/Adults"},{"$ref":"#/components/parameters/Children"},{"$ref":"#/components/parameters/Rooms"},{"name":"room_type","in":"query","description":"Limit to one room type code.","schema":{"type":"string"}},{"name":"rate_plan","in":"query","description":"Limit to one rate plan code.","schema":{"type":"string"}},{"name":"promotion_code","in":"query","schema":{"type":"string","examples":["KONGWEEKEND"]}},{"name":"include_unavailable","in":"query","description":"Also list unsellable room types with their `restrictions`.","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Priced availability.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyAvailabilityResponse"}}}},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/properties/{propertyCode}/calendar":{"get":{"tags":["Availability"],"operationId":"getRateCalendar","summary":"Get a rate calendar","description":"Day-by-day availability and the lowest Best Available Rate (per room per night, before taxes)\nfor up to 93 days, for date pickers and \"flexible dates\" views. Indicative only; price a real\nstay with `/properties/{propertyCode}/availability`.\n","parameters":[{"$ref":"#/components/parameters/PropertyCode"},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"end_date","in":"query","required":true,"schema":{"type":"string","format":"date"}},{"name":"room_type","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Calendar days.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CalendarDay"}},"meta":{"type":"object","properties":{"property_code":{"type":"string"},"room_type":{"type":["string","null"]},"rate_basis":{"type":"string"}}}}}}}},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"}}}},"/quotes":{"post":{"tags":["Quotes & Holds"],"operationId":"createQuote","summary":"Create a quote","description":"**Write.** Re-checks availability and every booking rule, then locks the price for\n`KONG_QUOTE_TTL_MINUTES` (15 by default). Book it with `POST /reservations`.\n","x-write":true,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"},"example":{"property_code":"KTNYC","room_type_code":"TWRK","rate_plan_code":"MBR","check_in":"2026-12-04","check_out":"2026-12-07","adults":2,"promotion_code":"KONGWEEKEND","loyalty":{"member_number":"KR10000001","last_name":"Darrow"},"add_ons":[{"code":"BRKFST","quantity":1}]}}}},"responses":{"201":{"description":"Quote created.","headers":{"Location":{"$ref":"#/components/headers/Location"},"X-Request-ID":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Quote"}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"}}}},"/quotes/{quoteId}":{"get":{"tags":["Quotes & Holds"],"operationId":"getQuote","summary":"Get a quote","parameters":[{"$ref":"#/components/parameters/QuoteId"}],"responses":{"200":{"description":"The quote. `state` is `open`, `expired` or `booked`.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Quote"}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/holds":{"post":{"tags":["Quotes & Holds"],"operationId":"createHold","summary":"Hold inventory","description":"**Write.** Takes a quote's rooms off sale for `KONG_HOLD_TTL_MINUTES` (15 by default) so they can't\nbe sold to anyone else while your guest completes payment. The quote stays bookable for at least\nas long as the hold. One active hold per quote.\n","x-write":true,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["quote_id"],"properties":{"quote_id":{"type":"string","examples":["qt_01jbx4m6n2kz9v8c7d5e3f1g0h"]}}}}}},"responses":{"201":{"description":"Hold created.","headers":{"Location":{"$ref":"#/components/headers/Location"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Hold"}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"410":{"$ref":"#/components/responses/Gone"}}}},"/holds/{holdId}":{"get":{"tags":["Quotes & Holds"],"operationId":"getHold","summary":"Get a hold","parameters":[{"$ref":"#/components/parameters/HoldId"}],"responses":{"200":{"description":"The hold. `status` is `active`, `released`, `converted` or `expired`.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Hold"}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"delete":{"tags":["Quotes & Holds"],"operationId":"releaseHold","summary":"Release a hold","description":"**Write.** Returns the held rooms to inventory immediately. Do this when a guest abandons checkout.","x-write":true,"parameters":[{"$ref":"#/components/parameters/HoldId"}],"responses":{"200":{"description":"Released hold.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Hold"}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"}}}},"/reservations":{"get":{"tags":["Reservations"],"operationId":"listReservations","summary":"List reservations","description":"Your organisation's reservations, newest first. Use `updated_since` for reconciliation.","parameters":[{"name":"partner_reference","in":"query","description":"Your own booking reference.","schema":{"type":"string"}},{"name":"property","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"$ref":"#/components/schemas/ReservationStatus"}},{"name":"check_in_from","in":"query","schema":{"type":"string","format":"date"}},{"name":"check_in_to","in":"query","schema":{"type":"string","format":"date"}},{"name":"updated_since","in":"query","schema":{"type":"string","format":"date-time"}},{"$ref":"#/components/parameters/PerPage"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"A page of reservations.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/CursorPage"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Reservation"}}}}]}}}},"422":{"$ref":"#/components/responses/ValidationFailed"}}},"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\ntwo partners can never book the last room. If the quote has an active hold, the hold is converted.\n","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"}}}},"/reservations/{confirmationNumber}":{"get":{"tags":["Reservations"],"operationId":"getReservation","summary":"Get a reservation","parameters":[{"$ref":"#/components/parameters/ConfirmationNumber"}],"responses":{"200":{"description":"The reservation.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Reservation"}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"patch":{"tags":["Reservations"],"operationId":"updateReservation","summary":"Modify a reservation","description":"**Write.** Send only the fields to change.\n\n* **Guest details** (`guest` is merged), `additional_guests`, `special_requests`,\n  `estimated_arrival_time`, `partner_reference`, `children_ages`: applied as-is.\n* **Stay changes** (`check_in`, `check_out`, `adults`, `children`, `rooms`, `room_type_code`,\n  `rate_plan_code`): availability is re-checked, the stay is re-priced at current rates with the\n  original promotion and add-ons, and `meta.price_difference` shows the change. Not allowed on\n  rate plans with `allows_modification: false` or once the stay has started.\n","x-write":true,"parameters":[{"$ref":"#/components/parameters/ConfirmationNumber"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReservationUpdate"},"example":{"check_out":"2026-12-08","special_requests":"Celebrating an anniversary."}}}},"responses":{"200":{"description":"Updated reservation.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Reservation"},"meta":{"type":"object","properties":{"repriced":{"type":"boolean"},"previous_total":{"$ref":"#/components/schemas/Money"},"new_total":{"$ref":"#/components/schemas/Money"},"price_difference":{"$ref":"#/components/schemas/Money"}}}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/ValidationFailed"}}}},"/reservations/{confirmationNumber}/cancellation-quote":{"get":{"tags":["Reservations"],"operationId":"getCancellationQuote","summary":"Get the cancellation fee","description":"The fee that would apply if the reservation were cancelled right now, with the policy terms.","parameters":[{"$ref":"#/components/parameters/ConfirmationNumber"}],"responses":{"200":{"description":"Cancellation quote.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/CancellationQuote"}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/reservations/{confirmationNumber}/cancel":{"post":{"tags":["Reservations"],"operationId":"cancelReservation","summary":"Cancel a reservation","description":"**Write.** Cancels a confirmed reservation and charges any fee due under its cancellation policy.\nSend `expected_fee` (from the cancellation quote you showed the guest); if the fee has since risen,\nthe request fails with `409 cancellation-fee-changed` instead of charging more.\n","x-write":true,"parameters":[{"$ref":"#/components/parameters/ConfirmationNumber"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"reason":{"type":["string","null"],"maxLength":255},"expected_fee":{"type":["string","number","null"],"description":"The fee you displayed to the guest."}}},"example":{"reason":"Guest changed travel plans","expected_fee":"0.00"}}}},"responses":{"200":{"description":"Cancelled reservation. See `cancellation` for the cancellation number and fee.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Reservation"}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"}}}},"/reservations/{confirmationNumber}/folio":{"get":{"tags":["Reservations"],"operationId":"getFolio","summary":"Get the folio","description":"An itemised statement of nightly room charges, discounts, add-ons, taxes, partner prepayments and the balance due at the property.","parameters":[{"$ref":"#/components/parameters/ConfirmationNumber"}],"responses":{"200":{"description":"Folio.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Folio"}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/reservations/{confirmationNumber}/add-ons":{"get":{"tags":["Add-ons"],"operationId":"listReservationAddOns","summary":"List add-ons on a reservation","parameters":[{"$ref":"#/components/parameters/ConfirmationNumber"}],"responses":{"200":{"description":"Priced add-on lines.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AddOnLine"}},"meta":{"type":"object","properties":{"currency":{"type":"string"},"add_ons_total":{"$ref":"#/components/schemas/Money"}}}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"post":{"tags":["Add-ons"],"operationId":"addReservationAddOn","summary":"Add an add-on to a reservation","description":"**Write.** Adds the extra (or increases its quantity) and re-totals taxes and the reservation total.","x-write":true,"parameters":[{"$ref":"#/components/parameters/ConfirmationNumber"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["code"],"properties":{"code":{"type":"string","examples":["LATECO"]},"quantity":{"type":"integer","minimum":1,"maximum":20,"default":1}}}}}},"responses":{"201":{"description":"Updated reservation.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Reservation"}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/ValidationFailed"}}}},"/reservations/{confirmationNumber}/add-ons/{addOnCode}":{"delete":{"tags":["Add-ons"],"operationId":"removeReservationAddOn","summary":"Remove an add-on from a reservation","description":"**Write.**","x-write":true,"parameters":[{"$ref":"#/components/parameters/ConfirmationNumber"},{"name":"addOnCode","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Updated reservation.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Reservation"}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"}}}},"/properties/{propertyCode}/add-ons":{"get":{"tags":["Add-ons"],"operationId":"listPropertyAddOns","summary":"List a property's add-ons","description":"Extras that can be included in quotes or added to reservations, priced in the property currency.","parameters":[{"$ref":"#/components/parameters/PropertyCode"}],"responses":{"200":{"description":"Add-ons.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AddOn"}}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}}},"/promotions":{"get":{"tags":["Promotions"],"operationId":"listPromotions","summary":"List public promotions","description":"Public promotions bookable today. Private codes (closed user groups) are not listed but can be looked up.","parameters":[{"name":"property","in":"query","description":"Only promotions valid at this property.","schema":{"type":"string"}}],"responses":{"200":{"description":"Promotions.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Promotion"}}}}}}}}}},"/promotions/{promotionCode}":{"get":{"tags":["Promotions"],"operationId":"getPromotion","summary":"Look up a promotion code","description":"Pass `property`, `check_in` and `check_out` to check whether the code applies to a stay (`meta.eligibility`).","parameters":[{"name":"promotionCode","in":"path","required":true,"schema":{"type":"string","examples":["KONGWEEKEND"]}},{"name":"property","in":"query","schema":{"type":"string"}},{"name":"check_in","in":"query","schema":{"type":"string","format":"date"}},{"name":"check_out","in":"query","schema":{"type":"string","format":"date"}}],"responses":{"200":{"description":"The promotion.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Promotion"},"meta":{"type":"object","properties":{"eligibility":{"$ref":"#/components/schemas/PromotionEligibility"}}}}}}}},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"}}}},"/loyalty/tiers":{"get":{"tags":["Loyalty"],"operationId":"listLoyaltyTiers","summary":"List Kong Rewards tiers","responses":{"200":{"description":"Tiers, lowest to highest.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LoyaltyTier"}}}}}}}}}},"/loyalty/members/verify":{"post":{"tags":["Loyalty"],"operationId":"verifyLoyaltyMember","summary":"Verify a member","description":"**Write** (POST, so personal data stays out of URLs). Confirms a member number and last name match, and returns the tier and benefits.","x-write":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["member_number","last_name"],"properties":{"member_number":{"type":"string","examples":["KR10000002"]},"last_name":{"type":"string","examples":["Driscoll"]}}}}}},"responses":{"200":{"description":"Verified member.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/LoyaltyVerification"}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"422":{"$ref":"#/components/responses/ValidationFailed"}}}},"/properties/{propertyCode}/reviews":{"get":{"tags":["Reviews"],"operationId":"listReviews","summary":"List reviews","description":"Published guest reviews (1–10 scale) with a score summary in `meta.summary`.","parameters":[{"$ref":"#/components/parameters/PropertyCode"},{"name":"traveler_type","in":"query","schema":{"$ref":"#/components/schemas/TravelerType"}},{"name":"min_rating","in":"query","schema":{"type":"integer","minimum":1,"maximum":10}},{"name":"language","in":"query","schema":{"type":"string","examples":["en"]}},{"name":"sort","in":"query","schema":{"type":"string","enum":["newest","highest","lowest"],"default":"newest"}},{"name":"per_page","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"A page of reviews.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/CursorPage"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Review"}},"meta":{"type":"object","properties":{"summary":{"$ref":"#/components/schemas/ReviewSummary"}}}}}]}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"post":{"tags":["Reviews"],"operationId":"createReview","summary":"Submit a verified-stay review","description":"**Write.** For one of your reservations at this property with status `checked_out`. One review per reservation.","x-write":true,"parameters":[{"$ref":"#/components/parameters/PropertyCode"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewRequest"}}}},"responses":{"201":{"description":"Published review.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Review"}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/ValidationFailed"}}}},"/group-requests":{"get":{"tags":["Group Requests"],"operationId":"listGroupRequests","summary":"List group requests","parameters":[{"name":"status","in":"query","schema":{"$ref":"#/components/schemas/GroupRequestStatus"}},{"$ref":"#/components/parameters/PerPage"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"A page of group requests.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/CursorPage"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/GroupRequest"}}}}]}}}}}},"post":{"tags":["Group Requests"],"operationId":"createGroupRequest","summary":"Submit a group request","description":"**Write.** For 10 or more rooms (individual bookings are capped at 9). The property's sales team\nreviews the request and moves it through `under_review` → `proposal_sent` → `accepted`/`declined`.\nSubscribe to `group_request.updated` to follow along.\n","x-write":true,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupRequestCreate"}}}},"responses":{"201":{"description":"Group request received.","headers":{"Location":{"$ref":"#/components/headers/Location"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/GroupRequest"}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"}}}},"/group-requests/{groupReference}":{"get":{"tags":["Group Requests"],"operationId":"getGroupRequest","summary":"Get a group request","parameters":[{"$ref":"#/components/parameters/GroupReference"}],"responses":{"200":{"description":"The group request.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/GroupRequest"}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"patch":{"tags":["Group Requests"],"operationId":"updateGroupRequest","summary":"Update a group request","description":"**Write.** Only while the request is `received`, `under_review` or `proposal_sent`.","x-write":true,"parameters":[{"$ref":"#/components/parameters/GroupReference"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupRequestUpdate"}}}},"responses":{"200":{"description":"Updated group request.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/GroupRequest"}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"422":{"$ref":"#/components/responses/ValidationFailed"}}}},"/group-requests/{groupReference}/cancel":{"post":{"tags":["Group Requests"],"operationId":"cancelGroupRequest","summary":"Withdraw a group request","description":"**Write.**","x-write":true,"parameters":[{"$ref":"#/components/parameters/GroupReference"}],"responses":{"200":{"description":"Cancelled group request.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/GroupRequest"}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"}}}},"/changes":{"get":{"tags":["Change Feed"],"operationId":"listChanges","summary":"Read the change feed","description":"An append-only, ordered feed of events. Public events (rates, availability, content, promotions,\nreviews) are visible to everyone; reservation and group-request events only to the partner that\nowns them.\n\nStart with `since=0`, process the events in order, store `meta.next_cursor`, and pass it as `since`\nnext time. Keep calling straight away while `meta.has_more` is `true`.\n","parameters":[{"name":"since","in":"query","description":"The sequence number to read after.","schema":{"type":"integer","minimum":0,"default":0}},{"name":"types","in":"query","description":"Comma-separated event types to include.","schema":{"type":"string","examples":["availability.changed,rates.changed"]}},{"name":"property","in":"query","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"Events after the cursor.","headers":{"X-Request-ID":{"$ref":"#/components/headers/RequestId"},"X-RateLimit-Limit":{"$ref":"#/components/headers/RateLimitLimit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/RateLimitRemaining"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ChangeEvent"}},"meta":{"type":"object","properties":{"next_cursor":{"type":"integer"},"has_more":{"type":"boolean"}}}}}}}}}}},"/webhooks/event-types":{"get":{"tags":["Webhooks"],"operationId":"listWebhookEventTypes","summary":"List event types","responses":{"200":{"description":"Subscribable event types.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EventTypeInfo"}}}}}}}}}},"/webhooks":{"get":{"tags":["Webhooks"],"operationId":"listWebhooks","summary":"List subscriptions","responses":{"200":{"description":"Your subscriptions.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookSubscription"}}}}}}}}},"post":{"tags":["Webhooks"],"operationId":"createWebhook","summary":"Create a subscription","description":"**Write.** The signing `secret` is returned **only** in this response (and after rotation). Store it securely.","x-write":true,"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreate"},"example":{"url":"https://partner.example.com/webhooks/kong-hotels","events":["reservation.created","reservation.modified","reservation.cancelled","availability.changed"],"property_codes":["KTNYC","KBBRK"],"description":"Production listener"}}}},"responses":{"201":{"description":"Subscription created.","headers":{"Location":{"$ref":"#/components/headers/Location"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WebhookSubscriptionWithSecret"}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"422":{"$ref":"#/components/responses/ValidationFailed"}}}},"/webhooks/{webhookId}":{"get":{"tags":["Webhooks"],"operationId":"getWebhook","summary":"Get a subscription","parameters":[{"$ref":"#/components/parameters/WebhookId"}],"responses":{"200":{"description":"The subscription.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WebhookSubscription"}}}}}},"404":{"$ref":"#/components/responses/NotFound"}}},"patch":{"tags":["Webhooks"],"operationId":"updateWebhook","summary":"Update a subscription","description":"**Write.** Change the URL, events or property filter, or pause delivery with `is_active: false`.","x-write":true,"parameters":[{"$ref":"#/components/parameters/WebhookId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookUpdate"}}}},"responses":{"200":{"description":"Updated subscription.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WebhookSubscription"}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"}}},"delete":{"tags":["Webhooks"],"operationId":"deleteWebhook","summary":"Delete a subscription","description":"**Write.**","x-write":true,"parameters":[{"$ref":"#/components/parameters/WebhookId"}],"responses":{"204":{"description":"Deleted."},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/webhooks/{webhookId}/ping":{"post":{"tags":["Webhooks"],"operationId":"pingWebhook","summary":"Send a test event","description":"**Write.** Queues a signed `webhook.ping` delivery to the endpoint.","x-write":true,"parameters":[{"$ref":"#/components/parameters/WebhookId"}],"responses":{"202":{"description":"Ping queued.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"event_id":{"type":"string"},"status":{"type":"string","const":"queued"}}}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/webhooks/{webhookId}/rotate-secret":{"post":{"tags":["Webhooks"],"operationId":"rotateWebhookSecret","summary":"Rotate the signing secret","description":"**Write.** Issues a new secret; the old one stops working immediately.","x-write":true,"parameters":[{"$ref":"#/components/parameters/WebhookId"}],"responses":{"200":{"description":"Subscription with its new secret.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/WebhookSubscriptionWithSecret"}}}}}},"403":{"$ref":"#/components/responses/WritesDisabled"},"404":{"$ref":"#/components/responses/NotFound"}}}},"/webhooks/{webhookId}/deliveries":{"get":{"tags":["Webhooks"],"operationId":"listWebhookDeliveries","summary":"List delivery attempts","parameters":[{"$ref":"#/components/parameters/WebhookId"},{"$ref":"#/components/parameters/PerPage"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"Deliveries, newest first.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/CursorPage"},{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}}}}]}}}},"404":{"$ref":"#/components/responses/NotFound"}}}}},"webhooks":{"changeEvent":{"post":{"summary":"Change event delivery","description":"Sent to each matching subscription. Verify `Kong-Signature` before trusting the body.","parameters":[{"name":"Kong-Event","in":"header","required":true,"schema":{"$ref":"#/components/schemas/EventType"}},{"name":"Kong-Delivery","in":"header","required":true,"schema":{"type":"string","examples":["dlv_01jbx5c0w4c1x2y3z4a5b6c7d8"]}},{"name":"Kong-Signature","in":"header","required":true,"schema":{"type":"string","examples":["t=1792821234,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd"]}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeEvent"}}}},"responses":{"200":{"description":"Any 2xx acknowledges the delivery."}}}}},"components":{"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."}},"headers":{"RequestId":{"description":"Correlation ID for support.","schema":{"type":"string"}},"RateLimitLimit":{"description":"Requests allowed per minute in this bucket.","schema":{"type":"integer"}},"RateLimitRemaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"RetryAfter":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"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"]}}},"parameters":{"PropertyCode":{"name":"propertyCode","in":"path","required":true,"description":"Property code (case-insensitive).","schema":{"type":"string","examples":["KTNYC"]}},"RoomTypeCode":{"name":"roomTypeCode","in":"path","required":true,"schema":{"type":"string","examples":["TWRK"]}},"RatePlanCode":{"name":"ratePlanCode","in":"path","required":true,"schema":{"type":"string","examples":["BAR"]}},"ConfirmationNumber":{"name":"confirmationNumber","in":"path","required":true,"schema":{"type":"string","examples":["KH4DEMO01"]}},"QuoteId":{"name":"quoteId","in":"path","required":true,"schema":{"type":"string","pattern":"^qt_","examples":["qt_01jbx4m6n2kz9v8c7d5e3f1g0h"]}},"HoldId":{"name":"holdId","in":"path","required":true,"schema":{"type":"string","pattern":"^hld_"}},"GroupReference":{"name":"groupReference","in":"path","required":true,"schema":{"type":"string","examples":["GRP-8K2M4Q"]}},"WebhookId":{"name":"webhookId","in":"path","required":true,"schema":{"type":"string","pattern":"^whk_"}},"CheckIn":{"name":"check_in","in":"query","required":true,"description":"Arrival date (property-local), today or later.","schema":{"type":"string","format":"date","examples":["2026-12-04"]}},"CheckOut":{"name":"check_out","in":"query","required":true,"description":"Departure date, after check_in. Maximum 30 nights.","schema":{"type":"string","format":"date","examples":["2026-12-07"]}},"Adults":{"name":"adults","in":"query","required":true,"schema":{"type":"integer","minimum":1,"maximum":36,"examples":[2]}},"Children":{"name":"children","in":"query","schema":{"type":"integer","minimum":0,"maximum":18,"default":0}},"Rooms":{"name":"rooms","in":"query","description":"Rooms of the same type. 10+ rooms must be a group request.","schema":{"type":"integer","minimum":1,"maximum":9,"default":1}},"PerPage":{"name":"per_page","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}},"Cursor":{"name":"cursor","in":"query","description":"Opaque cursor from `meta.next_cursor` / `links.next`.","schema":{"type":"string"}},"IdempotencyKey":{"name":"Idempotency-Key","in":"header","description":"Optional. Makes the request safe to retry for 24 hours.","schema":{"type":"string","maxLength":255,"examples":["8e03978e-40d5-43e8-bc93-6894a57f9324"]}},"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"]}}},"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"}}}}},"schemas":{"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"}}}}]},"Money":{"type":"string","pattern":"^-?\\d+\\.\\d{2}$","description":"Decimal amount in the property currency.","examples":["389.00"]},"BrandCode":{"type":"string","enum":["kong-summit","kong-tower","kong-lagoon","kong-canopy","kong-basecamp"]},"MealPlan":{"type":"string","enum":["room_only","breakfast","half_board","all_inclusive"]},"ReservationStatus":{"type":"string","enum":["confirmed","checked_in","checked_out","cancelled","no_show"]},"PaymentModel":{"type":"string","description":"`pay_at_hotel`: the guest pays the property; `partner_collect`: you collected payment and settle\nwith Kong Hotels under your contract (shown as a prepayment on the folio).\n","enum":["pay_at_hotel","partner_collect"]},"TravelerType":{"type":"string","enum":["solo","couple","family","business","friends"]},"GroupRequestStatus":{"type":"string","enum":["received","under_review","proposal_sent","accepted","declined","cancelled"]},"EventType":{"type":"string","enum":["reservation.created","reservation.modified","reservation.cancelled","reservation.add_ons_changed","availability.changed","rates.changed","property.updated","promotion.published","review.published","group_request.created","group_request.updated","webhook.ping"]},"Location":{"type":"object","properties":{"latitude":{"type":"number"},"longitude":{"type":"number"}}},"CursorPage":{"type":"object","properties":{"links":{"type":"object","properties":{"first":{"type":["string","null"]},"last":{"type":["string","null"]},"prev":{"type":["string","null"]},"next":{"type":["string","null"]}}},"meta":{"type":"object","properties":{"path":{"type":"string"},"per_page":{"type":"integer"},"next_cursor":{"type":["string","null"]},"prev_cursor":{"type":["string","null"]}}}}},"Destination":{"type":"object","properties":{"code":{"type":"string","examples":["new-york"]},"name":{"type":"string","examples":["New York City"]},"region":{"type":["string","null"]},"country_code":{"type":"string","examples":["US"]},"timezone":{"type":"string","examples":["America/New_York"]},"location":{"$ref":"#/components/schemas/Location"},"description":{"type":["string","null"]},"property_count":{"type":"integer"}}},"DestinationDetail":{"allOf":[{"$ref":"#/components/schemas/Destination"},{"type":"object","properties":{"properties":{"type":"array","items":{"$ref":"#/components/schemas/Property"}}}}]},"Property":{"type":"object","properties":{"code":{"type":"string","examples":["KTNYC"]},"name":{"type":"string","examples":["Kong Tower Manhattan"]},"brand":{"type":"object","properties":{"code":{"$ref":"#/components/schemas/BrandCode"},"name":{"type":"string","examples":["Kong Tower"]},"segment":{"type":"string","examples":["upper_upscale"]}}},"star_rating":{"type":"integer","minimum":1,"maximum":5},"destination_code":{"type":"string"},"description":{"type":"string"},"address":{"type":"object","properties":{"line1":{"type":"string"},"line2":{"type":["string","null"]},"city":{"type":"string"},"state_province":{"type":["string","null"]},"postal_code":{"type":["string","null"]},"country_code":{"type":"string"}}},"location":{"$ref":"#/components/schemas/Location"},"distance_km":{"type":"number","description":"Only when searching by coordinates."},"contact":{"type":"object","properties":{"phone":{"type":"string"},"email":{"type":"string","format":"email"}}},"currency":{"type":"string","examples":["USD"]},"timezone":{"type":"string"},"check_in_time":{"type":"string","examples":["16:00"]},"check_out_time":{"type":"string","examples":["11:00"]},"review_score":{"type":"number","description":"Average overall rating","1–10.":null},"review_count":{"type":"integer"},"amenities":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string","examples":["rooftop_terrace"]},"name":{"type":"string"},"category":{"type":"string"}}}},"hero_photo":{"$ref":"#/components/schemas/Photo"},"room_types":{"type":"array","description":"Only on the property detail endpoint.","items":{"$ref":"#/components/schemas/RoomType"}},"links":{"type":"object","properties":{"self":{"type":"string","format":"uri"},"room_types":{"type":"string","format":"uri"},"availability":{"type":"string","format":"uri"}}}}},"Photo":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"caption":{"type":"string"},"category":{"type":"string","examples":["exterior","lobby","room","pool"]},"room_type_code":{"type":["string","null"]},"width":{"type":"integer"},"height":{"type":"integer"}}},"PropertyPolicies":{"type":"object","properties":{"property_code":{"type":"string"},"check_in":{"type":"object","properties":{"from":{"type":"string","examples":["15:00"]},"minimum_age":{"type":"integer"},"id_required":{"type":"boolean"},"early_check_in":{"type":"string"}}},"check_out":{"type":"object","properties":{"until":{"type":"string"},"late_check_out":{"type":"string"}}},"children":{"type":"object","properties":{"allowed":{"type":"boolean"},"stay_free_under_age":{"type":"integer"},"cribs_available":{"type":"boolean"},"extra_beds_available":{"type":"boolean"}}},"pets":{"type":"object","properties":{"allowed":{"type":"boolean"},"details":{"type":"string"}}},"smoking":{"type":"object","properties":{"allowed":{"type":"boolean"},"details":{"type":"string"}}},"payment":{"type":"object","properties":{"accepted_at_property":{"type":"array","items":{"type":"string"}},"deposit_at_check_in":{"type":"string"}}},"quiet_hours":{"type":"string"},"accessibility":{"type":"string"},"resort_fee":{"type":"string"},"taxes_and_fees":{"type":"array","items":{"$ref":"#/components/schemas/TaxDefinition"}},"cancellation_by_rate_plan":{"type":"array","items":{"type":"object","properties":{"rate_plan_code":{"type":"string"},"cancellation_policy_code":{"type":"string"},"summary":{"type":"string"}}}}}},"TaxDefinition":{"type":"object","properties":{"code":{"type":"string","examples":["NYC_OCC"]},"name":{"type":"string"},"type":{"type":"string","enum":["percent","per_room_per_night","per_person_per_night","per_stay"]},"amount":{"type":"number","description":"A percentage for `percent`","otherwise an amount in the property currency.":null}}},"RoomType":{"type":"object","properties":{"code":{"type":"string","examples":["TWRK"]},"name":{"type":"string","examples":["Tower King"]},"description":{"type":"string"},"occupancy":{"type":"object","description":"Limits per room. Every room needs at least one adult.","properties":{"max_occupancy":{"type":"integer"},"max_adults":{"type":"integer"},"max_children":{"type":"integer"}}},"bed_configuration":{"type":"string","examples":["1 king"]},"size_sqm":{"type":"integer"},"view":{"type":["string","null"]},"is_accessible":{"type":"boolean"},"is_smoking":{"type":"boolean"},"amenities":{"type":"array","items":{"type":"string"}},"photos":{"type":"array","items":{"$ref":"#/components/schemas/Photo"}}}},"RatePlan":{"type":"object","properties":{"code":{"type":"string","examples":["BAR"]},"name":{"type":"string","examples":["Best Available Rate"]},"description":{"type":"string"},"meal_plan":{"$ref":"#/components/schemas/MealPlan"},"requires_membership":{"type":"boolean"},"allows_modification":{"type":"boolean"},"restrictions":{"type":"object","properties":{"min_length_of_stay":{"type":"integer"},"max_length_of_stay":{"type":["integer","null"]},"min_advance_days":{"type":"integer"}}},"cancellation_policy":{"$ref":"#/components/schemas/CancellationPolicy"}}},"CancellationPolicy":{"type":"object","properties":{"code":{"type":"string","enum":["FLEX24","FLEX48","MOD7D","NONREF"]},"name":{"type":"string"},"description":{"type":"string"},"is_refundable":{"type":"boolean"},"free_cancellation_hours_before_check_in":{"type":["integer","null"]},"penalty":{"type":"object","properties":{"type":{"type":"string","enum":["nights","percent"]},"value":{"type":"number"}}}}},"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."]}}},"Pricing":{"type":"object","description":"`room_subtotal` = Σ `nightly_rates` × `rooms`. Percentage taxes apply to\n(`room_subtotal` − `discount_total` + `add_ons_total`); fixed taxes per room, per adult or per stay.\n`total` = `room_subtotal` − `discount_total` + `add_ons_total` + `tax_total`.\n","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"}]},"Offer":{"type":"object","properties":{"rate_plan":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"meal_plan":{"$ref":"#/components/schemas/MealPlan"},"requires_membership":{"type":"boolean"},"allows_modification":{"type":"boolean"}}},"pricing":{"$ref":"#/components/schemas/Pricing"},"cancellation":{"$ref":"#/components/schemas/CancellationTerms"}}},"PropertyAvailabilityResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"property_code":{"type":"string"},"currency":{"type":"string"},"check_in":{"type":"string","format":"date"},"check_out":{"type":"string","format":"date"},"nights":{"type":"integer"},"occupancy":{"type":"object","properties":{"adults":{"type":"integer"},"children":{"type":"integer"},"rooms":{"type":"integer"}}},"promotion":{"type":["object","null"],"properties":{"code":{"type":"string"},"applied":{"type":"boolean"},"reasons":{"type":"array","items":{"type":"string"}}}},"room_types":{"type":"array","items":{"type":"object","properties":{"room_type":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"max_occupancy":{"type":"integer"},"bed_configuration":{"type":"string"},"size_sqm":{"type":"integer"},"view":{"type":["string","null"]},"is_accessible":{"type":"boolean"}}},"available_units":{"type":"integer","description":"Rooms left for the whole stay."},"is_available":{"type":"boolean"},"restrictions":{"type":"array","description":"Why the room can't be sold.","items":{"type":"string","enum":["no_inventory","stop_sell","closed_to_arrival","closed_to_departure","min_length_of_stay","occupancy_exceeded"]}},"offers":{"type":"array","items":{"$ref":"#/components/schemas/Offer"}}}}}}},"meta":{"type":"object","properties":{"generated_at":{"type":"string","format":"date-time"}}}}},"AvailabilitySearchResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"property":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"},"brand":{"$ref":"#/components/schemas/BrandCode"},"star_rating":{"type":"integer"},"city":{"type":"string"},"distance_km":{"type":["number","null"]}}},"currency":{"type":"string"},"offer_count":{"type":"integer"},"lowest_offer":{"type":"object","properties":{"room_type_code":{"type":"string"},"room_type_name":{"type":"string"},"rate_plan_code":{"type":"string"},"meal_plan":{"$ref":"#/components/schemas/MealPlan"},"requires_membership":{"type":"boolean"},"is_refundable":{"type":"boolean"},"average_nightly_rate":{"$ref":"#/components/schemas/Money"},"tax_total":{"$ref":"#/components/schemas/Money"},"total":{"$ref":"#/components/schemas/Money"}}},"links":{"type":"object","properties":{"availability":{"type":"string","format":"uri"}}}}}},"meta":{"type":"object","properties":{"check_in":{"type":"string","format":"date"},"check_out":{"type":"string","format":"date"},"properties_searched":{"type":"integer"},"properties_available":{"type":"integer"},"generated_at":{"type":"string","format":"date-time"}}}}},"CalendarDay":{"type":"object","properties":{"date":{"type":"string","format":"date"},"is_available":{"type":"boolean"},"available_units":{"type":"integer"},"closed_to_arrival":{"type":"boolean"},"min_length_of_stay":{"type":["integer","null"]},"lowest_rate":{"oneOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}]},"currency":{"type":"string"}}},"QuoteRequest":{"type":"object","required":["property_code","room_type_code","rate_plan_code","check_in","check_out","adults"],"properties":{"property_code":{"type":"string"},"room_type_code":{"type":"string"},"rate_plan_code":{"type":"string"},"check_in":{"type":"string","format":"date"},"check_out":{"type":"string","format":"date"},"adults":{"type":"integer","minimum":1,"maximum":36},"children":{"type":"integer","minimum":0,"maximum":18,"default":0},"rooms":{"type":"integer","minimum":1,"maximum":9,"default":1},"promotion_code":{"type":["string","null"]},"loyalty":{"type":["object","null"],"description":"Required for member-only rate plans.","required":["member_number","last_name"],"properties":{"member_number":{"type":"string"},"last_name":{"type":"string"}}},"add_ons":{"type":"array","maxItems":10,"items":{"type":"object","required":["code"],"properties":{"code":{"type":"string"},"quantity":{"type":"integer","minimum":1,"default":1}}}}}},"Quote":{"type":"object","properties":{"id":{"type":"string","examples":["qt_01jbx4m6n2kz9v8c7d5e3f1g0h"]},"state":{"type":"string","enum":["open","expired","booked"]},"property_code":{"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"},"adults":{"type":"integer"},"children":{"type":"integer"},"rooms":{"type":"integer"},"promotion_code":{"type":["string","null"]},"loyalty_tier":{"type":["string","null"]},"pricing":{"$ref":"#/components/schemas/Pricing"},"cancellation":{"$ref":"#/components/schemas/CancellationTerms"},"hold":{"oneOf":[{"$ref":"#/components/schemas/Hold"},{"type":"null"}]},"expires_at":{"type":"string","format":"date-time"},"created_at":{"type":"string","format":"date-time"}}},"Hold":{"type":"object","properties":{"id":{"type":"string","examples":["hld_01jbx4q2r8s7t6u5v4w3x2y1z0"]},"status":{"type":"string","enum":["active","released","converted","expired"]},"quote_id":{"type":"string"},"room_type_code":{"type":"string"},"check_in":{"type":"string","format":"date"},"check_out":{"type":"string","format":"date"},"rooms":{"type":"integer"},"expires_at":{"type":"string","format":"date-time"},"released_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"}}},"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}}},"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}$"}}},"ReservationUpdate":{"type":"object","minProperties":1,"properties":{"check_in":{"type":"string","format":"date"},"check_out":{"type":"string","format":"date"},"adults":{"type":"integer"},"children":{"type":"integer"},"rooms":{"type":"integer"},"room_type_code":{"type":"string"},"rate_plan_code":{"type":"string"},"guest":{"type":"object","description":"Merged into the existing guest details.","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":["string","null"]},"country_code":{"type":["string","null"]}}},"additional_guests":{"type":"array","items":{"type":"object","properties":{"first_name":{"type":"string"},"last_name":{"type":"string"}}}},"children_ages":{"type":"array","items":{"type":"integer"}},"special_requests":{"type":["string","null"]},"estimated_arrival_time":{"type":["string","null"]},"partner_reference":{"type":["string","null"]}}},"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"}}}}},"CancellationQuote":{"type":"object","properties":{"confirmation_number":{"type":"string"},"is_cancellable":{"type":"boolean"},"status":{"$ref":"#/components/schemas/ReservationStatus"},"currency":{"type":"string"},"total":{"$ref":"#/components/schemas/Money"},"cancellation_fee":{"oneOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}]},"refundable_amount":{"oneOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}]},"policy":{"$ref":"#/components/schemas/CancellationTerms"},"calculated_at":{"type":"string","format":"date-time"}}},"Folio":{"type":"object","properties":{"confirmation_number":{"type":"string"},"status":{"$ref":"#/components/schemas/ReservationStatus"},"currency":{"type":"string"},"payment_model":{"$ref":"#/components/schemas/PaymentModel"},"lines":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string","format":"date"},"type":{"type":"string","enum":["room","discount","add_on","tax","cancellation_fee"]},"description":{"type":"string"},"amount":{"$ref":"#/components/schemas/Money"}}}},"total_charges":{"$ref":"#/components/schemas/Money"},"payments":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string"},"description":{"type":"string"},"amount":{"$ref":"#/components/schemas/Money"}}}},"balance_due_at_property":{"$ref":"#/components/schemas/Money"}}},"AddOn":{"type":"object","properties":{"code":{"type":"string","examples":["BRKFST"]},"name":{"type":"string"},"description":{"type":"string"},"category":{"type":"string","examples":["dining","flexibility","transport","wellness","activities","pets","celebration"]},"pricing_unit":{"type":"string","enum":["per_stay","per_night","per_guest_per_night"]},"price":{"$ref":"#/components/schemas/Money"},"currency":{"type":"string"},"max_quantity":{"type":"integer"}}},"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)"}}},"Promotion":{"type":"object","properties":{"code":{"type":"string","examples":["KONGWEEKEND"]},"name":{"type":"string"},"description":{"type":"string"},"discount":{"type":"object","properties":{"type":{"type":"string","enum":["percent","fixed_amount"]},"value":{"type":"string","examples":["12.00"]},"currency":{"type":["string","null"],"description":"Only for fixed_amount; the promotion applies only to properties in this currency."}}},"booking_window":{"type":"object","properties":{"from":{"type":"string","format":"date"},"until":{"type":"string","format":"date"}}},"stay_window":{"type":"object","properties":{"from":{"type":["string","null"],"format":"date"},"until":{"type":["string","null"],"format":"date"}}},"min_nights":{"type":"integer"},"property_codes":{"type":["array","null"],"items":{"type":"string"},"description":"null means all properties."}}},"PromotionEligibility":{"type":"object","properties":{"property_code":{"type":"string"},"check_in":{"type":"string","format":"date"},"check_out":{"type":"string","format":"date"},"is_eligible":{"type":"boolean"},"reasons":{"type":"array","items":{"type":"string","enum":["not_currently_bookable","property_not_participating","stay_dates_outside_window","minimum_nights_not_met","currency_mismatch"]}}}},"LoyaltyTier":{"type":"object","properties":{"code":{"type":"string","enum":["member","silver","gold","silverback"]},"name":{"type":"string"},"qualifying_nights_per_year":{"type":"integer"},"points_multiplier":{"type":"number"},"benefits":{"type":"array","items":{"type":"string"}}}},"LoyaltyVerification":{"type":"object","properties":{"member_number":{"type":"string"},"is_valid":{"type":"boolean"},"first_name":{"type":"string"},"tier":{"type":"object","properties":{"code":{"type":"string"},"name":{"type":"string"}}},"benefits":{"type":"array","items":{"type":"string"}},"eligible_for_member_rates":{"type":"boolean"}}},"Review":{"type":"object","properties":{"id":{"type":"string","examples":["rev_01jbx4z7a6b5c4d3e2f1g0h9j8"]},"overall_rating":{"type":"integer","minimum":1,"maximum":10},"category_ratings":{"type":"object","properties":{"cleanliness":{"type":"integer"},"comfort":{"type":"integer"},"location":{"type":"integer"},"service":{"type":"integer"},"value":{"type":"integer"}}},"title":{"type":"string"},"body":{"type":"string"},"reviewer_name":{"type":"string","examples":["Sofia M."]},"traveler_type":{"$ref":"#/components/schemas/TravelerType"},"language":{"type":"string"},"stayed_on":{"type":"string","description":"Year and month of the stay.","examples":["2026-08"]},"is_verified_stay":{"type":"boolean"},"management_response":{"type":["string","null"]},"published_at":{"type":"string","format":"date-time"}}},"ReviewSummary":{"type":"object","properties":{"review_count":{"type":"integer"},"average_rating":{"type":"number"},"category_averages":{"type":"object","additionalProperties":{"type":"number"}},"scale":{"type":"string","const":"1-10"}}},"ReviewRequest":{"type":"object","required":["confirmation_number","overall_rating","category_ratings","title","body","reviewer_name","traveler_type"],"properties":{"confirmation_number":{"type":"string"},"overall_rating":{"type":"integer","minimum":1,"maximum":10},"category_ratings":{"type":"object","required":["cleanliness","comfort","location","service","value"],"properties":{"cleanliness":{"type":"integer","minimum":1,"maximum":10},"comfort":{"type":"integer","minimum":1,"maximum":10},"location":{"type":"integer","minimum":1,"maximum":10},"service":{"type":"integer","minimum":1,"maximum":10},"value":{"type":"integer","minimum":1,"maximum":10}}},"title":{"type":"string","maxLength":120},"body":{"type":"string","minLength":20,"maxLength":5000},"reviewer_name":{"type":"string","maxLength":60,"description":"Display name","e.g. first name and initial.":null},"traveler_type":{"$ref":"#/components/schemas/TravelerType"},"language":{"type":"string","default":"en"}}},"GroupRequestFields":{"type":"object","properties":{"event_type":{"type":"string","enum":["corporate","conference","wedding","sports_team","tour_group","other"]},"group_name":{"type":"string"},"contact":{"type":"object","required":["name","email"],"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"phone":{"type":["string","null"]},"organisation":{"type":["string","null"]}}},"check_in":{"type":"string","format":"date"},"check_out":{"type":"string","format":"date","description":"At most 30 nights after check_in."},"rooms_requested":{"type":"integer","minimum":10,"maximum":500},"attendees":{"type":["integer","null"]},"room_preferences":{"type":"array","items":{"type":"object","required":["room_type_code","rooms"],"properties":{"room_type_code":{"type":"string"},"rooms":{"type":"integer"}}}},"needs_meeting_space":{"type":"boolean","default":false},"budget_per_night":{"type":["number","null"],"description":"Per room","in the property currency.":null},"notes":{"type":["string","null"]}}},"GroupRequestCreate":{"allOf":[{"type":"object","required":["property_code","event_type","group_name","contact","check_in","check_out","rooms_requested"],"properties":{"property_code":{"type":"string","examples":["KTPAR"]}}},{"$ref":"#/components/schemas/GroupRequestFields"}]},"GroupRequestUpdate":{"$ref":"#/components/schemas/GroupRequestFields"},"GroupRequest":{"allOf":[{"type":"object","properties":{"reference":{"type":"string","examples":["GRP-8K2M4Q"]},"status":{"$ref":"#/components/schemas/GroupRequestStatus"},"property_code":{"type":"string"},"currency":{"type":"string"},"cancelled_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},{"$ref":"#/components/schemas/GroupRequestFields"}]},"ChangeEvent":{"type":"object","properties":{"id":{"type":"string","examples":["evt_01jbx5a1b2c3d4e5f6g7h8j9k0"]},"sequence":{"type":"integer","description":"Monotonic position in the feed; use as the `since` cursor."},"type":{"$ref":"#/components/schemas/EventType"},"occurred_at":{"type":"string","format":"date-time"},"property_code":{"type":["string","null"]},"subject":{"type":"object","properties":{"type":{"type":"string","examples":["reservation","room_type","property","review","group_request"]},"id":{"type":"string","examples":["KH7Q4M2X9","KTNYC:TWRK"]}}},"data":{"type":"object","additionalProperties":true,"description":"Payload by event type:\n\n| Type | `data` fields |\n|---|---|\n| `availability.changed` | `room_type_code`, `start_date`, `end_date` (inclusive stay nights). Refetch availability for that range. |\n| `rates.changed` | `room_type_code`, `start_date`, `end_date`, `rate_plan_codes`, `lowest_rate` (current lowest nightly base rate in the range), `currency` |\n| `property.updated` | `changed_sections` (any of `description`, `amenities`, `photos`, `policies`), `summary` |\n| `promotion.published` | `code`, `name`, `bookable_until`, `property_codes` (null = all) |\n| `review.published` | `review_id`, `overall_rating` |\n| `reservation.created` / `.modified` / `.cancelled` / `.add_ons_changed` | `confirmation_number`, `partner_reference`, `status`, `check_in`, `check_out`, `total`, `currency`, plus `changed_fields` (modified), `cancellation_fee` (cancelled) or `add_ons` (add-ons changed). Status changes made at the property, such as check-in and check-out, arrive as `reservation.modified`. |\n| `group_request.created` / `.updated` | `reference`, `status`, `rooms_requested` |\n| `webhook.ping` | `message` |\n"}},"examples":[{"id":"evt_01jbx5a1b2c3d4e5f6g7h8j9k0","sequence":4182,"type":"availability.changed","occurred_at":"2026-10-24T05:54:42Z","property_code":"KTNYC","subject":{"type":"room_type","id":"KTNYC:TWRK"},"data":{"room_type_code":"TWRK","start_date":"2026-12-04","end_date":"2026-12-06"}}]},"EventTypeInfo":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/EventType"},"description":{"type":"string"},"scope":{"type":"string","enum":["public","partner"]}}},"WebhookCreate":{"type":"object","required":["url","events"],"properties":{"url":{"type":"string","format":"uri","description":"Must be HTTPS in production."},"events":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/EventType"}},"property_codes":{"type":["array","null"],"items":{"type":"string"},"description":"Only events for these properties; null for all."},"description":{"type":["string","null"]},"is_active":{"type":"boolean","default":true}}},"WebhookUpdate":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"$ref":"#/components/schemas/EventType"}},"property_codes":{"type":["array","null"],"items":{"type":"string"}},"description":{"type":["string","null"]},"is_active":{"type":"boolean"}}},"WebhookSubscription":{"type":"object","properties":{"id":{"type":"string","examples":["whk_01jbx5b2c3d4e5f6g7h8j9k0m1"]},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"$ref":"#/components/schemas/EventType"}},"property_codes":{"type":["array","null"],"items":{"type":"string"}},"description":{"type":["string","null"]},"is_active":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"WebhookSubscriptionWithSecret":{"allOf":[{"$ref":"#/components/schemas/WebhookSubscription"},{"type":"object","properties":{"secret":{"type":"string","examples":["whsec_cfAM2gQQSALuMAOntv7LN7SXeZ9UNc0vqrLSWDOQ"]}}}]},"WebhookDelivery":{"type":"object","properties":{"id":{"type":"string"},"event_type":{"$ref":"#/components/schemas/EventType"},"event_id":{"type":"string"},"status":{"type":"string","enum":["pending","succeeded","failed"]},"attempts":{"type":"integer"},"response_status":{"type":["integer","null"]},"delivered_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"}}}}}}
````
