Termine
Base path: /api/bookings
GET /bookings
Alle Termine abrufen. Mitarbeiter sehen nur eigene Termine wenn staff_personal_agenda_enabled aktiv ist. Stornierte Termine werden ausgeschlossen.
Auth: Eingeloggt
Query parameters: page, limit
GET /bookings/:id
Einzelnen Termin abrufen.
Auth: Eingeloggt
Fehler: 404 — Termin nicht gefunden
POST /bookings
Neuen Termin erstellen.
Auth: Eingeloggt
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
client_id | integer | Ja | Kunden-ID |
staff_id | integer | Ja | Mitarbeiter-ID |
service_id | integer | Ja | Dienstleistungs-ID |
start_at | datetime | Ja | Startzeit |
end_at | datetime | Ja | Endzeit |
notes | string | Nein | Notizen (für Kunden sichtbar) |
internal_notes | string | Nein | Interne Notizen |
provisional | boolean | Nein | Bei true: Status=provisional, Bestätigungs-E-Mail an Kunde |
waitlist_id | integer | Nein | Verknüpfung mit Wartelisteneintrag |
base_url | string | Nein | Base-URL für Bestätigungs-/Ablehnungslinks |
hinweis
Buchungen an Feiertagen werden mit einem 400-Fehler abgelehnt.
Response (200): Booking-Objekt
PUT /bookings/:id
Termin aktualisieren. Bei Zeitänderungen wird ein E-Mail-Job mit 30 Minuten Verzögerung eingereiht. Bei Abschluss werden Follow-up-Sequenzen gestartet.
DELETE /bookings/:id
Termin stornieren (setzt Status auf cancelled).
Terminstatuse
| Status | Beschreibung |
|---|---|
scheduled | Bestätigter Termin |
provisional | Wartet auf Kundenbestätigung |
completed | Abgeschlossener Termin |
cancelled | Stornierter Termin |
no-show | Kunde nicht erschienen |
Termin-Objekt
{
"id": 1,
"client_id": 5,
"staff_id": 2,
"service_id": 3,
"start_at": "2026-03-24 10:00:00",
"end_at": "2026-03-24 10:30:00",
"status": "scheduled",
"notes": "",
"internal_notes": "",
"provisional_token": null,
"feedback_token": null,
"waitlist_id": null,
"client_name": "Max Mustermann"
}