Hoppa till innehåll

Udviklere

Webhooks — realtidshændelser fra Stayo

Abonnér på hændelser i Stayo i realtid: nye bookinger, ind- og udtjekninger, afbookinger og gennemførte betalinger. Signeret levering, testlevering, rotation af hemmeligheder og leveringshistorik.

Automatisk afsendelse

Hændelser sendes i realtid, når noget sker i Stayo — ingen polling-jobs eller planlægning.

Signerede leveringer

Hver payload signeres med HMAC-SHA256 og jeres signing secret, så I kan verificere, at kaldet kommer fra Stayo.

Rotér hemmeligheder

Rotér signing secret, når I vil, direkte fra /settings/webhooks — uden at miste historik.

Testlevering

Send en testhændelse til jeres endpoint med ét klik og verificér, at signatur og payload når frem.

Leveringshistorik

Se alle udgående kald med statuskode, tid, payload og svar. Fejlede leveringer kan afspilles igen.

Flere endpoints

Registrér flere URL'er per event — byg egne integrationer, driftsalarmer eller separate miljøer.

Hændelser

Abonnér per endpoint på de hændelser, I er interesserede i.

EventHvornår det sendes
booking.createdSendes når en ny booking oprettes — via reception, bookingsmotor eller ekstern kanal.
booking.checked_inSendes når en gæst tjekkes ind.
booking.checked_outSendes når en gæst tjekkes ud.
booking.cancelledSendes når en booking afbookes.
payment.succeededSendes når en betaling gennemføres (kort, Swish, faktura m.fl.).

Eksempel-payload

Alle webhooks sendes som POST med JSON. Signatur og event-type ligger i headers, så I kan route og verificere, før I tolker payload.

  • Stayo-Event — hændelsestype.
  • Stayo-Signature — timestamp + HMAC-SHA256.
  • Stayo-Delivery — unikt ID per levering (til idempotens).
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" }
    }
  }
}

Verificér signaturen

Beregn HMAC-SHA256 over {timestamp}.{rawBody} med jeres signing secret og sammenlign med v1 i Stayo-Signature. Brug en tidskonstant sammenligning.

Afvis kald, hvor tidsstemplet er ældre end et par minutter, for at beskytte mod replay.

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"),
  );
}

Håndtér webhooks i Stayo

Under Indstillinger → Webhooks i Stayo (/settings/webhooks) kan I:

  • Tilføje og fjerne endpoints per event.
  • Se og rotere signing secret.
  • Sende en testlevering til et endpoint.
  • Gennemse leveringshistorik med status og payload.
  • Afspille fejlede leveringer igen.
  • Pause et endpoint midlertidigt uden at miste konfigurationen.

Vil I bygge en integration mod Stayo?

Kombinér webhooks med vores offentlige API — vi hjælper jer i gang og giver adgang til OpenAPI-specifikation og testmiljø.