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.
GET /api/partner/v1/hotel HTTP/1.1
Host: app.staystryk.com
Authorization: Bearer stryk_live_Hq7bT2xa…
Accept: application/jsonFormat und Speicherung
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 (kein0,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
| Aktion | Wirkung |
|---|---|
| Rotieren | STRYK 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. |
| Widerrufen | Der Schlüssel funktioniert ab sofort nicht mehr. Anfragen erhalten 401 unauthorized. |
| Ablaufdatum | Optional, 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.
| Scope | Erlaubt | Endpunkte |
|---|---|---|
property:read | Hotelprofil, Zimmerkategorien und Einheiten | |
property:write | Reinigungsstatus einer Einheit setzen | |
availability:read | Freie Einheiten und Restriktionen je Tag | |
availability:write | Schließungen, Kontingente und An-/Abreisesperren anlegen und löschen | |
rates:read | Raten, Tagespreise und Angebote | |
rates:write | Tagespreise setzen und zurücksetzen | |
bookings:read | Buchungen auflisten und lesen | |
bookings:write | Buchungen anlegen, ändern und stornieren | |
guests:read | Gastkontaktdaten auflisten und lesen | |
guests:write | Gastkontaktdaten ändern | |
payments:read | Zahlungsstatus einer Buchung | |
payments:write | Überweisung auf eine ausgestellte Rechnung buchen (keine Bar- oder Kartenzahlung) | |
invoices:read | Finalisierte Rechnungen |
GET /me und GET /webhook-event-types funktionieren mit jedem gültigen Schlüssel.
{
"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.