Parität für Buchungsmaschinen und Hotelgruppen.
Wir vergleichen den Direktpreis jedes Hotels mit Booking.com, Expedia und den Anbietern bei Google Hotels, die es beobachtet. Stimmen zwei Google-Abrufe überein, kommt die Preisabweichung in die Warteschlange dieses Hotels. Der signierte Webhook unten ist dokumentiert, aber noch nicht in Betrieb.
Content-Type: application/json
webhook-id: ns4k8w2q7c1m9x5t3h6v0b2r8d7f4j1g
webhook-timestamp: 1791547324
webhook-signature: v1,Xq0c…e21a=
{
"version": 3,
"id": "ns4k8w2q7c1m9x5t3h6v0b2r8d7f4j1g",
"event": "disparity.opened",
"disparityId": "jn7cq2b1x9d8w4fzr3m6kt5v0h7s2e8a",
"hotel": { "id": "kd72mbx0vy4p9s1c6tqh8wf3gr5n2j7e", "name": "Hotel Aurora" },
"ota": "booking",
"stayDate": "2026-10-16",
"occupancy": 2,
"directPriceEurMinor": 18800,
"otaPriceEurMinor": 17900,
"deltaEurMinor": 900,
"deltaPct": 4.79,
"trust": "confirmed",
"findingKind": "rate_disparity",
"evidence": { … },
"detectedAt": "2026-10-09T12:02:00.000Z"
}Beispielwerte. Das Hotel Aurora ist frei erfunden.
An keine bestimmte Buchungsmaschine (IBE) gebunden. BON ist die erste, deren Preise wir direkt abrufen. Hotels mit jeder anderen sind schon heute abgedeckt.
Direkt aus der Buchungsmaschine
Haben wir eine Anbindung an die Buchungsmaschine eines Hotels, rufen wir seinen Direktpreis so ab, wie ein Gast ihn auf der eigenen Website des Hotels sieht. BON ist die erste.
Oder über Google Hotels
Für ein Hotel mit einer anderen Buchungsmaschine nehmen wir den Preis, den Google Hotels für seine offizielle Website zeigt. Installiert wird nichts, und wir brauchen keinen Zugriff auf die Buchungsmaschine.
Die nächste Buchungsmaschine
Für jede Buchungsmaschine kommt nur eine Anbindung hinzu; Prüfungen und Alarme bleiben dieselben. Entwickeln Sie eine Buchungsmaschine oder einen Channel-Manager, sprechen Sie mit uns: Ihr System könnte das nächste sein.
Ein signiertes Ereignis, sobald eine bestätigte Preisabweichung neu auftritt. Sobald der Webhook in Betrieb ist, geht es als JSON an den eigenen Endpunkt jedes Hotels, mit der Versionsnummer als erstem Feld.
Die Felder
- version
- Heute immer 3. Innerhalb dieser Version können Felder hinzukommen, ignorieren Sie also alle, die Sie nicht kennen.
- id
- Die ID dieser Zustellung. Jeder erneute Versuch trägt dieselbe, im Body und im Header webhook-id. Daran erkennen Sie Wiederholungen und können sie überspringen.
- event
- Immer disparity.opened: eine neue Preisabweichung. Ein anderes Ereignis gibt es nicht.
- disparityId
- Die ID der Preisabweichung.
- hotel
- ID und Name des Hotels in StayParity.
- ota
- Der Kanal als Slug in Kleinbuchstaben: booking, expedia oder der Anbieter, den Google Hotels aufgeführt hat.
- stayDate
- Die Nacht im Format YYYY-MM-DD.
- occupancy
- Die Zahl der Gäste.
- directPriceEurMinor
- Der Direktpreis des Hotels, in Euro-Cent.
- otaPriceEurMinor
- Der Preis des Kanals, in Euro-Cent.
- deltaEurMinor
- Um wie viel der Kanal günstiger ist, in Euro-Cent.
- deltaPct
- Dieselbe Differenz in Prozent des Direktpreises, auf zwei Nachkommastellen.
- trust
- confirmed, wenn der Preis auf der eigenen Seite des Kanals abgerufen wurde; seen_twice, wenn zwei Abrufe bei Google Hotels im Abstand von mindestens 30 Minuten auf derselben Grundlage Preise ergaben, die höchstens 1 % voneinander abweichen.
- reason
- now_over_threshold, wenn eine Preisabweichung, die unterhalb Ihrer Schwellenwerte schon offen war, diese inzwischen überschritten hat. Bei einer neuen fehlt das Feld.
- findingKind
- Immer rate_disparity: dasselbe Zimmer zu denselben Bedingungen, beim Anbieter günstiger.
- evidence
- Der erste und der neueste Abruf der Preisabweichung, jeweils mit beiden Angeboten, wie sie abgerufen wurden: Preis, Quelle, Zeitpunkt, Zimmer, Verpflegung und Stornierungsbedingungen.
- detectedAt
- Wann die Preisabweichung zuerst gesehen wurde, in UTC.
Wie er zugestellt wird
- Ein POST mit Content-Type application/json an eine öffentliche https-URL
- Zugestellt ist er, sobald Ihr Endpunkt innerhalb von 10 Sekunden mit 2xx antwortet
- Bei 5xx oder einer Zeitüberschreitung folgt ein erneuter Versuch, mit jeweils längerer Wartezeit
- Ein 4xx gilt als Ablehnung und wird nicht wiederholt
- Weiterleitungen werden nicht verfolgt, geben Sie also die endgültige URL an
Welche Preisabweichungen gesendet werden
- Die Alarmregel jedes Hotels legt die Mindestdifferenz fest, in Euro und in Prozent
- Preisabweichungen bei den Anbietern, die das Hotel beobachtet, sobald sie auf der eigenen Seite des Anbieters bestätigt sind. Eine nur bei Google gesehene bleibt in der Warteschlange und in der Zusammenfassung per E-Mail
- Ein Ereignis pro Preisabweichung, wenn sie neu auftritt, und keines mehr, solange sie offen bleibt
- Jedes Hotel kann an einen eigenen Endpunkt senden, oder mehrere Hotels an denselben
HMAC-SHA256 über die ID, den Zeitstempel und den unveränderten Body. Sie folgt Standard Webhooks, daher kann die offizielle Bibliothek sie in den meisten Programmiersprachen prüfen.
webhook-id: <the payload's id>
webhook-timestamp: <unix seconds>
webhook-signature: v1,<base64 HMAC‑SHA256>- 1Lesen Sie drei Header: webhook-id, webhook-timestamp in Unix-Sekunden und webhook-signature, bestehend aus v1, einem Komma und der Signatur in Base64.
- 2Berechnen Sie HMAC-SHA256 über die ID, einen Punkt, den Zeitstempel, einen Punkt und dann den Body genau so, wie er ankam. Als Schlüssel dient Ihr Signaturschlüssel ohne das Präfix whsec_, aus Base64 dekodiert.
- 3Vergleichen Sie beide in konstanter Zeit und lehnen Sie einen Zeitstempel ab, der zu weit von der aktuellen Zeit abweicht, damit eine abgefangene Anfrage nicht erneut gesendet werden kann.
- 4Jeder erneute Versuch behält seine webhook-id und wird mit eigenem Zeitstempel neu signiert.
Ein Signaturschlüssel pro Konto signiert die Zustellungen aller Hotels. Ein Kontoadmin erstellt ihn im Portal und sieht ihn nur einmal; ein neuer ersetzt den bisherigen.
Prüfung in Node.js
import { createHmac, timingSafeEqual } from "node:crypto";
// Or let the official library do it: npm install standardwebhooks, then
// new Webhook(secret).verify(rawBody, headers) throws unless it checks out.
// rawBody: the request body exactly as it arrived, before JSON.parse.
// headers: the request headers, with Node's lower-case names.
// secret: your whole signing secret, whsec_ prefix included.
function verify(rawBody, headers, secret, toleranceSeconds = 300) {
const id = headers["webhook-id"];
const timestamp = Number(headers["webhook-timestamp"]);
if (!id || !Number.isInteger(timestamp)) return false;
if (Math.abs(Date.now() / 1000 - timestamp) > toleranceSeconds) return false;
const key = Buffer.from(secret.replace(/^whsec_/, ""), "base64");
const expected = createHmac("sha256", key).update(`${id}.${timestamp}.${rawBody}`).digest();
return String(headers["webhook-signature"] ?? "").split(" ").some((entry) => {
const [version, signature = ""] = entry.split(",", 2);
const given = Buffer.from(signature, "base64");
return version === "v1" && given.length === expected.length && timingSafeEqual(given, expected);
});
}Alle Hotels in einem Konto. Für eine Hotelgruppe oder für die Hotels, die Sie uns als Partner bringen.
Jedes Hotel mit eigener Warteschlange
Jedes Hotel hat seine eigenen Preisabweichungen und seine eigene Alarmregel, und im Portal wechseln Sie zwischen den Hotels.
Ihr Team mit Rollen
Kontoadmins verwalten das Team und den Signaturschlüssel. Mitglieder bearbeiten die Warteschlange und richten die Alarme ein.
Von uns eingerichtet
Unser Team legt jedes Hotel, seine Alarmregel und die Zugänge Ihres Teams an. Ihre Hotels müssen nichts installieren.
Empfehlen Sie uns Ihre Hotels oder verkaufen Sie StayParity weiter. Sagen Sie uns, wie Sie mit Hotels zusammenarbeiten, dann vereinbaren wir die Bedingungen gemeinsam.
Empfehlen
Stellen Sie uns die Hotels vor, mit denen Sie arbeiten. Wir richten sie ein und betreuen sie.
Weiterverkaufen
Bieten Sie Ihren Hotels StayParity als Teil dessen an, was Sie ihnen schon verkaufen.
Was Partner zuerst fragen. Alles andere fragen Sie uns einfach.
Nein. BON ist die erste Buchungsmaschine, deren Preise wir direkt abrufen, aber keine Voraussetzung. Für ein Hotel mit einer anderen Buchungsmaschine nehmen wir den Preis, den Google Hotels für seine offizielle Website zeigt.
Heute über die Warteschlange jedes Hotels und seine tägliche oder wöchentliche Zusammenfassung per E-Mail. Sobald der Webhook in Betrieb ist, sendet er jede bestätigte Preisabweichung an Ihren Endpunkt, wenn sie neu auftritt. Brauchen Sie etwas, das er nicht enthält, sagen Sie es uns.
Für die Prüfungen und Alarme nichts. Das Direktbuchungs-Badge ist ein einziges Script-Tag auf der eigenen Website des Hotels, und das nur, wenn das Hotel das Badge möchte.
Finden Sie heraus, was die OTAs heute Nacht für Ihre Zimmer verlangen.
Ohne Karte, ohne Installation. Die nächsten 30 Nächte, gegen jeden Anbieter bei Google Hotels.