{"openapi":"3.1.0","info":{"title":"STRYK Partner API","version":"1.0.0","summary":"Booking-site and integration API of the STRYK hotel PMS.","x-stryk-summary-de":"Buchungsseiten- und Integrations-API des Hotel-PMS STRYK.","description":"The STRYK Partner API connects booking sites, apps and integrations to one hotel in STRYK.\nIt reads the property, availability and prices and creates bookings exactly like the STRYK\nbooking engine prices them. Every API key belongs to exactly one hotel; the hotel creates and\nrevokes keys in STRYK under **Channels → API**.\n\nGuides and quickstart: https://staystryk.com/developers\n\n## Conventions\n\n- **Authentication:** `Authorization: Bearer stryk_live_…`. The key is shown once when it is\n  created. Keys carry explicit scopes; a write scope never implies the read scope. When the hotel\n  rotates a key, the old key stays valid for 24 hours by default (or is revoked at once).\n- **Hotel:** always the hotel of the key. Never send a hotel id.\n- **Times:** instants are RFC 3339 in UTC (`2026-11-04T08:15:00.000Z`); offsets are accepted on\n  input. Stay dates are `YYYY-MM-DD` in the hotel's time zone (`GET /hotel` → `timezone`).\n- **Money:** `{\"amount\": \"123.45\", \"currency\": \"EUR\"}`, a decimal string with two fraction digits.\n- **Pagination:** `limit` (1-200, default 50) and `cursor`; responses are\n  `{\"data\": [...], \"nextCursor\": \"…\" | null, \"hasMore\": bool}`, ordered by `updatedAt`, then `id`.\n  `updated_since` returns items with `updatedAt >= value`; deduplicate on `id` + `updatedAt`.\n- **Concurrency:** single resources return an `ETag` and the same value as `version`.\n  `If-None-Match` answers 304; `PATCH` requires `If-Match` (428 when missing, 412 when stale).\n- **Idempotency:** `POST /bookings` and `POST /bookings/{id}/cancel` require an\n  `Idempotency-Key` (stored 24 h). Retrying with the same key and body replays the first response\n  with `Idempotent-Replayed: true`; another body with the same key returns 422.\n- **Errors:** RFC 9457 `application/problem+json` with a stable `code` and the `requestId`.\n- **Limits:** 120 requests per 60 s per key by default; STRYK can set a different tier per key on\n  request (`GET /me` → `rateLimit`, `RateLimit-*` headers on every response, `Retry-After` on 429);\n  request bodies up to 64 KiB, `application/json` only.\n- **Prices:** STRYK always calculates prices. Send `expectedTotal` to make sure the guest pays what\n  you showed.\n- **Payments:** v1 accepts no payment data. Bookings start with an open balance that is settled at\n  the hotel or through STRYK payment links.\n- **Versioning:** additive changes (new fields, endpoints, enum values, event types) happen without\n  a new version, ignore unknown fields. Breaking changes only in `/v2`, announced at least six\n  months ahead with `Deprecation` and `Sunset` headers.\n- **Test data:** there is no separate sandbox. Use a key with read scopes only, and run write tests\n  on a test property or a far-future date range, then cancel the bookings.\n","x-stryk-description-de":"Die STRYK Partner API verbindet Buchungsseiten, Apps und Integrationen mit einem Hotel in STRYK.\nSie liest Haus, Verfügbarkeit und Preise und legt Buchungen an, die genau so bepreist werden wie in\nder STRYK Booking Engine. Jeder API-Schlüssel gehört zu genau einem Hotel; das Hotel erstellt und\nwiderruft Schlüssel in STRYK unter **Kanäle → API**.\n\nAnleitungen und Quickstart: https://staystryk.com/developers\n\n## Konventionen\n\n- **Authentifizierung:** `Authorization: Bearer stryk_live_…`. Der Schlüssel wird beim Anlegen genau\n  einmal angezeigt. Schlüssel tragen ausdrückliche Scopes; ein Schreib-Scope schließt den Lese-Scope nie\n  ein. Rotiert das Hotel einen Schlüssel, bleibt der alte standardmäßig noch 24 Stunden gültig (oder\n  wird sofort widerrufen).\n- **Hotel:** immer das Hotel des Schlüssels. Senden Sie nie eine Hotel-ID.\n- **Zeiten:** Zeitpunkte sind RFC 3339 in UTC (`2026-11-04T08:15:00.000Z`); eingehend werden Offsets\n  akzeptiert. Aufenthaltsdaten sind `YYYY-MM-DD` in der Zeitzone des Hotels (`GET /hotel` → `timezone`).\n- **Geld:** `{\"amount\": \"123.45\", \"currency\": \"EUR\"}`, ein Dezimal-String mit zwei Nachkommastellen.\n- **Pagination:** `limit` (1-200, Standard 50) und `cursor`; Antworten haben die Form\n  `{\"data\": [...], \"nextCursor\": \"…\" | null, \"hasMore\": bool}`, sortiert nach `updatedAt`, dann `id`.\n  `updated_since` liefert Einträge mit `updatedAt >= Wert`; deduplizieren Sie über `id` + `updatedAt`.\n- **Nebenläufigkeit:** Einzelressourcen liefern ein `ETag` und denselben Wert als `version`.\n  `If-None-Match` antwortet mit 304; `PATCH` verlangt `If-Match` (428 wenn er fehlt, 412 wenn er veraltet ist).\n- **Idempotenz:** `POST /bookings` und `POST /bookings/{id}/cancel` verlangen einen\n  `Idempotency-Key` (24 h gespeichert). Eine Wiederholung mit demselben Key und Body liefert die erste\n  Antwort erneut mit `Idempotent-Replayed: true`; ein anderer Body mit demselben Key ergibt 422.\n- **Fehler:** RFC 9457 `application/problem+json` mit stabilem `code` und der `requestId`.\n- **Limits:** standardmäßig 120 Anfragen je 60 s und Schlüssel; auf Anfrage kann STRYK je Schlüssel eine\n  andere Stufe einstellen (`GET /me` → `rateLimit`, `RateLimit-*`-Header auf jeder Antwort, `Retry-After`\n  bei 429); Request-Bodies bis 64 KiB, nur `application/json`.\n- **Preise:** STRYK berechnet Preise immer selbst. Senden Sie `expectedTotal`, damit der Gast genau den\n  Preis zahlt, den Sie angezeigt haben.\n- **Zahlungen:** v1 nimmt keine Zahlungsdaten an. Buchungen starten mit offenem Saldo, der im Hotel oder\n  über STRYK-Zahlungslinks beglichen wird.\n- **Versionierung:** additive Änderungen (neue Felder, Endpunkte, Enum-Werte, Ereignistypen) erfolgen\n  ohne neue Version, ignorieren Sie unbekannte Felder. Breaking Changes nur in `/v2`, mindestens sechs\n  Monate vorher mit `Deprecation`- und `Sunset`-Header angekündigt.\n- **Testdaten:** Es gibt keine separate Sandbox. Verwenden Sie einen Schlüssel mit reinen Lese-Scopes und\n  führen Sie schreibende Tests an einem Testhaus oder in einem weit entfernten Zeitraum aus; stornieren Sie\n  die Buchungen danach.\n","termsOfService":"https://staystryk.com/developers","contact":{"name":"STRYK Developer Support","url":"https://staystryk.com/developers"}},"servers":[{"url":"https://app.staystryk.com/api/partner/v1","description":"Production","x-stryk-description-de":"Produktion"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Account","description":"The calling key.","x-stryk-description-de":"Der aufrufende Schlüssel."},{"name":"Property","description":"Hotel profile, room types, units and their housekeeping status.","x-stryk-description-de":"Hotelprofil, Zimmerkategorien, Einheiten und ihr Reinigungsstatus."},{"name":"Availability & Rates","description":"Sellable availability, stay restrictions, daily rates and rate plans; restrictions and daily prices can be written.","x-stryk-description-de":"Verkaufbare Verfügbarkeit, Aufenthaltsbeschränkungen, Tagespreise und Tarife; Beschränkungen und Tagespreise sind schreibbar."},{"name":"Quotes","description":"Exact price of a stay before booking.","x-stryk-description-de":"Genauer Preis eines Aufenthalts vor der Buchung."},{"name":"Bookings","description":"Read, create, update and cancel bookings.","x-stryk-description-de":"Buchungen lesen, anlegen, ändern und stornieren."},{"name":"Guests","description":"GDPR-minimal guest profiles.","x-stryk-description-de":"DSGVO-minimale Gästeprofile."},{"name":"Payments","description":"Payment status of bookings; bank transfers on issued invoices.","x-stryk-description-de":"Zahlungsstatus von Buchungen; Überweisungen auf ausgestellte Rechnungen."},{"name":"Invoices","description":"Issued invoices (read only; invoices are fiscal documents of the hotel).","x-stryk-description-de":"Ausgestellte Rechnungen (nur lesend; Rechnungen sind Fiskalbelege des Hotels)."},{"name":"Webhooks","description":"Signed thin events STRYK sends to your endpoint.","x-stryk-description-de":"Signierte, schlanke Ereignisse, die STRYK an Ihren Endpunkt sendet."}],"paths":{"/me":{"get":{"operationId":"getMe","tags":["Account"],"summary":"Describe the calling key","x-stryk-summary-de":"Aufrufenden Schlüssel beschreiben","description":"Returns the key, its scopes, the hotel it belongs to and the rate limit. Works with every valid key and is the recommended connection test.","x-stryk-description-de":"Liefert den Schlüssel, seine Scopes, das zugehörige Hotel und das Rate-Limit. Funktioniert mit jedem gültigen Schlüssel und ist der empfohlene Verbindungstest.","x-stryk-scopes":[],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"The calling key.","x-stryk-description-de":"Der aufrufende Schlüssel.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Me"},"examples":{"key":{"value":{"keyId":"0b9d4e8a-6f53-4c55-9a0e-3d1f0d6c2a11","keyName":"Website booking widget","keyPrefix":"Ab3dEf7h","scopes":["property:read","availability:read","rates:read","bookings:read","bookings:write"],"hotel":{"id":"hotel-alpenblick","name":"Hotel Alpenblick"},"expiresAt":null,"rateLimit":{"limit":120,"windowSeconds":60}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/webhook-event-types":{"get":{"operationId":"listWebhookEventTypes","tags":["Webhooks"],"summary":"List webhook event types","x-stryk-summary-de":"Webhook-Ereignistypen auflisten","description":"All event types a webhook endpoint can subscribe to. Endpoints are managed by the hotel in STRYK (Channels → API).","x-stryk-description-de":"Alle Ereignistypen, die ein Webhook-Endpunkt abonnieren kann. Endpunkte verwaltet das Hotel in STRYK (Kanäle → API).","x-stryk-scopes":[],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Event types.","x-stryk-description-de":"Ereignistypen.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEventTypePage"},"examples":{"events":{"value":{"data":[{"type":"booking.created","description":"A booking was created (by the hotel, a channel, the booking engine or the API)."},{"type":"booking.updated","description":"Booking data changed: dates, room type, guests, status, notes or price."},{"type":"booking.cancelled","description":"A booking was cancelled."}],"nextCursor":null,"hasMore":false}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/hotel":{"get":{"operationId":"getHotel","tags":["Property"],"summary":"Get the hotel profile","x-stryk-summary-de":"Hotelprofil abrufen","description":"Name, address, time zone, currency, languages, check-in/out times and contact data.","x-stryk-description-de":"Name, Adresse, Zeitzone, Währung, Sprachen, Check-in-/Check-out-Zeiten und Kontaktdaten.","x-stryk-scopes":["property:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Hotel.","x-stryk-description-de":"Hotel.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Hotel"},"examples":{"hotel":{"value":{"id":"hotel-alpenblick","name":"Hotel Alpenblick","legalName":"Alpenblick Hotelbetriebs GmbH","address":{"street":"Dorfstraße 12","postalCode":"6020","city":"Innsbruck","country":"AT"},"timezone":"Europe/Vienna","currency":"EUR","languages":["de","en"],"checkInFrom":"15:00","checkOutUntil":"11:00","contact":{"email":"info@alpenblick.example","phone":"+43 512 123456","website":"https://alpenblick.example"},"version":"4f1c2a9b0d3e5f6a7b8c9d0e"}}}}}},"304":{"description":"Not modified (If-None-Match matched).","x-stryk-description-de":"Nicht geändert (If-None-Match hat gepasst).","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/room-types":{"get":{"operationId":"listRoomTypes","tags":["Property"],"summary":"List room types","x-stryk-summary-de":"Zimmerkategorien auflisten","description":"All room categories including inactive ones (`active=false`). Ordered by id; room types have no change timestamp in v1, so `updated_since` is not supported, compare `version`.","x-stryk-description-de":"Alle Zimmerkategorien einschließlich inaktiver (`active=false`). Sortiert nach id; Zimmerkategorien haben in v1 keinen Änderungszeitstempel, daher wird `updated_since` nicht unterstützt vergleichen Sie `version`.","x-stryk-scopes":["property:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"}],"responses":{"200":{"description":"Room types.","x-stryk-description-de":"Zimmerkategorien.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoomTypePage"},"examples":{"page":{"value":{"data":[{"id":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","name":"Doppelzimmer Bergblick","code":"DBL","description":{"de":"Helles Doppelzimmer mit Balkon.","en":"Bright double room with balcony."},"maxOccupancy":3,"maxAdults":2,"maxChildren":1,"standardOccupancy":2,"bedConfiguration":["double_bed","sofa_bed"],"sizeSqm":28,"amenities":[{"code":"balcony","name":"Balkon"},{"code":"wifi","name":"WLAN"}],"images":[{"url":"https://app.staystryk.com/api/public/booking/alpenblick/room-photos/0c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f","alt":"Doppelzimmer Bergblick","position":0}],"unitCount":12,"active":true,"version":"a1b2c3d4e5f6a7b8c9d0e1f2"}],"nextCursor":"djF8MjAyNi0xMS0wNFQwODoxNTowMFp8NWIyZTlmMWM","hasMore":true}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/room-types/{roomTypeId}":{"get":{"operationId":"getRoomType","tags":["Property"],"summary":"Get a room type","x-stryk-summary-de":"Zimmerkategorie abrufen","description":"One room type with occupancy, beds, amenities and images.","x-stryk-description-de":"Eine Zimmerkategorie mit Belegung, Betten, Ausstattung und Bildern.","x-stryk-scopes":["property:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/RoomTypeId"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Room type.","x-stryk-description-de":"Zimmerkategorie.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoomType"},"examples":{"roomType":{"value":{"id":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","name":"Doppelzimmer Bergblick","code":"DBL","description":{"de":"Helles Doppelzimmer mit Balkon.","en":"Bright double room with balcony."},"maxOccupancy":3,"maxAdults":2,"maxChildren":1,"standardOccupancy":2,"bedConfiguration":["double_bed","sofa_bed"],"sizeSqm":28,"amenities":[{"code":"balcony","name":"Balkon"},{"code":"wifi","name":"WLAN"}],"images":[{"url":"https://app.staystryk.com/api/public/booking/alpenblick/room-photos/0c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f","alt":"Doppelzimmer Bergblick","position":0}],"unitCount":12,"active":true,"version":"a1b2c3d4e5f6a7b8c9d0e1f2"}}}}}},"304":{"description":"Not modified (If-None-Match matched).","x-stryk-description-de":"Nicht geändert (If-None-Match hat gepasst).","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/units":{"get":{"operationId":"listUnits","tags":["Property"],"summary":"List units","x-stryk-summary-de":"Einheiten auflisten","description":"Rooms and apartments (no housekeeping internals), ordered by updatedAt, id.","x-stryk-description-de":"Zimmer und Apartments (ohne Housekeeping-Interna), sortiert nach updatedAt, id.","x-stryk-scopes":["property:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/UpdatedSince"},{"$ref":"#/components/parameters/RoomTypeFilter"}],"responses":{"200":{"description":"Units.","x-stryk-description-de":"Einheiten.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitPage"},"examples":{"page":{"value":{"data":[{"id":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","number":"204","roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","floor":2,"active":true,"updatedAt":"2026-10-28T09:12:44.512Z","version":"0e1f2a3b4c5d6e7f8a9b0c1d"}],"nextCursor":"djF8MjAyNi0xMS0wNFQwODoxNTowMFp8NWIyZTlmMWM","hasMore":true}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/units/{unitId}":{"get":{"operationId":"getUnit","tags":["Property"],"summary":"Get a unit","x-stryk-summary-de":"Einheit abrufen","description":"One room or apartment.","x-stryk-description-de":"Ein Zimmer oder Apartment.","x-stryk-scopes":["property:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/UnitId"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Unit.","x-stryk-description-de":"Einheit.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unit"},"examples":{"unit":{"value":{"id":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","number":"204","roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","floor":2,"active":true,"updatedAt":"2026-10-28T09:12:44.512Z","version":"0e1f2a3b4c5d6e7f8a9b0c1d"}}}}}},"304":{"description":"Not modified (If-None-Match matched).","x-stryk-description-de":"Nicht geändert (If-None-Match hat gepasst).","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}},"patch":{"operationId":"updateUnit","tags":["Property"],"summary":"Set the housekeeping status of a unit","x-stryk-summary-de":"Reinigungsstatus einer Einheit setzen","description":"Sets the housekeeping status through the hotel's housekeeping workflow (occupancy rules, blocked or inactive units → 409/422, status log, cleaning cycle). Requires If-Match. Room master data cannot be changed.","x-stryk-description-de":"Setzt den Reinigungsstatus über den Housekeeping-Ablauf des Hotels (Belegungsregeln, gesperrte oder inaktive Einheiten → 409/422, Statusprotokoll, Reinigungszyklus). Verlangt If-Match. Stammdaten des Zimmers sind nicht änderbar.","x-stryk-scopes":["property:write"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/UnitId"},{"$ref":"#/components/parameters/IfMatch"},{"$ref":"#/components/parameters/IdempotencyKeyOptional"}],"requestBody":{"required":true,"description":"New housekeeping status.","x-stryk-description-de":"Neuer Reinigungsstatus.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitUpdateRequest"},"examples":{"clean":{"value":{"housekeepingStatus":"vacant_clean"}}}}}},"responses":{"200":{"description":"Updated unit.","x-stryk-description-de":"Geänderte Einheit.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unit"},"examples":{"unit":{"value":{"id":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","number":"204","roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","floor":2,"active":true,"housekeepingStatus":"vacant_clean","updatedAt":"2026-10-28T09:12:44.512Z","version":"5d6e7f8a9b0c1d2e3f4a5b6c"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/ValidationFailed"},"428":{"$ref":"#/components/responses/PreconditionRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/availability":{"get":{"operationId":"getAvailability","tags":["Availability & Rates"],"summary":"Get availability","x-stryk-summary-de":"Verfügbarkeit abrufen","description":"Sellable units and stay restrictions per active room type and night, from the same availability source the STRYK booking engine and channel distribution use. Maximum range 366 days.","x-stryk-description-de":"Verkaufbare Einheiten und Aufenthaltsbeschränkungen je aktiver Zimmerkategorie und Nacht, aus derselben Verfügbarkeitsquelle, die die STRYK Booking Engine und die Kanalverteilung nutzen. Höchstens 366 Tage.","x-stryk-scopes":["availability:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/From"},{"$ref":"#/components/parameters/To"},{"$ref":"#/components/parameters/RoomTypeFilter"}],"responses":{"200":{"description":"Availability.","x-stryk-description-de":"Verfügbarkeit.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityList"},"examples":{"availability":{"value":{"from":"2026-12-01","to":"2026-12-02","data":[{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","date":"2026-12-01","available":4,"closed":false,"minStay":2,"closedToArrival":false,"closedToDeparture":false},{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","date":"2026-12-02","available":3,"closed":false,"minStay":2,"closedToArrival":false,"closedToDeparture":true}]}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/availability/restrictions":{"post":{"operationId":"createRestriction","tags":["Availability"],"summary":"Create an availability restriction","x-stryk-summary-de":"Verfügbarkeitsbeschränkung anlegen","description":"Closes a room type, caps its sellable units or closes it to arrival or departure for an inclusive date range (at most 500 days). Goes through the hotel's availability owner, so the change reaches the booking engine, channels and `availability.changed` at once. The key can delete only restrictions it created.","x-stryk-description-de":"Schließt eine Zimmerkategorie, begrenzt ihre verkaufbaren Einheiten oder sperrt An- bzw. Abreise für einen Zeitraum einschließlich (höchstens 500 Tage). Läuft über den Verfügbarkeits-Owner des Hotels; die Änderung erreicht Booking Engine, Kanäle und `availability.changed` sofort. Der Schlüssel kann nur selbst angelegte Beschränkungen löschen.","x-stryk-scopes":["availability:write"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"description":"Restriction to create.","x-stryk-description-de":"Anzulegende Beschränkung.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestrictionCreateRequest"},"examples":{"cap":{"value":{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","type":"capacity_cap","from":"2026-12-24","to":"2026-12-26","capacity":2,"name":"RMS cap Christmas"}}}}}},"responses":{"201":{"description":"Created restriction.","x-stryk-description-de":"Angelegte Beschränkung.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Restriction"},"examples":{"restriction":{"value":{"id":"6a7b8c9d-0e1f-4a2b-8c3d-4e5f6a7b8c9d","roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","type":"capacity_cap","from":"2026-12-24","to":"2026-12-26","capacity":2,"name":"RMS cap Christmas","createdAt":"2026-11-05T09:00:00.000Z"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/availability/restrictions/{restrictionId}":{"delete":{"operationId":"deleteRestriction","tags":["Availability"],"summary":"Delete a restriction created by this key","x-stryk-summary-de":"Von diesem Schlüssel angelegte Beschränkung löschen","description":"Removes a restriction this API key created and returns it as it was. Restrictions of the hotel or of Intelligent Pricing answer 404.","x-stryk-description-de":"Entfernt eine Beschränkung, die dieser API-Schlüssel angelegt hat, und liefert sie im letzten Stand. Beschränkungen des Hotels oder von Intelligent Pricing ergeben 404.","x-stryk-scopes":["availability:write"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/RestrictionId"}],"responses":{"200":{"description":"Deleted restriction.","x-stryk-description-de":"Gelöschte Beschränkung.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Restriction"},"examples":{"restriction":{"value":{"id":"6a7b8c9d-0e1f-4a2b-8c3d-4e5f6a7b8c9d","roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","type":"capacity_cap","from":"2026-12-24","to":"2026-12-26","capacity":2,"name":"RMS cap Christmas","createdAt":"2026-11-05T09:00:00.000Z"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/rates":{"get":{"operationId":"getRates","tags":["Availability & Rates"],"summary":"Get daily rates","x-stryk-summary-de":"Tagespreise abrufen","description":"One-night accommodation prices per room type and API rate plan at the room type's standard occupancy (sales channel `api`, the calculation channel distribution uses). For the exact price of a stay (length-of-stay rules, children, tourist tax, mandatory fees) use POST /quotes.","x-stryk-description-de":"Übernachtungspreise für eine Nacht je Zimmerkategorie und API-Tarif bei der Standardbelegung der Zimmerkategorie (Vertriebsweg `api`, dieselbe Berechnung wie in der Kanalverteilung). Den genauen Preis eines Aufenthalts (Aufenthaltsdauer-Regeln, Kinder, Ortstaxe, Pflichtgebühren) liefert POST /quotes.","x-stryk-scopes":["rates:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/From"},{"$ref":"#/components/parameters/To"},{"$ref":"#/components/parameters/RoomTypeFilter"},{"$ref":"#/components/parameters/RatePlanFilter"}],"responses":{"200":{"description":"Rates.","x-stryk-description-de":"Preise.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateList"},"examples":{"rates":{"value":{"from":"2026-12-01","to":"2026-12-02","data":[{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","date":"2026-12-01","price":{"amount":"140.00","currency":"EUR"},"occupancy":2},{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","date":"2026-12-02","price":{"amount":"150.00","currency":"EUR"},"occupancy":2}]}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}},"put":{"operationId":"updateRates","tags":["Availability"],"summary":"Set daily prices of a room type","x-stryk-summary-de":"Tagespreise einer Zimmerkategorie setzen","description":"Sets or resets (`price` null) the daily price of a room type for up to 366 days from today, through the hotel's price owner (category bounds, channel distribution, pricing audit). The currency must be the hotel currency. Rate rules and rate plans are not changed. Emits `rate.changed`.","x-stryk-description-de":"Setzt oder entfernt (`price` null) den Tagespreis einer Zimmerkategorie für bis zu 366 Tage ab heute, über den Preis-Owner des Hotels (Kategoriegrenzen, Kanalverteilung, Preisprotokoll). Die Währung muss die Hotelwährung sein. Preisregeln und Tarife bleiben unverändert. Löst `rate.changed` aus.","x-stryk-scopes":["rates:write"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKeyOptional"}],"requestBody":{"required":true,"description":"Daily prices.","x-stryk-description-de":"Tagespreise.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateUpdateRequest"},"examples":{"prices":{"value":{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","prices":[{"date":"2026-12-24","price":{"amount":"219.00","currency":"EUR"}},{"date":"2026-12-25","price":null}]}}}}}},"responses":{"200":{"description":"Result.","x-stryk-description-de":"Ergebnis.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateUpdateResult"},"examples":{"result":{"value":{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","from":"2026-12-24","to":"2026-12-25","changed":1,"unchanged":0,"reset":1}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/rate-plans":{"get":{"operationId":"listRatePlans","tags":["Availability & Rates"],"summary":"List rate plans","x-stryk-summary-de":"Tarife auflisten","description":"Rate plans sold through the API sales channel, including inactive ones.","x-stryk-description-de":"Tarife, die über den Vertriebsweg API verkauft werden, einschließlich inaktiver.","x-stryk-scopes":["rates:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/UpdatedSince"}],"responses":{"200":{"description":"Rate plans.","x-stryk-description-de":"Tarife.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RatePlanPage"},"examples":{"page":{"value":{"data":[{"id":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","name":"Flexibel mit Frühstück","code":"FLEX-BB","description":"Flexible rate including breakfast.","roomTypeIds":["3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","7a1d9c3e-2b4f-4e6a-8c0d-1e2f3a4b5c6d"],"mealPlan":"breakfast","cancellationPolicy":{"summary":"Free cancellation until 7 days before arrival, then 80 %.","refundable":true,"freeCancellationHoursBefore":168},"active":true,"updatedAt":"2026-10-30T14:02:10.000Z"}],"nextCursor":"djF8MjAyNi0xMS0wNFQwODoxNTowMFp8NWIyZTlmMWM","hasMore":true}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/quotes":{"post":{"operationId":"createQuote","tags":["Quotes"],"summary":"Price a stay","x-stryk-summary-de":"Aufenthalt bepreisen","description":"Calculates the price exactly as POST /bookings would (room assignment preview, stay restrictions, rate plan, children, discount code, tourist tax, mandatory fees). Read only: nothing is stored and no inventory is held. A stay that cannot be sold returns 200 with `available: false` and `reasons`.","x-stryk-description-de":"Berechnet den Preis genau so wie POST /bookings (Vorschau der Zimmerzuteilung, Aufenthaltsbeschränkungen, Tarif, Kinder, Rabattcode, Ortstaxe, Pflichtgebühren). Nur lesend: Es wird nichts gespeichert und kein Kontingent reserviert. Ein nicht verkaufbarer Aufenthalt liefert 200 mit `available: false` und `reasons`.","x-stryk-scopes":["rates:read"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"description":"Stay to price.","x-stryk-description-de":"Zu bepreisender Aufenthalt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"},"examples":{"stay":{"value":{"checkIn":"2026-12-01","checkOut":"2026-12-04","roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","adults":2,"childrenAges":[6]}}}}}},"responses":{"200":{"description":"Quote.","x-stryk-description-de":"Angebot.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quote"},"examples":{"available":{"value":{"available":true,"reasons":[],"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","checkIn":"2026-12-01","checkOut":"2026-12-04","nights":3,"total":{"amount":"447.60","currency":"EUR"},"accommodation":{"amount":"420.00","currency":"EUR"},"taxesAndFees":[{"name":"Ortstaxe","amount":{"amount":"7.60","currency":"EUR"},"included":false},{"name":"Endreinigung","amount":{"amount":"20.00","currency":"EUR"},"included":false}],"nightly":[{"date":"2026-12-01","price":{"amount":"140.00","currency":"EUR"}},{"date":"2026-12-02","price":{"amount":"140.00","currency":"EUR"}},{"date":"2026-12-03","price":{"amount":"140.00","currency":"EUR"}}],"cancellationPolicy":{"summary":"Free cancellation until 7 days before arrival, then 80 %.","refundable":true,"freeCancellationHoursBefore":168}}},"notAvailable":{"value":{"available":false,"reasons":[{"code":"min_stay_not_met","message":"The stay is shorter than the minimum stay of the room type."}],"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","checkIn":"2026-12-01","checkOut":"2026-12-02","nights":1,"total":null,"accommodation":null,"taxesAndFees":[],"nightly":[],"cancellationPolicy":null}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/bookings":{"get":{"operationId":"listBookings","tags":["Bookings"],"summary":"List bookings","x-stryk-summary-de":"Buchungen auflisten","description":"All bookings of the hotel (every sales channel), ordered by updatedAt, id. Use updated_since for incremental sync.","x-stryk-description-de":"Alle Buchungen des Hotels (jeder Vertriebsweg), sortiert nach updatedAt, id. Für inkrementellen Abgleich updated_since verwenden.","x-stryk-scopes":["bookings:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/UpdatedSince"},{"$ref":"#/components/parameters/BookingStatusFilter"},{"$ref":"#/components/parameters/ArrivalFrom"},{"$ref":"#/components/parameters/ArrivalTo"},{"$ref":"#/components/parameters/ExternalReferenceFilter"}],"responses":{"200":{"description":"Bookings.","x-stryk-description-de":"Buchungen.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingPage"},"examples":{"page":{"value":{"data":[{"id":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","reference":"B-2026-01842","status":"confirmed","channel":"api","externalReference":"WEB-1234","checkIn":"2026-12-01","checkOut":"2026-12-04","nights":3,"adults":2,"children":1,"childrenAges":[6],"rooms":[{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","unitId":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","adults":2,"children":1}],"guest":{"id":"8f7e6d5c-4b3a-4291-8f0e-9d8c7b6a5f4e","firstName":"Anna","lastName":"Muster","email":"anna.muster@example.com","phone":"+43 660 1234567"},"total":{"amount":"447.60","currency":"EUR"},"paid":{"amount":"0.00","currency":"EUR"},"outstanding":{"amount":"447.60","currency":"EUR"},"notes":"Late arrival around 22:00.","cancellation":null,"createdAt":"2026-11-04T08:15:00.000Z","updatedAt":"2026-11-04T08:15:00.000Z","version":"7c1e2d3f4a5b6c7d8e9f0a1b"}],"nextCursor":"djF8MjAyNi0xMS0wNFQwODoxNTowMFp8NWIyZTlmMWM","hasMore":true}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}},"post":{"operationId":"createBooking","tags":["Bookings"],"summary":"Create a booking","x-stryk-summary-de":"Buchung anlegen","description":"Creates a booking with sales channel `api`. STRYK calculates the price (never the client) and assigns a unit atomically. Send `expectedTotal` with the price you showed the guest: a different server price returns 409 `conflict` with `currentTotal`. No payment is taken; the booking starts with an open balance. By default STRYK sends no booking confirmation e-mail for API bookings (automations the hotel configured for new bookings still run). Set `notifyGuest: true` to have STRYK send its standard booking confirmation to `guest.email`, the same message the STRYK booking engine sends, in the hotel's default language. An idempotent replay never sends it a second time.","x-stryk-description-de":"Legt eine Buchung mit dem Vertriebsweg `api` an. STRYK berechnet den Preis (nie der Client) und weist atomar eine Einheit zu. Senden Sie `expectedTotal` mit dem Preis, den Sie dem Gast gezeigt haben: Ein abweichender Serverpreis ergibt 409 `conflict` mit `currentTotal`. Es wird keine Zahlung eingezogen; die Buchung startet mit offenem Saldo. Standardmäßig sendet STRYK für API-Buchungen keine Buchungsbestätigung per E-Mail (vom Hotel eingerichtete Automationen für neue Buchungen laufen weiterhin). Mit `notifyGuest: true` sendet STRYK seine Standard-Buchungsbestätigung an `guest.email`, dieselbe Nachricht wie die STRYK Booking Engine, in der Standardsprache des Hotels. Eine idempotente Wiederholung sendet sie nie ein zweites Mal.","x-stryk-scopes":["bookings:write"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"description":"New booking.","x-stryk-description-de":"Neue Buchung.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingCreateRequest"},"examples":{"booking":{"value":{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","checkIn":"2026-12-01","checkOut":"2026-12-04","adults":2,"childrenAges":[6],"guest":{"firstName":"Anna","lastName":"Muster","email":"anna.muster@example.com","phone":"+43 660 1234567","country":"AT","address":{"street":"Hauptplatz 1","postalCode":"8010","city":"Graz","country":"AT"}},"notes":"Late arrival around 22:00.","externalReference":"WEB-1234","status":"confirmed","expectedTotal":{"amount":"447.60","currency":"EUR"},"notifyGuest":true}}}}}},"responses":{"201":{"description":"Booking created.","x-stryk-description-de":"Buchung angelegt.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Location":{"$ref":"#/components/headers/Location"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"},"examples":{"booking":{"value":{"id":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","reference":"B-2026-01842","status":"confirmed","channel":"api","externalReference":"WEB-1234","checkIn":"2026-12-01","checkOut":"2026-12-04","nights":3,"adults":2,"children":1,"childrenAges":[6],"rooms":[{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","unitId":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","adults":2,"children":1}],"guest":{"id":"8f7e6d5c-4b3a-4291-8f0e-9d8c7b6a5f4e","firstName":"Anna","lastName":"Muster","email":"anna.muster@example.com","phone":"+43 660 1234567"},"total":{"amount":"447.60","currency":"EUR"},"paid":{"amount":"0.00","currency":"EUR"},"outstanding":{"amount":"447.60","currency":"EUR"},"notes":"Late arrival around 22:00.","cancellation":null,"createdAt":"2026-11-04T08:15:00.000Z","updatedAt":"2026-11-04T08:15:00.000Z","version":"7c1e2d3f4a5b6c7d8e9f0a1b"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/bookings/{bookingId}":{"get":{"operationId":"getBooking","tags":["Bookings"],"summary":"Get a booking","x-stryk-summary-de":"Buchung abrufen","description":"One booking with ETag.","x-stryk-description-de":"Eine Buchung mit ETag.","x-stryk-scopes":["bookings:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/BookingId"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Booking.","x-stryk-description-de":"Buchung.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"},"examples":{"booking":{"value":{"id":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","reference":"B-2026-01842","status":"confirmed","channel":"api","externalReference":"WEB-1234","checkIn":"2026-12-01","checkOut":"2026-12-04","nights":3,"adults":2,"children":1,"childrenAges":[6],"rooms":[{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","unitId":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","adults":2,"children":1}],"guest":{"id":"8f7e6d5c-4b3a-4291-8f0e-9d8c7b6a5f4e","firstName":"Anna","lastName":"Muster","email":"anna.muster@example.com","phone":"+43 660 1234567"},"total":{"amount":"447.60","currency":"EUR"},"paid":{"amount":"0.00","currency":"EUR"},"outstanding":{"amount":"447.60","currency":"EUR"},"notes":"Late arrival around 22:00.","cancellation":null,"createdAt":"2026-11-04T08:15:00.000Z","updatedAt":"2026-11-04T08:15:00.000Z","version":"7c1e2d3f4a5b6c7d8e9f0a1b"}}}}}},"304":{"description":"Not modified (If-None-Match matched).","x-stryk-description-de":"Nicht geändert (If-None-Match hat gepasst).","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}},"patch":{"operationId":"updateBooking","tags":["Bookings"],"summary":"Update a booking","x-stryk-summary-de":"Buchung ändern","description":"Changes guest contact data, notes and the external reference. Dates, room type and occupancy cannot be changed in v1 (cancel and rebook, or ask the hotel). Requires If-Match. Bookings that are checked in, checked out, cancelled or no-show return 409 `booking_not_modifiable`.","x-stryk-description-de":"Ändert Kontaktdaten des Gasts, Notizen und die externe Referenz. Daten, Zimmerkategorie und Belegung sind in v1 nicht änderbar (stornieren und neu buchen oder das Hotel fragen). Verlangt If-Match. Eingecheckte, ausgecheckte, stornierte oder als No-Show markierte Buchungen ergeben 409 `booking_not_modifiable`.","x-stryk-scopes":["bookings:write"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/BookingId"},{"$ref":"#/components/parameters/IfMatch"},{"$ref":"#/components/parameters/IdempotencyKeyOptional"}],"requestBody":{"required":true,"description":"Fields to change.","x-stryk-description-de":"Zu ändernde Felder.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingUpdateRequest"},"examples":{"contact":{"value":{"guest":{"phone":"+43 660 7654321"},"notes":"Arrival by train, around 18:00.","externalReference":"WEB-1234"}}}}}},"responses":{"200":{"description":"Updated booking.","x-stryk-description-de":"Geänderte Buchung.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"},"examples":{"booking":{"value":{"id":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","reference":"B-2026-01842","status":"confirmed","channel":"api","externalReference":"WEB-1234","checkIn":"2026-12-01","checkOut":"2026-12-04","nights":3,"adults":2,"children":1,"childrenAges":[6],"rooms":[{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","unitId":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","adults":2,"children":1}],"guest":{"id":"8f7e6d5c-4b3a-4291-8f0e-9d8c7b6a5f4e","firstName":"Anna","lastName":"Muster","email":"anna.muster@example.com","phone":"+43 660 1234567"},"total":{"amount":"447.60","currency":"EUR"},"paid":{"amount":"0.00","currency":"EUR"},"outstanding":{"amount":"447.60","currency":"EUR"},"notes":"Late arrival around 22:00.","cancellation":null,"createdAt":"2026-11-04T08:15:00.000Z","updatedAt":"2026-11-04T08:15:00.000Z","version":"7c1e2d3f4a5b6c7d8e9f0a1b"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/ValidationFailed"},"428":{"$ref":"#/components/responses/PreconditionRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/bookings/{bookingId}/cancel":{"post":{"operationId":"cancelBooking","tags":["Bookings"],"summary":"Cancel a booking","x-stryk-summary-de":"Buchung stornieren","description":"Cancels through the hotel's cancellation workflow: the cancellation policy and fee of the booking apply, availability is released and the hotel's guest notification for cancellations is sent. Only confirmed bookings before the stay can be cancelled; others return 409 `booking_not_modifiable`.","x-stryk-description-de":"Storniert über den Stornoablauf des Hotels: Stornobedingung und Stornogebühr der Buchung gelten, die Verfügbarkeit wird freigegeben und die Stornobenachrichtigung des Hotels an den Gast gesendet. Stornierbar sind nur bestätigte Buchungen vor dem Aufenthalt; andere ergeben 409 `booking_not_modifiable`.","x-stryk-scopes":["bookings:write"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/BookingId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"description":"Optional reason.","x-stryk-description-de":"Optionaler Grund.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingCancelRequest"},"examples":{"cancel":{"value":{"reason":"Guest cancelled on the partner website."}}}}}},"responses":{"200":{"description":"Cancelled booking.","x-stryk-description-de":"Stornierte Buchung.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"},"examples":{"booking":{"value":{"id":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","reference":"B-2026-01842","status":"cancelled","channel":"api","externalReference":"WEB-1234","checkIn":"2026-12-01","checkOut":"2026-12-04","nights":3,"adults":2,"children":1,"childrenAges":[6],"rooms":[{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","unitId":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","adults":2,"children":1}],"guest":{"id":"8f7e6d5c-4b3a-4291-8f0e-9d8c7b6a5f4e","firstName":"Anna","lastName":"Muster","email":"anna.muster@example.com","phone":"+43 660 1234567"},"total":{"amount":"447.60","currency":"EUR"},"paid":{"amount":"0.00","currency":"EUR"},"outstanding":{"amount":"447.60","currency":"EUR"},"notes":"Late arrival around 22:00.","cancellation":{"cancelledAt":"2026-11-10T10:00:00.000Z","fee":{"amount":"0.00","currency":"EUR"}},"createdAt":"2026-11-04T08:15:00.000Z","updatedAt":"2026-11-10T10:00:00.000Z","version":"9a8b7c6d5e4f3a2b1c0d9e8f"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/bookings/{bookingId}/payments":{"get":{"operationId":"getBookingPayments","tags":["Payments"],"summary":"Get the payment status of a booking","x-stryk-summary-de":"Zahlungsstatus einer Buchung abrufen","description":"Total, paid and outstanding amount plus online payments. Read only; the API never accepts payment data.","x-stryk-description-de":"Gesamt-, bezahlter und offener Betrag sowie Onlinezahlungen. Nur lesend; die API nimmt nie Zahlungsdaten an.","x-stryk-scopes":["payments:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/BookingId"}],"responses":{"200":{"description":"Payment status.","x-stryk-description-de":"Zahlungsstatus.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentStatus"},"examples":{"status":{"value":{"bookingId":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","status":"partially_paid","total":{"amount":"447.60","currency":"EUR"},"paid":{"amount":"100.00","currency":"EUR"},"outstanding":{"amount":"347.60","currency":"EUR"},"payments":[{"id":"6e5d4c3b-2a19-4f8e-9d7c-6b5a4f3e2d1c","status":"captured","method":"credit_card","amount":{"amount":"100.00","currency":"EUR"},"createdAt":"2026-11-04T08:20:31.000Z"}]}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/guests":{"get":{"operationId":"listGuests","tags":["Guests"],"summary":"List guests","x-stryk-summary-de":"Gäste auflisten","description":"Guest profiles (GDPR-minimal), ordered by updatedAt, id. Erased guests and guests with restricted processing are not visible.","x-stryk-description-de":"Gästeprofile (DSGVO-minimal), sortiert nach updatedAt, id. Gelöschte Gäste und Gäste mit eingeschränkter Verarbeitung sind nicht sichtbar.","x-stryk-scopes":["guests:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/UpdatedSince"},{"$ref":"#/components/parameters/EmailFilter"}],"responses":{"200":{"description":"Guests.","x-stryk-description-de":"Gäste.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuestPage"},"examples":{"page":{"value":{"data":[{"id":"8f7e6d5c-4b3a-4291-8f0e-9d8c7b6a5f4e","firstName":"Anna","lastName":"Muster","salutation":"Frau","email":"anna.muster@example.com","phone":"+43 660 1234567","country":"AT","address":{"street":"Hauptplatz 1","postalCode":"8010","city":"Graz","country":"AT"},"updatedAt":"2026-11-04T08:15:00.000Z","version":"3e4f5a6b7c8d9e0f1a2b3c4d"}],"nextCursor":"djF8MjAyNi0xMS0wNFQwODoxNTowMFp8NWIyZTlmMWM","hasMore":true}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/guests/{guestId}":{"get":{"operationId":"getGuest","tags":["Guests"],"summary":"Get a guest","x-stryk-summary-de":"Gast abrufen","description":"One guest profile with ETag.","x-stryk-description-de":"Ein Gästeprofil mit ETag.","x-stryk-scopes":["guests:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/GuestId"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Guest.","x-stryk-description-de":"Gast.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Guest"},"examples":{"guest":{"value":{"id":"8f7e6d5c-4b3a-4291-8f0e-9d8c7b6a5f4e","firstName":"Anna","lastName":"Muster","salutation":"Frau","email":"anna.muster@example.com","phone":"+43 660 1234567","country":"AT","address":{"street":"Hauptplatz 1","postalCode":"8010","city":"Graz","country":"AT"},"updatedAt":"2026-11-04T08:15:00.000Z","version":"3e4f5a6b7c8d9e0f1a2b3c4d"}}}}}},"304":{"description":"Not modified (If-None-Match matched).","x-stryk-description-de":"Nicht geändert (If-None-Match hat gepasst).","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}},"patch":{"operationId":"updateGuest","tags":["Guests"],"summary":"Update guest contact data","x-stryk-summary-de":"Kontaktdaten eines Gasts ändern","description":"Changes name, salutation, e-mail, phone, country and address of a guest profile. Requires If-Match.","x-stryk-description-de":"Ändert Name, Anrede, E-Mail, Telefon, Land und Adresse eines Gästeprofils. Verlangt If-Match.","x-stryk-scopes":["guests:write"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/GuestId"},{"$ref":"#/components/parameters/IfMatch"},{"$ref":"#/components/parameters/IdempotencyKeyOptional"}],"requestBody":{"required":true,"description":"Fields to change.","x-stryk-description-de":"Zu ändernde Felder.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuestUpdateRequest"},"examples":{"contact":{"value":{"email":"anna.muster@example.org","phone":"+43 660 7654321"}}}}}},"responses":{"200":{"description":"Updated guest.","x-stryk-description-de":"Geänderter Gast.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Guest"},"examples":{"guest":{"value":{"id":"8f7e6d5c-4b3a-4291-8f0e-9d8c7b6a5f4e","firstName":"Anna","lastName":"Muster","salutation":"Frau","email":"anna.muster@example.com","phone":"+43 660 1234567","country":"AT","address":{"street":"Hauptplatz 1","postalCode":"8010","city":"Graz","country":"AT"},"updatedAt":"2026-11-04T08:15:00.000Z","version":"3e4f5a6b7c8d9e0f1a2b3c4d"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"412":{"$ref":"#/components/responses/PreconditionFailed"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/ValidationFailed"},"428":{"$ref":"#/components/responses/PreconditionRequired"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/invoices":{"get":{"operationId":"listInvoices","tags":["Invoices"],"summary":"List invoices","x-stryk-summary-de":"Rechnungen auflisten","description":"Issued invoices, corrections and credit notes (never drafts), ordered by updatedAt, id.","x-stryk-description-de":"Ausgestellte Rechnungen, Korrekturen und Gutschriften (nie Entwürfe), sortiert nach updatedAt, id.","x-stryk-scopes":["invoices:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/Limit"},{"$ref":"#/components/parameters/Cursor"},{"$ref":"#/components/parameters/UpdatedSince"},{"$ref":"#/components/parameters/BookingFilter"}],"responses":{"200":{"description":"Invoices.","x-stryk-description-de":"Rechnungen.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoicePage"},"examples":{"page":{"value":{"data":[{"id":"1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d","number":"RE-2026-00412","type":"invoice","bookingId":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","status":"partially_paid","issuedAt":"2026-12-04T10:05:00.000Z","total":{"amount":"447.60","currency":"EUR"},"net":{"amount":"398.16","currency":"EUR"},"tax":{"amount":"49.44","currency":"EUR"},"outstanding":{"amount":"347.60","currency":"EUR"},"updatedAt":"2026-12-04T10:05:00.000Z","version":"5d6e7f8a9b0c1d2e3f4a5b6c"}],"nextCursor":"djF8MjAyNi0xMS0wNFQwODoxNTowMFp8NWIyZTlmMWM","hasMore":true}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/invoices/{invoiceId}":{"get":{"operationId":"getInvoice","tags":["Invoices"],"summary":"Get an invoice","x-stryk-summary-de":"Rechnung abrufen","description":"Header and totals of one issued document. No PDF in v1.","x-stryk-description-de":"Kopf und Summen eines ausgestellten Belegs. Kein PDF in v1.","x-stryk-scopes":["invoices:read"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/InvoiceId"},{"$ref":"#/components/parameters/IfNoneMatch"}],"responses":{"200":{"description":"Invoice.","x-stryk-description-de":"Rechnung.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Invoice"},"examples":{"invoice":{"value":{"id":"1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d","number":"RE-2026-00412","type":"invoice","bookingId":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","status":"partially_paid","issuedAt":"2026-12-04T10:05:00.000Z","total":{"amount":"447.60","currency":"EUR"},"net":{"amount":"398.16","currency":"EUR"},"tax":{"amount":"49.44","currency":"EUR"},"outstanding":{"amount":"347.60","currency":"EUR"},"updatedAt":"2026-12-04T10:05:00.000Z","version":"5d6e7f8a9b0c1d2e3f4a5b6c"}}}}}},"304":{"description":"Not modified (If-None-Match matched).","x-stryk-description-de":"Nicht geändert (If-None-Match hat gepasst).","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"ETag":{"$ref":"#/components/headers/ETag"}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}},"/invoices/{invoiceId}/payments":{"post":{"operationId":"createInvoicePayment","tags":["Payments"],"summary":"Record a bank transfer on an invoice","x-stryk-summary-de":"Überweisung auf eine Rechnung buchen","description":"Records a received bank transfer on an issued invoice through the hotel's finance owner (open amount, accounting, receivables, booking paid amount → `payment.updated`). Only bank transfers; cash and card payments need the hotel's register receipt and are not accepted. The amount must not exceed the open amount. Requires Idempotency-Key.","x-stryk-description-de":"Bucht eine eingegangene Überweisung auf eine ausgestellte Rechnung über den Finanz-Owner des Hotels (offener Betrag, Buchhaltung, Forderungen, bezahlter Betrag der Buchung → `payment.updated`). Nur Überweisungen; Bar- und Kartenzahlungen brauchen den Registrierkassenbeleg des Hotels und werden nicht angenommen. Der Betrag darf den offenen Betrag nicht übersteigen. Verlangt Idempotency-Key.","x-stryk-scopes":["payments:write"],"security":[{"bearerAuth":[]}],"parameters":[{"$ref":"#/components/parameters/InvoiceId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"description":"Received bank transfer.","x-stryk-description-de":"Eingegangene Überweisung.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoicePaymentCreateRequest"},"examples":{"transfer":{"value":{"amount":{"amount":"447.60","currency":"EUR"},"paidAt":"2026-11-04","reference":"SEPA E2E 20261104-0042"}}}}}},"responses":{"201":{"description":"Recorded payment.","x-stryk-description-de":"Gebuchte Zahlung.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Idempotent-Replayed":{"$ref":"#/components/headers/Idempotent-Replayed"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoicePaymentResult"},"examples":{"payment":{"value":{"invoiceId":"1b2c3d4e-5f6a-4b7c-8d9e-0f1a2b3c4d5e","method":"bank_transfer","amount":{"amount":"447.60","currency":"EUR"},"invoiceStatus":"paid","outstanding":{"amount":"0.00","currency":"EUR"}}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/Conflict"},"413":{"$ref":"#/components/responses/PayloadTooLarge"},"415":{"$ref":"#/components/responses/UnsupportedMediaType"},"422":{"$ref":"#/components/responses/ValidationFailed"},"429":{"$ref":"#/components/responses/RateLimited"},"500":{"$ref":"#/components/responses/InternalError"}}}}},"webhooks":{"booking.created":{"post":{"operationId":"webhookBookingCreated","summary":"booking.created","x-stryk-summary-de":"booking.created","description":"A booking was created (by the hotel, a channel, the booking engine or the API). Respond with any 2xx within 10 seconds; other answers are retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h and 24 h (8 attempts).","x-stryk-description-de":"Eine Buchung wurde angelegt (vom Hotel, über einen Kanal, die Booking Engine oder die API). Antworten Sie innerhalb von 10 Sekunden mit einem beliebigen 2xx; andere Antworten werden nach 1 min, 5 min, 30 min, 2 h, 6 h, 12 h und 24 h wiederholt (8 Versuche).","tags":["Webhooks"],"parameters":[{"name":"STRYK-Event-Id","in":"header","required":true,"description":"Event id (same as body id).","x-stryk-description-de":"Ereignis-ID (gleich der id im Body).","schema":{"type":"string"}},{"name":"STRYK-Event-Type","in":"header","required":true,"description":"Event type.","x-stryk-description-de":"Ereignistyp.","schema":{"type":"string"}},{"name":"STRYK-Delivery-Id","in":"header","required":true,"description":"Id of this delivery (differs per endpoint).","x-stryk-description-de":"ID dieser Zustellung (je Endpunkt verschieden).","schema":{"type":"string"}},{"name":"STRYK-Delivery-Attempt","in":"header","required":true,"description":"Attempt number, 1-8.","x-stryk-description-de":"Versuchsnummer, 1-8.","schema":{"type":"string"}},{"name":"STRYK-Signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<hex HMAC-SHA256(secret, \"<t>.<raw body>\")>. During a secret rotation two v1 values are sent for 24 h. Reject timestamps older than 300 s; compare in constant time.","x-stryk-description-de":"t=<Unix-Sekunden>,v1=<hex HMAC-SHA256(secret, \"<t>.<roher Body>\")>. Während einer Secret-Rotation werden 24 h lang zwei v1-Werte gesendet. Lehnen Sie Zeitstempel ab, die älter als 300 s sind; vergleichen Sie in konstanter Zeit.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"examples":{"event":{"value":{"id":"evt_2c9a7b6e-1d4f-4e3a-9b8c-7d6e5f4a3b2c","type":"booking.created","apiVersion":"v1","createdAt":"2026-11-04T08:15:01.204Z","hotelId":"hotel-alpenblick","data":{"object":"booking","id":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a"}}}}}}},"responses":{"2XX":{"description":"Delivery accepted.","x-stryk-description-de":"Zustellung angenommen."}}}},"booking.updated":{"post":{"operationId":"webhookBookingUpdated","summary":"booking.updated","x-stryk-summary-de":"booking.updated","description":"Booking data changed: dates, room type, guests, status, notes or price. Respond with any 2xx within 10 seconds; other answers are retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h and 24 h (8 attempts).","x-stryk-description-de":"Buchungsdaten haben sich geändert: Daten, Zimmerkategorie, Gäste, Status, Notizen oder Preis. Antworten Sie innerhalb von 10 Sekunden mit einem beliebigen 2xx; andere Antworten werden nach 1 min, 5 min, 30 min, 2 h, 6 h, 12 h und 24 h wiederholt (8 Versuche).","tags":["Webhooks"],"parameters":[{"name":"STRYK-Event-Id","in":"header","required":true,"description":"Event id (same as body id).","x-stryk-description-de":"Ereignis-ID (gleich der id im Body).","schema":{"type":"string"}},{"name":"STRYK-Event-Type","in":"header","required":true,"description":"Event type.","x-stryk-description-de":"Ereignistyp.","schema":{"type":"string"}},{"name":"STRYK-Delivery-Id","in":"header","required":true,"description":"Id of this delivery (differs per endpoint).","x-stryk-description-de":"ID dieser Zustellung (je Endpunkt verschieden).","schema":{"type":"string"}},{"name":"STRYK-Delivery-Attempt","in":"header","required":true,"description":"Attempt number, 1-8.","x-stryk-description-de":"Versuchsnummer, 1-8.","schema":{"type":"string"}},{"name":"STRYK-Signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<hex HMAC-SHA256(secret, \"<t>.<raw body>\")>. During a secret rotation two v1 values are sent for 24 h. Reject timestamps older than 300 s; compare in constant time.","x-stryk-description-de":"t=<Unix-Sekunden>,v1=<hex HMAC-SHA256(secret, \"<t>.<roher Body>\")>. Während einer Secret-Rotation werden 24 h lang zwei v1-Werte gesendet. Lehnen Sie Zeitstempel ab, die älter als 300 s sind; vergleichen Sie in konstanter Zeit.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"examples":{"event":{"value":{"id":"evt_2c9a7b6e-1d4f-4e3a-9b8c-7d6e5f4a3b2c","type":"booking.updated","apiVersion":"v1","createdAt":"2026-11-04T08:15:01.204Z","hotelId":"hotel-alpenblick","data":{"object":"booking","id":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","changes":["status"]}}}}}}},"responses":{"2XX":{"description":"Delivery accepted.","x-stryk-description-de":"Zustellung angenommen."}}}},"booking.cancelled":{"post":{"operationId":"webhookBookingCancelled","summary":"booking.cancelled","x-stryk-summary-de":"booking.cancelled","description":"A booking was cancelled. Respond with any 2xx within 10 seconds; other answers are retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h and 24 h (8 attempts).","x-stryk-description-de":"Eine Buchung wurde storniert. Antworten Sie innerhalb von 10 Sekunden mit einem beliebigen 2xx; andere Antworten werden nach 1 min, 5 min, 30 min, 2 h, 6 h, 12 h und 24 h wiederholt (8 Versuche).","tags":["Webhooks"],"parameters":[{"name":"STRYK-Event-Id","in":"header","required":true,"description":"Event id (same as body id).","x-stryk-description-de":"Ereignis-ID (gleich der id im Body).","schema":{"type":"string"}},{"name":"STRYK-Event-Type","in":"header","required":true,"description":"Event type.","x-stryk-description-de":"Ereignistyp.","schema":{"type":"string"}},{"name":"STRYK-Delivery-Id","in":"header","required":true,"description":"Id of this delivery (differs per endpoint).","x-stryk-description-de":"ID dieser Zustellung (je Endpunkt verschieden).","schema":{"type":"string"}},{"name":"STRYK-Delivery-Attempt","in":"header","required":true,"description":"Attempt number, 1-8.","x-stryk-description-de":"Versuchsnummer, 1-8.","schema":{"type":"string"}},{"name":"STRYK-Signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<hex HMAC-SHA256(secret, \"<t>.<raw body>\")>. During a secret rotation two v1 values are sent for 24 h. Reject timestamps older than 300 s; compare in constant time.","x-stryk-description-de":"t=<Unix-Sekunden>,v1=<hex HMAC-SHA256(secret, \"<t>.<roher Body>\")>. Während einer Secret-Rotation werden 24 h lang zwei v1-Werte gesendet. Lehnen Sie Zeitstempel ab, die älter als 300 s sind; vergleichen Sie in konstanter Zeit.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"examples":{"event":{"value":{"id":"evt_2c9a7b6e-1d4f-4e3a-9b8c-7d6e5f4a3b2c","type":"booking.cancelled","apiVersion":"v1","createdAt":"2026-11-04T08:15:01.204Z","hotelId":"hotel-alpenblick","data":{"object":"booking","id":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a"}}}}}}},"responses":{"2XX":{"description":"Delivery accepted.","x-stryk-description-de":"Zustellung angenommen."}}}},"guest.updated":{"post":{"operationId":"webhookGuestUpdated","summary":"guest.updated","x-stryk-summary-de":"guest.updated","description":"Contact data of a guest profile changed. Respond with any 2xx within 10 seconds; other answers are retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h and 24 h (8 attempts).","x-stryk-description-de":"Kontaktdaten eines Gästeprofils haben sich geändert. Antworten Sie innerhalb von 10 Sekunden mit einem beliebigen 2xx; andere Antworten werden nach 1 min, 5 min, 30 min, 2 h, 6 h, 12 h und 24 h wiederholt (8 Versuche).","tags":["Webhooks"],"parameters":[{"name":"STRYK-Event-Id","in":"header","required":true,"description":"Event id (same as body id).","x-stryk-description-de":"Ereignis-ID (gleich der id im Body).","schema":{"type":"string"}},{"name":"STRYK-Event-Type","in":"header","required":true,"description":"Event type.","x-stryk-description-de":"Ereignistyp.","schema":{"type":"string"}},{"name":"STRYK-Delivery-Id","in":"header","required":true,"description":"Id of this delivery (differs per endpoint).","x-stryk-description-de":"ID dieser Zustellung (je Endpunkt verschieden).","schema":{"type":"string"}},{"name":"STRYK-Delivery-Attempt","in":"header","required":true,"description":"Attempt number, 1-8.","x-stryk-description-de":"Versuchsnummer, 1-8.","schema":{"type":"string"}},{"name":"STRYK-Signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<hex HMAC-SHA256(secret, \"<t>.<raw body>\")>. During a secret rotation two v1 values are sent for 24 h. Reject timestamps older than 300 s; compare in constant time.","x-stryk-description-de":"t=<Unix-Sekunden>,v1=<hex HMAC-SHA256(secret, \"<t>.<roher Body>\")>. Während einer Secret-Rotation werden 24 h lang zwei v1-Werte gesendet. Lehnen Sie Zeitstempel ab, die älter als 300 s sind; vergleichen Sie in konstanter Zeit.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"examples":{"event":{"value":{"id":"evt_2c9a7b6e-1d4f-4e3a-9b8c-7d6e5f4a3b2c","type":"guest.updated","apiVersion":"v1","createdAt":"2026-11-04T08:15:01.204Z","hotelId":"hotel-alpenblick","data":{"object":"guest","id":"8f7e6d5c-4b3a-4291-8f0e-9d8c7b6a5f4e"}}}}}}},"responses":{"2XX":{"description":"Delivery accepted.","x-stryk-description-de":"Zustellung angenommen."}}}},"availability.changed":{"post":{"operationId":"webhookAvailabilityChanged","summary":"availability.changed","x-stryk-summary-de":"availability.changed","description":"Sellable availability or stay restrictions changed for room types and a date range. Respond with any 2xx within 10 seconds; other answers are retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h and 24 h (8 attempts).","x-stryk-description-de":"Verkaufbare Verfügbarkeit oder Aufenthaltsbeschränkungen haben sich für Zimmerkategorien und einen Zeitraum geändert. Antworten Sie innerhalb von 10 Sekunden mit einem beliebigen 2xx; andere Antworten werden nach 1 min, 5 min, 30 min, 2 h, 6 h, 12 h und 24 h wiederholt (8 Versuche).","tags":["Webhooks"],"parameters":[{"name":"STRYK-Event-Id","in":"header","required":true,"description":"Event id (same as body id).","x-stryk-description-de":"Ereignis-ID (gleich der id im Body).","schema":{"type":"string"}},{"name":"STRYK-Event-Type","in":"header","required":true,"description":"Event type.","x-stryk-description-de":"Ereignistyp.","schema":{"type":"string"}},{"name":"STRYK-Delivery-Id","in":"header","required":true,"description":"Id of this delivery (differs per endpoint).","x-stryk-description-de":"ID dieser Zustellung (je Endpunkt verschieden).","schema":{"type":"string"}},{"name":"STRYK-Delivery-Attempt","in":"header","required":true,"description":"Attempt number, 1-8.","x-stryk-description-de":"Versuchsnummer, 1-8.","schema":{"type":"string"}},{"name":"STRYK-Signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<hex HMAC-SHA256(secret, \"<t>.<raw body>\")>. During a secret rotation two v1 values are sent for 24 h. Reject timestamps older than 300 s; compare in constant time.","x-stryk-description-de":"t=<Unix-Sekunden>,v1=<hex HMAC-SHA256(secret, \"<t>.<roher Body>\")>. Während einer Secret-Rotation werden 24 h lang zwei v1-Werte gesendet. Lehnen Sie Zeitstempel ab, die älter als 300 s sind; vergleichen Sie in konstanter Zeit.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"examples":{"event":{"value":{"id":"evt_2c9a7b6e-1d4f-4e3a-9b8c-7d6e5f4a3b2c","type":"availability.changed","apiVersion":"v1","createdAt":"2026-11-04T08:15:01.204Z","hotelId":"hotel-alpenblick","data":{"object":"availability","roomTypeIds":["3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f"],"from":"2026-12-01","to":"2026-12-07"}}}}}}},"responses":{"2XX":{"description":"Delivery accepted.","x-stryk-description-de":"Zustellung angenommen."}}}},"rate.changed":{"post":{"operationId":"webhookRateChanged","summary":"rate.changed","x-stryk-summary-de":"rate.changed","description":"Daily prices or rate plans changed for room types and a date range. Respond with any 2xx within 10 seconds; other answers are retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h and 24 h (8 attempts).","x-stryk-description-de":"Tagespreise oder Tarife haben sich für Zimmerkategorien und einen Zeitraum geändert. Antworten Sie innerhalb von 10 Sekunden mit einem beliebigen 2xx; andere Antworten werden nach 1 min, 5 min, 30 min, 2 h, 6 h, 12 h und 24 h wiederholt (8 Versuche).","tags":["Webhooks"],"parameters":[{"name":"STRYK-Event-Id","in":"header","required":true,"description":"Event id (same as body id).","x-stryk-description-de":"Ereignis-ID (gleich der id im Body).","schema":{"type":"string"}},{"name":"STRYK-Event-Type","in":"header","required":true,"description":"Event type.","x-stryk-description-de":"Ereignistyp.","schema":{"type":"string"}},{"name":"STRYK-Delivery-Id","in":"header","required":true,"description":"Id of this delivery (differs per endpoint).","x-stryk-description-de":"ID dieser Zustellung (je Endpunkt verschieden).","schema":{"type":"string"}},{"name":"STRYK-Delivery-Attempt","in":"header","required":true,"description":"Attempt number, 1-8.","x-stryk-description-de":"Versuchsnummer, 1-8.","schema":{"type":"string"}},{"name":"STRYK-Signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<hex HMAC-SHA256(secret, \"<t>.<raw body>\")>. During a secret rotation two v1 values are sent for 24 h. Reject timestamps older than 300 s; compare in constant time.","x-stryk-description-de":"t=<Unix-Sekunden>,v1=<hex HMAC-SHA256(secret, \"<t>.<roher Body>\")>. Während einer Secret-Rotation werden 24 h lang zwei v1-Werte gesendet. Lehnen Sie Zeitstempel ab, die älter als 300 s sind; vergleichen Sie in konstanter Zeit.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"examples":{"event":{"value":{"id":"evt_2c9a7b6e-1d4f-4e3a-9b8c-7d6e5f4a3b2c","type":"rate.changed","apiVersion":"v1","createdAt":"2026-11-04T08:15:01.204Z","hotelId":"hotel-alpenblick","data":{"object":"rate","roomTypeIds":["3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f"],"from":"2026-12-01","to":"2026-12-07"}}}}}}},"responses":{"2XX":{"description":"Delivery accepted.","x-stryk-description-de":"Zustellung angenommen."}}}},"payment.updated":{"post":{"operationId":"webhookPaymentUpdated","summary":"payment.updated","x-stryk-summary-de":"payment.updated","description":"The payment status of a booking changed. Respond with any 2xx within 10 seconds; other answers are retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h and 24 h (8 attempts).","x-stryk-description-de":"Der Zahlungsstatus einer Buchung hat sich geändert. Antworten Sie innerhalb von 10 Sekunden mit einem beliebigen 2xx; andere Antworten werden nach 1 min, 5 min, 30 min, 2 h, 6 h, 12 h und 24 h wiederholt (8 Versuche).","tags":["Webhooks"],"parameters":[{"name":"STRYK-Event-Id","in":"header","required":true,"description":"Event id (same as body id).","x-stryk-description-de":"Ereignis-ID (gleich der id im Body).","schema":{"type":"string"}},{"name":"STRYK-Event-Type","in":"header","required":true,"description":"Event type.","x-stryk-description-de":"Ereignistyp.","schema":{"type":"string"}},{"name":"STRYK-Delivery-Id","in":"header","required":true,"description":"Id of this delivery (differs per endpoint).","x-stryk-description-de":"ID dieser Zustellung (je Endpunkt verschieden).","schema":{"type":"string"}},{"name":"STRYK-Delivery-Attempt","in":"header","required":true,"description":"Attempt number, 1-8.","x-stryk-description-de":"Versuchsnummer, 1-8.","schema":{"type":"string"}},{"name":"STRYK-Signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<hex HMAC-SHA256(secret, \"<t>.<raw body>\")>. During a secret rotation two v1 values are sent for 24 h. Reject timestamps older than 300 s; compare in constant time.","x-stryk-description-de":"t=<Unix-Sekunden>,v1=<hex HMAC-SHA256(secret, \"<t>.<roher Body>\")>. Während einer Secret-Rotation werden 24 h lang zwei v1-Werte gesendet. Lehnen Sie Zeitstempel ab, die älter als 300 s sind; vergleichen Sie in konstanter Zeit.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"examples":{"event":{"value":{"id":"evt_2c9a7b6e-1d4f-4e3a-9b8c-7d6e5f4a3b2c","type":"payment.updated","apiVersion":"v1","createdAt":"2026-11-04T08:15:01.204Z","hotelId":"hotel-alpenblick","data":{"object":"payment","bookingId":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a"}}}}}}},"responses":{"2XX":{"description":"Delivery accepted.","x-stryk-description-de":"Zustellung angenommen."}}}},"unit.updated":{"post":{"operationId":"webhookUnitUpdated","summary":"unit.updated","x-stryk-summary-de":"unit.updated","description":"The housekeeping status of a unit changed (any source). Respond with any 2xx within 10 seconds; other answers are retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h and 24 h (8 attempts).","x-stryk-description-de":"Der Reinigungsstatus einer Einheit hat sich geändert (jede Quelle). Antworten Sie innerhalb von 10 Sekunden mit einem beliebigen 2xx; andere Antworten werden nach 1 min, 5 min, 30 min, 2 h, 6 h, 12 h und 24 h wiederholt (8 Versuche).","tags":["Webhooks"],"parameters":[{"name":"STRYK-Event-Id","in":"header","required":true,"description":"Event id (same as body id).","x-stryk-description-de":"Ereignis-ID (gleich der id im Body).","schema":{"type":"string"}},{"name":"STRYK-Event-Type","in":"header","required":true,"description":"Event type.","x-stryk-description-de":"Ereignistyp.","schema":{"type":"string"}},{"name":"STRYK-Delivery-Id","in":"header","required":true,"description":"Id of this delivery (differs per endpoint).","x-stryk-description-de":"ID dieser Zustellung (je Endpunkt verschieden).","schema":{"type":"string"}},{"name":"STRYK-Delivery-Attempt","in":"header","required":true,"description":"Attempt number, 1-8.","x-stryk-description-de":"Versuchsnummer, 1-8.","schema":{"type":"string"}},{"name":"STRYK-Signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<hex HMAC-SHA256(secret, \"<t>.<raw body>\")>. During a secret rotation two v1 values are sent for 24 h. Reject timestamps older than 300 s; compare in constant time.","x-stryk-description-de":"t=<Unix-Sekunden>,v1=<hex HMAC-SHA256(secret, \"<t>.<roher Body>\")>. Während einer Secret-Rotation werden 24 h lang zwei v1-Werte gesendet. Lehnen Sie Zeitstempel ab, die älter als 300 s sind; vergleichen Sie in konstanter Zeit.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"examples":{"event":{"value":{"id":"evt_2c9a7b6e-1d4f-4e3a-9b8c-7d6e5f4a3b2c","type":"unit.updated","apiVersion":"v1","createdAt":"2026-11-04T08:15:01.204Z","hotelId":"hotel-alpenblick","data":{"object":"unit","id":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","changes":["housekeeping"]}}}}}}},"responses":{"2XX":{"description":"Delivery accepted.","x-stryk-description-de":"Zustellung angenommen."}}}},"webhook.test":{"post":{"operationId":"webhookWebhookTest","summary":"webhook.test","x-stryk-summary-de":"webhook.test","description":"Test event sent from the channel settings to verify the endpoint and the signature. Respond with any 2xx within 10 seconds; other answers are retried after 1 min, 5 min, 30 min, 2 h, 6 h, 12 h and 24 h (8 attempts).","x-stryk-description-de":"Testereignis aus den Kanaleinstellungen, um Endpunkt und Signatur zu prüfen. Antworten Sie innerhalb von 10 Sekunden mit einem beliebigen 2xx; andere Antworten werden nach 1 min, 5 min, 30 min, 2 h, 6 h, 12 h und 24 h wiederholt (8 Versuche).","tags":["Webhooks"],"parameters":[{"name":"STRYK-Event-Id","in":"header","required":true,"description":"Event id (same as body id).","x-stryk-description-de":"Ereignis-ID (gleich der id im Body).","schema":{"type":"string"}},{"name":"STRYK-Event-Type","in":"header","required":true,"description":"Event type.","x-stryk-description-de":"Ereignistyp.","schema":{"type":"string"}},{"name":"STRYK-Delivery-Id","in":"header","required":true,"description":"Id of this delivery (differs per endpoint).","x-stryk-description-de":"ID dieser Zustellung (je Endpunkt verschieden).","schema":{"type":"string"}},{"name":"STRYK-Delivery-Attempt","in":"header","required":true,"description":"Attempt number, 1-8.","x-stryk-description-de":"Versuchsnummer, 1-8.","schema":{"type":"string"}},{"name":"STRYK-Signature","in":"header","required":true,"description":"t=<unix seconds>,v1=<hex HMAC-SHA256(secret, \"<t>.<raw body>\")>. During a secret rotation two v1 values are sent for 24 h. Reject timestamps older than 300 s; compare in constant time.","x-stryk-description-de":"t=<Unix-Sekunden>,v1=<hex HMAC-SHA256(secret, \"<t>.<roher Body>\")>. Während einer Secret-Rotation werden 24 h lang zwei v1-Werte gesendet. Lehnen Sie Zeitstempel ab, die älter als 300 s sind; vergleichen Sie in konstanter Zeit.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"},"examples":{"event":{"value":{"id":"evt_2c9a7b6e-1d4f-4e3a-9b8c-7d6e5f4a3b2c","type":"webhook.test","apiVersion":"v1","createdAt":"2026-11-04T08:15:01.204Z","hotelId":"hotel-alpenblick","data":{"object":"webhook","id":"4d3c2b1a-0f9e-4d8c-8b7a-6f5e4d3c2b1a"}}}}}}},"responses":{"2XX":{"description":"Delivery accepted.","x-stryk-description-de":"Zustellung angenommen."}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"stryk_live_…","description":"Hotel-bound API key created in STRYK under Channels → API.","x-stryk-description-de":"Hotelgebundener API-Schlüssel, angelegt in STRYK unter Kanäle → API."}},"parameters":{"Limit":{"name":"limit","in":"query","required":false,"description":"Page size 1-200 (default 50).","x-stryk-description-de":"Seitengröße 1-200 (Standard 50).","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},"Cursor":{"name":"cursor","in":"query","required":false,"description":"nextCursor of the previous page. Keep all other parameters unchanged.","x-stryk-description-de":"nextCursor der vorherigen Seite. Alle anderen Parameter unverändert lassen.","schema":{"type":"string","maxLength":256}},"UpdatedSince":{"name":"updated_since","in":"query","required":false,"description":"RFC 3339 timestamp; returns items with updatedAt >= value. Deduplicate on id + updatedAt.","x-stryk-description-de":"RFC-3339-Zeitstempel; liefert Einträge mit updatedAt >= Wert. Über id + updatedAt deduplizieren.","schema":{"type":"string","format":"date-time"},"example":"2026-11-01T00:00:00Z"},"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":true,"description":"Unique key per logical write (1-160 characters A-Z a-z 0-9 . _ : -), stored 24 h. Retrying with the same key and body replays the first response.","x-stryk-description-de":"Eindeutiger Schlüssel je logischem Schreibvorgang (1-160 Zeichen A-Z a-z 0-9 . _ : -), 24 h gespeichert. Eine Wiederholung mit demselben Key und Body liefert die erste Antwort erneut.","schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{1,160}$"},"example":"web-order-1234-create"},"IdempotencyKeyOptional":{"name":"Idempotency-Key","in":"header","required":false,"description":"Optional idempotency key, same rules as for POST.","x-stryk-description-de":"Optionaler Idempotenz-Schlüssel, gleiche Regeln wie bei POST.","schema":{"type":"string","pattern":"^[A-Za-z0-9._:-]{1,160}$"}},"IfMatch":{"name":"If-Match","in":"header","required":true,"description":"ETag of the version you read. Missing → 428, stale → 412.","x-stryk-description-de":"ETag der gelesenen Version. Fehlt er → 428, ist er veraltet → 412.","schema":{"type":"string"},"example":"\"7c1e2d3f4a5b6c7d8e9f0a1b\""},"IfNoneMatch":{"name":"If-None-Match","in":"header","required":false,"description":"ETag you hold; 304 when unchanged.","x-stryk-description-de":"ETag, das Sie kennen; 304, wenn unverändert.","schema":{"type":"string"}},"BookingId":{"name":"bookingId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},"GuestId":{"name":"guestId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},"InvoiceId":{"name":"invoiceId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},"RoomTypeId":{"name":"roomTypeId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},"RestrictionId":{"name":"restrictionId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},"UnitId":{"name":"unitId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},"RoomTypeFilter":{"name":"roomTypeId","in":"query","required":false,"description":"Only this room type.","x-stryk-description-de":"Nur diese Zimmerkategorie.","schema":{"type":"string","format":"uuid"}},"From":{"name":"from","in":"query","required":true,"description":"First date (YYYY-MM-DD, hotel-local).","x-stryk-description-de":"Erstes Datum (YYYY-MM-DD, hotel-lokal).","schema":{"type":"string","format":"date"},"example":"2026-12-01"},"To":{"name":"to","in":"query","required":true,"description":"Last date, inclusive; the range covers at most 366 days.","x-stryk-description-de":"Letztes Datum, einschließlich; der Zeitraum umfasst höchstens 366 Tage.","schema":{"type":"string","format":"date"},"example":"2026-12-31"},"RatePlanFilter":{"name":"ratePlanId","in":"query","required":false,"description":"Only this rate plan.","x-stryk-description-de":"Nur dieser Tarif.","schema":{"type":"string","format":"uuid"}},"BookingStatusFilter":{"name":"status","in":"query","required":false,"schema":{"$ref":"#/components/schemas/BookingStatus"}},"ArrivalFrom":{"name":"arrivalFrom","in":"query","required":false,"description":"checkIn >= date.","x-stryk-description-de":"checkIn >= Datum.","schema":{"type":"string","format":"date"}},"ArrivalTo":{"name":"arrivalTo","in":"query","required":false,"description":"checkIn <= date.","x-stryk-description-de":"checkIn <= Datum.","schema":{"type":"string","format":"date"}},"ExternalReferenceFilter":{"name":"externalReference","in":"query","required":false,"description":"Exact external reference.","x-stryk-description-de":"Exakte externe Referenz.","schema":{"type":"string"}},"EmailFilter":{"name":"email","in":"query","required":false,"description":"Exact e-mail (case-insensitive).","x-stryk-description-de":"Exakte E-Mail (Groß-/Kleinschreibung egal).","schema":{"type":"string"}},"BookingFilter":{"name":"bookingId","in":"query","required":false,"description":"Only documents of this booking.","x-stryk-description-de":"Nur Belege dieser Buchung.","schema":{"type":"string","format":"uuid"}}},"headers":{"RateLimit-Limit":{"description":"Requests allowed per window for this key (default 120).","x-stryk-description-de":"Erlaubte Anfragen je Fenster für diesen Schlüssel (Standard 120).","schema":{"type":"integer"}},"RateLimit-Remaining":{"description":"Requests left in the current window.","x-stryk-description-de":"Verbleibende Anfragen im aktuellen Fenster.","schema":{"type":"integer"}},"RateLimit-Reset":{"description":"Seconds until the window resets.","x-stryk-description-de":"Sekunden bis zum Zurücksetzen des Fensters.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request id (also in problem bodies); quote it to support.","x-stryk-description-de":"Request-ID (auch in Problem-Bodies); nennen Sie sie dem Support.","schema":{"type":"string"}},"ETag":{"description":"Strong entity tag of the returned version.","x-stryk-description-de":"Starkes Entity-Tag der gelieferten Version.","schema":{"type":"string"}},"Location":{"description":"URL of the created resource.","x-stryk-description-de":"URL der angelegten Ressource.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before retrying.","x-stryk-description-de":"Sekunden bis zum nächsten Versuch.","schema":{"type":"integer"}},"Idempotent-Replayed":{"description":"true when the response is the stored result of an earlier request with the same Idempotency-Key.","x-stryk-description-de":"true, wenn die Antwort das gespeicherte Ergebnis einer früheren Anfrage mit demselben Idempotency-Key ist.","schema":{"type":"boolean"}}},"responses":{"BadRequest":{"description":"Bad request: malformed JSON, invalid cursor or missing Idempotency-Key.","x-stryk-description-de":"Fehlerhafte Anfrage: ungültiges JSON, ungültiger Cursor oder fehlender Idempotency-Key.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"invalidCursor":{"value":{"type":"https://staystryk.com/developers/errors#invalid_cursor","title":"Invalid cursor","status":400,"detail":"The cursor is invalid or expired. Restart the listing without cursor.","instance":"/api/partner/v1/bookings","code":"invalid_cursor","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}},"idempotencyKeyRequired":{"value":{"type":"https://staystryk.com/developers/errors#idempotency_key_required","title":"Idempotency key required","status":400,"detail":"Send an Idempotency-Key header with this request.","instance":"/api/partner/v1/bookings","code":"idempotency_key_required","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}}}}}},"Unauthorized":{"description":"Missing, unknown, revoked or expired API key.","x-stryk-description-de":"Fehlender, unbekannter, widerrufener oder abgelaufener API-Schlüssel.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"unauthorized":{"value":{"type":"https://staystryk.com/developers/errors#unauthorized","title":"Unauthorized","status":401,"detail":"Send a valid API key in the Authorization header: Bearer stryk_live_….","instance":"/api/partner/v1/bookings","code":"unauthorized","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}},"keyExpired":{"value":{"type":"https://staystryk.com/developers/errors#key_expired","title":"API key expired","status":401,"detail":"This API key has expired.","instance":"/api/partner/v1/bookings","code":"key_expired","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}}}}}},"Forbidden":{"description":"The key lacks the scope, the IP is not allowed or the channel module is disabled.","x-stryk-description-de":"Dem Schlüssel fehlt der Scope, die IP ist nicht freigegeben oder das Kanalmodul ist deaktiviert.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"insufficientScope":{"value":{"type":"https://staystryk.com/developers/errors#insufficient_scope","title":"Insufficient scope","status":403,"detail":"This API key lacks the scope bookings:write.","instance":"/api/partner/v1/bookings","code":"insufficient_scope","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}},"ipNotAllowed":{"value":{"type":"https://staystryk.com/developers/errors#ip_not_allowed","title":"IP address not allowed","status":403,"detail":"Requests from this IP address are not allowed for this key.","instance":"/api/partner/v1/bookings","code":"ip_not_allowed","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}},"moduleDisabled":{"value":{"type":"https://staystryk.com/developers/errors#module_disabled","title":"Module disabled","status":403,"detail":"The channel module is not enabled for this hotel.","instance":"/api/partner/v1/bookings","code":"module_disabled","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}}}}}},"NotFound":{"description":"The resource does not exist for this hotel.","x-stryk-description-de":"Die Ressource existiert für dieses Hotel nicht.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"notFound":{"value":{"type":"https://staystryk.com/developers/errors#not_found","title":"Not found","status":404,"detail":"Booking was not found.","instance":"/api/partner/v1/bookings/5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","code":"not_found","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}}}}}},"Conflict":{"description":"Conflict with the current state.","x-stryk-description-de":"Konflikt mit dem aktuellen Zustand.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"priceChanged":{"value":{"type":"https://staystryk.com/developers/errors#conflict","title":"Conflict","status":409,"detail":"expectedTotal does not match the current price of the stay.","instance":"/api/partner/v1/bookings","code":"conflict","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b","currentTotal":{"amount":"459.60","currency":"EUR"}}},"notAvailable":{"value":{"type":"https://staystryk.com/developers/errors#not_available","title":"Not available","status":409,"detail":"No unit of the requested room type is available for the whole stay.","instance":"/api/partner/v1/bookings","code":"not_available","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}},"externalReferenceUsed":{"value":{"type":"https://staystryk.com/developers/errors#conflict","title":"Conflict","status":409,"detail":"externalReference is already used by another booking of this hotel.","instance":"/api/partner/v1/bookings","code":"conflict","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b","bookingId":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a"}},"notModifiable":{"value":{"type":"https://staystryk.com/developers/errors#booking_not_modifiable","title":"Booking cannot be modified","status":409,"detail":"The booking is checked_in and can no longer be changed through the API.","instance":"/api/partner/v1/bookings/5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","code":"booking_not_modifiable","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}},"inProgress":{"value":{"type":"https://staystryk.com/developers/errors#idempotency_in_progress","title":"Request still in progress","status":409,"detail":"A request with this Idempotency-Key is still running. Retry shortly.","instance":"/api/partner/v1/bookings","code":"idempotency_in_progress","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}}}}}},"PreconditionFailed":{"description":"If-Match does not match the current version.","x-stryk-description-de":"If-Match passt nicht zur aktuellen Version.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"stale":{"value":{"type":"https://staystryk.com/developers/errors#precondition_failed","title":"Precondition failed","status":412,"detail":"The resource changed since you read it. Fetch it again and retry with the new ETag.","instance":"/api/partner/v1/bookings/5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","code":"precondition_failed","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}}}}}},"PayloadTooLarge":{"description":"Body larger than 64 KiB.","x-stryk-description-de":"Body größer als 64 KiB.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"tooLarge":{"value":{"type":"https://staystryk.com/developers/errors#payload_too_large","title":"Payload too large","status":413,"detail":"The request body may have at most 64 KiB.","instance":"/api/partner/v1/bookings","code":"payload_too_large","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}}}}}},"UnsupportedMediaType":{"description":"Body is not application/json.","x-stryk-description-de":"Body ist nicht application/json.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"mediaType":{"value":{"type":"https://staystryk.com/developers/errors#unsupported_media_type","title":"Unsupported media type","status":415,"detail":"Send the body as application/json.","instance":"/api/partner/v1/bookings","code":"unsupported_media_type","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}}}}}},"ValidationFailed":{"description":"The request contains invalid fields.","x-stryk-description-de":"Die Anfrage enthält ungültige Felder.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"validation":{"value":{"type":"https://staystryk.com/developers/errors#validation_failed","title":"Validation failed","status":422,"detail":"The request contains invalid fields.","instance":"/api/partner/v1/bookings","code":"validation_failed","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b","errors":[{"field":"checkOut","message":"checkOut must be after checkIn."}]}},"keyReused":{"value":{"type":"https://staystryk.com/developers/errors#idempotency_key_reused","title":"Idempotency key reused","status":422,"detail":"This Idempotency-Key was used with a different request body.","instance":"/api/partner/v1/bookings","code":"idempotency_key_reused","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}}}}}},"PreconditionRequired":{"description":"If-Match header missing.","x-stryk-description-de":"If-Match-Header fehlt.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"missing":{"value":{"type":"https://staystryk.com/developers/errors#precondition_required","title":"Precondition required","status":428,"detail":"Send the current ETag in the If-Match header.","instance":"/api/partner/v1/bookings/5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","code":"precondition_required","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}}}}}},"RateLimited":{"description":"Too many requests for this key.","x-stryk-description-de":"Zu viele Anfragen für diesen Schlüssel.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"rateLimited":{"value":{"type":"https://staystryk.com/developers/errors#rate_limited","title":"Too many requests","status":429,"detail":"Rate limit of 120 requests per 60 seconds exceeded.","instance":"/api/partner/v1/bookings","code":"rate_limited","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}}}}}},"InternalError":{"description":"Unexpected server error.","x-stryk-description-de":"Unerwarteter Serverfehler.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"internal":{"value":{"type":"https://staystryk.com/developers/errors#internal_error","title":"Internal error","status":500,"detail":"An unexpected error occurred. Retry later or contact the hotel.","instance":"/api/partner/v1/bookings","code":"internal_error","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}}}}}},"ServiceUnavailable":{"description":"Temporarily unavailable.","x-stryk-description-de":"Vorübergehend nicht verfügbar.","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"},"examples":{"unavailable":{"value":{"type":"https://staystryk.com/developers/errors#service_unavailable","title":"Service unavailable","status":503,"detail":"The service is temporarily unavailable. Retry later.","instance":"/api/partner/v1/bookings","code":"service_unavailable","requestId":"6f1d2c3b-4a5e-4f60-8a7b-9c0d1e2f3a4b"}}}}}}},"schemas":{"Money":{"type":"object","x-stryk-java":"PartnerValues.Money","description":"Money amount: decimal string with exactly two fraction digits and an ISO 4217 currency. Never use binary floating point for it.","x-stryk-description-de":"Geldbetrag: Dezimal-String mit genau zwei Nachkommastellen und einer ISO-4217-Währung. Verwenden Sie dafür nie binäre Gleitkommazahlen.","required":["amount","currency"],"properties":{"amount":{"type":"string","description":"Decimal string, exactly two fraction digits.","x-stryk-description-de":"Dezimal-String, genau zwei Nachkommastellen.","pattern":"^-?\\d+\\.\\d{2}$","examples":["420.00"]},"currency":{"type":"string","description":"ISO 4217 currency code.","x-stryk-description-de":"ISO-4217-Währungscode.","pattern":"^[A-Z]{3}$","examples":["EUR"]}}},"Problem":{"type":"object","description":"RFC 9457 problem details. `code` is the stable machine key; `detail` is a human-readable English text that may change. Additional members (e.g. `currentTotal`, `bookingId`) are documented per error.","x-stryk-description-de":"RFC 9457 Problem Details. `code` ist der stabile maschinenlesbare Schlüssel; `detail` ist ein englischer Text für Menschen, der sich ändern kann. Zusätzliche Felder (z. B. `currentTotal`, `bookingId`) sind je Fehler dokumentiert.","required":["type","title","status","code","requestId"],"properties":{"type":{"type":"string","description":"URI of the error documentation.","x-stryk-description-de":"URI der Fehlerdokumentation.","format":"uri"},"title":{"type":"string","description":"Short summary of the error class.","x-stryk-description-de":"Kurze Zusammenfassung der Fehlerklasse."},"status":{"type":"integer","description":"HTTP status code.","x-stryk-description-de":"HTTP-Statuscode."},"detail":{"type":"string","description":"Human-readable explanation of this occurrence.","x-stryk-description-de":"Erklärung dieses konkreten Falls für Menschen."},"instance":{"type":"string","description":"Request path.","x-stryk-description-de":"Request-Pfad."},"code":{"type":"string","description":"Stable machine-readable error code.","x-stryk-description-de":"Stabiler maschinenlesbarer Fehlercode.","enum":["unauthorized","key_expired","ip_not_allowed","insufficient_scope","module_disabled","not_found","method_not_allowed","conflict","idempotency_in_progress","not_available","booking_not_modifiable","precondition_failed","payload_too_large","unsupported_media_type","validation_failed","idempotency_key_reused","precondition_required","rate_limited","idempotency_key_required","invalid_cursor","bad_request","internal_error","service_unavailable"]},"requestId":{"type":"string","description":"Same value as the X-Request-Id response header; quote it to support.","x-stryk-description-de":"Gleicher Wert wie der Antwort-Header X-Request-Id; nennen Sie ihn dem Support."},"errors":{"type":"array","items":{"type":"object","required":["field","message"],"properties":{"field":{"type":"string","description":"Request field (dot notation).","x-stryk-description-de":"Feld der Anfrage (Punktnotation)."},"message":{"type":"string","description":"What is wrong with it.","x-stryk-description-de":"Was daran falsch ist."}}},"description":"Field errors for validation_failed.","x-stryk-description-de":"Feldfehler bei validation_failed."},"currentTotal":{"allOf":[{"$ref":"#/components/schemas/Money"}],"description":"conflict on POST /bookings: the current server price.","x-stryk-description-de":"conflict bei POST /bookings: der aktuelle Serverpreis."},"bookingId":{"type":"string","description":"conflict on an already used externalReference: the booking that uses it.","x-stryk-description-de":"conflict bei bereits verwendeter externalReference: die Buchung, die sie verwendet.","format":"uuid"}}},"HotelRef":{"type":"object","description":"Hotel the API key belongs to.","x-stryk-description-de":"Hotel, zu dem der API-Schlüssel gehört.","x-stryk-java":"PartnerHotelRef","required":["id","name"],"properties":{"id":{"type":"string","description":"Hotel id.","x-stryk-description-de":"Hotel-ID."},"name":{"type":["string","null"],"description":"Display name.","x-stryk-description-de":"Anzeigename."}}},"RateLimit":{"type":"object","description":"Rate limit of the key.","x-stryk-description-de":"Rate-Limit des Schlüssels.","x-stryk-java":"PartnerRateLimit","required":["limit","windowSeconds"],"properties":{"limit":{"type":"integer","description":"Requests per window for this key (default 120; a different tier is set by STRYK on request).","x-stryk-description-de":"Anfragen je Fenster für diesen Schlüssel (Standard 120; eine andere Stufe stellt STRYK auf Anfrage ein)."},"windowSeconds":{"type":"integer","description":"Window length in seconds.","x-stryk-description-de":"Fensterlänge in Sekunden."}}},"Me":{"type":"object","description":"The calling API key.","x-stryk-description-de":"Der aufrufende API-Schlüssel.","x-stryk-java":"PartnerMe","required":["keyId","keyName","keyPrefix","scopes","hotel","expiresAt","rateLimit"],"properties":{"keyId":{"type":"string","description":"Key id.","x-stryk-description-de":"Schlüssel-ID.","format":"uuid"},"keyName":{"type":"string","description":"Name given by the hotel.","x-stryk-description-de":"Vom Hotel vergebener Name."},"keyPrefix":{"type":["string","null"],"description":"Public prefix (first 8 characters after stryk_live_).","x-stryk-description-de":"Öffentliches Präfix (die ersten 8 Zeichen nach stryk_live_)."},"scopes":{"type":"array","items":{"$ref":"#/components/schemas/Scope"},"description":"Granted scopes.","x-stryk-description-de":"Erteilte Scopes."},"hotel":{"$ref":"#/components/schemas/HotelRef"},"expiresAt":{"type":["string","null"],"description":"Expiry, null if the key does not expire.","x-stryk-description-de":"Ablauf; null, wenn der Schlüssel nicht abläuft.","format":"date-time"},"rateLimit":{"$ref":"#/components/schemas/RateLimit"}},"examples":[{"keyId":"0b9d4e8a-6f53-4c55-9a0e-3d1f0d6c2a11","keyName":"Website booking widget","keyPrefix":"Ab3dEf7h","scopes":["property:read","availability:read","rates:read","bookings:read","bookings:write"],"hotel":{"id":"hotel-alpenblick","name":"Hotel Alpenblick"},"expiresAt":null,"rateLimit":{"limit":120,"windowSeconds":60}}]},"Scope":{"type":"string","description":"Permission of an API key. A write scope includes the read scope of the same resource.","x-stryk-description-de":"Berechtigung eines API-Schlüssels. Ein Schreib-Scope schließt den Lese-Scope desselben Bereichs ein.","enum":["property:read","property:write","availability:read","availability:write","rates:read","rates:write","bookings:read","bookings:write","guests:read","guests:write","payments:read","payments:write","invoices:read"]},"WebhookEventTypeInfo":{"type":"object","description":"Webhook event type.","x-stryk-description-de":"Webhook-Ereignistyp.","x-stryk-java":"PartnerWebhookEventTypeInfo","required":["type","description"],"properties":{"type":{"$ref":"#/components/schemas/WebhookEventType"},"description":{"type":"string","description":"What triggers the event.","x-stryk-description-de":"Was das Ereignis auslöst."}}},"WebhookEventType":{"type":"string","description":"Webhook event type.","x-stryk-description-de":"Webhook-Ereignistyp.","enum":["booking.created","booking.updated","booking.cancelled","guest.updated","availability.changed","rate.changed","payment.updated","unit.updated","webhook.test"]},"WebhookEventTypePage":{"type":"object","x-stryk-java":"PartnerPage","description":"All webhook event types (single page).","x-stryk-description-de":"Alle Webhook-Ereignistypen (eine Seite).","required":["data","nextCursor","hasMore"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEventTypeInfo"},"description":"Items of this page, ordered by updatedAt ascending, then id.","x-stryk-description-de":"Einträge dieser Seite, aufsteigend nach updatedAt, dann id sortiert."},"nextCursor":{"type":["string","null"],"description":"Opaque cursor for the next page; null on the last page.","x-stryk-description-de":"Undurchsichtiger Cursor für die nächste Seite; null auf der letzten Seite."},"hasMore":{"type":"boolean","description":"True when another page exists.","x-stryk-description-de":"True, wenn eine weitere Seite existiert."}}},"Address":{"type":"object","description":"Postal address.","x-stryk-description-de":"Postanschrift.","x-stryk-java":"PartnerAddress","required":[],"properties":{"street":{"type":["string","null"],"description":"Street and number.","x-stryk-description-de":"Straße und Hausnummer."},"postalCode":{"type":["string","null"],"description":"Postal code.","x-stryk-description-de":"Postleitzahl."},"city":{"type":["string","null"],"description":"City.","x-stryk-description-de":"Ort."},"country":{"type":["string","null"],"description":"ISO 3166-1 alpha-2 country code.","x-stryk-description-de":"Ländercode nach ISO 3166-1 alpha-2.","pattern":"^[A-Z]{2}$"}}},"Contact":{"type":"object","description":"Public contact data of the hotel.","x-stryk-description-de":"Öffentliche Kontaktdaten des Hotels.","x-stryk-java":"PartnerContact","required":[],"properties":{"email":{"type":["string","null"],"description":"E-mail.","x-stryk-description-de":"E-Mail."},"phone":{"type":["string","null"],"description":"Phone.","x-stryk-description-de":"Telefon."},"website":{"type":["string","null"],"description":"Website URL.","x-stryk-description-de":"URL der Website."}}},"Hotel":{"type":"object","description":"Property profile. Stay dates of all resources are local to `timezone`.","x-stryk-description-de":"Profil des Hauses. Aufenthaltsdaten aller Ressourcen beziehen sich auf `timezone`.","x-stryk-java":"PartnerHotel","required":["id","name","address","timezone","currency","languages","contact","version"],"properties":{"id":{"type":"string","description":"Hotel id.","x-stryk-description-de":"Hotel-ID."},"name":{"type":["string","null"],"description":"Display name.","x-stryk-description-de":"Anzeigename."},"legalName":{"type":["string","null"],"description":"Legal (invoice) name when it differs from the display name.","x-stryk-description-de":"Rechtlicher Name (auf Rechnungen), wenn er vom Anzeigenamen abweicht."},"address":{"$ref":"#/components/schemas/Address"},"timezone":{"type":"string","description":"IANA time zone, e.g. Europe/Vienna.","x-stryk-description-de":"IANA-Zeitzone, z. B. Europe/Vienna."},"currency":{"type":"string","description":"Hotel currency (ISO 4217).","x-stryk-description-de":"Hotelwährung (ISO 4217).","pattern":"^[A-Z]{3}$"},"languages":{"type":"array","items":{"type":"string"},"description":"Guest languages the hotel maintains content for (ISO 639-1).","x-stryk-description-de":"Gastsprachen, für die das Hotel Inhalte pflegt (ISO 639-1)."},"checkInFrom":{"type":["string","null"],"description":"Earliest check-in time HH:MM (hotel-local).","x-stryk-description-de":"Früheste Check-in-Zeit HH:MM (hotel-lokal)."},"checkOutUntil":{"type":["string","null"],"description":"Latest check-out time HH:MM (hotel-local).","x-stryk-description-de":"Späteste Check-out-Zeit HH:MM (hotel-lokal)."},"contact":{"$ref":"#/components/schemas/Contact"},"version":{"type":"string","description":"ETag value without quotes.","x-stryk-description-de":"ETag-Wert ohne Anführungszeichen."}},"examples":[{"id":"hotel-alpenblick","name":"Hotel Alpenblick","legalName":"Alpenblick Hotelbetriebs GmbH","address":{"street":"Dorfstraße 12","postalCode":"6020","city":"Innsbruck","country":"AT"},"timezone":"Europe/Vienna","currency":"EUR","languages":["de","en"],"checkInFrom":"15:00","checkOutUntil":"11:00","contact":{"email":"info@alpenblick.example","phone":"+43 512 123456","website":"https://alpenblick.example"},"version":"4f1c2a9b0d3e5f6a7b8c9d0e"}]},"Amenity":{"type":"object","description":"Room amenity.","x-stryk-description-de":"Zimmerausstattung.","x-stryk-java":"PartnerAmenity","required":["code","name"],"properties":{"code":{"type":["string","null"],"description":"Stable amenity key.","x-stryk-description-de":"Stabiler Ausstattungsschlüssel."},"name":{"type":["string","null"],"description":"Label in the hotel language.","x-stryk-description-de":"Bezeichnung in der Hotelsprache."}}},"Image":{"type":"object","description":"Room type photo served by the public booking-engine media path.","x-stryk-description-de":"Foto der Zimmerkategorie, ausgeliefert über den öffentlichen Medienpfad der Booking Engine.","x-stryk-java":"PartnerImage","required":["url","position"],"properties":{"url":{"type":"string","description":"Public HTTPS URL.","x-stryk-description-de":"Öffentliche HTTPS-URL.","format":"uri"},"alt":{"type":["string","null"],"description":"Alternative text.","x-stryk-description-de":"Alternativtext."},"position":{"type":"integer","description":"Sort position, 0 first.","x-stryk-description-de":"Sortierposition, 0 zuerst."}}},"RoomType":{"type":"object","description":"Room type (room category). Room types have no change timestamp in v1; detect changes through `version` / ETag.","x-stryk-description-de":"Zimmerkategorie. Zimmerkategorien haben in v1 keinen Änderungszeitstempel; Änderungen erkennen Sie über `version` bzw. ETag.","x-stryk-java":"PartnerRoomType","required":["id","name","description","maxOccupancy","maxAdults","maxChildren","standardOccupancy","bedConfiguration","amenities","images","unitCount","active","version"],"properties":{"id":{"type":"string","description":"Room type id.","x-stryk-description-de":"ID der Zimmerkategorie.","format":"uuid"},"name":{"type":"string","description":"Name.","x-stryk-description-de":"Name."},"code":{"type":["string","null"],"description":"Short code.","x-stryk-description-de":"Kurzcode."},"description":{"type":"object","additionalProperties":{"type":"string"},"description":"Description by language code (ISO 639-1); `und` when the language is unknown.","x-stryk-description-de":"Beschreibung je Sprachcode (ISO 639-1); `und`, wenn die Sprache unbekannt ist."},"maxOccupancy":{"type":"integer","description":"Maximum guests including extra beds.","x-stryk-description-de":"Höchstzahl Gäste einschließlich Zustellbetten."},"maxAdults":{"type":"integer","description":"Maximum adults in any allowed occupancy.","x-stryk-description-de":"Höchstzahl Erwachsene in einer erlaubten Belegung."},"maxChildren":{"type":"integer","description":"Maximum children in any allowed occupancy.","x-stryk-description-de":"Höchstzahl Kinder in einer erlaubten Belegung."},"standardOccupancy":{"type":"integer","description":"Occupancy the base price refers to.","x-stryk-description-de":"Belegung, auf die sich der Grundpreis bezieht."},"bedConfiguration":{"type":"array","items":{"type":"string"},"description":"Beds, e.g. double_bed, twin_beds, sofa_bed.","x-stryk-description-de":"Betten, z. B. double_bed, twin_beds, sofa_bed."},"sizeSqm":{"type":["integer","null"],"description":"Size in square metres.","x-stryk-description-de":"Größe in Quadratmetern."},"amenities":{"type":"array","items":{"$ref":"#/components/schemas/Amenity"}},"images":{"type":"array","items":{"$ref":"#/components/schemas/Image"},"description":"Empty when the hotel has no booking-engine address.","x-stryk-description-de":"Leer, wenn das Hotel keine Booking-Engine-Adresse hat."},"unitCount":{"type":"integer","description":"Active units of this type.","x-stryk-description-de":"Aktive Einheiten dieser Kategorie."},"active":{"type":"boolean","description":"Sellable category.","x-stryk-description-de":"Verkaufbare Kategorie."},"version":{"type":"string","description":"ETag value without quotes.","x-stryk-description-de":"ETag-Wert ohne Anführungszeichen."}},"examples":[{"id":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","name":"Doppelzimmer Bergblick","code":"DBL","description":{"de":"Helles Doppelzimmer mit Balkon.","en":"Bright double room with balcony."},"maxOccupancy":3,"maxAdults":2,"maxChildren":1,"standardOccupancy":2,"bedConfiguration":["double_bed","sofa_bed"],"sizeSqm":28,"amenities":[{"code":"balcony","name":"Balkon"},{"code":"wifi","name":"WLAN"}],"images":[{"url":"https://app.staystryk.com/api/public/booking/alpenblick/room-photos/0c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f","alt":"Doppelzimmer Bergblick","position":0}],"unitCount":12,"active":true,"version":"a1b2c3d4e5f6a7b8c9d0e1f2"}]},"RoomTypePage":{"type":"object","x-stryk-java":"PartnerPage","description":"Room types, ordered by id.","x-stryk-description-de":"Zimmerkategorien, sortiert nach id.","required":["data","nextCursor","hasMore"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RoomType"},"description":"Items of this page, ordered by updatedAt ascending, then id.","x-stryk-description-de":"Einträge dieser Seite, aufsteigend nach updatedAt, dann id sortiert."},"nextCursor":{"type":["string","null"],"description":"Opaque cursor for the next page; null on the last page.","x-stryk-description-de":"Undurchsichtiger Cursor für die nächste Seite; null auf der letzten Seite."},"hasMore":{"type":"boolean","description":"True when another page exists.","x-stryk-description-de":"True, wenn eine weitere Seite existiert."}}},"Unit":{"type":"object","description":"Physical room or apartment.","x-stryk-description-de":"Physisches Zimmer oder Apartment.","x-stryk-java":"PartnerUnit","required":["id","number","roomTypeId","active","updatedAt","version"],"properties":{"id":{"type":"string","description":"Unit id.","x-stryk-description-de":"ID der Einheit.","format":"uuid"},"number":{"type":"string","description":"Room number.","x-stryk-description-de":"Zimmernummer."},"roomTypeId":{"type":"string","description":"Room type.","x-stryk-description-de":"Zimmerkategorie.","format":"uuid"},"floor":{"type":["integer","null"],"description":"Floor.","x-stryk-description-de":"Etage."},"active":{"type":"boolean","description":"In operation.","x-stryk-description-de":"In Betrieb."},"housekeepingStatus":{"type":["string","null"],"description":"Housekeeping status (see UnitUpdateRequest); hotel-specific statuses keep their own id.","x-stryk-description-de":"Reinigungsstatus (siehe UnitUpdateRequest); hoteleigene Status behalten ihre ID."},"updatedAt":{"type":"string","description":"Last change of the room master data.","x-stryk-description-de":"Letzte Änderung der Zimmerstammdaten.","format":"date-time"},"version":{"type":"string","description":"ETag value without quotes; changes with master data and housekeeping status.","x-stryk-description-de":"ETag-Wert ohne Anführungszeichen; ändert sich mit Stammdaten und Reinigungsstatus."}},"examples":[{"id":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","number":"204","roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","floor":2,"active":true,"housekeepingStatus":"vacant_dirty","updatedAt":"2026-10-28T09:12:44.512Z","version":"0e1f2a3b4c5d6e7f8a9b0c1d"}]},"UnitUpdateRequest":{"type":"object","description":"Housekeeping status to set.","x-stryk-description-de":"Zu setzender Reinigungsstatus.","x-stryk-java":"PartnerUnitUpdateRequest","required":["housekeepingStatus"],"properties":{"housekeepingStatus":{"type":"string","description":"Built-in housekeeping status.","x-stryk-description-de":"Eingebauter Reinigungsstatus.","enum":["vacant_dirty","vacant_clean","vacant_inspected","occupied_service_required","occupied_serviced","do_not_disturb","deep_clean","linen_change","minibar_check","turndown_service"]}},"examples":[{"housekeepingStatus":"vacant_inspected"}]},"RestrictionCreateRequest":{"type":"object","description":"Availability restriction of one room type.","x-stryk-description-de":"Verfügbarkeitsbeschränkung einer Zimmerkategorie.","x-stryk-java":"PartnerRestrictionCreateRequest","required":["roomTypeId","type","from","to"],"properties":{"roomTypeId":{"type":"string","description":"Active room type.","x-stryk-description-de":"Aktive Zimmerkategorie.","format":"uuid"},"type":{"type":"string","description":"`closure` (not sellable), `capacity_cap` (at most `capacity` units), `closed_to_arrival`, `closed_to_departure`.","x-stryk-description-de":"`closure` (nicht verkaufbar), `capacity_cap` (höchstens `capacity` Einheiten), `closed_to_arrival`, `closed_to_departure`.","enum":["closure","capacity_cap","closed_to_arrival","closed_to_departure"]},"from":{"type":"string","description":"First day (inclusive).","x-stryk-description-de":"Erster Tag (einschließlich).","format":"date"},"to":{"type":"string","description":"Last day (inclusive), at most 500 days after from.","x-stryk-description-de":"Letzter Tag (einschließlich), höchstens 500 Tage nach from.","format":"date"},"capacity":{"type":["integer","null"],"description":"Only for capacity_cap; 0 to active units − 1.","x-stryk-description-de":"Nur bei capacity_cap; 0 bis aktive Einheiten − 1."},"name":{"type":["string","null"],"description":"Label shown to the hotel (max. 120).","x-stryk-description-de":"Bezeichnung für das Hotel (max. 120)."}},"examples":[{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","type":"closure","from":"2027-01-10","to":"2027-01-12"}]},"Restriction":{"type":"object","description":"Availability restriction created by this key.","x-stryk-description-de":"Von diesem Schlüssel angelegte Verfügbarkeitsbeschränkung.","x-stryk-java":"PartnerRestriction","required":["id","roomTypeId","type","from","to","createdAt"],"properties":{"id":{"type":"string","description":"Restriction id.","x-stryk-description-de":"ID der Beschränkung.","format":"uuid"},"roomTypeId":{"type":"string","description":"Room type.","x-stryk-description-de":"Zimmerkategorie.","format":"uuid"},"type":{"type":"string","description":"Restriction type.","x-stryk-description-de":"Art der Beschränkung."},"from":{"type":"string","description":"First day.","x-stryk-description-de":"Erster Tag.","format":"date"},"to":{"type":"string","description":"Last day.","x-stryk-description-de":"Letzter Tag.","format":"date"},"capacity":{"type":["integer","null"],"description":"Cap for capacity_cap.","x-stryk-description-de":"Obergrenze bei capacity_cap."},"name":{"type":["string","null"],"description":"Label.","x-stryk-description-de":"Bezeichnung."},"createdAt":{"type":"string","description":"Creation time.","x-stryk-description-de":"Anlagezeitpunkt.","format":"date-time"}},"examples":[{"id":"6a7b8c9d-0e1f-4a2b-8c3d-4e5f6a7b8c9d","roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","type":"closure","from":"2027-01-10","to":"2027-01-12","capacity":null,"name":"API: closure","createdAt":"2026-11-05T09:00:00.000Z"}]},"RatePriceInput":{"type":"object","description":"Daily price; null price resets the day to the rate rules.","x-stryk-description-de":"Tagespreis; price null setzt den Tag auf die Preisregeln zurück.","x-stryk-java":"PartnerRatePriceInput","required":["date"],"properties":{"date":{"type":"string","description":"Day (today or later).","x-stryk-description-de":"Tag (heute oder später).","format":"date"},"price":{"description":"Price per night in the hotel currency, or null.","x-stryk-description-de":"Preis pro Nacht in der Hotelwährung oder null.","oneOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}]}},"examples":[{"date":"2026-12-24","price":{"amount":"219.00","currency":"EUR"}}]},"RateUpdateRequest":{"type":"object","description":"Daily prices of one room type.","x-stryk-description-de":"Tagespreise einer Zimmerkategorie.","x-stryk-java":"PartnerRateUpdateRequest","required":["roomTypeId","prices"],"properties":{"roomTypeId":{"type":"string","description":"Active room type.","x-stryk-description-de":"Aktive Zimmerkategorie.","format":"uuid"},"prices":{"type":"array","description":"1-366 days, each date once, within 366 days.","x-stryk-description-de":"1-366 Tage, jedes Datum einmal, innerhalb von 366 Tagen.","items":{"$ref":"#/components/schemas/RatePriceInput"}}},"examples":[{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","prices":[{"date":"2026-12-24","price":{"amount":"219.00","currency":"EUR"}}]}]},"RateUpdateResult":{"type":"object","description":"Result of a daily price update.","x-stryk-description-de":"Ergebnis einer Tagespreisänderung.","x-stryk-java":"PartnerRateUpdateResult","required":["roomTypeId","from","to","changed","unchanged","reset"],"properties":{"roomTypeId":{"type":"string","description":"Room type.","x-stryk-description-de":"Zimmerkategorie.","format":"uuid"},"from":{"type":"string","description":"First affected day.","x-stryk-description-de":"Erster betroffener Tag.","format":"date"},"to":{"type":"string","description":"Last affected day.","x-stryk-description-de":"Letzter betroffener Tag.","format":"date"},"changed":{"type":"integer","description":"Days with a new price.","x-stryk-description-de":"Tage mit neuem Preis."},"unchanged":{"type":"integer","description":"Days that already had this price or no price to reset.","x-stryk-description-de":"Tage, die diesen Preis schon hatten oder nichts zum Zurücksetzen."},"reset":{"type":"integer","description":"Days reset to the rate rules.","x-stryk-description-de":"Auf die Preisregeln zurückgesetzte Tage."}},"examples":[{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","from":"2026-12-24","to":"2026-12-24","changed":1,"unchanged":0,"reset":0}]},"InvoicePaymentCreateRequest":{"type":"object","description":"Received bank transfer.","x-stryk-description-de":"Eingegangene Überweisung.","x-stryk-java":"PartnerInvoicePaymentCreateRequest","required":["amount"],"properties":{"amount":{"description":"Amount in the invoice currency, at most the open amount.","x-stryk-description-de":"Betrag in Rechnungswährung, höchstens der offene Betrag.","$ref":"#/components/schemas/Money"},"paidAt":{"type":["string","null"],"description":"Value date (default today).","x-stryk-description-de":"Valutadatum (Standard heute).","format":"date"},"reference":{"type":["string","null"],"description":"Bank reference (max. 140).","x-stryk-description-de":"Bankreferenz (max. 140)."}},"examples":[{"amount":{"amount":"100.00","currency":"EUR"}}]},"InvoicePaymentResult":{"type":"object","description":"Recorded payment and the invoice state afterwards.","x-stryk-description-de":"Gebuchte Zahlung und Rechnungsstand danach.","x-stryk-java":"PartnerInvoicePaymentResult","required":["invoiceId","method","amount","invoiceStatus","outstanding"],"properties":{"invoiceId":{"type":"string","description":"Invoice.","x-stryk-description-de":"Rechnung.","format":"uuid"},"method":{"type":"string","description":"Always bank_transfer.","x-stryk-description-de":"Immer bank_transfer."},"amount":{"description":"Recorded amount.","x-stryk-description-de":"Gebuchter Betrag.","$ref":"#/components/schemas/Money"},"invoiceStatus":{"type":"string","description":"Invoice status afterwards (issued, partially_paid, paid, …).","x-stryk-description-de":"Rechnungsstatus danach (issued, partially_paid, paid, …)."},"outstanding":{"description":"Open amount afterwards.","x-stryk-description-de":"Offener Betrag danach.","$ref":"#/components/schemas/Money"}},"examples":[{"invoiceId":"1b2c3d4e-5f6a-4b7c-8d9e-0f1a2b3c4d5e","method":"bank_transfer","amount":{"amount":"100.00","currency":"EUR"},"invoiceStatus":"partially_paid","outstanding":{"amount":"347.60","currency":"EUR"}}]},"UnitPage":{"type":"object","x-stryk-java":"PartnerPage","description":"Units.","x-stryk-description-de":"Einheiten.","required":["data","nextCursor","hasMore"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Unit"},"description":"Items of this page, ordered by updatedAt ascending, then id.","x-stryk-description-de":"Einträge dieser Seite, aufsteigend nach updatedAt, dann id sortiert."},"nextCursor":{"type":["string","null"],"description":"Opaque cursor for the next page; null on the last page.","x-stryk-description-de":"Undurchsichtiger Cursor für die nächste Seite; null auf der letzten Seite."},"hasMore":{"type":"boolean","description":"True when another page exists.","x-stryk-description-de":"True, wenn eine weitere Seite existiert."}}},"CancellationPolicy":{"type":"object","description":"Cancellation terms as shown to guests.","x-stryk-description-de":"Stornobedingungen, wie sie Gäste sehen.","x-stryk-java":"PartnerCancellationPolicy","required":[],"properties":{"summary":{"type":["string","null"],"description":"Guest-facing summary in the hotel language.","x-stryk-description-de":"Zusammenfassung für Gäste in der Hotelsprache."},"refundable":{"type":["boolean","null"],"description":"Free cancellation is possible at some point.","x-stryk-description-de":"Kostenlose Stornierung ist zu einem Zeitpunkt möglich."},"freeCancellationHoursBefore":{"type":["integer","null"],"description":"Free cancellation until this many hours before arrival.","x-stryk-description-de":"Kostenlose Stornierung bis so viele Stunden vor Anreise."}}},"RatePlan":{"type":"object","description":"Rate plan sold through the API sales channel.","x-stryk-description-de":"Tarif, der über den Vertriebsweg API verkauft wird.","x-stryk-java":"PartnerRatePlan","required":["id","name","roomTypeIds","active","updatedAt"],"properties":{"id":{"type":"string","description":"Rate plan id.","x-stryk-description-de":"Tarif-ID.","format":"uuid"},"name":{"type":"string","description":"Name.","x-stryk-description-de":"Name."},"code":{"type":["string","null"],"description":"Short code.","x-stryk-description-de":"Kurzcode."},"description":{"type":["string","null"],"description":"Description.","x-stryk-description-de":"Beschreibung."},"roomTypeIds":{"type":"array","items":{"type":"string","format":"uuid"},"description":"Room types the plan applies to; empty means all.","x-stryk-description-de":"Zimmerkategorien, für die der Tarif gilt; leer bedeutet alle."},"mealPlan":{"type":["string","null"],"description":"Meal plan.","x-stryk-description-de":"Verpflegung.","enum":["breakfast","room_only",null]},"cancellationPolicy":{"oneOf":[{"$ref":"#/components/schemas/CancellationPolicy"},{"type":"null"}]},"active":{"type":"boolean","description":"Currently sellable.","x-stryk-description-de":"Derzeit verkaufbar."},"updatedAt":{"type":"string","description":"Last change.","x-stryk-description-de":"Letzte Änderung.","format":"date-time"}},"examples":[{"id":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","name":"Flexibel mit Frühstück","code":"FLEX-BB","description":"Flexible rate including breakfast.","roomTypeIds":["3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","7a1d9c3e-2b4f-4e6a-8c0d-1e2f3a4b5c6d"],"mealPlan":"breakfast","cancellationPolicy":{"summary":"Free cancellation until 7 days before arrival, then 80 %.","refundable":true,"freeCancellationHoursBefore":168},"active":true,"updatedAt":"2026-10-30T14:02:10.000Z"}]},"RatePlanPage":{"type":"object","x-stryk-java":"PartnerPage","description":"Rate plans.","x-stryk-description-de":"Tarife.","required":["data","nextCursor","hasMore"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RatePlan"},"description":"Items of this page, ordered by updatedAt ascending, then id.","x-stryk-description-de":"Einträge dieser Seite, aufsteigend nach updatedAt, dann id sortiert."},"nextCursor":{"type":["string","null"],"description":"Opaque cursor for the next page; null on the last page.","x-stryk-description-de":"Undurchsichtiger Cursor für die nächste Seite; null auf der letzten Seite."},"hasMore":{"type":"boolean","description":"True when another page exists.","x-stryk-description-de":"True, wenn eine weitere Seite existiert."}}},"AvailabilityDay":{"type":"object","description":"Availability of one room type on one night (date = night of arrival).","x-stryk-description-de":"Verfügbarkeit einer Zimmerkategorie in einer Nacht (date = Nacht der Anreise).","x-stryk-java":"PartnerAvailabilityDay","required":["roomTypeId","date","available","closed","minStay","closedToArrival","closedToDeparture"],"properties":{"roomTypeId":{"type":"string","format":"uuid"},"date":{"type":"string","description":"Night (hotel-local).","x-stryk-description-de":"Nacht (hotel-lokal).","format":"date"},"available":{"type":"integer","description":"Units still sellable for this night.","x-stryk-description-de":"Für diese Nacht noch verkaufbare Einheiten."},"closed":{"type":"boolean","description":"Closed for sale.","x-stryk-description-de":"Für den Verkauf geschlossen."},"minStay":{"type":"integer","description":"Minimum nights for arrivals on this date.","x-stryk-description-de":"Mindestaufenthalt in Nächten für Anreisen an diesem Datum."},"closedToArrival":{"type":"boolean","description":"No arrival on this date.","x-stryk-description-de":"Keine Anreise an diesem Datum."},"closedToDeparture":{"type":"boolean","description":"No departure on this date.","x-stryk-description-de":"Keine Abreise an diesem Datum."}}},"AvailabilityList":{"type":"object","description":"Availability per room type and date (inclusive range).","x-stryk-description-de":"Verfügbarkeit je Zimmerkategorie und Datum (Zeitraum einschließlich).","x-stryk-java":"PartnerAvailabilityList","required":["from","to","data"],"properties":{"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"data":{"type":"array","items":{"$ref":"#/components/schemas/AvailabilityDay"}}},"examples":[{"from":"2026-12-01","to":"2026-12-02","data":[{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","date":"2026-12-01","available":4,"closed":false,"minStay":2,"closedToArrival":false,"closedToDeparture":false},{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","date":"2026-12-02","available":3,"closed":false,"minStay":2,"closedToArrival":false,"closedToDeparture":true}]}]},"RateDay":{"type":"object","description":"One-night price for an arrival date at the standard occupancy of the room type.","x-stryk-description-de":"Preis einer Nacht für ein Anreisedatum bei der Standardbelegung der Zimmerkategorie.","x-stryk-java":"PartnerRateDay","required":["roomTypeId","ratePlanId","date","price","occupancy"],"properties":{"roomTypeId":{"type":"string","format":"uuid"},"ratePlanId":{"type":["string","null"],"description":"Null when no rate plan is sold through the API (base price).","x-stryk-description-de":"Null, wenn kein Tarif über die API verkauft wird (Grundpreis).","format":"uuid"},"date":{"type":"string","format":"date"},"price":{"allOf":[{"$ref":"#/components/schemas/Money"}],"description":"Accommodation price of one night.","x-stryk-description-de":"Übernachtungspreis einer Nacht."},"occupancy":{"type":"integer","description":"Guests the price refers to.","x-stryk-description-de":"Gäste, auf die sich der Preis bezieht."}}},"RateList":{"type":"object","description":"Daily rates (inclusive range).","x-stryk-description-de":"Tagespreise (Zeitraum einschließlich).","x-stryk-java":"PartnerRateList","required":["from","to","data"],"properties":{"from":{"type":"string","format":"date"},"to":{"type":"string","format":"date"},"data":{"type":"array","items":{"$ref":"#/components/schemas/RateDay"}}},"examples":[{"from":"2026-12-01","to":"2026-12-02","data":[{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","date":"2026-12-01","price":{"amount":"140.00","currency":"EUR"},"occupancy":2},{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","date":"2026-12-02","price":{"amount":"150.00","currency":"EUR"},"occupancy":2}]}]},"QuoteRequest":{"type":"object","description":"Stay to price.","x-stryk-description-de":"Zu bepreisender Aufenthalt.","x-stryk-java":"PartnerQuoteRequest","required":["checkIn","checkOut","roomTypeId","adults"],"properties":{"checkIn":{"type":"string","description":"Arrival (hotel-local), not before today.","x-stryk-description-de":"Anreise (hotel-lokal), nicht vor heute.","format":"date"},"checkOut":{"type":"string","description":"Departure, after checkIn (max. 365 nights).","x-stryk-description-de":"Abreise, nach checkIn (höchstens 365 Nächte).","format":"date"},"roomTypeId":{"type":"string","format":"uuid"},"ratePlanId":{"type":["string","null"],"description":"Optional rate plan sold through the API.","x-stryk-description-de":"Optionaler Tarif, der über die API verkauft wird.","format":"uuid"},"adults":{"type":"integer","description":"Adults (>= 1).","x-stryk-description-de":"Erwachsene (>= 1).","minimum":1},"childrenAges":{"type":"array","items":{"type":"integer","minimum":0,"maximum":17},"description":"Age of each child (0-17).","x-stryk-description-de":"Alter jedes Kindes (0-17)."},"discountCode":{"type":["string","null"],"description":"Hotel discount code.","x-stryk-description-de":"Rabattcode des Hotels.","maxLength":100}}},"TaxOrFee":{"type":"object","description":"Tax or fee of a stay.","x-stryk-description-de":"Steuer oder Gebühr eines Aufenthalts.","x-stryk-java":"PartnerTaxOrFee","required":["name","amount","included"],"properties":{"name":{"type":"string","description":"Label in the hotel language.","x-stryk-description-de":"Bezeichnung in der Hotelsprache."},"amount":{"$ref":"#/components/schemas/Money"},"included":{"type":"boolean","description":"True: already contained in accommodation; false: added on top in total.","x-stryk-description-de":"True: bereits in accommodation enthalten; false: kommt in total hinzu."}}},"NightlyPrice":{"type":"object","description":"Accommodation price of one night.","x-stryk-description-de":"Übernachtungspreis einer Nacht.","x-stryk-java":"PartnerNightlyPrice","required":["date","price"],"properties":{"date":{"type":"string","format":"date"},"price":{"$ref":"#/components/schemas/Money"}}},"QuoteReason":{"type":"object","description":"Why the stay cannot be booked.","x-stryk-description-de":"Warum der Aufenthalt nicht buchbar ist.","x-stryk-java":"PartnerQuoteReason","required":["code","message"],"properties":{"code":{"type":"string","description":"Reason code.","x-stryk-description-de":"Grundcode.","enum":["sold_out","min_stay_not_met","closed_to_arrival","closed_to_departure","rate_plan_not_applicable","not_bookable"]},"message":{"type":"string","description":"English explanation.","x-stryk-description-de":"Englische Erklärung."}}},"Quote":{"type":"object","description":"Price calculated exactly as a booking would be. Quotes are not stored and do not hold inventory.","x-stryk-description-de":"Preis, genau so berechnet wie bei einer Buchung. Angebote werden nicht gespeichert und reservieren kein Kontingent.","x-stryk-java":"PartnerQuote","required":["available","reasons","roomTypeId","ratePlanId","checkIn","checkOut","nights","total","accommodation","taxesAndFees","nightly","cancellationPolicy"],"properties":{"available":{"type":"boolean","description":"False: see reasons; prices are null.","x-stryk-description-de":"False: siehe reasons; Preise sind null."},"reasons":{"type":"array","items":{"$ref":"#/components/schemas/QuoteReason"}},"roomTypeId":{"type":"string","format":"uuid"},"ratePlanId":{"type":["string","null"],"format":"uuid"},"checkIn":{"type":"string","format":"date"},"checkOut":{"type":"string","format":"date"},"nights":{"type":"integer"},"total":{"oneOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Amount the booking will cost: accommodation plus taxes and fees not included.","x-stryk-description-de":"Was die Buchung kosten wird: Übernachtung plus nicht enthaltene Steuern und Gebühren."},"accommodation":{"oneOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Accommodation price after discounts.","x-stryk-description-de":"Übernachtungspreis nach Rabatten."},"taxesAndFees":{"type":"array","items":{"$ref":"#/components/schemas/TaxOrFee"}},"nightly":{"type":"array","items":{"$ref":"#/components/schemas/NightlyPrice"}},"cancellationPolicy":{"oneOf":[{"$ref":"#/components/schemas/CancellationPolicy"},{"type":"null"}]}},"examples":[{"available":true,"reasons":[],"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","checkIn":"2026-12-01","checkOut":"2026-12-04","nights":3,"total":{"amount":"447.60","currency":"EUR"},"accommodation":{"amount":"420.00","currency":"EUR"},"taxesAndFees":[{"name":"Ortstaxe","amount":{"amount":"7.60","currency":"EUR"},"included":false},{"name":"Endreinigung","amount":{"amount":"20.00","currency":"EUR"},"included":false}],"nightly":[{"date":"2026-12-01","price":{"amount":"140.00","currency":"EUR"}},{"date":"2026-12-02","price":{"amount":"140.00","currency":"EUR"}},{"date":"2026-12-03","price":{"amount":"140.00","currency":"EUR"}}],"cancellationPolicy":{"summary":"Free cancellation until 7 days before arrival, then 80 %.","refundable":true,"freeCancellationHoursBefore":168}}]},"BookingRoom":{"type":"object","description":"Booked room (one entry per room or stay segment).","x-stryk-description-de":"Gebuchtes Zimmer (ein Eintrag je Zimmer oder Aufenthaltsabschnitt).","x-stryk-java":"PartnerBookingRoom","required":["roomTypeId","unitId","ratePlanId","adults","children"],"properties":{"roomTypeId":{"type":"string","format":"uuid"},"unitId":{"type":["string","null"],"description":"Assigned unit.","x-stryk-description-de":"Zugewiesene Einheit.","format":"uuid"},"ratePlanId":{"type":["string","null"],"format":"uuid"},"adults":{"type":"integer"},"children":{"type":"integer"}}},"BookingGuest":{"type":"object","description":"Primary guest snapshot of the booking.","x-stryk-description-de":"Momentaufnahme des Hauptgasts der Buchung.","x-stryk-java":"PartnerBookingGuest","required":["id","firstName","lastName","email","phone"],"properties":{"id":{"type":["string","null"],"description":"Guest profile, if linked.","x-stryk-description-de":"Gästeprofil, falls verknüpft.","format":"uuid"},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"email":{"type":["string","null"]},"phone":{"type":["string","null"]}}},"BookingCancellation":{"type":"object","description":"Cancellation facts.","x-stryk-description-de":"Angaben zur Stornierung.","x-stryk-java":"PartnerBookingCancellation","required":["cancelledAt","fee"],"properties":{"cancelledAt":{"type":["string","null"],"format":"date-time"},"fee":{"oneOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Cancellation fee according to the hotel's policy.","x-stryk-description-de":"Stornogebühr gemäß den Bedingungen des Hotels."}}},"BookingStatus":{"type":"string","description":"Booking status.","x-stryk-description-de":"Buchungsstatus.","enum":["pending","tentative","confirmed","checked_in","checked_out","cancelled","no_show"]},"Booking":{"type":"object","description":"Booking.","x-stryk-description-de":"Buchung.","x-stryk-java":"PartnerBooking","required":["id","reference","status","channel","externalReference","checkIn","checkOut","nights","adults","children","childrenAges","rooms","guest","total","paid","outstanding","notes","cancellation","createdAt","updatedAt","version"],"properties":{"id":{"type":"string","format":"uuid"},"reference":{"type":"string","description":"Booking number shown to the hotel and the guest.","x-stryk-description-de":"Buchungsnummer, die Hotel und Gast sehen."},"status":{"$ref":"#/components/schemas/BookingStatus"},"channel":{"type":"string","description":"Sales path.","x-stryk-description-de":"Vertriebsweg.","enum":["direct","manual","channels","api"]},"externalReference":{"type":["string","null"],"description":"Partner reference (unique per hotel).","x-stryk-description-de":"Partnerreferenz (eindeutig je Hotel)."},"checkIn":{"type":"string","format":"date"},"checkOut":{"type":"string","format":"date"},"nights":{"type":"integer"},"adults":{"type":"integer"},"children":{"type":"integer"},"childrenAges":{"type":"array","items":{"type":"integer"}},"rooms":{"type":"array","items":{"$ref":"#/components/schemas/BookingRoom"}},"guest":{"$ref":"#/components/schemas/BookingGuest"},"total":{"allOf":[{"$ref":"#/components/schemas/Money"}],"description":"Booking total calculated by STRYK.","x-stryk-description-de":"Von STRYK berechneter Gesamtbetrag der Buchung."},"paid":{"allOf":[{"$ref":"#/components/schemas/Money"}],"description":"Settled amount (all payment paths).","x-stryk-description-de":"Beglichener Betrag (alle Zahlungswege)."},"outstanding":{"allOf":[{"$ref":"#/components/schemas/Money"}],"description":"total minus paid, never negative.","x-stryk-description-de":"Gesamtbetrag minus Zahlungen, nie negativ."},"notes":{"type":["string","null"]},"cancellation":{"oneOf":[{"$ref":"#/components/schemas/BookingCancellation"},{"type":"null"}]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"string","description":"ETag value without quotes.","x-stryk-description-de":"ETag-Wert ohne Anführungszeichen."}},"examples":[{"id":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","reference":"B-2026-01842","status":"confirmed","channel":"api","externalReference":"WEB-1234","checkIn":"2026-12-01","checkOut":"2026-12-04","nights":3,"adults":2,"children":1,"childrenAges":[6],"rooms":[{"roomTypeId":"3f6c2b1e-8d4a-4c1b-9e2f-5a7b8c9d0e1f","unitId":"c2d3e4f5-a6b7-4c8d-9e0f-1a2b3c4d5e6f","ratePlanId":"9e8d7c6b-5a49-4382-8170-6f5e4d3c2b1a","adults":2,"children":1}],"guest":{"id":"8f7e6d5c-4b3a-4291-8f0e-9d8c7b6a5f4e","firstName":"Anna","lastName":"Muster","email":"anna.muster@example.com","phone":"+43 660 1234567"},"total":{"amount":"447.60","currency":"EUR"},"paid":{"amount":"0.00","currency":"EUR"},"outstanding":{"amount":"447.60","currency":"EUR"},"notes":"Late arrival around 22:00.","cancellation":null,"createdAt":"2026-11-04T08:15:00.000Z","updatedAt":"2026-11-04T08:15:00.000Z","version":"7c1e2d3f4a5b6c7d8e9f0a1b"}]},"BookingPage":{"type":"object","x-stryk-java":"PartnerPage","description":"Bookings.","x-stryk-description-de":"Buchungen.","required":["data","nextCursor","hasMore"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Booking"},"description":"Items of this page, ordered by updatedAt ascending, then id.","x-stryk-description-de":"Einträge dieser Seite, aufsteigend nach updatedAt, dann id sortiert."},"nextCursor":{"type":["string","null"],"description":"Opaque cursor for the next page; null on the last page.","x-stryk-description-de":"Undurchsichtiger Cursor für die nächste Seite; null auf der letzten Seite."},"hasMore":{"type":"boolean","description":"True when another page exists.","x-stryk-description-de":"True, wenn eine weitere Seite existiert."}}},"GuestInput":{"type":"object","description":"Guest of a new booking.","x-stryk-description-de":"Gast einer neuen Buchung.","x-stryk-java":"PartnerGuestInput","required":["firstName","lastName","email"],"properties":{"firstName":{"type":"string","maxLength":120},"lastName":{"type":"string","maxLength":120},"email":{"type":"string","description":"Guest e-mail.","x-stryk-description-de":"E-Mail des Gasts.","format":"email","maxLength":255},"phone":{"type":["string","null"],"maxLength":50},"country":{"type":["string","null"],"description":"Residence country (ISO 3166-1 alpha-2).","x-stryk-description-de":"Wohnsitzland (ISO 3166-1 alpha-2).","pattern":"^[A-Z]{2}$"},"address":{"oneOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]}}},"BookingCreateRequest":{"type":"object","description":"New booking. STRYK calculates the price.","x-stryk-description-de":"Neue Buchung. STRYK berechnet den Preis.","x-stryk-java":"PartnerBookingCreateRequest","required":["roomTypeId","checkIn","checkOut","adults","guest"],"properties":{"roomTypeId":{"type":"string","format":"uuid"},"ratePlanId":{"type":["string","null"],"format":"uuid"},"checkIn":{"type":"string","format":"date"},"checkOut":{"type":"string","format":"date"},"adults":{"type":"integer","minimum":1},"childrenAges":{"type":"array","items":{"type":"integer","minimum":0,"maximum":17}},"guest":{"$ref":"#/components/schemas/GuestInput"},"notes":{"type":["string","null"],"maxLength":5000},"externalReference":{"type":["string","null"],"description":"Your reference, unique per hotel.","x-stryk-description-de":"Ihre Referenz, eindeutig je Hotel.","pattern":"^[A-Za-z0-9._:/#+-]{1,100}$"},"status":{"type":["string","null"],"description":"Initial status (default confirmed).","x-stryk-description-de":"Anfangsstatus (Standard confirmed).","enum":["confirmed","tentative",null]},"expectedTotal":{"oneOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}],"description":"Price you showed the guest; a mismatch returns 409 conflict with currentTotal.","x-stryk-description-de":"Preis, den Sie dem Gast gezeigt haben; eine Abweichung ergibt 409 conflict mit currentTotal."},"discountCode":{"type":["string","null"],"maxLength":100},"notifyGuest":{"type":["boolean","null"],"default":false,"description":"Send STRYK's standard booking confirmation to `guest.email` (default false). Uses the hotel's booking-confirmation template and default language; tentative bookings receive the \"booking received\" message instead. Sent once per booking, never again on an idempotent replay.","x-stryk-description-de":"Die Standard-Buchungsbestätigung von STRYK an `guest.email` senden (Standard false). Verwendet die Vorlage und Standardsprache des Hotels; vorläufige Buchungen (`tentative`) erhalten stattdessen die Eingangsbestätigung. Wird je Buchung einmal gesendet, bei einer idempotenten Wiederholung nie erneut."}}},"BookingGuestPatch":{"type":"object","description":"Guest contact fields of a booking.","x-stryk-description-de":"Kontaktfelder des Gasts einer Buchung.","x-stryk-java":"PartnerBookingGuestPatch","required":[],"properties":{"firstName":{"type":["string","null"],"maxLength":120},"lastName":{"type":["string","null"],"maxLength":120},"email":{"type":["string","null"],"format":"email"},"phone":{"type":["string","null"],"maxLength":50}}},"BookingUpdateRequest":{"type":"object","description":"Partial update. Omitted or null fields stay unchanged; externalReference \"\" removes it. Dates, room type and occupancy cannot be changed in v1.","x-stryk-description-de":"Teilweise Änderung. Ausgelassene oder null-Felder bleiben unverändert; externalReference \"\" entfernt sie. Daten, Zimmerkategorie und Belegung sind in v1 nicht änderbar.","x-stryk-java":"PartnerBookingUpdateRequest","required":[],"properties":{"guest":{"oneOf":[{"$ref":"#/components/schemas/BookingGuestPatch"},{"type":"null"}]},"notes":{"type":["string","null"],"maxLength":5000},"externalReference":{"type":["string","null"]}}},"BookingCancelRequest":{"type":"object","description":"Cancellation.","x-stryk-description-de":"Stornierung.","x-stryk-java":"PartnerBookingCancelRequest","required":[],"properties":{"reason":{"type":["string","null"],"description":"Reason for the hotel's log.","x-stryk-description-de":"Grund für das Protokoll des Hotels.","maxLength":500}}},"Guest":{"type":"object","description":"Guest profile (GDPR-minimal).","x-stryk-description-de":"Gästeprofil (DSGVO-minimal).","x-stryk-java":"PartnerGuest","required":["id","firstName","lastName","updatedAt","version"],"properties":{"id":{"type":"string","format":"uuid"},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"salutation":{"type":["string","null"]},"email":{"type":["string","null"]},"phone":{"type":["string","null"]},"country":{"type":["string","null"],"description":"ISO 3166-1 alpha-2.","x-stryk-description-de":"ISO 3166-1 alpha-2."},"address":{"oneOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"string","description":"ETag value without quotes.","x-stryk-description-de":"ETag-Wert ohne Anführungszeichen."}},"examples":[{"id":"8f7e6d5c-4b3a-4291-8f0e-9d8c7b6a5f4e","firstName":"Anna","lastName":"Muster","salutation":"Frau","email":"anna.muster@example.com","phone":"+43 660 1234567","country":"AT","address":{"street":"Hauptplatz 1","postalCode":"8010","city":"Graz","country":"AT"},"updatedAt":"2026-11-04T08:15:00.000Z","version":"3e4f5a6b7c8d9e0f1a2b3c4d"}]},"GuestPage":{"type":"object","x-stryk-java":"PartnerPage","description":"Guests.","x-stryk-description-de":"Gäste.","required":["data","nextCursor","hasMore"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Guest"},"description":"Items of this page, ordered by updatedAt ascending, then id.","x-stryk-description-de":"Einträge dieser Seite, aufsteigend nach updatedAt, dann id sortiert."},"nextCursor":{"type":["string","null"],"description":"Opaque cursor for the next page; null on the last page.","x-stryk-description-de":"Undurchsichtiger Cursor für die nächste Seite; null auf der letzten Seite."},"hasMore":{"type":"boolean","description":"True when another page exists.","x-stryk-description-de":"True, wenn eine weitere Seite existiert."}}},"GuestUpdateRequest":{"type":"object","description":"Partial update of contact fields; omitted or null fields stay unchanged.","x-stryk-description-de":"Teilweise Änderung der Kontaktfelder; ausgelassene oder null-Felder bleiben unverändert.","x-stryk-java":"PartnerGuestUpdateRequest","required":[],"properties":{"firstName":{"type":["string","null"],"maxLength":150},"lastName":{"type":["string","null"],"maxLength":200},"salutation":{"type":["string","null"],"maxLength":50},"email":{"type":["string","null"],"format":"email"},"phone":{"type":["string","null"],"maxLength":50},"country":{"type":["string","null"],"pattern":"^[A-Z]{2}$"},"address":{"oneOf":[{"$ref":"#/components/schemas/Address"},{"type":"null"}]}}},"Payment":{"type":"object","description":"Online payment processed by STRYK Payments.","x-stryk-description-de":"Onlinezahlung, abgewickelt über STRYK Payments.","x-stryk-java":"PartnerPayment","required":["id","status","method","amount","createdAt"],"properties":{"id":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["requires_action","authorized","captured","partially_refunded","refunded","failed","cancelled","expired","unknown"]},"method":{"type":"string","enum":["bank_transfer","provider_checkout","credit_card","paypal","google_pay","apple_pay","eps","point_of_sale","other"]},"amount":{"$ref":"#/components/schemas/Money"},"createdAt":{"type":"string","format":"date-time"}}},"PaymentStatus":{"type":"object","description":"Payment status of a booking.","x-stryk-description-de":"Zahlungsstatus einer Buchung.","x-stryk-java":"PartnerPaymentStatus","required":["bookingId","status","total","paid","outstanding","payments"],"properties":{"bookingId":{"type":"string","format":"uuid"},"status":{"type":"string","enum":["unpaid","partially_paid","paid","refunded","overpaid"]},"total":{"$ref":"#/components/schemas/Money"},"paid":{"$ref":"#/components/schemas/Money"},"outstanding":{"$ref":"#/components/schemas/Money"},"payments":{"type":"array","items":{"$ref":"#/components/schemas/Payment"},"description":"Online payments (max. 50). Front-desk payments are part of paid only.","x-stryk-description-de":"Onlinezahlungen (höchstens 50). Zahlungen an der Rezeption sind nur in paid enthalten."}},"examples":[{"bookingId":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","status":"partially_paid","total":{"amount":"447.60","currency":"EUR"},"paid":{"amount":"100.00","currency":"EUR"},"outstanding":{"amount":"347.60","currency":"EUR"},"payments":[{"id":"6e5d4c3b-2a19-4f8e-9d7c-6b5a4f3e2d1c","status":"captured","method":"credit_card","amount":{"amount":"100.00","currency":"EUR"},"createdAt":"2026-11-04T08:20:31.000Z"}]}]},"Invoice":{"type":"object","description":"Issued invoice, correction or credit note (never drafts).","x-stryk-description-de":"Ausgestellte Rechnung, Korrektur oder Gutschrift (nie Entwürfe).","x-stryk-java":"PartnerInvoice","required":["id","number","type","bookingId","status","issuedAt","total","net","tax","outstanding","updatedAt","version"],"properties":{"id":{"type":"string","format":"uuid"},"number":{"type":["string","null"],"description":"Invoice number.","x-stryk-description-de":"Rechnungsnummer."},"type":{"type":"string","enum":["invoice","correction","credit_note"]},"bookingId":{"type":["string","null"],"format":"uuid"},"status":{"type":"string","enum":["issued","partially_paid","paid","overdue","cancelled","credited"]},"issuedAt":{"type":["string","null"],"format":"date-time"},"total":{"allOf":[{"$ref":"#/components/schemas/Money"}],"description":"Gross amount.","x-stryk-description-de":"Bruttobetrag."},"net":{"$ref":"#/components/schemas/Money"},"tax":{"$ref":"#/components/schemas/Money"},"outstanding":{"$ref":"#/components/schemas/Money"},"updatedAt":{"type":"string","format":"date-time"},"version":{"type":"string","description":"ETag value without quotes.","x-stryk-description-de":"ETag-Wert ohne Anführungszeichen."}},"examples":[{"id":"1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d","number":"RE-2026-00412","type":"invoice","bookingId":"5b2e9f1c-7d3a-4e8b-a6c4-0f1e2d3c4b5a","status":"partially_paid","issuedAt":"2026-12-04T10:05:00.000Z","total":{"amount":"447.60","currency":"EUR"},"net":{"amount":"398.16","currency":"EUR"},"tax":{"amount":"49.44","currency":"EUR"},"outstanding":{"amount":"347.60","currency":"EUR"},"updatedAt":"2026-12-04T10:05:00.000Z","version":"5d6e7f8a9b0c1d2e3f4a5b6c"}]},"InvoicePage":{"type":"object","x-stryk-java":"PartnerPage","description":"Invoices.","x-stryk-description-de":"Rechnungen.","required":["data","nextCursor","hasMore"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Invoice"},"description":"Items of this page, ordered by updatedAt ascending, then id.","x-stryk-description-de":"Einträge dieser Seite, aufsteigend nach updatedAt, dann id sortiert."},"nextCursor":{"type":["string","null"],"description":"Opaque cursor for the next page; null on the last page.","x-stryk-description-de":"Undurchsichtiger Cursor für die nächste Seite; null auf der letzten Seite."},"hasMore":{"type":"boolean","description":"True when another page exists.","x-stryk-description-de":"True, wenn eine weitere Seite existiert."}}},"WebhookEvent":{"type":"object","description":"Thin event: names the changed object; fetch its current state through the REST API.","x-stryk-description-de":"Schlankes Ereignis: nennt das geänderte Objekt; den aktuellen Stand lesen Sie über die REST-API.","required":["id","type","apiVersion","createdAt","hotelId","data"],"properties":{"id":{"type":"string","description":"Event id (evt_<uuid>); deduplicate on it.","x-stryk-description-de":"Ereignis-ID (evt_<uuid>); deduplizieren Sie darüber.","pattern":"^evt_[0-9a-f-]{36}$"},"type":{"$ref":"#/components/schemas/WebhookEventType"},"apiVersion":{"type":"string","const":"v1"},"createdAt":{"type":"string","format":"date-time"},"hotelId":{"type":"string"},"data":{"type":"object","required":["object"],"properties":{"object":{"type":"string","enum":["booking","guest","availability","rate","payment","webhook"]},"id":{"type":"string","description":"Object id (booking, guest and webhook.test events).","x-stryk-description-de":"Objekt-ID (Ereignisse zu Buchung, Gast und webhook.test)."},"bookingId":{"type":"string","format":"uuid","description":"payment.updated: booking whose payment status changed; read GET /bookings/{bookingId}/payments.","x-stryk-description-de":"payment.updated: Buchung, deren Zahlungsstatus sich geändert hat; lesen Sie GET /bookings/{bookingId}/payments."},"changes":{"type":"array","items":{"type":"string","enum":["status","rooms","guest","details","deleted"]},"description":"booking.updated: changed areas (status, rooms, guest, details, deleted). Coalesced updates unite the areas.","x-stryk-description-de":"booking.updated: geänderte Bereiche (status, rooms, guest, details, deleted). Zusammengefasste Änderungen vereinen die Bereiche."},"roomTypeIds":{"type":"array","items":{"type":"string","format":"uuid"},"description":"availability/rate: affected room types.","x-stryk-description-de":"availability/rate: betroffene Zimmerkategorien."},"ratePlanIds":{"type":"array","items":{"type":"string","format":"uuid"},"description":"rate.changed after a rate plan change: affected rate plans.","x-stryk-description-de":"rate.changed nach einer Tarifänderung: betroffene Tarife."},"from":{"type":"string","description":"availability/rate: first affected date.","x-stryk-description-de":"availability/rate: erstes betroffenes Datum.","format":"date"},"to":{"type":"string","description":"availability/rate: last affected date.","x-stryk-description-de":"availability/rate: letztes betroffenes Datum.","format":"date"}}}}}}}}