Skip to content
Anmelden
Veridien Docs

Ratenverwaltung

Die Katalog- und Angebots-Endpunkte sind schreibgeschützt. Diese Endpunkte lassen eine Integration den Ratenaufbau verwalten: Ratenpläne anlegen, Saisonpreise darüberlegen, Inklusivleistungen und Guthaben bündeln und Promotions mit Codes fahren. So steuert ein Hotel seine Veridien-Preise von der eigenen Website oder aus dem Back Office.

Jeder Endpunkt hier verlangt den Scope rates:write, außer den lesenden Verwaltungsaufrufen (GET), die rates:read verlangen.

Eine Promotion ist ein Ratenplan

Eine Promotion ist ein Ratenplan mit kind: "promotion" und einer Ableitung von einem Basisplan. Es gibt keinen eigenen Promotion-Endpunkt: Sie legen eine über dieselben /rate-plans-Endpunkte an und bearbeiten sie dort, indem Sie kind, derived_from_id, derivation_type und derivation_value setzen.

Idempotenz

Jeder Schreibvorgang hier ist eine ändernde Anfrage. Senden Sie einen Idempotency-Key-Header, damit Wiederholungen sicher sind, wie unter Konventionen beschrieben.


POST /rate-plans
FeldErforderlichHinweise
room_type_idjaDer Zimmertyp, den dieser Plan bepreist.
namejaInterner Name (1 bis 100 Zeichen).
base_pricejaNachtpreis als Dezimalzeichenkette, zum Beispiel "120.00".
currencyneinMuss die Basiswährung der Unterkunft oder eine konfigurierte Währung sein. Standard ist die Basiswährung.
public_nameneinName für den Gast.
descriptionneinKurztext für den Gast.
image_urlneinAbsolute URL.
extra_guest_chargeneinAufpreis pro Nacht und Gast über der Basisbelegung. Standard "0.00".
single_guest_discountneinStandard "0.00".
single_guest_discount_typeneinfixed oder percent. Standard fixed.
min_los / max_losneinGrenzen der Aufenthaltsdauer in Nächten.
booking_window_start / _endneinWann der Plan gebucht werden darf (YYYY-MM-DD).
stay_window_start / _endneinWann der Plan bewohnt werden darf.
active_for_booking_engineneinStandard false.
active_for_channelsneinStandard false.
kindneinstandard (Standard) oder promotion.
derived_from_idneinBei einer Promotion: der Basisplan, von dem sie abgeleitet ist.
derivation_typeneinpercent, fixed oder perPerson. Zusammen mit derived_from_id erforderlich.
derivation_valueneinDezimalzeichenkette mit Vorzeichen. Negativ ist ein Rabatt, zum Beispiel "-20.00". Zusammen mit derived_from_id erforderlich.
curl -X POST "$VRDN_BASE/rate-plans" \
  -H "Authorization: Bearer $VRDN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "room_type_id": "9b2f6c3e-8d1a-4f5b-a7c9-4e0d2b8f1a63",
    "name": "Bed & Breakfast",
    "base_price": "120.00",
    "public_name": "Bed & Breakfast",
    "description": "A full breakfast for two each morning.",
    "active_for_booking_engine": true
  }'
{ "rate_plan_id": "5c1e8f4a-2b7d-4a9c-8e6f-1d3b9a5c7e02" }

Setzen Sie kind, den übergeordneten Plan und eine negative Ableitung. Legen Sie sie hinter einen Code, indem Sie einen anlegen (siehe unten) und requires_promo_code: true setzen.

curl -X POST "$VRDN_BASE/rate-plans" \
  -H "Authorization: Bearer $VRDN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "room_type_id": "9b2f6c3e-8d1a-4f5b-a7c9-4e0d2b8f1a63",
    "name": "Advance Purchase, save 20%",
    "base_price": "120.00",
    "kind": "promotion",
    "derived_from_id": "5c1e8f4a-2b7d-4a9c-8e6f-1d3b9a5c7e02",
    "derivation_type": "percent",
    "derivation_value": "-20.00",
    "active_for_booking_engine": true
  }'

Ein abgeleiteter Plan braucht sowohl derivation_type als auch derivation_value, sonst wird die Anfrage abgelehnt. Sein Preis ist immer der aktuelle Preis des übergeordneten Plans mit angewandter Ableitung, er folgt dessen Saisonpreisen also automatisch.

PATCH /rate-plans/{id}

Senden Sie nur die Felder, die Sie ändern wollen. Akzeptiert dieselben Felder wie beim Anlegen (außer room_type_id), dazu is_active.

{ "rate_plan_id": "5c1e8f4a-2b7d-4a9c-8e6f-1d3b9a5c7e02", "updated": true }

DELETE /rate-plans/{id}

Der Standard-Ratenplan lässt sich nicht löschen (403). Reservierungen, die bereits auf einem gelöschten Plan gebucht wurden, behalten den Preis, der ihnen genannt wurde.

{ "rate_plan_id": "5c1e8f4a-2b7d-4a9c-8e6f-1d3b9a5c7e02", "deleted": true }

Intervalle legen datumsabhängige Preise und Aufenthaltsregeln über den Basispreis eines Plans. Intervalle auf demselben Plan dürfen sich nicht überlappen, ein überlappender Zeitraum liefert 409.

GET /rate-plans/{id}/intervals

Verlangt rates:read.

POST /rate-plans/{id}/intervals
FeldErforderlichHinweise
namejaZum Beispiel „Hochsaison“.
start_date / end_datejaYYYY-MM-DD. Der Start muss vor dem Ende liegen.
price_monprice_sunneinPreis je Wochentag. Ein leer gelassener Tag fällt auf den Basispreis zurück.
min_stay / max_stayneinRegeln zur Aufenthaltsdauer für diesen Zeitraum.
closed_to_arrival / closed_to_departure / stop_sellneinVerfügbarkeits-Flags. Standard false.
extra_guest_charge / single_guest_discountneinÜberschreibungen je Saison. Standard "0.00".
curl -X POST "$VRDN_BASE/rate-plans/5c1e8f4a-2b7d-4a9c-8e6f-1d3b9a5c7e02/intervals" \
  -H "Authorization: Bearer $VRDN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "High Season",
    "start_date": "2026-12-01",
    "end_date": "2027-03-31",
    "price_mon": "180.00", "price_fri": "210.00",
    "min_stay": 3
  }'
{ "interval_id": "d8a4c2f6-5e9b-4d7a-8f1c-3b6e0a9d5c28" }

PATCH /intervals/{id}
DELETE /intervals/{id}

PATCH akzeptiert jedes Intervallfeld und prüft die Regel gegen Überlappungen erneut.


Eine Inklusivleistung ist entweder ein Perk (ein fest enthaltener Posten) oder ein Guthaben (ein verwendbares Budget für eine Kategorie, etwa ein Spa-Guthaben). Inklusivleistungen werden als ganze Liste gesetzt: Ein POST ersetzt den kompletten Satz an Inklusivleistungen des Plans.

GET /rate-plans/{id}/inclusions

Verlangt rates:read.

POST /rate-plans/{id}/inclusions
FeldErforderlichHinweise
labeljaBezeichnung für den Gast, zum Beispiel „Spa-Guthaben“.
allocated_amountjaWert als Dezimalzeichenkette. "0.00" für einen kostenlosen Perk.
frequencyjaperStay, perNight, perGuest oder perGuestPerNight.
inclusion_kindneinperk (Standard) oder credit.
revenue_categoryjaroom, fnb, spa, excursions, activities oder other. Bei einem Guthaben ist das die Kategorie, für die es gilt.
service_item_idneinVerknüpfung zu einem Serviceartikel aus dem Katalog.
currencyneinStandard ist die Währung des Plans.
included_quantityneinStandard 1.
curl -X POST "$VRDN_BASE/rate-plans/5c1e8f4a-2b7d-4a9c-8e6f-1d3b9a5c7e02/inclusions" \
  -H "Authorization: Bearer $VRDN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "inclusions": [
      { "label": "Daily breakfast for two", "allocated_amount": "20.00", "frequency": "perGuestPerNight", "revenue_category": "fnb" },
      { "label": "Spa credit", "allocated_amount": "150.00", "frequency": "perStay", "inclusion_kind": "credit", "revenue_category": "spa" }
    ]
  }'
{ "rate_plan_id": "5c1e8f4a-2b7d-4a9c-8e6f-1d3b9a5c7e02", "count": 2 }

Ein Code schaltet eine Promotion frei. Der Rabatt steckt in der Promotion, ein Code trägt also nie eine eigene Ersparnis. Hängen Sie Codes an den Plan, den sie freischalten.

GET /rate-plans/{id}/promo-codes

Verlangt rates:read.

POST /rate-plans/{id}/promo-codes
FeldErforderlichHinweise
codeja3 bis 40 Zeichen. Wird in Großbuchstaben gespeichert und abgeglichen.
valid_from / valid_toneinZeitfenster als YYYY-MM-DD.
max_redemptionsneinObergrenze für die Gesamtzahl der Einlösungen. Weglassen für unbegrenzt.
max_per_guestneinObergrenze je Gast.
curl -X POST "$VRDN_BASE/rate-plans/e2a9d7c4-3f6b-4c1e-9a8d-7b5f0c2e4a19/promo-codes" \
  -H "Authorization: Bearer $VRDN_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "code": "EARLYBIRD25", "max_redemptions": 100 }'
{ "promo_code_id": "a5e2c8f1-7d4b-4a6e-b9c3-0f8d2a5e7c41", "code": "EARLYBIRD25" }

PATCH /promo-codes/{id}
DELETE /promo-codes/{id}

PATCH akzeptiert valid_from, valid_to, max_redemptions, max_per_guest und is_active. Die Codezeichenkette selbst lässt sich nicht ändern, weil Buchungen den Code einfrieren, mit dem sie getätigt wurden. Löschen Sie ihn und legen Sie stattdessen einen neuen an. Einen Code zu löschen, wirkt sich nicht auf Reservierungen aus, die bereits damit gebucht wurden.