Zum Inhalt springen

Einstieg

Authentifizierung und Scopes

Jede Anfrage authentifiziert sich mit einem API-Schlüssel, der zu einem Hotel gehört und feste Scopes hat. Das Hotel entscheidet, welche Schlüssel es gibt, und kann sie jederzeit widerrufen.

Schlüssel senden

Sende den Schlüssel im Header Authorization mit dem Schema Bearer. Schlüssel in Query-Strings oder Request-Bodys werden nicht akzeptiert.

HTTP
GET /api/partner/v1/hotel HTTP/1.1
Host: app.staystryk.com
Authorization: Bearer stryk_live_Hq7bT2xa…
Accept: application/json

Format und Speicherung

Key format
stryk_live_Hq7bT2xaPm4kRw9sZc3NvE6yLu8fGd2jXb5tKq7h
└────────┘└──────┘└───────────────────────────────┘
  prefix   key prefix   remaining 32 characters
           (shown in STRYK)
  • Ein Schlüssel beginnt mit stryk_live_, gefolgt von 40 Zeichen aus einem Alphabet ohne leicht verwechselbare Zeichen (kein 0, O, 1, I, l, o).
  • STRYK zeigt den vollständigen Schlüssel genau einmal, beim Anlegen oder Rotieren. Danach ist nur das Präfix sichtbar (die ersten 8 Zeichen nach stryk_live_), damit du Schlüssel unterscheiden kannst.
  • STRYK speichert nur einen SHA-256-Hash. Niemand, auch nicht der STRYK-Support, kann einen verlorenen Schlüssel erneut anzeigen. Rotiere ihn stattdessen.
  • Behandle Schlüssel wie Passwörter: nicht loggen, nicht per E-Mail oder Chat versenden.

Rotation, Widerruf und Ablauf

AktionWirkung
RotierenSTRYK erzeugt einen neuen Schlüssel mit gleichem Namen, gleichen Scopes, gleicher IP-Allowlist, gleichem Ablauf und gleicher Rate-Limit-Stufe und zeigt ihn einmal an. Das Hotel wählt dabei, wie lange der alte Schlüssel noch gilt: standardmäßig 24 Stunden (Status „Läuft bald ab“), danach erhält er 401 unauthorized, oder sofort widerrufen.
WiderrufenDer Schlüssel funktioniert ab sofort nicht mehr. Anfragen erhalten 401 unauthorized.
AblaufdatumOptional, höchstens drei Jahre in der Zukunft. Danach erhalten Anfragen 401 key_expired.

Für einen Wechsel ohne Unterbrechung rotiert das Hotel mit 24 Stunden Überlappung: Stelle den neuen Schlüssel innerhalb dieser Zeit bereit und prüfe ihn mit GET /me; der alte funktioniert bis dahin weiter. Wurde ein Schlüssel offengelegt, rotiert das Hotel mit Sofort widerrufen oder widerruft ihn direkt.

IP-Allowlist

Ein Schlüssel lässt sich auf bis zu 20 IPv4- oder IPv6-Adressen oder CIDR-Bereiche beschränken, etwa 203.0.113.10 oder 2001:db8::/48. Anfragen von anderen Adressen erhalten 403 ip_not_allowed. Nutze das, wenn deine Server feste ausgehende Adressen haben.

Scopes

Scopes legen fest, welche Endpunkte ein Schlüssel aufrufen darf. Schreiben schließt Lesen ein: bookings:write erlaubt auch alle bookings:read-Endpunkte; STRYK speichert beide. Rechnungen sind Fiskalbelege und bleiben nur lesbar. Ein Aufruf außerhalb der Scopes erhält 403 insufficient_scope.

ScopeErlaubtEndpunkte
property:readHotelprofil, Zimmerkategorien und Einheiten
property:writeReinigungsstatus einer Einheit setzen
availability:readFreie Einheiten und Restriktionen je Tag
availability:writeSchließungen, Kontingente und An-/Abreisesperren anlegen und löschen
rates:readRaten, Tagespreise und Angebote
rates:writeTagespreise setzen und zurücksetzen
bookings:readBuchungen auflisten und lesen
bookings:writeBuchungen anlegen, ändern und stornieren
guests:readGastkontaktdaten auflisten und lesen
guests:writeGastkontaktdaten ändern
payments:readZahlungsstatus einer Buchung
payments:writeÜberweisung auf eine ausgestellte Rechnung buchen (keine Bar- oder Kartenzahlung)
invoices:readFinalisierte Rechnungen

GET /me und GET /webhook-event-types funktionieren mit jedem gültigen Schlüssel.

Response, 403
{
  "type": "https://staystryk.com/developers/errors#insufficient_scope",
  "title": "Insufficient scope",
  "status": 403,
  "detail": "This key needs the scope bookings:write.",
  "instance": "/api/partner/v1/bookings",
  "code": "insufficient_scope",
  "requestId": "0c8e7d6f-5a4b-4c3d-9e2f-1a0b9c8d7e6f"
}

Hotel und Modul

Das Hotel ergibt sich allein aus dem Schlüssel; es gibt keinen Hotel-Parameter. Das Hotel muss aktiv sein und das Modul Kanäle freigeschaltet haben, sonst erhalten Anfragen 403 module_disabled.