Hoppa till innehåll

Entwickler

Webhooks – Echtzeit-Events aus Stayo

Abonnieren Sie Events aus Stayo in Echtzeit: neue Buchungen, An- und Abreisen, Stornierungen und erfolgreiche Zahlungen. Signierte Zustellung, Testzustellung, Secret-Rotation und Zustellhistorie.

Automatischer Versand

Events werden in Echtzeit gesendet, wenn etwas in Stayo passiert – kein Polling und keine Zeitplanung nötig.

Signierte Zustellungen

Jede Payload ist mit HMAC-SHA256 und Ihrem Signing-Secret signiert, damit Sie prüfen können, dass der Aufruf von Stayo stammt.

Secret-Rotation

Erneuern Sie das Signing-Secret jederzeit direkt unter /settings/webhooks – ohne die Historie zu verlieren.

Testzustellung

Senden Sie mit einem Klick ein Test-Event an Ihren Endpunkt und prüfen Sie, dass Signatur und Payload korrekt ankommen.

Zustellhistorie

Sehen Sie alle ausgehenden Aufrufe mit Statuscode, Zeit, Payload und Antwort. Fehlgeschlagene Zustellungen können erneut abgespielt werden.

Mehrere Endpunkte

Registrieren Sie mehrere URLs pro Event – bauen Sie eigene Integrationen, Betriebsalarme oder getrennte Umgebungen.

Events

Abonnieren Sie pro Endpunkt die Events, die Sie interessieren.

EventWann es gesendet wird
booking.createdWird gesendet, wenn eine neue Buchung erstellt wird – über Rezeption, Buchungsmaschine oder einen externen Kanal.
booking.checked_inWird gesendet, wenn ein Gast eingecheckt wird.
booking.checked_outWird gesendet, wenn ein Gast ausgecheckt wird.
booking.cancelledWird gesendet, wenn eine Buchung storniert wird.
payment.succeededWird gesendet, wenn eine Zahlung abgeschlossen ist (Karte, Swish, Rechnung usw.).

Beispiel-Payload

Alle Webhooks werden als POST mit JSON gesendet. Signatur und Event-Typ stehen in den Headern, damit Sie routen und verifizieren können, bevor Sie die Payload interpretieren.

  • Stayo-Event – der Event-Typ.
  • Stayo-Signature – Timestamp + HMAC-SHA256.
  • Stayo-Delivery – eindeutige ID pro Zustellung (für Idempotenz).
POST https://din-app.example.com/stayo/webhook
Content-Type: application/json
Stayo-Event: booking.created
Stayo-Signature: t=1737200000,v1=9f2c...ab12
Stayo-Delivery: whd_01HXYZ...

{
  "id": "evt_01HXYZ...",
  "type": "booking.created",
  "created": "2026-08-12T09:14:22Z",
  "data": {
    "booking": {
      "id": "bk_01HXYZ...",
      "status": "confirmed",
      "channel": "direct",
      "arrival": "2026-08-20",
      "departure": "2026-08-23",
      "guest": { "name": "Anna Andersson", "email": "anna@example.com" },
      "total": { "amount": 4200, "currency": "SEK" }
    }
  }
}

Signatur verifizieren

Berechnen Sie HMAC-SHA256 von {timestamp}.{rawBody} mit Ihrem Signing-Secret und vergleichen Sie mit v1 in Stayo-Signature. Verwenden Sie einen Constant-Time-Vergleich.

Lehnen Sie Aufrufe ab, deren Zeitstempel älter als ein paar Minuten ist, um sich gegen Replay zu schützen.

import crypto from "node:crypto";

export function verifyStayoSignature(
  rawBody: string,
  header: string,
  secret: string,
) {
  const [tPart, v1Part] = header.split(",");
  const timestamp = tPart.split("=")[1];
  const signature = v1Part.split("=")[1];

  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${timestamp}.${rawBody}`)
    .digest("hex");

  return crypto.timingSafeEqual(
    Buffer.from(signature, "hex"),
    Buffer.from(expected, "hex"),
  );
}

Webhooks in Stayo verwalten

Unter Einstellungen → Webhooks in Stayo (/settings/webhooks) können Sie:

  • Endpunkte pro Event hinzufügen und entfernen.
  • Das Signing-Secret ansehen und erneuern.
  • Eine Testzustellung an einen Endpunkt senden.
  • Die Zustellhistorie mit Status und Payload durchsuchen.
  • Fehlgeschlagene Zustellungen erneut abspielen.
  • Einen Endpunkt vorübergehend pausieren, ohne die Konfiguration zu verlieren.

Möchten Sie eine Integration mit Stayo bauen?

Kombinieren Sie Webhooks mit unserer öffentlichen API – wir helfen Ihnen beim Einstieg und geben Ihnen Zugang zur OpenAPI-Spezifikation und einer Testumgebung.