GET/api/v1/reservations
Das Reservierungsbuch lesen — gefiltert nach Tag, Zeitraum, Status, Bereich, Uhrzeit, Personenzahl oder Änderungszeitpunkt.
Rechte
reservations:readPlan-Merkmal reservations — fehlt es dem Betrieb, antwortet die Route mit 402 plan_upgrade_required.
Abfrageparameter
| Name | Typ | Bedeutung |
|---|---|---|
date | YYYY-MM-DD | Genau ein Kalendertag des Betriebs. Schliesst `dateFrom`/`dateTo` aus. |
dateFrom | YYYY-MM-DD | Erster Tag eines Zeitraums, einschliesslich. |
dateTo | YYYY-MM-DD | Letzter Tag eines Zeitraums, einschliesslich. Muss `dateFrom` sein oder danach liegen. |
status | Kommaliste aus PENDING, CONFIRMED, OPTION, CANCELED, NOSHOW, COMPLETED | Nur Reservierungen in diesen Zuständen. Ohne Angabe: alle, auch stornierte — für einen Tagesplan also fast immer `status=CONFIRMED,PENDING,OPTION` setzen. |
source | Kommaliste aus API, PHONE, MANUAL, WALKIN, WIDGET, WAITLIST | Nur Buchungen dieser Herkunft. `WIDGET` ist das Buchungsfenster auf der Website des Betriebs, `API` alles über diese Schnittstelle, `PHONE` und `MANUAL` das vom Personal Eingetragene (telefonisch bzw. am Tresen), `WALKIN` die Laufkundschaft ohne Voranmeldung, `WAITLIST` eine aus der Warteliste nachgerückte Buchung. |
areaId | UUID | Bereich SAMT seiner Unterbereiche. Eine Kennung, die nicht zu diesem Betrieb gehört, ist 400 — nicht eine leere Liste. |
timeFrom | HH:mm | Frühester Beginn, einschliesslich. Verglichen wird die naive Ortszeit. |
timeTo | HH:mm | Spätester Beginn, einschliesslich. |
partyMin | integer 1–9999 | Mindestens so viele Personen. |
partyMax | integer 1–9999 | Höchstens so viele Personen. |
updatedSince | ISO-8601 mit Zone | Nur Zeilen, die seit diesem Zeitpunkt geändert wurden — der Filter für den inkrementellen Abgleich. |
ids | Kommaliste von UUIDs, höchstens 100 | Genau diese Reservierungen. Unbekannte Kennungen fehlen still in der Antwort; die Liste ist kein Nachschlagewerk. |
q | string, 2–200 Zeichen | Volltext über GASTNAME und Anmerkungen — nie über E-Mail oder Telefon. Verlangt ein Datumsfenster von höchstens 400 Tagen (`date` oder `dateFrom`+`dateTo`), weil die Suche durch keinen Index gedeckt ist. |
email | EXAKTER Treffer auf die vollständige Adresse, nie ein Teilstring. Kein Treffer ist eine leere Liste — nie ein anderer Status. | |
phone | string, höchstens 32 Zeichen | EXAKTER Treffer auf die gespeicherte Form in internationaler Schreibweise, z. B. `+4366412345678`. |
hasTable | true | false | `true`: nur Reservierungen mit zugeordnetem Tisch. `false`: nur die ohne — genau die Liste, die der Wirt am Morgen durchgeht. |
limit | integer 1–200Vorgabe: 50 | Zeilen je Seite. Ein Wert über 200 ist 400 und nicht etwa stillschweigend gekappt — sonst hielte der Aufrufer eine halbe Antwort für eine ganze. |
cursor | undurchsichtiger Zeiger | `nextCursor` der vorigen Antwort, unverändert. Gilt nur mit unveränderten Filtern und unveränderter Sortierung. |
sort | date | updatedAt | createdAtVorgabe: date | Sortierfeld. `date` sortiert nach Tag, dann Uhrzeit; für einen Abgleich ist `updatedAt` richtig. |
dir | asc | descVorgabe: asc | Richtung. Sie ist Teil des Zeigers und darf sich zwischen zwei Seiten nicht ändern. |
includeTotal | true | falseVorgabe: false | Ergänzt `total`. Kostet eine zweite Abfrage über dieselbe Menge. |
Mögliche Fehler
- validation — Unbekannter Parameter, `date` zusammen mit `dateFrom`/`dateTo`, Enddatum vor Startdatum, `q` ohne Datumsfenster, fremde `areaId`, unlesbarer oder fremder `cursor`.
- forbidden — Dem Schlüssel fehlt `reservations:read`.
- plan_upgrade_required — Der Plan des Betriebs enthält Reservierungen nicht.
- trial_expired — Die Testphase ist beendet und kein Plan gewählt.
- rate_limited — 600 Leseaufrufe je Minute und Schlüssel bzw. 1 200 je Minute und Betrieb überschritten.
- Ohne `status`-Filter enthält die Liste AUCH stornierte und No-Show-Reservierungen. Für einen Tagesplan ist `status=CONFIRMED,PENDING,OPTION` fast immer gemeint.
- Die Antwort trägt den flachen Umschlag: `data`, `nextCursor`, `hasMore`, `limit` und bei `includeTotal=true` zusätzlich `total`.