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.
| Event | Hvornår det sendes |
|---|---|
| booking.created | Sendes når en ny booking oprettes — via reception, bookingsmotor eller ekstern kanal. |
| booking.checked_in | Sendes når en gæst tjekkes ind. |
| booking.checked_out | Sendes når en gæst tjekkes ud. |
| booking.cancelled | Sendes når en booking afbookes. |
| payment.succeeded | Sendes 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ø.