Hoppa till innehåll

Utvecklare

Webhooks — realtidshändelser från Stayo

Prenumerera på händelser i Stayo i realtid: nya bokningar, in- och utcheckningar, avbokningar och lyckade betalningar. Signerad leverans, testleverans, hemlighetsrotation och leveranshistorik.

Automatisk dispatch

Händelser skickas i realtid när något händer i Stayo — inga pollingjobb eller schemaläggning.

Signerade leveranser

Varje payload signeras med HMAC-SHA256 och er signing secret så ni kan verifiera att anropet kommer från Stayo.

Rotera hemligheter

Rotera signing secret när ni vill direkt från /settings/webhooks — utan att tappa historik.

Testleverans

Skicka en testhändelse till er endpoint med ett klick och verifiera att signatur och payload kommer fram.

Leveranshistorik

Se alla utgående anrop med statuskod, tid, payload och svar. Felade leveranser kan spelas om.

Flera endpoints

Registrera flera URL:er per event — bygg egna integrationer, driftlarm eller separata miljöer.

Händelser

Prenumerera per endpoint på de händelser ni är intresserade av.

EventNär det skickas
booking.createdSkickas när en ny bokning skapas — via reception, bokningsmotor eller extern kanal.
booking.checked_inSkickas när en gäst checkas in.
booking.checked_outSkickas när en gäst checkas ut.
booking.cancelledSkickas när en bokning avbokas.
payment.succeededSkickas när en betalning genomförs (kort, Swish, faktura m.fl.).

Exempel-payload

Alla webhooks skickas som POST med JSON. Signatur och event-typ ligger i headers, så ni kan routa och verifiera innan ni tolkar payload.

  • Stayo-Event — händelsetyp.
  • Stayo-Signature — timestamp + HMAC-SHA256.
  • Stayo-Delivery — unikt ID per leverans (för 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" }
    }
  }
}

Verifiera signaturen

Räkna ut HMAC-SHA256 över {timestamp}.{rawBody} med er signing secret och jämför med v1 i Stayo-Signature. Använd en tidskonstant jämförelse.

Avvisa anrop där tidsstämpeln är äldre än några minuter för att skydda 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"),
  );
}

Hantera webhooks i Stayo

Under Inställningar → Webhooks i Stayo (/settings/webhooks) kan ni:

  • • Lägga till och ta bort endpoints per event.
  • • Se och rotera signing secret.
  • • Skicka en testleverans till en endpoint.
  • • Bläddra i leveranshistorik med status och payload.
  • • Spela om felade leveranser.
  • • Pausa en endpoint tillfälligt utan att förlora konfiguration.

Vill ni bygga en integration mot Stayo?

Kombinera webhooks med vårt publika API — vi hjälper er igång och ger tillgång till OpenAPI-specifikation och testmiljö.