Scheduling — API and MCP
Overview
This area exposes 65 operations. Each of them is at the same time an MCP tool.
This area is behind the module switch module.scheduling. With the module off, these operations answer 404.
Operations
| Method | Path | Purpose | Permission | Parameters | ||
|---|---|---|---|---|---|---|
GET | /api/v1/scheduling/appointments | Collection of SchedulingAppointment | scheduling.appointment.view_own · scheduling.appointment.view_team · scheduling.appointment.view_any · scheduling.appointment.manage | page, host, eventType, from, to, status, q | ||
POST | /api/v1/scheduling/appointments | Termin im Namen eines Kunden buchen — Bucht einen freien Slot für einen Gast (Empfang/Telefon). Prüft Verfügbarkeit, Buffer, Vorlauf und Horizont wie die öffentliche Buchungsstrecke; belegter Slot ⇒ 409. | scheduling.appointment.manage | + body | ||
GET | /api/v1/scheduling/appointments/{ulid} | Read one SchedulingAppointment | scheduling.appointment.view_own · scheduling.appointment.view_team · scheduling.appointment.view_any · scheduling.appointment.manage | ulid | ||
POST | /api/v1/scheduling/appointments/{ulid}/cancel | Cancel appointment — Cancel appointment. Dedicated action endpoint — not a standard CRUD create. | scheduling.appointment.cancel · scheduling.appointment.manage | ulid, + body | ||
POST | /api/v1/scheduling/appointments/{ulid}/complete | Termin als stattgefunden abschließen — Schließt den Termin als stattgefunden ab. Ein Rumpf ist nicht nötig. | scheduling.appointment.manage | ulid, + body | ||
POST | /api/v1/scheduling/appointments/{ulid}/no-show | Termin als nicht wahrgenommen vermerken — Vermerkt den Termin als nicht wahrgenommen. Ein Rumpf ist nicht nötig. | scheduling.appointment.manage | ulid, + body | ||
POST | /api/v1/scheduling/appointments/{ulid}/reschedule | Termin verlegen — Verlegt den Termin auf einen neuen Zeitpunkt und benachrichtigt die Teilnehmer. | scheduling.appointment.reschedule · scheduling.appointment.manage | ulid, + body | ||
GET | /api/v1/scheduling/booking-pages | Collection of SchedulingBookingPage | scheduling.booking_page.view · scheduling.booking_page.manage | page, q, order[title], order[slug] | ||
POST | /api/v1/scheduling/booking-pages | Create a SchedulingBookingPage | scheduling.booking_page.manage | + body | ||
DELETE | /api/v1/scheduling/booking-pages/{ulid} | Delete a SchedulingBookingPage | scheduling.booking_page.manage | ulid | ||
GET | /api/v1/scheduling/booking-pages/{ulid} | Read one SchedulingBookingPage | scheduling.booking_page.view · scheduling.booking_page.manage | ulid | ||
PATCH | /api/v1/scheduling/booking-pages/{ulid} | Update a SchedulingBookingPage | scheduling.booking_page.manage | ulid, + body | ||
POST | /api/v1/scheduling/caldav-discovery | Create a SchedulingCalDavDiscovery | scheduling.connection.manage_own | + body | ||
GET | /api/v1/scheduling/calendar-connections | Collection of SchedulingCalendarConnection | scheduling.connection.manage_own · scheduling.connection.manage_any · scheduling.resource.manage | owner, resource | ||
POST | /api/v1/scheduling/calendar-connections/caldav | Create a SchedulingCalendarConnection | scheduling.connection.manage_own · scheduling.connection.manage_any · scheduling.resource.manage | + body | ||
POST | /api/v1/scheduling/calendar-connections/ics | Create a SchedulingCalendarConnection | scheduling.connection.manage_own · scheduling.connection.manage_any · scheduling.resource.manage | + body | ||
DELETE | /api/v1/scheduling/calendar-connections/{ulid} | Delete a SchedulingCalendarConnection | scheduling.connection.manage_own · scheduling.connection.manage_any · scheduling.resource.manage | ulid | ||
GET | /api/v1/scheduling/calendar-connections/{ulid} | Read one SchedulingCalendarConnection | scheduling.connection.manage_own · scheduling.connection.manage_any · scheduling.resource.manage | ulid | ||
PATCH | /api/v1/scheduling/calendar-connections/{ulid} | Update a SchedulingCalendarConnection | scheduling.connection.manage_own · scheduling.connection.manage_any · scheduling.resource.manage | ulid, + body | ||
GET | /api/v1/scheduling/calendar-connections/{ulid}/calendars | Collection of SchedulingAvailableCalendar | scheduling.connection.manage_own · scheduling.connection.manage_any · scheduling.resource.manage | id | ||
GET | /api/v1/scheduling/calendly-import/runs | Collection of SchedulingCalendlyImportRun | platform.import.run | status | ||
POST | /api/v1/scheduling/calendly-import/runs | Calendly-Übernahme anstoßen (Vorgabe: Trockenlauf) — Reiht einen Lauf ein (status=queued). Ohne execute=true wird nur gelesen und gezählt. Übernommen werden Termintypen und alle künftigen aktiven Termine samt Gästen; bereits übernommene (externalRefs.calendlyUri) werden übersprungen. Keine Mails, keine Kalender-Einträge, keine Automation. Zugang: Integration calendly mit Zugriffsschlüssel calendly_token. Geprüft wird platform.import.run in der Ziel-Marke. | platform.import.run | + body | ||
GET | /api/v1/scheduling/calendly-import/runs/{ulid} | Read one SchedulingCalendlyImportRun | platform.import.run | ulid | ||
GET | /api/v1/scheduling/date-overrides | Collection of SchedulingDateOverride | scheduling.schedule.view · scheduling.schedule.manage | page, schedule | ||
POST | /api/v1/scheduling/date-overrides | Create a SchedulingDateOverride | scheduling.schedule.manage | + body | ||
DELETE | /api/v1/scheduling/date-overrides/{ulid} | Delete a SchedulingDateOverride | scheduling.schedule.manage | ulid | ||
GET | /api/v1/scheduling/date-overrides/{ulid} | Read one SchedulingDateOverride | scheduling.schedule.view · scheduling.schedule.manage | ulid | ||
PATCH | /api/v1/scheduling/date-overrides/{ulid} | Update a SchedulingDateOverride | scheduling.schedule.manage | ulid, + body | ||
GET | /api/v1/scheduling/event-type-kinds | Collection of SchedulingEventTypeKind | scheduling.event_type.view · scheduling.event_type.manage | page | ||
GET | /api/v1/scheduling/event-type-kinds/{key} | Read one SchedulingEventTypeKind | scheduling.event_type.view · scheduling.event_type.manage | key | ||
PATCH | /api/v1/scheduling/event-type-kinds/{key} | Update a SchedulingEventTypeKind | scheduling.event_type.manage | key, + body | ||
GET | /api/v1/scheduling/event-types | Collection of SchedulingEventType | scheduling.event_type.view · scheduling.event_type.manage | page, q, order[name], order[slug], order[durationMinutes], order[kind], parent | ||
POST | /api/v1/scheduling/event-types | Create a SchedulingEventType | scheduling.event_type.manage | + body | ||
DELETE | /api/v1/scheduling/event-types/{ulid} | Delete a SchedulingEventType | scheduling.event_type.manage | ulid | ||
GET | /api/v1/scheduling/event-types/{ulid} | Read one SchedulingEventType | scheduling.event_type.view · scheduling.event_type.manage | ulid | ||
PATCH | /api/v1/scheduling/event-types/{ulid} | Update a SchedulingEventType | scheduling.event_type.manage | ulid, + body | ||
POST | /api/v1/scheduling/event-types/{ulid}/distribute | Vorlage an Mitarbeiter verteilen — Legt für jeden Mitarbeiter aus employees (ULIDs) eine Kopie der Vorlage an (1:1, ein Gastgeber, alle sperrbaren Felder übernommen); vorhandene Kopien bleiben. Gesperrte Felder (lockedFields) folgen danach jeder Vorlagen-Änderung und sind an der Kopie nicht änderbar. | scheduling.event_type.manage | ulid, + body | ||
GET | /api/v1/scheduling/event-types/{ulid}/slots | Freie Termin-Slots eines Termintyps — Liefert buchbare Slots (UTC-Zeitpunkte, Darstellung in tz) samt freier Gastgeber je Slot. Grundlage für „im Namen buchen", Automation und KI-Terminfindung. | scheduling.appointment.manage · scheduling.appointment.view_any · scheduling.appointment.view_own · scheduling.event_type.view · scheduling.event_type.manage | ulid, from, to, host, excludeAppointment, tz, limit | ||
GET | /api/v1/scheduling/ics-imports | Collection of SchedulingIcsImport | scheduling.connection.manage_own · scheduling.connection.manage_any · scheduling.resource.manage | owner, resource | ||
POST | /api/v1/scheduling/ics-imports | .ics-Datei als Belegtzeit einlesen — content = Dateiinhalt (Text, höchstens 2 MB), fileName optional. Inhaber: ohne Angabe der eigene Mitarbeiter, ownerEmployee (mit scheduling.connection.manage_any) oder ownerResource (mit scheduling.resource.manage). Gelesen werden die Termine von gestern bis ein Jahr voraus, Serien aufgelöst, höchstens 5000; nur Anfang und Ende werden gespeichert. | scheduling.connection.manage_own · scheduling.connection.manage_any · scheduling.resource.manage | + body | ||
DELETE | /api/v1/scheduling/ics-imports/{ulid} | Delete a SchedulingIcsImport | scheduling.connection.manage_own · scheduling.connection.manage_any · scheduling.resource.manage | ulid | ||
GET | /api/v1/scheduling/polls | Collection of SchedulingMeetingPoll | scheduling.poll.view · scheduling.poll.manage | status | ||
POST | /api/v1/scheduling/polls | Gruppen-Terminfinder anlegen — eventType (ULID) liefert Ort, Marke und Mails; options = [{start}] als Zeitpunkte mit Versatz (höchstens 30, in der Zukunft). Dauer und Gastgeber fallen ohne Angabe auf den Termintyp zurück. Der Abstimmungs-Link ist /public/poll/{publicToken}. | scheduling.poll.manage | + body | ||
DELETE | /api/v1/scheduling/polls/{ulid} | Delete a SchedulingMeetingPoll | scheduling.poll.manage | ulid | ||
GET | /api/v1/scheduling/polls/{ulid} | Read one SchedulingMeetingPoll | scheduling.poll.view · scheduling.poll.manage | ulid | ||
PATCH | /api/v1/scheduling/polls/{ulid} | Update a SchedulingMeetingPoll | scheduling.poll.manage | ulid, + body | ||
POST | /api/v1/scheduling/polls/{ulid}/conclude | Gruppen-Terminfinder abschließen — Bucht den Vorschlag optionId für alle, die „ja" oder „vielleicht" gestimmt haben (Bestätigungs-Mail, Kalender-Eintrag, Folgen des Termintyps). Belegte Zeit ⇒ 409, der Terminfinder bleibt offen. | scheduling.poll.manage | ulid, + body | ||
GET | /api/v1/scheduling/resources | Collection of SchedulingResource | scheduling.resource.view · scheduling.resource.manage | page, q, order[name], order[kind] | ||
POST | /api/v1/scheduling/resources | Create a SchedulingResource | scheduling.resource.manage | + body | ||
DELETE | /api/v1/scheduling/resources/{ulid} | Delete a SchedulingResource | scheduling.resource.manage | ulid | ||
GET | /api/v1/scheduling/resources/{ulid} | Read one SchedulingResource | scheduling.resource.view · scheduling.resource.manage | ulid | ||
PATCH | /api/v1/scheduling/resources/{ulid} | Update a SchedulingResource | scheduling.resource.manage | ulid, + body | ||
GET | /api/v1/scheduling/routing-forms | Collection of SchedulingRoutingForm | scheduling.routing_form.view · scheduling.routing_form.manage | page, q, order[name], order[slug] | ||
POST | /api/v1/scheduling/routing-forms | Create a SchedulingRoutingForm | scheduling.routing_form.manage | + body | ||
DELETE | /api/v1/scheduling/routing-forms/{ulid} | Delete a SchedulingRoutingForm | scheduling.routing_form.manage | ulid | ||
GET | /api/v1/scheduling/routing-forms/{ulid} | Read one SchedulingRoutingForm | scheduling.routing_form.view · scheduling.routing_form.manage | ulid | ||
PATCH | /api/v1/scheduling/routing-forms/{ulid} | Update a SchedulingRoutingForm | scheduling.routing_form.manage | ulid, + body | ||
POST | /api/v1/scheduling/schedule-preview | Slot-Vorschau eines Wochenplans — Rechnet aus einem Wochenplan (auch ungespeichert) die buchbaren Slot-Anfänge je Wochentag — dieselbe Rechnung wie die Buchungsseite, ohne Belegtzeiten und Ausnahmen. Schreibt nichts. | scheduling.schedule.view · scheduling.schedule.manage | + body | ||
GET | /api/v1/scheduling/schedules | Collection of SchedulingSchedule | scheduling.schedule.view · scheduling.schedule.manage | page, q, order[name], order[timezone] | ||
POST | /api/v1/scheduling/schedules | Create a SchedulingSchedule | scheduling.schedule.manage | + body | ||
DELETE | /api/v1/scheduling/schedules/{ulid} | Delete a SchedulingSchedule | scheduling.schedule.manage | ulid | ||
GET | /api/v1/scheduling/schedules/{ulid} | Read one SchedulingSchedule | scheduling.schedule.view · scheduling.schedule.manage | ulid | ||
PATCH | /api/v1/scheduling/schedules/{ulid} | Update a SchedulingSchedule | scheduling.schedule.manage | ulid, + body | ||
GET | /api/v1/scheduling/settings | Modul-Einstellungen der Terminplanung lesen — Buchungsfläche, Erinnerungs-Vorlauf, Halte-Fristen (Bezahl-Buchung, Formular-Halt), Slot-Zwischenspeicher, Live-Aktualisierung, Planungssperre, Gastgeber-Mail und Captcha. Recht scheduling.settings.manage. | scheduling.settings.manage | — | ||
PATCH | /api/v1/scheduling/settings | Modul-Einstellungen der Terminplanung ändern — Nur gesendete Felder ändern sich. captchaMode: off \ | pow \ | turnstile (Turnstile braucht turnstileSiteKey und turnstileSecret). Sekunden-/Minutenwerte ≥ 0 (0 schaltet Halt bzw. Zwischenspeicher ab). Recht scheduling.settings.manage markenübergreifend. | scheduling.settings.manage | + body |
Purpose texts that do not follow the standard pattern are taken verbatim from the interface description in the code.