Hoppa till innehåll

Utviklere

Webhooks — sanntidshendelser fra Stayo

Abonner på hendelser i Stayo i sanntid: nye bookinger, inn- og utsjekkinger, avbookinger og vellykkede betalinger. Signert levering, testlevering, rotasjon av hemmeligheter og leveringshistorikk.

Automatisk utsending

Hendelser sendes i sanntid når noe skjer i Stayo — ingen pollingjobber eller planlegging.

Signerte leveranser

Hver payload signeres med HMAC-SHA256 og deres signing secret slik at dere kan verifisere at kallet kommer fra Stayo.

Roter hemmeligheter

Roter signing secret når dere vil direkte fra /settings/webhooks — uten å miste historikk.

Testlevering

Send en testhendelse til endepunktet deres med ett klikk og verifiser at signatur og payload kommer frem.

Leveringshistorikk

Se alle utgående kall med statuskode, tid, payload og svar. Feilede leveranser kan spilles om.

Flere endepunkter

Registrer flere URL-er per event — bygg egne integrasjoner, driftsalarmer eller separate miljøer.

Hendelser

Abonner per endepunkt på hendelsene dere er interessert i.

EventNår det sendes
booking.createdSendes når en ny booking opprettes — via resepsjon, bookingsmotor eller ekstern kanal.
booking.checked_inSendes når en gjest sjekkes inn.
booking.checked_outSendes når en gjest sjekkes ut.
booking.cancelledSendes når en booking avbookes.
payment.succeededSendes når en betaling gjennomføres (kort, Swish, faktura m.fl.).

Eksempel-payload

Alle webhooks sendes som POST med JSON. Signatur og event-type ligger i headers, slik at dere kan rute og verifisere før dere tolker payload.

  • Stayo-Event — hendelsestype.
  • Stayo-Signature — timestamp + HMAC-SHA256.
  • Stayo-Delivery — unik ID per levering (for 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" }
    }
  }
}

Verifiser signaturen

Regn ut HMAC-SHA256 over {timestamp}.{rawBody} med deres signing secret og sammenlign med v1 i Stayo-Signature. Bruk en tidskonstant sammenligning.

Avvis kall der tidsstempelet er eldre enn noen minutter for å beskytte mot 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åndter webhooks i Stayo

Under Innstillinger → Webhooks i Stayo (/settings/webhooks) kan dere:

  • Legge til og fjerne endepunkter per event.
  • Se og rotere signing secret.
  • Sende en testlevering til et endepunkt.
  • Bla i leveringshistorikk med status og payload.
  • Spille om feilede leveranser.
  • Pause et endepunkt midlertidig uten å miste konfigurasjonen.

Vil dere bygge en integrasjon mot Stayo?

Kombiner webhooks med vårt offentlige API — vi hjelper dere i gang og gir tilgang til OpenAPI-spesifikasjon og testmiljø.