Download OpenAPI specification:
MCP: POST https://{host}/API/mcp Erfordert die Lizenz Soferu AI. Zugang ist der bestehende API-Host. Authorization: Bearer mit dem API-Schlüssel, oder Basic Auth mit Login und Schlüssel. Werkzeuge sind die REST-Endpunkte, die für diesen Zugang freigeschaltet sind.
API-Changesets (neueste zuerst):
Pfade: /messages, /messages/{thread_key}
GET /messages listet Unterhaltungen. Filter: source (whatsapp, bookingcom, email, nr), cms_address_id, unread=1.GET /messages/{thread_key} liefert den Verlauf. thread_key ist source:contact.POST /messages antwortet über denselben Kanal. E-Mail braucht subject und eine Adresse als contact.Pfade: /tickets/{id}, /users
cms_client_id gilt für diesen Zugang cms_client_id=1. Ein gesetzter Wert bleibt gültig.GET /users ignoriert cms_client_id. username filtert den Login exakt, ohne Wildcard. Unbekannt ergibt eine leere Liste und HTTP 200.PATCH /tickets/{id} setzt den Bearbeiter über genau eines von bv_user_id oder username. Unbekannter Benutzer: HTTP 404, Ticket unverändert.Pfade: /tickets/{id}
PATCH /tickets/{sp_ticket_id} setzt status und/oder note. Leere Felder bleiben unverändert.status: 1 offen, 2 in Bearbeitung, 3 Wiedervorlage, 4 erledigt, 9 abgelehnt. Erledigt und Abgelehnt setzen das Abschlussdatum.note ist eine interne Notiz im Ticketverlauf, höchstens 8000 Zeichen, ohne E-Mail an den Kunden.Pfade: /shifts
GET /shifts: geplante Schichten eines Tages, gruppiert nach Tätigkeitsbereich. date ist Y-m-d, Standard heute.personnel trägt Name und per_personnel_id. Telefon und E-Mail bleiben draussen. Bewerbungen und Tausch zählen nicht.published 0 ist ein Entwurf, 1 ist veröffentlicht.per_activity_id und st_branch_id. Nur Lesen. Auth: HostLimitation auf die Schnittstelle shifts.Pfade: /bookings/{id}
GET /bookings/{id}: items[].guests mit Name, Geburtsdatum, Land und Meldeschein-Status.cms_address_id. Die Liste GET /bookings enthält keine Gäste.Pfade: /bookings/dayboard
GET /bookings/dayboard: Zimmerzeilen eines Tages. date ist Y-m-d, Standard heute.arrivals: Anreise an diesem Tag. departures: Abreise an diesem Tag.in_house: Übernachtung in dieser Nacht (Anreise am oder vor dem Tag, Abreise danach). stayovers: Bleiber, Anreise vor dem Tag und Abreise danach.open_balances: Belegungen aus diesen Listen mit sum_open > 0, einmal je Belegung.section liefert nur eine Liste. counts bleibt der ganze Tag. Zähler sind Zimmerzeilen, Personen ist quantity.bookings.Pfade: /vouchers
POST /vouchers legt einen Beleg an. Pflicht: st_customer_id, st_voucher_type_id (Belegart des Mandanten, z. B. Angebot).positions[]: Artikelzeile mit st_article_id. Ohne price gilt der Preis der Preisliste, mit price der übergebene Stückpreis in der Preisart der Belegart. Textzeile nur mit text.positions[]. Die Liste GET /vouchers bleibt auf Rechnungen (Belegstufe 5); andere Belegstufen über GET /vouchers/{vk_voucher_no}.Pfade: /bookings
GET /bookings: jede Zeile enthält created_date und modified_date der Zimmerzeile (Y-m-d H:i:s).created_date und modified_date filtern denselben Kalendertag. Erlaubt ist Y-m-d und TT.MM.JJJJ, optional mit Präfix >=, >, <=, < oder !.Pfade: /vouchers
rm_booking_id an GET /vouchers ist optional. Ohne den Parameter kommen die Rechnungen (Belegstufe 5) des Mandanten, paginiert über page und limit (Standard 25, höchstens 250).pagination.total ist die Trefferzahl des Filters.Pfade: /vouchers/{id}
GET /vouchers/{vk_voucher_no} liefert positions[] aus den Belegzeilen. Die Liste GET /vouchers bleibt ohne Positionen.vk_position_pool_id verweist auf die Leistung, aus der die Zeile entstanden ist. kind ist A für Artikel und T für Text.Pfade: /bookings/{id}/services, /bookings/{id}/documents
GET /bookings/{id}/services ist ein Alias für GET /services und liefert die Leistungen dieser Belegung.GET|POST /bookings/{id}/documents hängt ein PDF (höchstens 2 MB) an die Dokumente der Belegung.Pfade: /documents, /documents/{id}, /bookings/{id}/documents
POST /documents speichert ein PDF (Base64, höchstens 2 MB). Für Belegungen: cms_object=rm_booking_id, Datei unter Dokumente der Belegung.POST /bookings/{id}/documents und GET /bookings/{id}/documents.request_id ist die Id dieser Anfrage im Zugriffsprotokoll.Pfade: /services, /bookings/{id}/services
GET /services liest Leistungen einer Belegung oder Zimmerposition, einschließlich noch nicht abgerechneter (vk_voucher_no leer). Alias: GET /bookings/{id}/services.external_id (max. 50 Zeichen) wird an der Leistung gespeichert. Dieselbe Id legt keine zweite Leistung an und liefert die ursprüngliche vk_position_pool_id (idempotent: true, HTTP 200).price ist der Stückpreis in der Preisart des Mandanten. Gespeichert wird auf vier Nachkommastellen gerundet.warning ist gesetzt, wenn die Zimmerposition bereits ausgecheckt ist.request_id für das Zugriffsprotokoll.Pfade: /fibu/export
datev_both: ein ZIP mit Buchungsstapel.zip und Belege.zip.Pfade: /tables, /tables/{id}, /tables/{id}/checkin, /tables/{id}/checkout
GET/POST /tables: Liste und Anlegen von Tisch-Reservierungen (Katalog TR).from/until als DateTime. Ohne until gilt die Reservierungsdauer aus den TR-Einstellungen.Pfade: /resources, /resources/{id}
is_locked (1 = gesperrter Zeitraum, kein Gast). note ist dann der Sperrgrund.Pfade: /bookings, /bookings/{id}
GET /bookings listet keine gesperrten Zeiträume (is_locked=1).POST /bookings mit konkretem Zimmer: HTTP 409 wenn das Zimmer im Zeitraum gesperrt oder belegt ist.Pfade: /locked-ranges, /locked-ranges/{id}
GET /locked-ranges: Sperren ab heute, optional date_from / date_until / rm_resource_id.POST /locked-ranges: anlegen. Pflicht: rm_resource_id (oder Array), from, until. Optional note, color. Mehrere Zimmer in einem Request.POST/PATCH / DELETE /locked-ranges/{rm_item_id}: ändern bzw. löschen.locked-ranges.Pfade: /availability
rooms_ooo: Anzahl gesperrter Zimmer (is_locked) je Tag und Kategorie. Teilmenge von rooms_booked.closed bleibt Stop-Sell auf der Preisliste, unabhängig von Zimmersperren.Pfade: /vouchers, /vouchers/{id}, /vouchers/{id}/payment
GET /vouchers?rm_booking_id=: Rechnungen (Belegstufe 5) einer Belegung. rm_booking_id ist Pflicht.GET /vouchers/{vk_voucher_no}: Beleg inkl. payments[].POST /vouchers/{vk_voucher_no}/payment: (Teil-)Zahlung. amount ist Pflicht und darf sum_opened nicht überschreiten. Mehrere Zahlungen pro Rechnung möglich.reference wird nicht erneut gebucht (HTTP 200). Auth: HostLimitation auf die Schnittstelle vouchers.Pfade: /bookings/{id}, /bookings/{id}/invoice, /bookings/{id}/payment
GET /bookings/{id}: amount_due (nicht fakturierte Positionen plus offene Rechnungsbeträge) und invoices[].POST /bookings/{id}/invoice: Rechnung über noch nicht abgerechnete Positionen (idempotent).POST /bookings/{id}/payment: (Teil-)Zahlung auf die offene Rechnung. amount ist Pflicht und darf sum_opened nicht überschreiten. Bevorzugt: POST /vouchers/{vk_voucher_no}/payment.book_payment=1 beim Rechnung anlegen: ebenfalls amount Pflicht. Dieselbe reference verhindert Doppelbuchungen.Pfade: /resources, /resources/{id}
POST /resources/{id}: optionales bv_user_id für Historie (created_from).cleaning_changed_by, cleaning_changed_by_name, cleaning_changed_at.Pfade: /users, /users/{id}
GET /users und GET /users/{id}: Benutzer des Mandanten (ohne Passwort/Rechte).is_active (1, 0, all) oder include_disabled=1.Pfade: /fibu/export
lock=true wirkt wie lock=1; false/0 bleibt aus. Ungültige Werte liefern HTTP 400 (kein stiller Erfolg mehr).locked (boolean), locked_count (Anzahl) und locked_vouchers (Liste der tatsächlich festgeschriebenen Belege mit type und voucher_no).Anzahlungen anlegen, lesen, ändern und Zahlungen/Teilrechnungen erzeugen. Resource-ID ist vk_deposit_id. Auth: API-Host + HostLimitation auf die Schnittstelle deposits.
Paginierte Liste der Anzahlungen.
| limit | integer Example: limit=25 Treffer pro Seite |
| page | integer Example: page=1 Seite (ab 1) |
| cms_client_id | integer Mandant-ID (Standard: aktiver Client) |
| rm_booking_id | integer Nur Anzahlungen dieser Belegung |
| st_customer_id | string Nur Anzahlungen dieses Kunden |
| __filter | integer Enum: 1 2 1 = offen (unbezahlt), 2 = überfällig |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "source": "cache",
- "data": [
- {
- "vk_deposit_id": 42,
- "st_customer_id": "10001",
- "rm_booking_id": 12345,
- "amount": 300,
- "currency": "EUR",
- "date": "2026-08-19 10:00:00",
- "due_date": "2026-09-19",
- "st_payment_method_id": "UE",
- "remark": "Anzahlung: Belegung #260001",
- "deposit_voucher_no": "",
- "payed_date": "0000-00-00",
- "is_cleared": 0,
- "status": 0
}
]
}Legt eine Anzahlung an. Mit rm_booking_id wird der Kunde übernommen und die Anzahlung den Zimmern zugeordnet. create_invoice=1 erzeugt die Anzahlungsrechnung (nur mit Belegung). book_payment=1 verbucht die Zahlung (erzeugt bei Bedarf zuerst die Teilrechnung).
| vk_deposit_id | integer Interne Anzahlungs-ID (Resource-ID, nur lesend) |
| cms_client_id | integer Mandant-ID |
| st_customer_id | string Kunden-Nr. Pflicht beim Anlegen, sofern rm_booking_id fehlt. |
| cms_address_id | integer Adress-ID des Kunden (nur lesend) |
| key_name | string Kundenname (nur lesend) |
| rm_booking_id | integer Belegungs-ID. Beim Anlegen optional: Kunde, Steuer und Bemerkung werden übernommen, Anzahlung an die Zimmer gehängt. |
| rm_item_id | integer Optional nur dieses Zimmer der Belegung zuordnen. |
| amount required | number <float> Anzuzahlender Betrag (Brutto). |
| currency | string Währung. Standard: Mandantenwährung. |
| date | string <date-time> Buchungsdatum. Standard: jetzt. |
| due_date | string <date> Fällig am. Standard: +1 Monat. |
| payed_date | string <date> Erhalten am (nur lesend, wenn Zahlung verbucht). |
| st_payment_method_id | string Zahlungsweise. Standard: UE. |
| st_tk_id | integer Steuerschlüssel. Ohne Angabe und mit rm_booking_id: häufigster Steuersatz der Belegung. |
| tax | integer or null Steuersatz in % (z.B. 19, 7, 0) als Alternative zu st_tk_id. |
| remark | string Bemerkung. Mit Belegung Standard: Anzahlung: Belegung #… |
| source | integer 1 = Kasse, 2 = Bank. Wird aus der Zahlungsweise ermittelt (nur lesend beim Anlegen). |
| status | integer 0 = aktiv, 3 = storniert. |
| is_cleared | integer Default: 0 Enum: 0 1 1 = mit Schlussrechnung verrechnet (nur lesend). |
| deposit_voucher_no | string Anzahlungs-/Teilrechnung (nur lesend). |
| vk_voucher_no | string Schlussrechnung, mit der verrechnet wurde (nur lesend). |
| fi_account_movement_id | integer Zahlungsbewegung (nur lesend). |
| create_invoice | integer Default: 0 Enum: 0 1 Nur schreiben: 1 = Anzahlungsrechnung zur Belegung erzeugen. |
| book_payment | integer Default: 0 Enum: 0 1 Nur schreiben: 1 = Zahlung verbuchen (erzeugt bei Bedarf zuerst die Teilrechnung). |
| reference | string Nur schreiben: Zahlungsreferenz (z.B. Payment-ID des Gateways). |
{- "rm_booking_id": 12345,
- "amount": 300,
- "st_payment_method_id": "CC",
- "create_invoice": 1,
- "book_payment": 1,
- "reference": "pi_123"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "vk_deposit_id": 42,
- "st_customer_id": "10001",
- "rm_booking_id": 12345,
- "amount": 300,
- "currency": "EUR",
- "date": "2026-08-19 10:00:00",
- "due_date": "2026-09-19",
- "st_payment_method_id": "UE",
- "remark": "Anzahlung: Belegung #260001",
- "deposit_voucher_no": "",
- "payed_date": "0000-00-00",
- "is_cleared": 0,
- "status": 0
}
}| id required | integer Example: 42 vk_deposit_id |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "vk_deposit_id": 42,
- "st_customer_id": "10001",
- "rm_booking_id": 12345,
- "amount": 300,
- "currency": "EUR",
- "date": "2026-08-19 10:00:00",
- "due_date": "2026-09-19",
- "st_payment_method_id": "UE",
- "remark": "Anzahlung: Belegung #260001",
- "deposit_voucher_no": "",
- "payed_date": "0000-00-00",
- "is_cleared": 0,
- "status": 0
}
}Teilupdate. Nur solange keine Zahlung und keine Teilrechnung vorliegen. PUT und PATCH sind ebenfalls erlaubt.
| id required | integer Example: 42 vk_deposit_id |
| vk_deposit_id | integer Interne Anzahlungs-ID (Resource-ID, nur lesend) |
| cms_client_id | integer Mandant-ID |
| st_customer_id | string Kunden-Nr. Pflicht beim Anlegen, sofern rm_booking_id fehlt. |
| cms_address_id | integer Adress-ID des Kunden (nur lesend) |
| key_name | string Kundenname (nur lesend) |
| rm_booking_id | integer Belegungs-ID. Beim Anlegen optional: Kunde, Steuer und Bemerkung werden übernommen, Anzahlung an die Zimmer gehängt. |
| rm_item_id | integer Optional nur dieses Zimmer der Belegung zuordnen. |
| amount required | number <float> Anzuzahlender Betrag (Brutto). |
| currency | string Währung. Standard: Mandantenwährung. |
| date | string <date-time> Buchungsdatum. Standard: jetzt. |
| due_date | string <date> Fällig am. Standard: +1 Monat. |
| payed_date | string <date> Erhalten am (nur lesend, wenn Zahlung verbucht). |
| st_payment_method_id | string Zahlungsweise. Standard: UE. |
| st_tk_id | integer Steuerschlüssel. Ohne Angabe und mit rm_booking_id: häufigster Steuersatz der Belegung. |
| tax | integer or null Steuersatz in % (z.B. 19, 7, 0) als Alternative zu st_tk_id. |
| remark | string Bemerkung. Mit Belegung Standard: Anzahlung: Belegung #… |
| source | integer 1 = Kasse, 2 = Bank. Wird aus der Zahlungsweise ermittelt (nur lesend beim Anlegen). |
| status | integer 0 = aktiv, 3 = storniert. |
| is_cleared | integer Default: 0 Enum: 0 1 1 = mit Schlussrechnung verrechnet (nur lesend). |
| deposit_voucher_no | string Anzahlungs-/Teilrechnung (nur lesend). |
| vk_voucher_no | string Schlussrechnung, mit der verrechnet wurde (nur lesend). |
| fi_account_movement_id | integer Zahlungsbewegung (nur lesend). |
| create_invoice | integer Default: 0 Enum: 0 1 Nur schreiben: 1 = Anzahlungsrechnung zur Belegung erzeugen. |
| book_payment | integer Default: 0 Enum: 0 1 Nur schreiben: 1 = Zahlung verbuchen (erzeugt bei Bedarf zuerst die Teilrechnung). |
| reference | string Nur schreiben: Zahlungsreferenz (z.B. Payment-ID des Gateways). |
{- "amount": 350,
- "remark": "Anzahlung angepasst"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "vk_deposit_id": 42,
- "st_customer_id": "10001",
- "rm_booking_id": 12345,
- "amount": 300,
- "currency": "EUR",
- "date": "2026-08-19 10:00:00",
- "due_date": "2026-09-19",
- "st_payment_method_id": "UE",
- "remark": "Anzahlung: Belegung #260001",
- "deposit_voucher_no": "",
- "payed_date": "0000-00-00",
- "is_cleared": 0,
- "status": 0
}
}| id required | integer Example: 42 vk_deposit_id |
| vk_deposit_id | integer Interne Anzahlungs-ID (Resource-ID, nur lesend) |
| cms_client_id | integer Mandant-ID |
| st_customer_id | string Kunden-Nr. Pflicht beim Anlegen, sofern rm_booking_id fehlt. |
| cms_address_id | integer Adress-ID des Kunden (nur lesend) |
| key_name | string Kundenname (nur lesend) |
| rm_booking_id | integer Belegungs-ID. Beim Anlegen optional: Kunde, Steuer und Bemerkung werden übernommen, Anzahlung an die Zimmer gehängt. |
| rm_item_id | integer Optional nur dieses Zimmer der Belegung zuordnen. |
| amount required | number <float> Anzuzahlender Betrag (Brutto). |
| currency | string Währung. Standard: Mandantenwährung. |
| date | string <date-time> Buchungsdatum. Standard: jetzt. |
| due_date | string <date> Fällig am. Standard: +1 Monat. |
| payed_date | string <date> Erhalten am (nur lesend, wenn Zahlung verbucht). |
| st_payment_method_id | string Zahlungsweise. Standard: UE. |
| st_tk_id | integer Steuerschlüssel. Ohne Angabe und mit rm_booking_id: häufigster Steuersatz der Belegung. |
| tax | integer or null Steuersatz in % (z.B. 19, 7, 0) als Alternative zu st_tk_id. |
| remark | string Bemerkung. Mit Belegung Standard: Anzahlung: Belegung #… |
| source | integer 1 = Kasse, 2 = Bank. Wird aus der Zahlungsweise ermittelt (nur lesend beim Anlegen). |
| status | integer 0 = aktiv, 3 = storniert. |
| is_cleared | integer Default: 0 Enum: 0 1 1 = mit Schlussrechnung verrechnet (nur lesend). |
| deposit_voucher_no | string Anzahlungs-/Teilrechnung (nur lesend). |
| vk_voucher_no | string Schlussrechnung, mit der verrechnet wurde (nur lesend). |
| fi_account_movement_id | integer Zahlungsbewegung (nur lesend). |
| create_invoice | integer Default: 0 Enum: 0 1 Nur schreiben: 1 = Anzahlungsrechnung zur Belegung erzeugen. |
| book_payment | integer Default: 0 Enum: 0 1 Nur schreiben: 1 = Zahlung verbuchen (erzeugt bei Bedarf zuerst die Teilrechnung). |
| reference | string Nur schreiben: Zahlungsreferenz (z.B. Payment-ID des Gateways). |
{- "vk_deposit_id": 42,
- "cms_client_id": 0,
- "st_customer_id": "10001",
- "cms_address_id": 0,
- "key_name": "string",
- "rm_booking_id": 12345,
- "rm_item_id": 0,
- "amount": 300,
- "currency": "EUR",
- "date": "2019-08-24T14:15:22Z",
- "due_date": "2019-08-24",
- "payed_date": "2019-08-24",
- "st_payment_method_id": "UE",
- "st_tk_id": 0,
- "tax": 19,
- "remark": "string",
- "source": 0,
- "status": 0,
- "is_cleared": 0,
- "deposit_voucher_no": "string",
- "vk_voucher_no": "string",
- "fi_account_movement_id": 0,
- "create_invoice": 0,
- "book_payment": 0,
- "reference": "string"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "vk_deposit_id": 42,
- "st_customer_id": "10001",
- "rm_booking_id": 12345,
- "amount": 300,
- "currency": "EUR",
- "date": "2026-08-19 10:00:00",
- "due_date": "2026-09-19",
- "st_payment_method_id": "UE",
- "remark": "Anzahlung: Belegung #260001",
- "deposit_voucher_no": "",
- "payed_date": "0000-00-00",
- "is_cleared": 0,
- "status": 0
}
}Löscht die Anzahlung und storniert ggf. die zugehörige Zahlung. HTTP 409 wenn bereits mit einer Schlussrechnung verrechnet oder Kassenbuch abgeschlossen.
| id required | integer Example: 42 vk_deposit_id |
{- "code": 400,
- "message": "Ungültige oder fehlende Parameter",
- "date": "2026-10-01 12:36:20"
}Erstellt die Teil-/Anzahlungsrechnung zur Belegung. Nur mit rm_booking_id. HTTP 409 wenn die Belegung bereits abgerechnet ist oder schon eine Teilrechnung existiert.
| id required | integer Example: 42 vk_deposit_id |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "vk_deposit_id": 42,
- "st_customer_id": "10001",
- "rm_booking_id": 12345,
- "amount": 300,
- "currency": "EUR",
- "date": "2026-08-19 10:00:00",
- "due_date": "2026-09-19",
- "st_payment_method_id": "UE",
- "remark": "Anzahlung: Belegung #260001",
- "deposit_voucher_no": "",
- "payed_date": "0000-00-00",
- "is_cleared": 0,
- "status": 0
}
}Verbucht den Zahlungseingang. Erzeugt bei Bedarf zuerst die Anzahlungsrechnung (nur mit Belegung).
| id required | integer Example: 42 vk_deposit_id |
| st_payment_method_id | string Zahlungsweise. Leer = Zahlungsweise der Anzahlung. |
| amount | number <float> Betrag. Leer = Anzahlungsbetrag. |
| date | string <date> Zahlungsdatum. Standard: heute. |
| reference | string Zahlungsreferenz / Gateway-ID. |
{- "st_payment_method_id": "CC",
- "reference": "pi_123"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "vk_deposit_id": 42,
- "st_customer_id": "10001",
- "rm_booking_id": 12345,
- "amount": 300,
- "currency": "EUR",
- "date": "2026-08-19 10:00:00",
- "due_date": "2026-09-19",
- "st_payment_method_id": "UE",
- "remark": "Anzahlung: Belegung #260001",
- "deposit_voucher_no": "",
- "payed_date": "0000-00-00",
- "is_cleared": 0,
- "status": 0
}
}Artikel
| st_article_group_id | integer |
| st_article_id required | string Artikel-Nr. |
| name1 required | string Bezeichnung 1 |
| name2 | string Bezeichnung 2 |
| name3 | string Bezeichnung 3 |
| settings[color] | string Farbe |
| st_article_model_id | string Artikelmodell |
| ean | string GTIN |
| ean2 | string GTIN (VE) |
| alternative_article | string Ersatzartikel |
| draft | string Zeichnung |
| manufacturer_article_no | string Hersteller Artikel-Nr. |
| manufacturer | string |
| min_quantity_stored | string min. Lagermenge |
| max_quantity_stored | string max. Lagermenge |
| inventory_price | string Ø EK-Preis |
| short_description | string Kurzbeschreibung |
| sales_unit | string |
| article_factor | string Inhalt/Menge |
| article_factor_unit | number Mögliche Werte: s = pauschal Stück = Stück Person = pro Person 2second = pro Stk./Sek. 2minute = pro Stk./Min. 2hour = pro Stk./Std. 2night = pro Stk./Nacht 2day = pro Stk./Tag 2week = pro Stk./Woche 2month = pro Stk./Monat 2year = pro Stk./Jahr 1second = pro Person/Sek. 1minute = pro Person/Min. 1hour = pro Person/Std. 1night = pro Person/Nacht 1day = pro Person/Tag 1week = pro Person/Woche 1month = pro Person/Monat 1year = pro Person/Jahr second = pro Sekunde minute = pro Minute hour = pro Stunde night = pro Nacht day = pro Tag week = pro Woche month = pro Monat year = pro Jahr Packung = Packung St. = Stück Pers. = Person(en) |
| settings[show_basic_charge] | boolean Grundpreis auszeichnen |
| settings[disable_price_group] | boolean Preisgruppierung deaktivieren |
| purchase_unit | string |
| article_mass_unit | string |
| stocking_unit | string |
| weight | string Brutto-Gewicht kg |
| weight_net | string Netto-Gewicht kg |
| length | string Länge cm |
| height | string Höhe cm |
| width | string Breite cm |
| volume | string Volumen l |
| settings[capacity] | integer Kapazität |
| st_cost_centre_id | integer |
| st_account_id | string FiBu-Konto |
| settings[pms_project_id] | integer |
| valid_from | string <date> gültig von |
| valid_until | string <date> gültig bis |
| settings[email] | string |
| settings[ver_rate_id] | integer |
| settings[per_activity_id] | integer |
| copy_st_article_id | integer |
| type | string |
| description | string Beschreibung |
| settings[note2] | string Notiz 2 |
| settings[note3] | string Notiz 3 |
| locked | boolean Sperrvermerk |
| purchase_article | boolean Einkaufsartikel |
| sales_article | boolean Verkaufsartikel |
| shop_article | boolean Shopartikel |
| allowance_possible | boolean Rabattfähig |
| time_dependent | boolean Zeitabhängig |
| disable_proposal | boolean Kein Bestellvorschlag |
| disable_statistic | boolean nicht umsatzrelevant |
| settings[is_dropshipping] | boolean Dropshipping-Artikel |
| settings[is_coupon] | boolean als Gutschein bestellbar |
| settings[is_included] | boolean Enthaltene Leistung |
| settings[is_minibar] | boolean Minibar |
| settings[is_self_checkout] | boolean Self-Checkout |
| inventory_maintenance | boolean Bestandsführung |
| is_serial_no | boolean Seriennummer-Artikel |
| is_mhd | boolean Mindesthaltbarkeitsdatum |
| is_charge | boolean Charge |
| is_bill_of_material | boolean Stücklistenartikel |
| inventory_maintenance2 | boolean Bestandsführung |
| inventory_maintenance_ek | boolean Bestandsführung (Einkauf) |
| shop_article2 | boolean Preise aus Stückliste |
| settings[view_template] | string Template |
| settings[shift_time] | integer Rüstzeit Min |
[ ]Artikel
| limit | integer <= 250 Default: 25 Example: limit=25 Anzahl der Elemente, die pro Seite zurückgegeben werden |
| page | integer Default: 0 Auflistung der Elemente ab Seite |
| st_article_id | string Artikel-Nr. |
| group | string Artikelgruppe |
| name1 | string Bezeichnung 1 |
| name2 | string Bezeichnung 2 |
| name3 | string Bezeichnung 3 |
| st_article_model_id | string Artikelmodell |
| ean | string GTIN |
| ean2 | string GTIN 2 |
| is_bill_of_material | string Stückliste |
| alternative_article | string Ersatzartikel |
| draft | string Zeichnung |
| manufacturer_article_no | string Hersteller Artikel-Nr. |
| manufacturer_key_name | string Hersteller |
| article_number | string Lief. Artikel-Nr. |
| supplier_key_name | string Lieferant |
| ek_price | string EK-Preis |
| inventory_price | string Ø EK-Preis |
| sales_unit | string Verkaufspreis pro |
| purchase_unit | string Einkaufspreis pro |
| article_mass_unit | string Artikelmasse pro |
| stocking_unit | string Lagermenge in |
| st_account_id | string FiBu-Konto |
| weight | string Nettogewicht |
| weight_net | string Bruttogewicht |
| article_length | string Länge |
| height | string Höhe |
| width | string Breite |
| volume | string Volumen |
| valid_from | string gültig von |
| valid_until | string gültig bis |
| locked | string Sperrvermerk |
| purchase_article | string Einkaufsartikel |
| sales_article | string Verkaufsartikel |
| inventory_maintenance | string Bestandsführung |
| shop_article | string Shopartikel |
| allowance_possible | string Rabattfähig |
| is_part_of_variant | string Variantenartikel |
| st_cost_centre_no | string Kostenstellen-Nr. |
| cost_centre | string Kostenstelle |
| bf_current | string Bestand |
{- "data": [
- {
- "st_article_group_id": 0,
- "st_article_id": "string",
- "name1": "string",
- "name2": "string",
- "name3": "string",
- "settings[color]": "string",
- "st_article_model_id": "string",
- "ean": "string",
- "ean2": "string",
- "alternative_article": "string",
- "draft": "string",
- "manufacturer_article_no": "string",
- "manufacturer": "string",
- "min_quantity_stored": "string",
- "max_quantity_stored": "string",
- "inventory_price": "string",
- "short_description": "string",
- "sales_unit": "string",
- "article_factor": "string",
- "article_factor_unit": 0,
- "settings[show_basic_charge]": true,
- "settings[disable_price_group]": true,
- "purchase_unit": "string",
- "article_mass_unit": "string",
- "stocking_unit": "string",
- "weight": "string",
- "weight_net": "string",
- "length": "string",
- "height": "string",
- "width": "string",
- "volume": "string",
- "settings[capacity]": 0,
- "st_cost_centre_id": 0,
- "st_account_id": "string",
- "settings[pms_project_id]": 0,
- "valid_from": "2019-08-24",
- "valid_until": "2019-08-24",
- "settings[email]": "string",
- "settings[ver_rate_id]": 0,
- "settings[per_activity_id]": 0,
- "copy_st_article_id": 0,
- "type": "string",
- "description": "string",
- "settings[note2]": "string",
- "settings[note3]": "string",
- "locked": true,
- "purchase_article": true,
- "sales_article": true,
- "shop_article": true,
- "allowance_possible": true,
- "time_dependent": true,
- "disable_proposal": true,
- "disable_statistic": true,
- "settings[is_dropshipping]": true,
- "settings[is_coupon]": true,
- "settings[is_included]": true,
- "settings[is_minibar]": true,
- "settings[is_self_checkout]": true,
- "inventory_maintenance": true,
- "is_serial_no": true,
- "is_mhd": true,
- "is_charge": true,
- "is_bill_of_material": true,
- "inventory_maintenance2": true,
- "inventory_maintenance_ek": true,
- "shop_article2": true,
- "settings[view_template]": "string",
- "settings[shift_time]": 0
}
], - "pagination": {
- "limit": 25,
- "page": 0,
- "total": 0
}, - "code": 0,
- "message": "string",
- "date": "2019-08-24T14:15:22Z"
}Artikel
| st_article_id required | integer |
| st_article_group_id | integer |
| st_article_id required | string Artikel-Nr. |
| name1 required | string Bezeichnung 1 |
| name2 | string Bezeichnung 2 |
| name3 | string Bezeichnung 3 |
| settings[color] | string Farbe |
| st_article_model_id | string Artikelmodell |
| ean | string GTIN |
| ean2 | string GTIN (VE) |
| alternative_article | string Ersatzartikel |
| draft | string Zeichnung |
| manufacturer_article_no | string Hersteller Artikel-Nr. |
| manufacturer | string |
| min_quantity_stored | string min. Lagermenge |
| max_quantity_stored | string max. Lagermenge |
| inventory_price | string Ø EK-Preis |
| short_description | string Kurzbeschreibung |
| sales_unit | string |
| article_factor | string Inhalt/Menge |
| article_factor_unit | number Mögliche Werte: s = pauschal Stück = Stück Person = pro Person 2second = pro Stk./Sek. 2minute = pro Stk./Min. 2hour = pro Stk./Std. 2night = pro Stk./Nacht 2day = pro Stk./Tag 2week = pro Stk./Woche 2month = pro Stk./Monat 2year = pro Stk./Jahr 1second = pro Person/Sek. 1minute = pro Person/Min. 1hour = pro Person/Std. 1night = pro Person/Nacht 1day = pro Person/Tag 1week = pro Person/Woche 1month = pro Person/Monat 1year = pro Person/Jahr second = pro Sekunde minute = pro Minute hour = pro Stunde night = pro Nacht day = pro Tag week = pro Woche month = pro Monat year = pro Jahr Packung = Packung St. = Stück Pers. = Person(en) |
| settings[show_basic_charge] | boolean Grundpreis auszeichnen |
| settings[disable_price_group] | boolean Preisgruppierung deaktivieren |
| purchase_unit | string |
| article_mass_unit | string |
| stocking_unit | string |
| weight | string Brutto-Gewicht kg |
| weight_net | string Netto-Gewicht kg |
| length | string Länge cm |
| height | string Höhe cm |
| width | string Breite cm |
| volume | string Volumen l |
| settings[capacity] | integer Kapazität |
| st_cost_centre_id | integer |
| st_account_id | string FiBu-Konto |
| settings[pms_project_id] | integer |
| valid_from | string <date> gültig von |
| valid_until | string <date> gültig bis |
| settings[email] | string |
| settings[ver_rate_id] | integer |
| settings[per_activity_id] | integer |
| copy_st_article_id | integer |
| type | string |
| description | string Beschreibung |
| settings[note2] | string Notiz 2 |
| settings[note3] | string Notiz 3 |
| locked | boolean Sperrvermerk |
| purchase_article | boolean Einkaufsartikel |
| sales_article | boolean Verkaufsartikel |
| shop_article | boolean Shopartikel |
| allowance_possible | boolean Rabattfähig |
| time_dependent | boolean Zeitabhängig |
| disable_proposal | boolean Kein Bestellvorschlag |
| disable_statistic | boolean nicht umsatzrelevant |
| settings[is_dropshipping] | boolean Dropshipping-Artikel |
| settings[is_coupon] | boolean als Gutschein bestellbar |
| settings[is_included] | boolean Enthaltene Leistung |
| settings[is_minibar] | boolean Minibar |
| settings[is_self_checkout] | boolean Self-Checkout |
| inventory_maintenance | boolean Bestandsführung |
| is_serial_no | boolean Seriennummer-Artikel |
| is_mhd | boolean Mindesthaltbarkeitsdatum |
| is_charge | boolean Charge |
| is_bill_of_material | boolean Stücklistenartikel |
| inventory_maintenance2 | boolean Bestandsführung |
| inventory_maintenance_ek | boolean Bestandsführung (Einkauf) |
| shop_article2 | boolean Preise aus Stückliste |
| settings[view_template] | string Template |
| settings[shift_time] | integer Rüstzeit Min |
""Artikel
| st_article_id required | integer |
{- "st_article_group_id": 0,
- "st_article_id": "string",
- "name1": "string",
- "name2": "string",
- "name3": "string",
- "settings[color]": "string",
- "st_article_model_id": "string",
- "ean": "string",
- "ean2": "string",
- "alternative_article": "string",
- "draft": "string",
- "manufacturer_article_no": "string",
- "manufacturer": "string",
- "min_quantity_stored": "string",
- "max_quantity_stored": "string",
- "inventory_price": "string",
- "short_description": "string",
- "sales_unit": "string",
- "article_factor": "string",
- "article_factor_unit": 0,
- "settings[show_basic_charge]": true,
- "settings[disable_price_group]": true,
- "purchase_unit": "string",
- "article_mass_unit": "string",
- "stocking_unit": "string",
- "weight": "string",
- "weight_net": "string",
- "length": "string",
- "height": "string",
- "width": "string",
- "volume": "string",
- "settings[capacity]": 0,
- "st_cost_centre_id": 0,
- "st_account_id": "string",
- "settings[pms_project_id]": 0,
- "valid_from": "2019-08-24",
- "valid_until": "2019-08-24",
- "settings[email]": "string",
- "settings[ver_rate_id]": 0,
- "settings[per_activity_id]": 0,
- "copy_st_article_id": 0,
- "type": "string",
- "description": "string",
- "settings[note2]": "string",
- "settings[note3]": "string",
- "locked": true,
- "purchase_article": true,
- "sales_article": true,
- "shop_article": true,
- "allowance_possible": true,
- "time_dependent": true,
- "disable_proposal": true,
- "disable_statistic": true,
- "settings[is_dropshipping]": true,
- "settings[is_coupon]": true,
- "settings[is_included]": true,
- "settings[is_minibar]": true,
- "settings[is_self_checkout]": true,
- "inventory_maintenance": true,
- "is_serial_no": true,
- "is_mhd": true,
- "is_charge": true,
- "is_bill_of_material": true,
- "inventory_maintenance2": true,
- "inventory_maintenance_ek": true,
- "shop_article2": true,
- "settings[view_template]": "string",
- "settings[shift_time]": 0
}Verkaufsbelege anlegen, lesen und Zahlungen verbuchen. Resource-ID ist vk_voucher_no. Auth: API-Host + HostLimitation auf die Schnittstelle vouchers.
Rechnungen (Belegstufe 5). Ohne rm_booking_id der Mandant, sonst nur diese Belegung. Paginierung über page und limit.
| rm_booking_id | integer Example: rm_booking_id=12345 Nur Belege dieser Belegung |
| page | integer Example: page=1 Seite, ab 1 |
| limit | integer Example: limit=25 Treffer pro Seite. Standard 25, höchstens 250. |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "source": "cache",
- "data": [
- {
- "vk_voucher_no": "RE-260001",
- "st_voucher_type_id": "RE",
- "voucher_level": 5,
- "sum_gross": 290.88,
- "sum_opened": 190.88,
- "currency": "EUR",
- "st_payment_method_id": "CC",
- "payment_reference": "term_123",
- "rm_booking_id": 12345,
- "payments": [
- {
- "fi_account_movement_id": 9001,
- "amount": 100,
- "reference": "term_123",
- "st_payment_method_id": "CC"
}
], - "positions": [
- {
- "vk_position_id": 501,
- "vk_position_pool_id": 1042,
- "position": 1,
- "sort": 1,
- "kind": "A",
- "st_article_id": "REINIGUNG",
- "text": "Reinigung",
- "quantity": 1,
- "unit": "St.",
- "price": 25,
- "price_net": 21.01,
- "price_gross": 25,
- "tax": 19,
- "total_net": 21.01,
- "total_gross": 25,
- "total_tax": 3.99,
- "rm_booking_id": 12345,
- "is_hidden": 0
}
]
}
]
}Legt einen Beleg der Belegart st_voucher_type_id für st_customer_id an. Die Belegnummer kommt aus dem Nummernkreis. positions sind Artikel- oder Textzeilen. Ohne price gilt der Preis der Preisliste. Die Liste bleibt auf Rechnungen (Belegstufe 5); der neue Beleg steht unter GET /vouchers/{vk_voucher_no}.
| st_customer_id required | string Kundennummer. |
| st_voucher_type_id required | string Belegart des Mandanten, z. B. AN für Angebot oder RE für Rechnung. |
| voucher_date | string <date> Belegdatum. Standard: heute. |
| rm_booking_id | integer Optionale Belegung am Belegkopf. |
| st_payment_method_id | string Zahlungsweise. Leer = Zahlungsweise des Kunden. |
Array of objects (VoucherPositionWrite) Belegzeilen. Reihenfolge ist die Sortierung. |
{- "st_customer_id": "10001",
- "st_voucher_type_id": "AN",
- "positions": [
- {
- "st_article_id": "REINIGUNG",
- "quantity": 1,
- "price": 25
}, - {
- "text": "Angebot gültig 14 Tage"
}
]
}{- "code": 201,
- "message": "",
- "date": "2026-10-06 14:30:00",
- "data": {
- "vk_voucher_no": "AN-260001",
- "st_voucher_type_id": "AN",
- "voucher_level": 1,
- "st_customer_id": "10001",
- "sum_gross": 25,
- "currency": "EUR",
- "positions": [
- {
- "kind": "A",
- "st_article_id": "REINIGUNG",
- "text": "Reinigung",
- "quantity": 1,
- "price": 25,
- "tax": 19
}
]
}
}Rechnung inkl. Zahlungen (payments) und Belegzeilen (positions).
| id required | string Example: RE-260001 vk_voucher_no |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "vk_voucher_no": "RE-260001",
- "st_voucher_type_id": "RE",
- "voucher_level": 5,
- "sum_gross": 290.88,
- "sum_opened": 190.88,
- "currency": "EUR",
- "st_payment_method_id": "CC",
- "payment_reference": "term_123",
- "rm_booking_id": 12345,
- "payments": [
- {
- "fi_account_movement_id": 9001,
- "amount": 100,
- "reference": "term_123",
- "st_payment_method_id": "CC"
}
], - "positions": [
- {
- "vk_position_id": 501,
- "vk_position_pool_id": 1042,
- "position": 1,
- "sort": 1,
- "kind": "A",
- "st_article_id": "REINIGUNG",
- "text": "Reinigung",
- "quantity": 1,
- "unit": "St.",
- "price": 25,
- "price_net": 21.01,
- "price_gross": 25,
- "tax": 19,
- "total_net": 21.01,
- "total_gross": 25,
- "total_tax": 3.99,
- "rm_booking_id": 12345,
- "is_hidden": 0
}
]
}
}Verbucht eine (Teil-)Zahlung. amount ist Pflicht. Mehrere Zahlungen pro Rechnung sind möglich, solange sum_opened > 0. Dieselbe reference wird nicht erneut gebucht (HTTP 200).
| id required | string Example: RE-260001 vk_voucher_no |
| amount required | number <float> Zahlungsbetrag. Pflicht. Darf sum_opened nicht überschreiten. |
| st_payment_method_id | string Leer = Zahlungsweise der Rechnung. |
| reference | string Eindeutige Payment-ID je Zahlung (Timeout-Schutz). |
| date | string <date> |
{- "amount": 100,
- "st_payment_method_id": "CC",
- "reference": "term_123"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "vk_voucher_no": "RE-260001",
- "st_voucher_type_id": "RE",
- "voucher_level": 5,
- "sum_gross": 290.88,
- "sum_opened": 190.88,
- "currency": "EUR",
- "st_payment_method_id": "CC",
- "payment_reference": "term_123",
- "rm_booking_id": 12345,
- "payments": [
- {
- "fi_account_movement_id": 9001,
- "amount": 100,
- "reference": "term_123",
- "st_payment_method_id": "CC"
}
], - "positions": [
- {
- "vk_position_id": 501,
- "vk_position_pool_id": 1042,
- "position": 1,
- "sort": 1,
- "kind": "A",
- "st_article_id": "REINIGUNG",
- "text": "Reinigung",
- "quantity": 1,
- "unit": "St.",
- "price": 25,
- "price_net": 21.01,
- "price_gross": 25,
- "tax": 19,
- "total_net": 21.01,
- "total_gross": 25,
- "total_tax": 3.99,
- "rm_booking_id": 12345,
- "is_hidden": 0
}
]
}
}Hotel-Belegungen anlegen, lesen, Rechnung/Zahlung und Check-In/Check-Out. Resource-ID ist rm_booking_id. Auth: API-Host + HostLimitation auf die Schnittstelle bookings.
Paginierte Liste der Belegungen (zimmerbasiert, wie im Hotel-Manager). date_from / date_until filtern nach überlappendem Zimmerzeitraum. created_date / modified_date filtern den Kalendertag der Zimmerzeile, als Y-m-d oder TT.MM.JJJJ, optional mit >=, >, <=, < oder !.
| limit | integer Example: limit=25 Treffer pro Seite |
| page | integer Example: page=1 Seite (ab 1) |
| cms_client_id | integer Mandant-ID (Standard: aktiver Client) |
| date_from | string <date> Example: date_from=2026-10-01 Zeitraum von (Y-m-d). Belegungen deren Zimmer den Zeitraum überlappen (DATE(until) >= date_from). |
| date_until | string <date> Example: date_until=2026-10-08 Zeitraum bis (Y-m-d). Belegungen deren Zimmer den Zeitraum überlappen (DATE(from) <= date_until). |
| created_date | string <date> Example: created_date=2026-10-01 Angelegt am (Zimmerzeile). Y-m-d oder TT.MM.JJJJ. Präfix >=, >, <=, <, ! vergleicht den Kalendertag. Beispiel: >=2026-10-01. |
| modified_date | string <date> Example: modified_date=>=2026-10-01 Geändert am (Zimmerzeile). Y-m-d oder TT.MM.JJJJ. Präfix >=, >, <=, <, ! vergleicht den Kalendertag. Beispiel: >=2026-10-01. |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "source": "cache",
- "data": [
- {
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "rm_item_id": 9001,
- "from": "2026-08-20",
- "until": "2026-08-22",
- "st_customer_id": "10001",
- "name": "Mustermann",
- "status": 0,
- "rm_resource_id": 5,
- "room_number": "101",
- "created_date": "2026-08-01 09:15:00",
- "modified_date": "2026-10-01 14:22:00"
}
]
}Legt Belegungskopf und mindestens ein Zimmer an. Ohne rm_resource_id wird anhand st_article_id ein freies Zimmer im Zeitraum zugeordnet. HTTP 409 wenn keines frei ist oder das angegebene Zimmer gesperrt/belegt ist. Belegungsnummer kommt aus dem Nummernkreis HM. Preis wird aus der Preisliste berechnet, sofern price nicht gesetzt ist.
| rm_booking_id | integer Interne Belegungs-ID (Resource-ID, nur lesend) |
| rm_booking_no | string Belegungsnummer (Nummernkreis HM, nur lesend) |
| rm_catalogue_id | string Katalog. Immer HM bei diesem Endpoint. |
| cms_client_id | integer Mandant-ID |
| st_customer_id | string Kunden-Nr. Pflicht beim Anlegen, sofern cms_address_id fehlt. cms_address_id wird dann vom Kunden übernommen. |
| cms_address_id | integer Adress-ID. Nur nötig ohne st_customer_id. Mit st_customer_id wird sie vom Kunden genommen. |
| name | string Anzeigename. Leer = Nachname des Kunden. |
| from required | string <date> Anreise. Auf Root-Ebene wenn nur ein Zimmer, sonst in items[]. |
| until required | string <date> Abreise. |
| rm_resource_id | integer Zimmer-ID. Optional. Ohne Angabe wird ein freies Zimmer zur st_article_id zugeordnet. |
| room_number | string Zimmernummer bei einem Zimmer ohne items[]. |
| token | string Zimmerkürzel bei einem Zimmer ohne items[]. |
| st_article_id | string Logis-Artikel / Zimmerkategorie. Pflicht ohne rm_resource_id. |
| st_price_list_id | string Preisliste für alle Zimmer, sofern nicht in items[] gesetzt. |
| quantity | integer Default: 1 Personen / Erwachsene (ein Zimmer). |
| children | integer Default: 0 Kinder (ein Zimmer). |
| status | integer Enum: 0 1 2 3 4 5 13 15 16 30 Zimmerstatus: 0 = Reservierung, 1 = Check-In, 2 = Check-Out, 3 = Storniert, 4 = Anfrage/Option, 13 = bestätigt (Channel), 30 = No-Show. Standard beim Anlegen: 0. |
| price | number <float> Optionaler Festpreis (Brutto, pro Nacht/Preiszeile). Weglassen = Preisliste. |
| price_gross | number <float> Alias für price. |
| remark | string Bemerkung zur Belegung |
| source | string Herkunft. Standard: api. |
| source_no | string Externe Vorgangsnummer der Quelle |
| send_notification | integer Default: 0 Enum: 0 1 1 = Reservierungsbestätigung versenden. Standard: 0. |
| reserved_date | string <date-time> Reservierungsdatum (nur lesend) |
| access_token | string Zugangstoken (nur lesend) |
Array of objects Zimmer. Beim Anlegen optional: ohne items[] gelten from/until/Zimmerfelder auf Root-Ebene als ein Zimmer. | |
| amount_due | number <float> Noch zu zahlen: nicht fakturierte Positionen plus offene Rechnungsbeträge (nur lesend). |
Array of objects (BookingInvoice) Rechnungen (Belegstufe 5) der Belegung (nur lesend). |
{- "st_customer_id": "10001",
- "from": "2026-08-20",
- "until": "2026-08-22",
- "st_article_id": "DZ",
- "quantity": 2,
- "children": 0,
- "price": 129,
- "status": 0,
- "remark": "",
- "source": "api"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "st_customer_id": "10001",
- "cms_address_id": 5001,
- "name": "Mustermann",
- "source": "api",
- "remark": "",
- "items": [
- {
- "rm_item_id": 9001,
- "from": "2026-08-20 12:00:00",
- "until": "2026-08-22 12:00:00",
- "rm_resource_id": 5,
- "st_article_id": "DZ",
- "quantity": 2,
- "children": 0,
- "status": 0
}
]
}
}| id required | integer Example: 12345 Immer rm_booking_id. Einzelnes Zimmer nur über rm_item_id im Body/Query (IDs können identisch sein). |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "st_customer_id": "10001",
- "cms_address_id": 5001,
- "name": "Mustermann",
- "source": "api",
- "remark": "",
- "items": [
- {
- "rm_item_id": 9001,
- "from": "2026-08-20 12:00:00",
- "until": "2026-08-22 12:00:00",
- "rm_resource_id": 5,
- "st_article_id": "DZ",
- "quantity": 2,
- "children": 0,
- "status": 0
}
]
}
}URL-{id} ist immer rm_booking_id. Einzelnes Zimmer: rm_item_id im Body oder Query — nicht aus der URL raten, rm_item_id und rm_booking_id können denselben Wert haben.
| id required | integer Example: 12345 Immer rm_booking_id. Einzelnes Zimmer nur über rm_item_id im Body/Query (IDs können identisch sein). |
required | integer or string 1 / checkin = Check-In, 2 / checkout = Check-Out. |
| rm_item_id | integer Zimmer-/Buchungs-ID (swo_rm_items). Nur dieses Zimmer ein- oder auschecken. |
| room_number | string Alternative zu rm_item_id: Zimmernummer innerhalb der Belegung. |
| token | string Alternative zu rm_item_id: Zimmerkürzel innerhalb der Belegung. |
{- "status": "checkin",
- "rm_item_id": 9001
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "st_customer_id": "10001",
- "cms_address_id": 5001,
- "name": "Mustermann",
- "source": "api",
- "remark": "",
- "items": [
- {
- "rm_item_id": 9001,
- "from": "2026-08-20 12:00:00",
- "until": "2026-08-22 12:00:00",
- "rm_resource_id": 5,
- "st_article_id": "DZ",
- "quantity": 2,
- "children": 0,
- "status": 0
}
]
}
}URL-{id} ist immer rm_booking_id. Nur ein Zimmer: rm_item_id oder room_number im Body/Query. Ohne Angabe: alle Zimmer der Belegung.
| id required | integer Example: 12345 Immer rm_booking_id. Einzelnes Zimmer nur über rm_item_id im Body/Query (IDs können identisch sein). |
| rm_item_id | integer Nur dieses Zimmer (rm_item_id) |
| room_number | string Nur dieses Zimmer, per Zimmernummer |
{- "rm_item_id": 9001
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "st_customer_id": "10001",
- "cms_address_id": 5001,
- "name": "Mustermann",
- "source": "api",
- "remark": "",
- "items": [
- {
- "rm_item_id": 9001,
- "from": "2026-08-20 12:00:00",
- "until": "2026-08-22 12:00:00",
- "rm_resource_id": 5,
- "st_article_id": "DZ",
- "quantity": 2,
- "children": 0,
- "status": 0
}
]
}
}URL-{id} ist immer rm_booking_id. Nur ein Zimmer: rm_item_id oder room_number im Body/Query. Ohne Angabe: alle Zimmer der Belegung.
| id required | integer Example: 12345 Immer rm_booking_id. Einzelnes Zimmer nur über rm_item_id im Body/Query (IDs können identisch sein). |
| rm_item_id | integer Nur dieses Zimmer (rm_item_id) |
| room_number | string Nur dieses Zimmer, per Zimmernummer |
{- "rm_item_id": 9001
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "st_customer_id": "10001",
- "cms_address_id": 5001,
- "name": "Mustermann",
- "source": "api",
- "remark": "",
- "items": [
- {
- "rm_item_id": 9001,
- "from": "2026-08-20 12:00:00",
- "until": "2026-08-22 12:00:00",
- "rm_resource_id": 5,
- "st_article_id": "DZ",
- "quantity": 2,
- "children": 0,
- "status": 0
}
]
}
}Alias für GET /services. URL-{id} ist rm_booking_id. Optional rm_item_id oder external_id als zusätzlicher Filter. Noch nicht abgerechnete Leistungen sind enthalten (vk_voucher_no leer).
| id required | integer Example: 12345 Immer rm_booking_id. Einzelnes Zimmer nur über rm_item_id im Body/Query (IDs können identisch sein). |
| rm_item_id | integer Nur diese Zimmerposition |
| external_id | string Nur diese externe Referenz |
{- "code": 200,
- "message": "",
- "date": "2019-08-24T14:15:22Z",
- "request_id": 0,
- "data": [
- {
- "vk_position_pool_id": 0,
- "rm_booking_id": 0,
- "rm_item_id": 0,
- "st_article_id": "string",
- "text": "string",
- "quantity": 0,
- "time_quantity": 0,
- "price": 0,
- "price_net": 0,
- "price_gross": 0,
- "total": 0,
- "total_net": 0,
- "total_gross": 0,
- "tax": 0,
- "date": "2019-08-24",
- "date_from": "2019-08-24",
- "date_until": "2019-08-24",
- "vk_voucher_no": "string",
- "external_id": "string",
- "is_hidden": 0,
- "status": 0
}
]
}Alias für GET /documents?cms_object=rm_booking_id. Ohne Dateiinhalt.
| id required | integer Example: 12345 Immer rm_booking_id. Einzelnes Zimmer nur über rm_item_id im Body/Query (IDs können identisch sein). |
{- "code": 400,
- "message": "Ungültige oder fehlende Parameter",
- "date": "2026-10-01 12:36:20"
}Alias für POST /documents. Das PDF erscheint unter den Dokumenten der Belegung. Höchstgröße 2 MB. cms_object und id kommen aus der URL.
| id required | integer Example: 12345 Immer rm_booking_id. Einzelnes Zimmer nur über rm_item_id im Body/Query (IDs können identisch sein). |
| cms_object | string Pflicht bei POST /documents. Beim Alias /bookings/{id}/documents gesetzt. |
| id | integer Id des Zielobjekts |
| name | string Dateiname, Endung .pdf. Standard Ladenachweis.pdf |
| content_base64 required | string PDF-Inhalt, Base64. Nach dem Dekodieren höchstens 2 MB und Beginn %PDF. |
| rm_item_id | integer Optionale Zimmerposition der Belegung |
{- "name": "Ladenachweis.pdf",
- "rm_item_id": 17,
- "content_base64": "JVBERi0xLjQK"
}{- "code": 400,
- "message": "Ungültige oder fehlende Parameter",
- "date": "2026-10-01 12:36:20"
}Erstellt eine Rechnung (RE) über noch nicht abgerechnete Positionen. Sind alle Positionen schon auf einer Rechnung, wird diese zurückgegeben (HTTP 200). book_payment=1 verbucht eine Zahlung; amount ist dann Pflicht (Teilzahlungen möglich). Dieselbe reference verhindert Doppelbuchungen bei Timeouts.
| id required | integer Example: 12345 Immer rm_booking_id. Einzelnes Zimmer nur über rm_item_id im Body/Query (IDs können identisch sein). |
| st_voucher_type_id | string Belegart. Standard: RE. |
| st_payment_method_id | string Zahlungsweise. Standard: UE. |
| book_payment | integer Default: 0 Enum: 0 1 1 = Zahlung nach dem Anlegen verbuchen. Dann amount Pflicht. |
| reference | string Eindeutige Payment-ID des Terminals. Pflicht für sichere Wiederholung. |
| amount | number <float> Zahlungsbetrag. Pflicht bei book_payment=1. Darf den offenen Betrag nicht überschreiten. |
| date | string <date> Zahlungsdatum. Standard: jetzt. |
{- "st_payment_method_id": "CC",
- "book_payment": 1,
- "amount": 100,
- "reference": "term_123"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "vk_voucher_no": "RE-260001",
- "st_voucher_type_id": "RE",
- "voucher_date": "2026-10-01",
- "sum_gross": 290.88,
- "sum_opened": 0,
- "currency": "EUR",
- "st_payment_method_id": "CC",
- "payment_reference": "term_123",
- "payed_date": "2026-10-01",
- "status": 5,
- "fi_account_movement_id": 9001
}
}Verbucht eine (Teil-)Zahlung auf der offenen Rechnung der Belegung. amount ist Pflicht. Bevorzugt: POST /vouchers/{vk_voucher_no}/payment. Ohne vk_voucher_no die älteste offene Rechnung. Dieselbe reference gibt die bereits verbuchte Zahlung zurück (HTTP 200).
| id required | integer Example: 12345 Immer rm_booking_id. Einzelnes Zimmer nur über rm_item_id im Body/Query (IDs können identisch sein). |
| vk_voucher_no | string Optional. Leer = älteste offene Rechnung der Belegung. |
| st_payment_method_id | string |
| amount required | number <float> Zahlungsbetrag. Pflicht. Darf den offenen Betrag nicht überschreiten. |
| reference | string Eindeutige Payment-ID. |
| date | string <date> |
{- "st_payment_method_id": "CC",
- "amount": 100,
- "reference": "term_123"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "vk_voucher_no": "RE-260001",
- "st_voucher_type_id": "RE",
- "voucher_date": "2026-10-01",
- "sum_gross": 290.88,
- "sum_opened": 0,
- "currency": "EUR",
- "st_payment_method_id": "CC",
- "payment_reference": "term_123",
- "payed_date": "2026-10-01",
- "status": 5,
- "fi_account_movement_id": 9001
}
}Ersetzt die Kennzeichnungen eines Zimmers (VIP, Hund, Early Check-in, individuell angelegte Status). URL-{id} ist rm_booking_id. Ohne rm_item_id: alle Zimmer der Belegung.
| id required | integer Example: 12345 Immer rm_booking_id. Einzelnes Zimmer nur über rm_item_id im Body/Query (IDs können identisch sein). |
required | Array of strings or objects IDs, Token oder Namen. Leeres Array entfernt alle Kennzeichnungen. |
| rm_item_id | integer Nur dieses Zimmer |
| room_number | string |
{- "user_status": [
- "VIP",
- "Hund"
], - "rm_item_id": 9001
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "st_customer_id": "10001",
- "cms_address_id": 5001,
- "name": "Mustermann",
- "source": "api",
- "remark": "",
- "items": [
- {
- "rm_item_id": 9001,
- "from": "2026-08-20 12:00:00",
- "until": "2026-08-22 12:00:00",
- "rm_resource_id": 5,
- "st_article_id": "DZ",
- "quantity": 2,
- "children": 0,
- "status": 0
}
]
}
}Setzt cleaning_type, Gastwunsch und/oder Reinigungsliste (note2). URL-{id} ist rm_booking_id. Einzelnes Zimmer: rm_item_id oder room_number.
| id required | integer Example: 12345 Immer rm_booking_id. Einzelnes Zimmer nur über rm_item_id im Body/Query (IDs können identisch sein). |
| cleaning_type | string 0, 1, -1, -2, 1d–14d, mon–sun |
| cleaning_type_guest | integer Enum: -2 -1 0 1 |
| note2 | string Reinigungsliste |
| note | string Gästenotiz |
| rm_item_id | integer |
| room_number | string |
{- "cleaning_type": "0",
- "note2": "Extra Handtücher",
- "rm_item_id": 9001
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "st_customer_id": "10001",
- "cms_address_id": 5001,
- "name": "Mustermann",
- "source": "api",
- "remark": "",
- "items": [
- {
- "rm_item_id": 9001,
- "from": "2026-08-20 12:00:00",
- "until": "2026-08-22 12:00:00",
- "rm_resource_id": 5,
- "st_article_id": "DZ",
- "quantity": 2,
- "children": 0,
- "status": 0
}
]
}
}Benutzer des Mandanten. Nur Lesen. Auth: API-Host + HostLimitation auf die Schnittstelle users.
Benutzer, unabhängig vom Mandanten. Ein gesetztes cms_client_id wird verworfen. Standard nur aktive. Keine Passwörter oder Rechte. username ist der Login, exakt und ohne Wildcard.
| username | string Example: username=vitalis.ermanntraut Login, exakt und ohne Wildcard. Unbekannt: leere Liste, HTTP 200. |
| is_active | string Example: is_active=1 1 = nur aktive (Standard), 0 = nur gesperrte, all = alle |
| include_disabled | integer 1 = aktive und gesperrte (wie is_active=all) |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "source": "cache",
- "data": [
- {
- "bv_user_id": 12,
- "username": "polina",
- "first_name": "Polina",
- "name": "Ivanova",
- "is_active": 1,
- "display_name": "Polina Ivanova"
}
]
}| id required | integer Example: 12 bv_user_id |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "bv_user_id": 12,
- "username": "polina",
- "first_name": "Polina",
- "name": "Ivanova",
- "is_active": 1,
- "display_name": "Polina Ivanova"
}
}Dienstplan der Zeiterfassung: wer an einem Tag Schicht hat, je Tätigkeitsbereich. Nur Lesen. Auth: HostLimitation auf die Schnittstelle shifts.
Geplante Zuordnungen (status geplant). Gruppiert nach Tätigkeitsbereich. Schichten ohne Personal bleiben mit leerer personnel-Liste. Vorlagen zählen nicht.
| date | string <date> Example: date=2026-10-07 Kalendertag (Y-m-d). Standard: heute. |
| per_activity_id | integer Nur dieser Tätigkeitsbereich |
| st_branch_id | integer Nur diese Filiale |
| cms_client_id | integer Mandant-ID |
{- "code": 200,
- "message": "",
- "date": "2019-08-24T14:15:22Z",
- "request_id": 0,
- "day": "2019-08-24",
- "per_activity_id": 0,
- "st_branch_id": 0,
- "counts": { },
- "activities": [
- {
- "per_activity_id": 0,
- "activity": "string",
- "st_branch_id": 0,
- "shifts": [
- {
- "pze_shift_id": 0,
- "title": "string",
- "time_from": "string",
- "time_until": "string",
- "published": 0,
- "personnel": [
- {
- "per_personnel_id": 0,
- "name": "string"
}
]
}
]
}
]
}PDF-Dokumente an Objekte hängen. Belegungen erscheinen unter Dokumente der Belegung. Höchstgröße 2 MB.
| cms_object required | string Example: cms_object=rm_booking_id Zum Beispiel rm_booking_id |
| id required | integer Example: id=42 Id des Objekts |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 10:00:00",
- "request_id": 9003,
- "data": [
- {
- "cms_file_id": 501,
- "name": "Ladenachweis.pdf",
- "size": 84211,
- "mimetype": "application/pdf",
- "cms_object": "rm_booking_id",
- "id": 42,
- "cms_object2": "rm_item_id",
- "id2": "17",
- "created_date": "2026-10-01 10:00:00"
}
]
}Speichert ein PDF am Objekt. Bei cms_object rm_booking_id liegt die Datei unter den Dokumenten der Belegung (data/RM/{id}). Höchstgröße 2 MB.
| cms_object | string Pflicht bei POST /documents. Beim Alias /bookings/{id}/documents gesetzt. |
| id | integer Id des Zielobjekts |
| name | string Dateiname, Endung .pdf. Standard Ladenachweis.pdf |
| content_base64 required | string PDF-Inhalt, Base64. Nach dem Dekodieren höchstens 2 MB und Beginn %PDF. |
| rm_item_id | integer Optionale Zimmerposition der Belegung |
{- "cms_object": "rm_booking_id",
- "id": 42,
- "name": "Ladenachweis.pdf",
- "rm_item_id": 17,
- "content_base64": "JVBERi0xLjQK"
}{- "code": 201,
- "message": "",
- "date": "2026-10-01 10:00:00",
- "request_id": 9004,
- "cms_file_id": 501,
- "name": "Ladenachweis.pdf",
- "size": 84211
}Metadaten. Der Dateiinhalt wird nicht ausgeliefert. {id} ist cms_file_id.
| id required | integer Example: 501 cms_file_id |
{- "code": 401,
- "message": "Authentifizierung fehlgeschlagen",
- "date": "2026-10-01 12:36:20"
}Einheitlicher FiBu-Export-Endpoint. Unterstützt DATEV und Diamant. Format wird aus ClientSettings gelesen, kann per Parameter überschrieben werden.
Startet den FiBu-Export für den angegebenen Zeitraum.
Format-Auflösung: Parameter format > ClientSettings fibu_format > Fallback datev
Rückgabe: JSON mit download_url (TTL 1h) zur ZIP-Datei.
Positionen mit fehlenden FiBu-Konten werden in missing_fields zurückgegeben — der Export wird abgebrochen.
lock=true: Exportiert nur nicht-festgeschriebene Belege und schreibt diese nach erfolgreichem Export fest (GoBD-konform, is_transfered_fibu = 1). Verhindert Doppelexporte. Akzeptiert true/false und 1/0; ungültige Werte liefern HTTP 400. Die Response enthält locked_count und locked_vouchers mit den tatsächlich festgeschriebenen Belegen.
Hinweis: datev_xml exportiert nur Belegbilder (PDFs), keine Buchungssätze — missing_fields ist immer leer.
datev_both erzeugt ein äußeres ZIP mit Buchungsstapel.zip (CSV) und Belege.zip (XML/PDF). Fehlende FiBu-Konten kommen aus dem Buchungsstapel.
HTTP 422: Export hat keine Daten geliefert oder alle Positionen haben fehlende Konten.
| from required | string <date> Example: from=2024-06-01 Startdatum Y-m-d |
| until required | string <date> Example: until=2024-06-30 Enddatum Y-m-d |
| cms_client_id | integer Mandant-ID (Standard: aktiver Client) |
| lock | boolean Default: false Belege nach Export festschreiben (GoBD-konform). true/1 = nur nicht-festgeschriebene Belege exportieren + nach Export festschreiben. false/0 (Standard) = alle Belege exportieren, kein Festschreiben. Akzeptiert true, false, 1, 0 (Groß/Kleinschreibung egal). Ungültige Werte: HTTP 400. |
| format | string Enum: "datev" "datev_xml" "datev_both" "diamant" Export-Format (Standard aus ClientSettings: fibu_format).
|
| type[] | Array of strings Items Enum: "VK" "FI" "KB" Example: type[]=VK&type[]=FI Export-Typen (mehrfach angeben möglich). Default: alle drei. VK = Rechnungen/Gutschriften, FI = Zahlungen & Anzahlungen, KB = Kassenbuch |
{- "code": 200,
- "message": "",
- "date": "2024-06-01 10:00:00",
- "download_url": "/API/fibu/download?path=L3Zhci93d3cv...&token=1781250413.08d0...",
- "path": "L3Zhci93d3cvdml0YWxpc2VybWFubnRyYXV0...",
- "token": "1781250413.08d0db7238c10b6da0888842ac7bb25b...",
- "filename": "DATEV-2024-06-01-2024-06-30.zip",
- "format": "datev",
- "types": [
- "VK",
- "FI",
- "KB"
], - "locked": true,
- "locked_count": 2,
- "locked_vouchers": [
- {
- "type": "VK",
- "voucher_no": "RE-2024-001"
}, - {
- "type": "FI",
- "voucher_no": "RE-2024-001"
}
], - "missing_fields": [ ],
- "warnings": [ ]
}Liefert die ZIP-Datei des FiBu-Exports als Binary-Download. Der path- und token-Parameter kommen aus der download_url der Export-Response. Token ist 1 Stunde gültig.
| path required | string Base64-kodierter Dateipfad (aus download_url) |
| token required | string Signierter Download-Token (aus download_url) |
{- "code": 400,
- "message": "Ungültige oder fehlende Parameter",
- "date": "2026-10-01 12:36:20"
}Fundsachen anlegen, lesen und aktualisieren. Auth: API-Host + HostLimitation auf die Schnittstelle lostfound.
| limit | integer Example: limit=25 Treffer pro Seite (max. 250) |
| page | integer Example: page=1 Seite (ab 1) |
| cms_client_id | integer Mandant-ID |
| status | integer 0 = Offen, 4 = Erledigt |
| location | string Fundort (Teilstring) |
| date_from | string <date> Funddatum von (Y-m-d) |
| date_until | string <date> Funddatum bis (Y-m-d) |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "source": "cache",
- "data": [
- {
- "sp_lostfound_id": 42,
- "date": "2026-10-01",
- "title": "Schlüsselbund",
- "location": "101",
- "founder": "Hausdame",
- "content": "Am Nachttisch",
- "cms_address_id": 0,
- "status": 0,
- "status_label": "Offen"
}
]
}Legt eine Fundsache in Swoppen an (z. B. aus der Housekeeping-App).
| sp_lostfound_id | integer Interne ID (nur lesend) |
| date | string <date> Funddatum (Y-m-d) |
| title required | string Bezeichnung / Titel |
| location | string Fundort / Zimmer. Alternativ rm_resource_id / room_number beim Anlegen. |
| founder | string Gefunden von |
| content | string Beschreibung |
| cms_address_id | integer Optionale Gästeadresse |
| cms_client_id | integer |
| status | integer Enum: 0 4 0 = Offen, 4 = Erledigt. |
| status_label | string Offen / Erledigt (nur lesend) |
| created_date | string <date-time> |
| modified_date | string <date-time> |
| rm_resource_id | integer Zimmer-ID; setzt location auf das Kürzel, falls location leer. |
| room_number | string Zimmernummer als Fundort, falls location leer. |
| token | string Zimmerkürzel als Fundort, falls location leer. |
{- "title": "Schlüsselbund",
- "date": "2026-10-01",
- "location": "101",
- "founder": "Hausdame",
- "content": "Am Nachttisch",
- "room_number": "101"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "sp_lostfound_id": 42,
- "date": "2026-10-01",
- "title": "Schlüsselbund",
- "location": "101",
- "founder": "Hausdame",
- "content": "Am Nachttisch",
- "cms_address_id": 0,
- "status": 0,
- "status_label": "Offen"
}
}| id required | integer Example: 42 sp_lostfound_id |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "sp_lostfound_id": 42,
- "date": "2026-10-01",
- "title": "Schlüsselbund",
- "location": "101",
- "founder": "Hausdame",
- "content": "Am Nachttisch",
- "cms_address_id": 0,
- "status": 0,
- "status_label": "Offen"
}
}| id required | integer Example: 42 sp_lostfound_id |
| sp_lostfound_id | integer Interne ID (nur lesend) |
| date | string <date> Funddatum (Y-m-d) |
| title required | string Bezeichnung / Titel |
| location | string Fundort / Zimmer. Alternativ rm_resource_id / room_number beim Anlegen. |
| founder | string Gefunden von |
| content | string Beschreibung |
| cms_address_id | integer Optionale Gästeadresse |
| cms_client_id | integer |
| status | integer Enum: 0 4 0 = Offen, 4 = Erledigt. |
| status_label | string Offen / Erledigt (nur lesend) |
| created_date | string <date-time> |
| modified_date | string <date-time> |
| rm_resource_id | integer Zimmer-ID; setzt location auf das Kürzel, falls location leer. |
| room_number | string Zimmernummer als Fundort, falls location leer. |
| token | string Zimmerkürzel als Fundort, falls location leer. |
{- "status": 4,
- "founder": "Hausdame"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "sp_lostfound_id": 42,
- "date": "2026-10-01",
- "title": "Schlüsselbund",
- "location": "101",
- "founder": "Hausdame",
- "content": "Am Nachttisch",
- "cms_address_id": 0,
- "status": 0,
- "status_label": "Offen"
}
}Zimmer für einen Zeitraum sperren (Out of Order). Resource-ID ist rm_item_id. Auth: API-Host + HostLimitation auf die Schnittstelle locked-ranges.
Sperren (is_locked=1), standardmäßig ab heute. Überlappungsfilter über date_from / date_until.
| date_from | string <date> Example: date_from=2026-10-01 Nur Sperren mit until >= date_from. Standard: heute. |
| date_until | string <date> Nur Sperren mit from <= date_until. |
| rm_resource_id | integer Nur dieses Zimmer |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "source": "cache",
- "data": [
- {
- "rm_item_id": 9001,
- "rm_resource_id": 12,
- "token": "DZ-101",
- "from": "2026-09-10 12:00:00",
- "until": "2026-09-15 12:00:00",
- "note": "Renovierung",
- "color": "#641e16"
}
]
}Legt eine oder mehrere Sperren an. Bei mehreren rm_resource_id ist data ein Array. HTTP 409 wenn das Zimmer im Zeitraum belegt oder bereits gesperrt ist.
required | integer or Array of integers Ein Zimmer oder mehrere. |
| from required | string <date> |
| until required | string <date> |
| note | string |
| color | string |
{- "rm_resource_id": 12,
- "from": "2026-09-10",
- "until": "2026-09-15",
- "note": "Renovierung"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_item_id": 9001,
- "rm_resource_id": 12,
- "token": "DZ-101",
- "from": "2026-09-10 12:00:00",
- "until": "2026-09-15 12:00:00",
- "note": "Renovierung",
- "color": "#641e16"
}
}| id required | integer rm_item_id |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_item_id": 9001,
- "rm_resource_id": 12,
- "token": "DZ-101",
- "from": "2026-09-10 12:00:00",
- "until": "2026-09-15 12:00:00",
- "note": "Renovierung",
- "color": "#641e16"
}
}| id required | integer rm_item_id |
required | integer or Array of integers Ein Zimmer oder mehrere. |
| from required | string <date> |
| until required | string <date> |
| note | string |
| color | string |
{- "rm_resource_id": 12,
- "from": "2026-09-10",
- "until": "2026-09-15",
- "note": "Renovierung",
- "color": "#641e16"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_item_id": 9001,
- "rm_resource_id": 12,
- "token": "DZ-101",
- "from": "2026-09-10 12:00:00",
- "until": "2026-09-15 12:00:00",
- "note": "Renovierung",
- "color": "#641e16"
}
}| id required | integer rm_item_id |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_item_id": 9001,
- "rm_resource_id": 12,
- "token": "DZ-101",
- "from": "2026-09-10 12:00:00",
- "until": "2026-09-15 12:00:00",
- "note": "Renovierung",
- "color": "#641e16"
}
}Kundenstammdaten (Adresse, Person, Debitor). Resource-ID ist st_customer_id. Auth: API-Host + HostLimitation auf die Schnittstelle customers.
Paginierte Liste aus dem Kundenadresskatalog.
| limit | integer Example: limit=25 Treffer pro Seite |
| page | integer Example: page=1 Seite (ab 1) |
| cms_client_id | integer Mandant-ID (Standard: aktiver Client) |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "source": "cache",
- "data": [
- {
- "st_customer_id": "10001",
- "key_name": "Mustermann, Max",
- "name": "Mustermann",
- "first_name": "Max",
- "street": "Musterstraße 1",
- "zip": "10115",
- "location": "Berlin",
- "email": "max@example.com"
}
]
}Legt Kunde, Adresse und Person an. Ohne st_customer_id wird die nächste freie Nummer vergeben.
| st_customer_id | string Kunden-Nr. |
| cms_client_id | integer |
| cms_address_id | integer |
| cms_person_id | integer |
| cms_address_catalogue_id | integer |
| key_name | string Suchname |
| company | string |
| name | string |
| first_name | string |
| title | string |
| sex | string Enum: "m" "w" "d" "" |
| birthdate | string <date> |
| address | string Anrede |
| street | string |
| zip | string |
| location | string |
| cms_country_iso_code | string |
| tel1 | string |
| mobile | string |
| fax | string |
string <email> | |
| email2 | string <email> |
| email_invoice | string <email> |
| www | string |
| vat_id | string |
| tax_id | string |
| st_account_id | string Debitorenkonto |
| st_payment_method_id | string Zahlungsweise |
| st_payment_target_id | string |
| st_payment_agreement_id | string |
| st_price_list_id | string |
| st_delivery_term_id | string |
| st_federation_id | string |
| credit_limit | number |
| discount_procent | number |
| customer_from | string <date> |
| customer_until | string <date> |
| remark | string |
{- "name": "Mustermann",
- "first_name": "Max",
- "street": "Musterstraße 1",
- "zip": "10115",
- "location": "Berlin",
- "email": "max@example.com"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "st_customer_id": "10001",
- "key_name": "Mustermann, Max",
- "name": "Mustermann",
- "first_name": "Max",
- "street": "Musterstraße 1",
- "zip": "10115",
- "location": "Berlin",
- "email": "max@example.com"
}
}| id required | string Example: 10001 Kunden-Nr. (st_customer_id) |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "st_customer_id": "10001",
- "key_name": "Mustermann, Max",
- "name": "Mustermann",
- "first_name": "Max",
- "street": "Musterstraße 1",
- "zip": "10115",
- "location": "Berlin",
- "email": "max@example.com"
}
}Teilupdate. PUT und PATCH sind ebenfalls erlaubt.
| id required | string Example: 10001 Kunden-Nr. (st_customer_id) |
| st_customer_id | string Kunden-Nr. |
| cms_client_id | integer |
| cms_address_id | integer |
| cms_person_id | integer |
| cms_address_catalogue_id | integer |
| key_name | string Suchname |
| company | string |
| name | string |
| first_name | string |
| title | string |
| sex | string Enum: "m" "w" "d" "" |
| birthdate | string <date> |
| address | string Anrede |
| street | string |
| zip | string |
| location | string |
| cms_country_iso_code | string |
| tel1 | string |
| mobile | string |
| fax | string |
string <email> | |
| email2 | string <email> |
| email_invoice | string <email> |
| www | string |
| vat_id | string |
| tax_id | string |
| st_account_id | string Debitorenkonto |
| st_payment_method_id | string Zahlungsweise |
| st_payment_target_id | string |
| st_payment_agreement_id | string |
| st_price_list_id | string |
| st_delivery_term_id | string |
| st_federation_id | string |
| credit_limit | number |
| discount_procent | number |
| customer_from | string <date> |
| customer_until | string <date> |
| remark | string |
{- "email": "neu@example.com",
- "tel1": "+493012345"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "st_customer_id": "10001",
- "key_name": "Mustermann, Max",
- "name": "Mustermann",
- "first_name": "Max",
- "street": "Musterstraße 1",
- "zip": "10115",
- "location": "Berlin",
- "email": "max@example.com"
}
}| id required | string Example: 10001 Kunden-Nr. (st_customer_id) |
| st_customer_id | string Kunden-Nr. |
| cms_client_id | integer |
| cms_address_id | integer |
| cms_person_id | integer |
| cms_address_catalogue_id | integer |
| key_name | string Suchname |
| company | string |
| name | string |
| first_name | string |
| title | string |
| sex | string Enum: "m" "w" "d" "" |
| birthdate | string <date> |
| address | string Anrede |
| street | string |
| zip | string |
| location | string |
| cms_country_iso_code | string |
| tel1 | string |
| mobile | string |
| fax | string |
string <email> | |
| email2 | string <email> |
| email_invoice | string <email> |
| www | string |
| vat_id | string |
| tax_id | string |
| st_account_id | string Debitorenkonto |
| st_payment_method_id | string Zahlungsweise |
| st_payment_target_id | string |
| st_payment_agreement_id | string |
| st_price_list_id | string |
| st_delivery_term_id | string |
| st_federation_id | string |
| credit_limit | number |
| discount_procent | number |
| customer_from | string <date> |
| customer_until | string <date> |
| remark | string |
{- "st_customer_id": "10001",
- "cms_client_id": 0,
- "cms_address_id": 0,
- "cms_person_id": 0,
- "cms_address_catalogue_id": 0,
- "key_name": "Mustermann, Max",
- "company": "string",
- "name": "Mustermann",
- "first_name": "Max",
- "title": "string",
- "sex": "m",
- "birthdate": "2019-08-24",
- "address": "string",
- "street": "string",
- "zip": "string",
- "location": "string",
- "cms_country_iso_code": "DE",
- "tel1": "string",
- "mobile": "string",
- "fax": "string",
- "email": "user@example.com",
- "email2": "user@example.com",
- "email_invoice": "user@example.com",
- "www": "string",
- "vat_id": "string",
- "tax_id": "string",
- "st_account_id": "string",
- "st_payment_method_id": "string",
- "st_payment_target_id": "string",
- "st_payment_agreement_id": "string",
- "st_price_list_id": "string",
- "st_delivery_term_id": "string",
- "st_federation_id": "string",
- "credit_limit": 0,
- "discount_procent": 0,
- "customer_from": "2019-08-24",
- "customer_until": "2019-08-24",
- "remark": "string"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "st_customer_id": "10001",
- "key_name": "Mustermann, Max",
- "name": "Mustermann",
- "first_name": "Max",
- "street": "Musterstraße 1",
- "zip": "10115",
- "location": "Berlin",
- "email": "max@example.com"
}
}Löscht Kunde, Adresse und Person. HTTP 409 wenn der Datensatz noch verwendet wird (Belege, Buchungen, Zuordnungen).
| id required | string Example: 10001 Kunden-Nr. (st_customer_id) |
{- "code": 400,
- "message": "Ungültige oder fehlende Parameter",
- "date": "2026-10-01 12:36:20"
}Projekte
| pms_type_id required | number Typ Mögliche Werte: Intern = Intern Kundenauftrag = Kundenauftrag |
| pms_project_no required | string Projekt-Nr. |
| name required | string Titel |
| description | string Beschreibung |
| status_description | string Status |
| st_customer_id | string Kunden-Nr. |
| per_personnel_id | integer |
| status | number Status Mögliche Werte: 1 = Aktiv 0 = Inaktiv |
| progress | integer Fortschritt Prozent |
| scheduled_start | string <date> Beginn |
| scheduled_end | string <date> Ende |
| cms_address_id | integer |
[ ]Projekte
| limit | integer <= 250 Default: 25 Example: limit=25 Anzahl der Elemente, die pro Seite zurückgegeben werden |
| page | integer Default: 0 Auflistung der Elemente ab Seite |
| progress | string Fortschritt |
| pms_project_no | string Projekt-Nr. |
| name | string Name |
| pms_type_id | string Enum: "Intern" "Kundenauftrag" Typ Mögliche Werte: Intern = Intern Kundenauftrag = Kundenauftrag |
| st_customer_id | string Kunden-Nr. |
| key_name | string Suchname |
| responsible_person | string Verantwortlicher |
| scheduled_start | string Beginn |
| scheduled_end | string Ende |
| status | integer Enum: 1 2 Status Mögliche Werte: 1 = Aktiv 2 = Inaktiv |
{- "data": [
- {
- "pms_type_id": 0,
- "pms_project_no": "string",
- "name": "string",
- "description": "string",
- "status_description": "string",
- "st_customer_id": "string",
- "per_personnel_id": 0,
- "status": 0,
- "progress": 0,
- "scheduled_start": "2019-08-24",
- "scheduled_end": "2019-08-24",
- "cms_address_id": 0
}
], - "pagination": {
- "limit": 25,
- "page": 0,
- "total": 0
}, - "code": 0,
- "message": "string",
- "date": "2019-08-24T14:15:22Z"
}Projekte
| pms_project_id required | integer |
| pms_type_id required | number Typ Mögliche Werte: Intern = Intern Kundenauftrag = Kundenauftrag |
| pms_project_no required | string Projekt-Nr. |
| name required | string Titel |
| description | string Beschreibung |
| status_description | string Status |
| st_customer_id | string Kunden-Nr. |
| per_personnel_id | integer |
| status | number Status Mögliche Werte: 1 = Aktiv 0 = Inaktiv |
| progress | integer Fortschritt Prozent |
| scheduled_start | string <date> Beginn |
| scheduled_end | string <date> Ende |
| cms_address_id | integer |
""Projekte
| pms_project_id required | integer |
{- "pms_type_id": 0,
- "pms_project_no": "string",
- "name": "string",
- "description": "string",
- "status_description": "string",
- "st_customer_id": "string",
- "per_personnel_id": 0,
- "status": 0,
- "progress": 0,
- "scheduled_start": "2019-08-24",
- "scheduled_end": "2019-08-24",
- "cms_address_id": 0
}Vorberechnete und Live-Daten für Revenue Management Systeme. Cache-Strategie: occupancy/bookings/forecast via Cache (TTL 1h), rates live.
Tägliche oder monatliche Belegungs-KPIs. rooms_available ist die Zimmerkapazität, arrivals/departures die An- und Abreisen. cms_client_id ist die Mandanten-ID. Cache TTL 1h.
| date_from required | string <date> Example: date_from=2024-06-01 Startdatum Y-m-d |
| date_until required | string <date> Example: date_until=2024-06-30 Enddatum Y-m-d |
| cms_client_id | integer Mandant-ID (Standard: aktiver Client) |
| granularity | string Default: "daily" Enum: "daily" "monthly" Aggregierungsebene |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "source": "cache",
- "data": [
- {
- "date": "2024-06-01",
- "cms_client_id": 1,
- "rooms_available": 100,
- "rooms_occupied": 78,
- "oop": 2,
- "arrivals": 12,
- "departures": 8,
- "occupancy_pct": 78
}
]
}Raten je Zimmerkategorie und Tag. Tagespreis aus swo_rm_article_contingents, sonst Listenpreis aus swo_st_prices. Immer live (kein Cache).
| date_from required | string <date> Example: date_from=2024-06-01 Startdatum Y-m-d |
| date_until required | string <date> Example: date_until=2024-06-30 Enddatum Y-m-d |
| cms_client_id | integer Mandant-ID (Standard: aktiver Client) |
| st_price_list_id | string Preisliste (Standard: Mandanten-Preisliste) |
| st_article_id | string Nur diese Zimmerkategorie |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "source": "cache",
- "data": [
- {
- "date": "2024-06-01",
- "cms_client_id": 1,
- "st_article_id": "DZ",
- "st_price_list_id": "STANDARD",
- "price": 129,
- "price1": 109,
- "currency": "EUR",
- "minimum": 1
}
]
}Schreibt Raten in swo_rm_article_contingents. Existierende Einträge werden aktualisiert (is_rate_modified = 1), neue angelegt. Preisliste aus ClientSettings, überschreibbar per st_price_list_id.
| cms_client_id | integer Mandant-ID |
| st_article_id required | integer Zimmerkategorie-ID |
| date required | string <date> Datum Y-m-d |
| price required | number <float> Neuer Preis |
| st_price_list_id | integer Preislisten-ID (optional, Standard aus ClientSettings) |
[- {
- "st_article_id": 5,
- "date": "2024-06-01",
- "price": 129
}, - {
- "st_article_id": 5,
- "date": "2024-06-02",
- "price": 149,
- "st_price_list_id": 3
}
]{- "code": 400,
- "message": "Ungültige oder fehlende Parameter",
- "date": "2026-10-01 12:36:20"
}Aggregierte Buchungszahlen nach Anreisetag, Channel (b.source) und Zimmerkategorie. Cache TTL 1h.
| date_from required | string <date> Example: date_from=2024-06-01 Startdatum Y-m-d |
| date_until required | string <date> Example: date_until=2024-06-30 Enddatum Y-m-d |
| cms_client_id | integer Mandant-ID (Standard: aktiver Client) |
| granularity | string Default: "daily" Enum: "daily" "monthly" Aggregierungsebene |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "source": "cache",
- "data": [
- {
- "booking_date": "2024-06-01",
- "cms_client_id": 1,
- "source": "booking.com",
- "st_article_id": 5,
- "bookings_count": 12,
- "room_nights": 18
}
]
}OTB-Stand je Tag: Belegung und Umsatz (Logis, F&B, Sonstiges) anteilig verteilt. Cache TTL 1h. budget_revenue / variance_pct sind null bis Budget-System angebunden.
| date_from required | string <date> Example: date_from=2024-06-01 Startdatum Y-m-d |
| date_until required | string <date> Example: date_until=2024-06-30 Enddatum Y-m-d |
| cms_client_id | integer Mandant-ID (Standard: aktiver Client) |
| granularity | string Default: "daily" Enum: "daily" "monthly" Aggregierungsebene |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "source": "cache",
- "data": [
- {
- "forecast_date": "2024-06-01",
- "cms_client_id": 1,
- "granularity": "daily",
- "rooms_otb": 78,
- "rooms_available": 100,
- "occupancy_pct": 78,
- "room_rev_otb": 9360,
- "fb_rev_otb": 1240,
- "other_rev_otb": 200,
- "budget_revenue": null,
- "variance_pct": null
}
]
}Leistungen auf Buchungen, Zimmer oder Gäste buchen und auslesen. external_id verhindert Doppelbuchungen bei Wiederholung.
Leistungen einer Belegung, Zimmerposition oder external_id. Einschließlich noch nicht abgerechneter Positionen. Enthaltene Stücklistenpositionen fehlen. Mindestens ein Filter ist Pflicht.
| rm_booking_id | integer Belegungs-ID |
| rm_item_id | integer Zimmerposition |
| external_id | string Externe Auftragsreferenz |
| cms_client_id | integer Mandant-ID |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 10:00:00",
- "request_id": 9001,
- "data": [
- {
- "vk_position_pool_id": 1042,
- "rm_booking_id": 42,
- "rm_item_id": 17,
- "st_article_id": "LADEN",
- "text": "Ladung",
- "quantity": 12.5,
- "time_quantity": 1,
- "price": 0.49,
- "price_net": 0.4118,
- "price_gross": 0.49,
- "total": 6.125,
- "total_net": 5.15,
- "total_gross": 6.13,
- "tax": 19,
- "date": "2026-10-01",
- "date_from": "2026-10-01",
- "date_until": null,
- "vk_voucher_no": "",
- "external_id": "LADE-2026-0001",
- "is_hidden": 0,
- "status": 0
}
]
}Bucht eine oder mehrere Leistungen.
Einzelbuchung: HTTP 201 bei neuer Position, HTTP 200 wenn external_id schon existiert.
Batch: HTTP 207. Jede Position hat ein eigenes success-Flag.
Gespeichert ist eine Leistung nur bei success: true und gesetzter vk_position_pool_id.
Keine Zeile bei Validierung, fehlendem Steuerschlüssel oder unbekannter Zimmerposition.
Check-out verhindert die Buchung nicht. Dann ist warning gesetzt.
Preis und Menge: JSON-Zahl mit Punkt oder String mit Dezimalkomma ("0,49", "12,5").
| cms_object required | string Enum: "rm_booking_id" "rm_item_id" "cms_address_id" "sp_ticket_id" Typ des Zielobjekts. rm_item_id wird auf die Belegung gebucht, die Zimmerposition bleibt in rm_item_id. |
| id required | integer ID des Zielobjekts |
| rm_booking_id | integer Buchungs-ID. Wird bei cms_object=rm_item_id aus der Zimmerposition ermittelt. |
| rm_item_id | integer Zimmerposition. Pflicht, wenn die Leistung einem Zimmer gehören soll und cms_object nicht schon rm_item_id ist. |
| cms_address_id | integer Gast-Adress-ID (wenn service_for = guest) |
| cms_client_id | integer Mandant-ID (Standard: aktiver Client) |
| st_article_id required | string Artikel-ID |
| price required | number <float> Stückpreis mit Punkt oder als String mit Dezimalkomma. Bedeutung folgt der Preisart des Mandanten (netto bei isNetPricing, sonst brutto). Rundung auf vier Nachkommastellen. Beispiel 0.49 oder "0,49". |
| quantity | number <float> Default: 1 Menge mit Punkt oder Dezimalkomma. Standard 1. |
| time_quantity | number <float> Default: 1 Zeitmenge. Bei Stück und Ressource wird sie auf 1 gesetzt. |
| st_quantity_unit_id required | string Mengeneinheit-ID |
| tax | integer or null Steuersatz in Prozent (19, 7, 0). Optional. Ohne Angabe gilt der Standard-Umsatzsteuerschlüssel am Leistungsdatum. Alternativ st_tk_id. |
| st_tk_id | integer Steuerschlüssel. Hat Vorrang vor tax. |
| pos_discount | number <float> Default: 0 Rabatt in Prozent |
| date | string <date> Leistungsdatum Y-m-d. Pflicht, wenn date_from fehlt. |
| date_from | string <date> Beginn Y-m-d. Pflicht, wenn date fehlt. |
| date_until | string <date> Ende Y-m-d |
| text | string Leistungstext |
| description | string Beschreibung |
| is_hidden | integer Default: 0 Enum: 0 1 1 blendet die Position auf Belegen aus. Die Belegnummer vk_voucher_no entsteht erst bei der Rechnung und ist vorher leer. |
| is_included | integer Default: 0 Enum: 0 1 Leistung ist im Paketpreis enthalten |
| external_id | string <= 50 characters Externe Auftragsreferenz. Dieselbe Id im Mandanten erzeugt keine zweite Leistung, solange die Position existiert. Kassenimporte mit eigener Gerätezuordnung zählen nicht mit. Eine eigene Vorsilbe vermeidet Kollisionen. Leer lassen, wenn kein Schutz nötig ist. |
{- "cms_object": "rm_item_id",
- "id": 17,
- "cms_client_id": 1,
- "st_article_id": "LADEN",
- "price": 0.49,
- "quantity": 12.5,
- "time_quantity": 1,
- "st_quantity_unit_id": "St.",
- "tax": 19,
- "date": "2026-10-01",
- "text": "Ladung",
- "is_hidden": 0,
- "external_id": "LADE-2026-0001"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 10:00:00",
- "request_id": 9002,
- "results": [
- {
- "_index": 0,
- "success": true,
- "vk_position_pool_id": 1042,
- "external_id": "LADE-2026-0001",
- "idempotent": true,
- "warning": "",
- "message": ""
}
]
}Dynamisches CRUD für Stammdaten. Entity-Slug in der URL, z.B. /masterdata/articles, /masterdata/payment_methods. GET /masterdata liefert den Katalog. Auth: API-Host + HostLimitation auf die Schnittstelle masterdata.
Liste der verfügbaren Entitäten inkl. Slug, Titel und erlaubten Operationen.
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "source": "cache",
- "data": [
- {
- "entity": "payment_methods",
- "title": "Zahlungsweisen"
}
]
}Paginierte Liste. Filter aus dem ORM der Entität als Query-Parameter.
| entity required | string Enum: "accounts" "accounting_texts" "article_group_mains" "article_groups" "article_models" "articles" "branches" "cancellations" "cost_centres" "currencies" "currency_courses" "delivery_terms" "departments" "federations" "inventory_stocks" "inventory_voucher_types" "number_ranges" "order_types" "payment_agreements" "payment_methods" "payment_plans" "payment_targets" "price_lists" "prices" "purchase_voucher_types" "qualifications" "quantity_units" "sales_prefillings" "sales_tax" "sales_voucher_types" "shipping" "tax_classes" "tax_keys" "tax_types" Stammdaten-Entität (siehe GET /masterdata) |
| limit | integer Example: limit=25 Treffer pro Seite |
| page | integer Seite |
| cms_client_id | integer Mandant-ID (Standard: aktiver Client) |
{- "code": 200,
- "message": "",
- "date": "2019-08-24T14:15:22Z",
- "request_id": 0,
- "data": [
- { }
]
}| entity required | string Enum: "accounts" "accounting_texts" "article_group_mains" "article_groups" "article_models" "articles" "branches" "cancellations" "cost_centres" "currencies" "currency_courses" "delivery_terms" "departments" "federations" "inventory_stocks" "inventory_voucher_types" "number_ranges" "order_types" "payment_agreements" "payment_methods" "payment_plans" "payment_targets" "price_lists" "prices" "purchase_voucher_types" "qualifications" "quantity_units" "sales_prefillings" "sales_tax" "sales_voucher_types" "shipping" "tax_classes" "tax_keys" "tax_types" Stammdaten-Entität (siehe GET /masterdata) |
| property name* additional property | any |
{ }{- "code": 200,
- "message": "",
- "date": "2019-08-24T14:15:22Z",
- "request_id": 0,
- "data": { }
}| entity required | string Enum: "accounts" "accounting_texts" "article_group_mains" "article_groups" "article_models" "articles" "branches" "cancellations" "cost_centres" "currencies" "currency_courses" "delivery_terms" "departments" "federations" "inventory_stocks" "inventory_voucher_types" "number_ranges" "order_types" "payment_agreements" "payment_methods" "payment_plans" "payment_targets" "price_lists" "prices" "purchase_voucher_types" "qualifications" "quantity_units" "sales_prefillings" "sales_tax" "sales_voucher_types" "shipping" "tax_classes" "tax_keys" "tax_types" Stammdaten-Entität (siehe GET /masterdata) |
| id required | string Example: 1 Datensatz-ID (Zahl oder String, z.B. BAR bei Zahlungsweisen) |
{- "code": 200,
- "message": "",
- "date": "2019-08-24T14:15:22Z",
- "request_id": 0,
- "data": { }
}PUT und PATCH sind ebenfalls erlaubt.
| entity required | string Enum: "accounts" "accounting_texts" "article_group_mains" "article_groups" "article_models" "articles" "branches" "cancellations" "cost_centres" "currencies" "currency_courses" "delivery_terms" "departments" "federations" "inventory_stocks" "inventory_voucher_types" "number_ranges" "order_types" "payment_agreements" "payment_methods" "payment_plans" "payment_targets" "price_lists" "prices" "purchase_voucher_types" "qualifications" "quantity_units" "sales_prefillings" "sales_tax" "sales_voucher_types" "shipping" "tax_classes" "tax_keys" "tax_types" Stammdaten-Entität (siehe GET /masterdata) |
| id required | string Example: 1 Datensatz-ID (Zahl oder String, z.B. BAR bei Zahlungsweisen) |
| property name* additional property | any |
{ }{- "code": 200,
- "message": "",
- "date": "2019-08-24T14:15:22Z",
- "request_id": 0,
- "data": { }
}| entity required | string Enum: "accounts" "accounting_texts" "article_group_mains" "article_groups" "article_models" "articles" "branches" "cancellations" "cost_centres" "currencies" "currency_courses" "delivery_terms" "departments" "federations" "inventory_stocks" "inventory_voucher_types" "number_ranges" "order_types" "payment_agreements" "payment_methods" "payment_plans" "payment_targets" "price_lists" "prices" "purchase_voucher_types" "qualifications" "quantity_units" "sales_prefillings" "sales_tax" "sales_voucher_types" "shipping" "tax_classes" "tax_keys" "tax_types" Stammdaten-Entität (siehe GET /masterdata) |
| id required | string Example: 1 Datensatz-ID (Zahl oder String, z.B. BAR bei Zahlungsweisen) |
| property name* additional property | any |
{ }{- "code": 200,
- "message": "",
- "date": "2019-08-24T14:15:22Z",
- "request_id": 0,
- "data": { }
}| entity required | string Enum: "accounts" "accounting_texts" "article_group_mains" "article_groups" "article_models" "articles" "branches" "cancellations" "cost_centres" "currencies" "currency_courses" "delivery_terms" "departments" "federations" "inventory_stocks" "inventory_voucher_types" "number_ranges" "order_types" "payment_agreements" "payment_methods" "payment_plans" "payment_targets" "price_lists" "prices" "purchase_voucher_types" "qualifications" "quantity_units" "sales_prefillings" "sales_tax" "sales_voucher_types" "shipping" "tax_classes" "tax_keys" "tax_types" Stammdaten-Entität (siehe GET /masterdata) |
| id required | string Example: 1 Datensatz-ID (Zahl oder String, z.B. BAR bei Zahlungsweisen) |
{- "code": 400,
- "message": "Ungültige oder fehlende Parameter",
- "date": "2026-10-01 12:36:20"
}Tagesgeschäft der Hotel-Belegungen: Anreisen, Abreisen, Gäste im Haus, Bleiber und offene Salden. Nur Lesen. Pfad /bookings/dayboard. Auth: HostLimitation auf die Schnittstelle bookings.
Anreisen, Abreisen, Gäste im Haus (Übernachtung ohne Abreisetag), Bleiber und offene Salden. Zähler in counts sind Zimmerzeilen. open_amount summiert jede Belegung einmal.
| date | string <date> Example: date=2026-10-07 Kalendertag (Y-m-d). Standard: heute. |
| section | string Enum: "arrivals" "departures" "in_house" "stayovers" "open_balances" Nur diese Liste. counts bleibt der ganze Tag. |
| cms_client_id | integer Mandant-ID |
{- "code": 200,
- "message": "",
- "date": "2019-08-24T14:15:22Z",
- "request_id": 0,
- "day": "2019-08-24",
- "section": "string",
- "counts": { },
- "arrivals": [
- {
- "rm_item_id": 0,
- "rm_booking_id": 0,
- "rm_booking_no": "string",
- "rm_resource_id": 0,
- "guest": "string",
- "company": "string",
- "room": "string",
- "arrival": "2019-08-24",
- "departure": "2019-08-24",
- "nights": 0,
- "status": 0,
- "status_label": "string",
- "persons": 0,
- "children": 0,
- "sum_open": 0.1,
- "note": "string"
}
], - "departures": [
- {
- "rm_item_id": 0,
- "rm_booking_id": 0,
- "rm_booking_no": "string",
- "rm_resource_id": 0,
- "guest": "string",
- "company": "string",
- "room": "string",
- "arrival": "2019-08-24",
- "departure": "2019-08-24",
- "nights": 0,
- "status": 0,
- "status_label": "string",
- "persons": 0,
- "children": 0,
- "sum_open": 0.1,
- "note": "string"
}
], - "in_house": [
- {
- "rm_item_id": 0,
- "rm_booking_id": 0,
- "rm_booking_no": "string",
- "rm_resource_id": 0,
- "guest": "string",
- "company": "string",
- "room": "string",
- "arrival": "2019-08-24",
- "departure": "2019-08-24",
- "nights": 0,
- "status": 0,
- "status_label": "string",
- "persons": 0,
- "children": 0,
- "sum_open": 0.1,
- "note": "string"
}
], - "stayovers": [
- {
- "rm_item_id": 0,
- "rm_booking_id": 0,
- "rm_booking_no": "string",
- "rm_resource_id": 0,
- "guest": "string",
- "company": "string",
- "room": "string",
- "arrival": "2019-08-24",
- "departure": "2019-08-24",
- "nights": 0,
- "status": 0,
- "status_label": "string",
- "persons": 0,
- "children": 0,
- "sum_open": 0.1,
- "note": "string"
}
], - "open_balances": [
- {
- "rm_booking_id": 0,
- "rm_booking_no": "string",
- "guest": "string",
- "company": "string",
- "sum_open": 0.1,
- "rooms": [
- "string"
], - "lists": [
- "arrivals"
]
}
]
}Tickets
| cms_address_id | integer |
| cms_facility_id | integer |
| cl_checklist_id | integer |
| st_article_id | integer |
| st_cost_centre_id | integer |
| pms_project_id | integer |
| cms_contacting_id | integer |
| auf_task_id | integer |
| rm_item_id | integer |
| rm_booking_id | integer |
| pze_shift_id | integer |
| task | string |
| azn_time | string |
| st_customer_id | string Kunden-Nr. |
| to_clear | boolean Abrechnen |
| date required | string <date-time> Fällig |
| estimated_time | string Erwartete Dauer Min. |
| subject required | string Titel |
| content | string Beschreibung |
| remark | string Notiz |
| priority required | number Priorität Mögliche Werte: 1 = Blocker 2 = Kritisch 6 = Hoch 3 = Normal 4 = Geringfügig 5 = Trivial |
| status | number Status Mögliche Werte: 0 = Neu 1 = Offen 2 = In Bearbeitung 7 = Warte auf Freigabe 8 = Freigabe 6 = Klärung 3 = Wiedervorlage 4 = Erledigt 5 = Archiviert 9 = Abgelehnt default = Neu |
| sp_type_id | number Typ Mögliche Werte: 1 = Beispieltyp |
| sp_ticket_category_id | number Kategorie Mögliche Werte: 3 = adsf 2 = Housekeeping 1 = Rezepzion |
| per_activity_id | number Bereich Mögliche Werte: 2 = Entwicklung 4 = Marketing 3 = Service 1 = Anmeldung |
| bv_usergroup_id | number Benutzergruppe Mögliche Werte: 9 = restaurant 4 = Rezeption 5 = Stempeluhr |
| bv_user_id | integer |
| creator | string Ersteller |
| tags | string Tags |
{- "priority": 3,
- "date": "2026-10-01 12:36:00",
- "status": 0,
- "subject": "Heizung defekt",
- "content": "Die Heizung in Raum 2 fällt ständig aus."
}Tickets. Ohne cms_client_id gilt für diesen Zugang cms_client_id=1.
| limit | integer <= 250 Default: 25 Example: limit=25 Anzahl der Elemente, die pro Seite zurückgegeben werden |
| page | integer Default: 0 Auflistung der Elemente ab Seite |
| to_clear | string |
| sp_ticket_id | string ID |
| title | string Titel |
| subject | string Titel |
| content | string Beschreibung |
| category | integer Enum: 3 2 1 Kategorie Mögliche Werte: 3 = adsf 2 = Housekeeping 1 = Rezepzion |
| type | integer Value: 1 Typ Mögliche Werte: 1 = Beispieltyp |
| project | string Projekt |
| st_customer_id | string Kunden-Nr. |
| detector | string Melder |
| usergroup | string Gruppe |
| creator | string Erstellt von |
| editor | string Bearbeiter |
| date | string Fällig |
| date_time | string Uhrzeit |
| estimated_time | string Soll |
| actual_time | string Ist |
| created_date | string Erstellt am |
| modified_date | string Geändert am |
| closed_date | string Geschlossen am |
| status | integer Enum: 1 2 9 4 5 7 8 6 3 Status Mögliche Werte: 1 = Offen 2 = In Bearbeitung 9 = Abgelehnt 4 = Erledigt 5 = Archiviert 7 = Warte auf Freigabe 8 = Freigabe 6 = Klärung 3 = Wiedervorlage |
{- "data": [
- {
- "cms_address_id": 0,
- "cms_facility_id": 0,
- "cl_checklist_id": 0,
- "st_article_id": 0,
- "st_cost_centre_id": 0,
- "pms_project_id": 0,
- "cms_contacting_id": 0,
- "auf_task_id": 0,
- "rm_item_id": 0,
- "rm_booking_id": 0,
- "pze_shift_id": 0,
- "task": "string",
- "azn_time": "string",
- "st_customer_id": "string",
- "to_clear": true,
- "date": "2019-08-24T14:15:22Z",
- "estimated_time": "string",
- "subject": "string",
- "content": "string",
- "remark": "string",
- "priority": 0,
- "status": 0,
- "sp_type_id": 0,
- "sp_ticket_category_id": 0,
- "per_activity_id": 0,
- "bv_usergroup_id": 0,
- "bv_user_id": 0,
- "creator": "string",
- "tags": "string"
}
], - "pagination": {
- "limit": 25,
- "page": 0,
- "total": 0
}, - "code": 0,
- "message": "string",
- "date": "2019-08-24T14:15:22Z"
}Tickets
| sp_ticket_id required | integer |
| cms_address_id | integer |
| cms_facility_id | integer |
| cl_checklist_id | integer |
| st_article_id | integer |
| st_cost_centre_id | integer |
| pms_project_id | integer |
| cms_contacting_id | integer |
| auf_task_id | integer |
| rm_item_id | integer |
| rm_booking_id | integer |
| pze_shift_id | integer |
| task | string |
| azn_time | string |
| st_customer_id | string Kunden-Nr. |
| to_clear | boolean Abrechnen |
| date required | string <date-time> Fällig |
| estimated_time | string Erwartete Dauer Min. |
| subject required | string Titel |
| content | string Beschreibung |
| remark | string Notiz |
| priority required | number Priorität Mögliche Werte: 1 = Blocker 2 = Kritisch 6 = Hoch 3 = Normal 4 = Geringfügig 5 = Trivial |
| status | number Status Mögliche Werte: 0 = Neu 1 = Offen 2 = In Bearbeitung 7 = Warte auf Freigabe 8 = Freigabe 6 = Klärung 3 = Wiedervorlage 4 = Erledigt 5 = Archiviert 9 = Abgelehnt default = Neu |
| sp_type_id | number Typ Mögliche Werte: 1 = Beispieltyp |
| sp_ticket_category_id | number Kategorie Mögliche Werte: 3 = adsf 2 = Housekeeping 1 = Rezepzion |
| per_activity_id | number Bereich Mögliche Werte: 2 = Entwicklung 4 = Marketing 3 = Service 1 = Anmeldung |
| bv_usergroup_id | number Benutzergruppe Mögliche Werte: 9 = restaurant 4 = Rezeption 5 = Stempeluhr |
| bv_user_id | integer |
| creator | string Ersteller |
| tags | string Tags |
""Ticket. Ohne cms_client_id gilt für diesen Zugang cms_client_id=1.
| sp_ticket_id required | integer |
{- "cms_address_id": 0,
- "cms_facility_id": 0,
- "cl_checklist_id": 0,
- "st_article_id": 0,
- "st_cost_centre_id": 0,
- "pms_project_id": 0,
- "cms_contacting_id": 0,
- "auf_task_id": 0,
- "rm_item_id": 0,
- "rm_booking_id": 0,
- "pze_shift_id": 0,
- "task": "string",
- "azn_time": "string",
- "st_customer_id": "string",
- "to_clear": true,
- "date": "2019-08-24T14:15:22Z",
- "estimated_time": "string",
- "subject": "string",
- "content": "string",
- "remark": "string",
- "priority": 0,
- "status": 0,
- "sp_type_id": 0,
- "sp_ticket_category_id": 0,
- "per_activity_id": 0,
- "bv_usergroup_id": 0,
- "bv_user_id": 0,
- "creator": "string",
- "tags": "string"
}Setzt Status, interne Notiz und/oder den Bearbeiter. Leere Felder bleiben unverändert. Genau eines von bv_user_id oder username setzt den Bearbeiter. Die Notiz verschickt keine E-Mail. Ohne cms_client_id gilt für diesen Zugang cms_client_id=1. status: 1 offen, 2 in Bearbeitung, 3 Wiedervorlage, 4 erledigt, 9 abgelehnt.
| sp_ticket_id required | integer |
| status | integer Enum: 1 2 3 4 9 |
| note | string <= 8000 characters Interne Notiz |
| bv_user_id | integer Bearbeiter. Nicht zusammen mit username. |
| username | string Login des Bearbeiters, exakt. Nicht zusammen mit bv_user_id. |
{- "username": "vitalis.ermanntraut"
}{- "code": 200,
- "message": "",
- "date": "2019-08-24T14:15:22Z",
- "request_id": 0
}Tisch-Reservierungen anlegen, lesen und Status setzen (Angekommen/Fertig). Resource-ID ist rm_booking_id. Auth: API-Host + HostLimitation auf die Schnittstelle tables.
Paginierte Liste der Tisch-Reservierungen. date_from / date_until filtern nach überlappendem Zeitraum.
| limit | integer Example: limit=25 Treffer pro Seite |
| page | integer Example: page=1 Seite (ab 1) |
| cms_client_id | integer Mandant-ID (Standard: aktiver Client) |
| date_from | string <date> Example: date_from=2026-10-01 Zeitraum von (Y-m-d). Reservierungen deren Tisch den Zeitraum überlappt. |
| date_until | string <date> Example: date_until=2026-10-08 Zeitraum bis (Y-m-d). |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "source": "cache",
- "data": [
- {
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "rm_catalogue_id": "TR",
- "st_customer_id": "10001",
- "cms_address_id": 5001,
- "name": "Mustermann",
- "source": "api",
- "remark": "",
- "items": [
- {
- "rm_item_id": 9001,
- "from": "2026-09-12 19:00:00",
- "until": "2026-09-12 21:00:00",
- "rm_resource_id": 12,
- "quantity": 4,
- "status": 0
}
]
}
]
}Legt Reservierungskopf und mindestens einen Tisch an. Ohne rm_resource_id wird ein freier Tisch im Zeitraum zugeordnet. HTTP 409 wenn keiner frei ist oder der angegebene Tisch belegt ist. Reservierungsnummer kommt aus dem Nummernkreis TR. until optional: sonst Dauer aus den Tisch-Einstellungen.
| rm_booking_id | integer Interne Reservierungs-ID (Resource-ID, nur lesend) |
| rm_booking_no | string Reservierungsnummer (Nummernkreis TR, nur lesend) |
| rm_catalogue_id | string Katalog. Immer TR bei diesem Endpoint. |
| cms_client_id | integer Mandant-ID |
| st_customer_id | string Kunden-Nr. Pflicht beim Anlegen, sofern cms_address_id fehlt. |
| cms_address_id | integer Adress-ID. Nur nötig ohne st_customer_id. |
| name | string Anzeigename. Leer = Nachname des Kunden. |
| from required | string <date-time> Beginn. Auf Root-Ebene wenn nur ein Tisch, sonst in items[]. |
| from_time | string Uhrzeit wenn from nur Y-m-d ist. |
| until | string <date-time> Ende. Optional. |
| rm_resource_id | integer Tisch-ID. Optional. Ohne Angabe wird ein freier Tisch zugeordnet. |
| table_number | string Tischnummer bei einem Tisch ohne items[]. |
| token | string Tischkürzel bei einem Tisch ohne items[]. |
| resources | string Mehrere Tisch-IDs kommagetrennt, Alternative zu items[]. |
| st_article_id | string Optionale Leistung. |
| quantity | integer Default: 1 Gäste (ein Tisch). |
| status | integer Enum: 0 1 2 3 4 13 30 Status: 0 = Reserviert, 1 = Angekommen (Check-In), 2 = Fertig (Check-Out), 3 = Storniert, 4 = Angefragt, 30 = Nicht erschienen. Standard beim Anlegen: 0. |
| remark | string Bemerkung zur Reservierung |
| source | string Herkunft. Standard: api. |
| source_no | string Externe Vorgangsnummer der Quelle |
| send_notification | integer Default: 0 Enum: 0 1 1 = Bestätigung versenden. Standard: 0. |
| reserved_date | string <date-time> Reservierungsdatum (nur lesend) |
| access_token | string Zugangstoken (nur lesend) |
Array of objects Tische. Beim Anlegen optional: ohne items[] gelten from/until/Tischfelder auf Root-Ebene als ein Tisch. |
{- "st_customer_id": "10001",
- "from": "2026-09-12 19:00:00",
- "until": "2026-09-12 21:00:00",
- "quantity": 4,
- "status": 0,
- "remark": "",
- "source": "api"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "rm_catalogue_id": "TR",
- "st_customer_id": "10001",
- "cms_address_id": 5001,
- "name": "Mustermann",
- "source": "api",
- "remark": "",
- "items": [
- {
- "rm_item_id": 9001,
- "from": "2026-09-12 19:00:00",
- "until": "2026-09-12 21:00:00",
- "rm_resource_id": 12,
- "quantity": 4,
- "status": 0
}
]
}
}| id required | integer Example: 12345 Immer rm_booking_id. Einzelner Tisch nur über rm_item_id im Body/Query. |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "rm_catalogue_id": "TR",
- "st_customer_id": "10001",
- "cms_address_id": 5001,
- "name": "Mustermann",
- "source": "api",
- "remark": "",
- "items": [
- {
- "rm_item_id": 9001,
- "from": "2026-09-12 19:00:00",
- "until": "2026-09-12 21:00:00",
- "rm_resource_id": 12,
- "quantity": 4,
- "status": 0
}
]
}
}URL-{id} ist immer rm_booking_id. Einzelner Tisch: rm_item_id im Body oder Query.
| id required | integer Example: 12345 Immer rm_booking_id. Einzelner Tisch nur über rm_item_id im Body/Query. |
required | integer or string 1 / checkin / arrived = Angekommen, 2 / checkout / finished = Fertig. |
| rm_item_id | integer Nur diesen Tisch ein- oder auschecken. |
| table_number | string Alternative zu rm_item_id: Tischnummer innerhalb der Reservierung. |
| token | string Alternative zu rm_item_id: Tischkürzel innerhalb der Reservierung. |
{- "status": "checkin",
- "rm_item_id": 9001
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "rm_catalogue_id": "TR",
- "st_customer_id": "10001",
- "cms_address_id": 5001,
- "name": "Mustermann",
- "source": "api",
- "remark": "",
- "items": [
- {
- "rm_item_id": 9001,
- "from": "2026-09-12 19:00:00",
- "until": "2026-09-12 21:00:00",
- "rm_resource_id": 12,
- "quantity": 4,
- "status": 0
}
]
}
}| id required | integer Example: 12345 Immer rm_booking_id. Einzelner Tisch nur über rm_item_id im Body/Query. |
| rm_item_id | integer |
| table_number | string |
{- "rm_item_id": 9001
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "rm_catalogue_id": "TR",
- "st_customer_id": "10001",
- "cms_address_id": 5001,
- "name": "Mustermann",
- "source": "api",
- "remark": "",
- "items": [
- {
- "rm_item_id": 9001,
- "from": "2026-09-12 19:00:00",
- "until": "2026-09-12 21:00:00",
- "rm_resource_id": 12,
- "quantity": 4,
- "status": 0
}
]
}
}| id required | integer Example: 12345 Immer rm_booking_id. Einzelner Tisch nur über rm_item_id im Body/Query. |
| rm_item_id | integer |
| table_number | string |
{- "rm_item_id": 9001
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "rm_catalogue_id": "TR",
- "st_customer_id": "10001",
- "cms_address_id": 5001,
- "name": "Mustermann",
- "source": "api",
- "remark": "",
- "items": [
- {
- "rm_item_id": 9001,
- "from": "2026-09-12 19:00:00",
- "until": "2026-09-12 21:00:00",
- "rm_resource_id": 12,
- "quantity": 4,
- "status": 0
}
]
}
}Verfügbarkeit, Restriktionen und Preise je Zimmerkategorie und Tag. Auth: API-Host + HostLimitation auf die Schnittstelle availability.
Live-Liste je Tag und Zimmerkategorie: physische Verfügbarkeit, Allotment, Stop-Sell / CTA / CTD / Min-Max-Aufenthalt und Tagespreis. rooms_ooo sind gesperrte Zeiträume (Teilmenge von rooms_booked). Kein Cache. Auth über die Schnittstelle availability.
| date_from required | string <date> Example: date_from=2024-06-01 Startdatum Y-m-d |
| date_until required | string <date> Example: date_until=2024-06-30 Enddatum Y-m-d |
| cms_client_id | integer Mandant-ID (Standard: aktiver Client) |
| st_price_list_id | string Preisliste (Standard: Mandanten-Preisliste) |
| st_article_id | string Nur diese Zimmerkategorie |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "source": "cache",
- "data": [
- {
- "date": "2024-06-01",
- "cms_client_id": 1,
- "st_article_id": "FW1",
- "st_price_list_id": "STANDARD",
- "price": 129,
- "price1": 109,
- "currency": "EUR",
- "rooms_total": 1,
- "rooms_booked": 0,
- "rooms_ooo": 0,
- "rooms_free": 1,
- "contingent": null,
- "puffer": 0,
- "available": 1,
- "closed": 0,
- "arrival": 1,
- "departure": 1,
- "minimum": 1,
- "maximum": 0
}
]
}Reinigungsstatus der Zimmer, Benutzerstatus der Belegung und Reinigungsangaben. Lesen und Schreiben. Auth: API-Host + HostLimitation auf die Schnittstelle resources.
Alle Hotelzimmer inkl. Reinigungsstatus und Belegung am Stichtag. cleaning_status und user_status im Envelope sind die Kataloge (inkl. individuell angelegter Kennzeichnungen).
| date | string <date> Example: date=2026-10-01 Stichtag für Belegung und Reinigungsliste (Y-m-d, Standard: heute) |
| cms_client_id | integer Mandant-ID (Standard: aktiver Client) |
| cleaning_status | string Filter: Zahl 0–5 oder Token (dirty, clean, …) |
| occupied | integer 1 = nur belegte, 0 = nur unbelegte Zimmer |
| floor | string Etage |
| st_article_id | string Zimmerkategorie |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": [
- {
- "rm_resource_id": 5,
- "token": "DZ-101",
- "number": "101",
- "room_number": "101",
- "name": "Doppelzimmer 101",
- "floor": "1",
- "st_article_id": "DZ",
- "is_active": 1,
- "cms_client_id": 1,
- "date": "2026-10-01",
- "cleaning_status": 1,
- "cleaning_status_token": "dirty",
- "cleaning_status_label": "Schmutzig",
- "cleaning_changed_by": 12,
- "cleaning_changed_by_name": "Polina Ivanova",
- "cleaning_changed_at": "2026-10-01 12:36:20",
- "occupancies": [
- {
- "rm_item_id": 9001,
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "name": "Mustermann",
- "from": "2026-10-01 12:00:00",
- "until": "2026-10-03 12:00:00",
- "status": 1,
- "is_stayover": 1,
- "user_status": [
- {
- "id": "vip1",
- "name": "VIP",
- "token": "VIP"
}
], - "cleaning_type": "0",
- "cleaning_type_label": "Regelmäßige Reinigung",
- "cleaning_type_guest": 0,
- "note2": "Extra Handtücher",
- "cleaning": 1,
- "cleaning_label": "Bleiber"
}
]
}
], - "cleaning_status": [
- {
- "id": 1,
- "token": "dirty",
- "name": "Schmutzig"
}
], - "user_status": [
- {
- "id": "vip1",
- "name": "VIP",
- "token": "VIP"
}
]
}| id required | string Example: 101 rm_resource_id, Zimmernummer, Kürzel (token) oder number. |
| date | string <date> Example: date=2026-10-01 Stichtag Y-m-d |
| cms_client_id | integer Mandant-ID |
{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_resource_id": 5,
- "token": "DZ-101",
- "number": "101",
- "room_number": "101",
- "name": "Doppelzimmer 101",
- "floor": "1",
- "st_article_id": "DZ",
- "is_active": 1,
- "cms_client_id": 1,
- "date": "2026-10-01",
- "cleaning_status": 1,
- "cleaning_status_token": "dirty",
- "cleaning_status_label": "Schmutzig",
- "cleaning_changed_by": 12,
- "cleaning_changed_by_name": "Polina Ivanova",
- "cleaning_changed_at": "2026-10-01 12:36:20",
- "occupancies": [
- {
- "rm_item_id": 9001,
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "name": "Mustermann",
- "from": "2026-10-01 12:00:00",
- "until": "2026-10-03 12:00:00",
- "status": 1,
- "is_stayover": 1,
- "user_status": [
- {
- "id": "vip1",
- "name": "VIP",
- "token": "VIP"
}
], - "cleaning_type": "0",
- "cleaning_type_label": "Regelmäßige Reinigung",
- "cleaning_type_guest": 0,
- "note2": "Extra Handtücher",
- "cleaning": 1,
- "cleaning_label": "Bleiber"
}
]
}
}Setzt den Reinigungsstatus des Zimmers und optional Benutzerstatus, cleaning_type und Reinigungsliste (note2) der aktuellen Belegung. bv_user_id optional für die Historie.
| id required | string Example: 101 rm_resource_id, Zimmernummer, Kürzel (token) oder number. |
| date | string <date> Example: date=2026-10-01 Stichtag für Belegungsfelder |
| bv_user_id | integer Optionaler Benutzer für die Historie (wer den Reinigungsstatus gesetzt hat). Muss aktiv und dem Mandanten zugeordnet sein. IDs über GET /users. |
integer or string Zahl 0–5 oder Token (clean, dirty, is_cleaning, checked, out_of_service, no_cleaning_required). | |
integer or string Alias für cleaning_status. | |
| rm_item_id | integer Belegungszimmer, falls mehrere am Tag. |
Array of strings or objects Ersetzt die Kennzeichnungen der Belegung. IDs, Token oder Namen. Leeres Array löscht alle. | |
| cleaning_type | string 0, 1, -1, -2, 1d–14d, mon–sun |
| cleaning_type_guest | integer Enum: -2 -1 0 1 |
| note2 | string Reinigungsliste |
| note | string Gästenotiz |
{- "bv_user_id": 12,
- "cleaning_status": "dirty",
- "user_status": [
- "VIP",
- "Hund"
], - "cleaning_type": "0",
- "note2": "Extra Handtücher"
}{- "code": 200,
- "message": "",
- "date": "2026-10-01 12:36:20",
- "data": {
- "rm_resource_id": 5,
- "token": "DZ-101",
- "number": "101",
- "room_number": "101",
- "name": "Doppelzimmer 101",
- "floor": "1",
- "st_article_id": "DZ",
- "is_active": 1,
- "cms_client_id": 1,
- "date": "2026-10-01",
- "cleaning_status": 1,
- "cleaning_status_token": "dirty",
- "cleaning_status_label": "Schmutzig",
- "cleaning_changed_by": 12,
- "cleaning_changed_by_name": "Polina Ivanova",
- "cleaning_changed_at": "2026-10-01 12:36:20",
- "occupancies": [
- {
- "rm_item_id": 9001,
- "rm_booking_id": 12345,
- "rm_booking_no": "260001",
- "name": "Mustermann",
- "from": "2026-10-01 12:00:00",
- "until": "2026-10-03 12:00:00",
- "status": 1,
- "is_stayover": 1,
- "user_status": [
- {
- "id": "vip1",
- "name": "VIP",
- "token": "VIP"
}
], - "cleaning_type": "0",
- "cleaning_type_label": "Regelmäßige Reinigung",
- "cleaning_type_guest": 0,
- "note2": "Extra Handtücher",
- "cleaning": 1,
- "cleaning_label": "Bleiber"
}
]
}
}Threads der Nachrichtenzentrale. Ohne source: WhatsApp, Booking.com und E-Mail. source=nr ist die interne Unterhaltung des angemeldeten Benutzers. thread_key als Query liefert einen Verlauf.
| cms_client_id | integer Mandant-ID. Ohne einzigen Mandanten erforderlich. |
| source | string whatsapp, bookingcom, email oder nr |
| cms_address_id | integer Nur diese Person |
| unread | integer 1 = nur Unterhaltungen mit ungelesenen Eingängen |
| thread_key | string Example: thread_key=email:gast@example.com Eine Unterhaltung, Format source:contact |
| limit | integer Höchstens 100, Standard 50 |
Antwort über denselben Kanal. text ist der Inhalt. thread_key oder source plus contact. E-Mail braucht subject und eine Adresse als contact. Kein Anhang, kein Postfach.
| text required | string <= 20000 characters |
| thread_key | string |
| source | string Enum: "whatsapp" "bookingcom" "email" "nr" |
| contact | string |
| subject | string <= 200 characters Betreff, für E-Mail erforderlich |
| cms_address_id | integer |
{- "source": "email",
- "contact": "gast@example.com",
- "subject": "Ihre Anfrage",
- "text": "Wir haben den Termin bestätigt."
}