getBookings
Eingegangene Onlinebuchungen abfragen
Onlinebuchungen eines Zeitraums, paginiert. Der Zeitraum wirkt auf das Buchungsdatum — also darauf, wann die Anfrage einging, nicht auf den Termin selbst. Gelöschte und stornierte Buchungen werden nie geliefert.
HTTP Request
https://dev.vitabyte.ch/v1/booking/getBookings
Request Parameters
Der Filter kennt genau zwei Felder, beide Pflicht: from und to als Buchungsdatum, beide Enden inklusive. Erlaubt sind YYYY-MM-DD, DD.MM.YYYY und ein vollständiger ISO-8601-Zeitstempel. Unbekannte Parameter und unbekannte Filter-Felder werden mit HTTP 400 abgelehnt.
| Parameter | Pflicht | Typ | Beispiel / Default |
|---|---|---|---|
filter
Zeitraum des Buchungsdatums, siehe Hinweis oben. |
required | object |
{"from":"2026-01-01","to":"2026-12-31"}
|
offset
Negative Werte werden auf 0 angehoben. |
optional | integer |
default:
0 |
limit
Maximum 1000; höhere Werte werden gekappt. |
optional | integer |
default:
100100
|
orderBy
created sortiert nach Buchungsdatum. Andere Werte als die drei genannten werden abgelehnt. |
optional |
string enum: created | bookingId | lastname
|
default:
createdcreated
|
orderDir
Sortierrichtung. |
optional |
string enum: asc | desc
|
default:
descdesc
|
fields
Sparse Fieldset auf die Top-Level-Felder; bookingId ist immer enthalten. |
optional | array |
["bookingId","createdAt","appointment"]
|
Response Parameters
Envelope: { status, msg, result, pagination } mit pagination: { offset, limit, total, hasMore }. Fehler kommen mit HTTP 400 und status: false — anders als getServices, getSlots und getLocations, die Fachfehler mit HTTP 200 melden.
| Field | Typ | Beschreibung |
|---|---|---|
bookingId |
integer | ID der Buchung |
status |
string | P = unbestätigt, C = bestätigt |
createdAt |
string | Buchungsdatum als ISO-8601-Zeitstempel |
source |
string | Onedoc bei Import über OneDoc, sonst E-PAT |
trackingSource |
string | Freitext aus dem Buchungsformular, etwa die Kampagne |
locationId, location |
integer, string | Filiale als ID und als Name |
serviceId, service |
integer, string | Gebuchte Leistung als ID und als Name |
careProviderId |
integer | Gewählter Behandler als User-ID — nicht die Kalender-ID, die steht in appointment.calendarId |
duration |
integer | Dauer der Leistung in Minuten |
price, specialPrice |
number | Preis und Aktionspreis; specialPrice ist null, wenn keiner hinterlegt ist |
patientId |
integer | Verknüpfter Patient, null solange keine Zuordnung besteht — bei Buchungen von Neukunden der Normalfall |
comment |
string | Freitext, den die buchende Person im Formular hinterlassen hat |
smsSent |
boolean | Ob die Bestätigungs-SMS verschickt wurde |
contact |
object | salutation, firstname, lastname, dob, street, zip, city, country, countryCode, email, phone, mobile. Das sind die Angaben aus dem Buchungsformular, keine Patientenstammdaten — der Endpoint liest die Patiententabelle nicht. Bei Neukunden ist das die einzige Identifikation, weil patientId dann null ist. |
insurance |
object | provider, supplementary, vekaNumber — ebenfalls aus dem Buchungsformular, oft leer |
appointment |
object | Der verknüpfte Termin mit eventId, start, end, duration, calendarId, calendar, provisional und calendarIds — oder null, wenn kein Termin verknüpft ist. Bei Leistungen mit Zusatzkalendern entstehen mehrere Termine; calendarId ist der Haupttermin, calendarIds listet alle. |
Demo
Referenz und Beispiele stammen aus der internen API-Collection — die OpenAPI-Spec deckt diesen Endpoint noch nicht ab.
POST
https://dev.vitabyte.ch/v1/booking/getBookings
{
"filter": {
"from": "2026-01-01",
"to": "2026-12-31"
},
"offset": 0,
"limit": 100,
"orderBy": "created",
"orderDir": "desc"
}
{
"status": true,
"msg": "Success",
"result": [
{
"bookingId": 4711,
"status": "C",
"createdAt": "2026-08-03T09:14:00+02:00",
"source": "E-PAT",
"trackingSource": "google-ads",
"locationId": 12,
"location": "Zürich",
"serviceId": 54,
"service": "Erstkonsultation",
"careProviderId": 12,
"duration": 30,
"price": 120,
"specialPrice": null,
"patientId": null,
"comment": "Bitte am Vormittag",
"smsSent": false,
"contact": {
"salutation": "MS",
"firstname": "Anna",
"lastname": "Muster",
"dob": "1984-03-12",
"street": "Bahnhofstrasse 1",
"zip": "8001",
"city": "Zürich",
"country": "Schweiz",
"countryCode": "CH",
"email": "anna.muster@example.ch",
"phone": "044 111 22 33",
"mobile": ""
},
"insurance": {
"provider": "Helsana",
"supplementary": "",
"vekaNumber": ""
},
"appointment": {
"eventId": 98123,
"start": "2026-08-20T09:00:00+02:00",
"end": "2026-08-20T09:30:00+02:00",
"duration": 30,
"calendarId": 7,
"calendar": "Dr. med. Muster",
"provisional": false,
"calendarIds": [
7,
9
]
}
},
{
"bookingId": 4708,
"status": "P",
"createdAt": "2026-07-29T16:02:00+02:00",
"source": "Onedoc",
"trackingSource": "",
"locationId": 12,
"location": "Zürich",
"serviceId": 57,
"service": "Beratung",
"careProviderId": 14,
"duration": 15,
"price": 60,
"specialPrice": null,
"patientId": 8042,
"comment": "",
"smsSent": false,
"contact": {
"salutation": "MR",
"firstname": "Max",
"lastname": "Mustermann",
"dob": "1979-11-02",
"street": "Seestrasse 9",
"zip": "8002",
"city": "Zürich",
"country": "Schweiz",
"countryCode": "CH",
"email": "max@example.com",
"phone": "044 222 33 44",
"mobile": "079 000 00 02"
},
"insurance": {
"provider": "CSS",
"supplementary": "",
"vekaNumber": ""
},
"appointment": null
}
],
"pagination": {
"offset": 0,
"limit": 100,
"total": 2,
"hasMore": false
}
}