Scheduling
Die Scheduling API ermöglicht patientenseitige Selbstbuchung für Videosprechstunden. Öffentliche Discovery-Endpunkte können mit einershop_uid aufgerufen werden. Buchungs- und Umbuchungsvorgänge nutzen entweder einen Organisations-API-Key oder einen kurzlebigen Patient Booking Token.
Authentifizierung
Die Scheduling API akzeptiert zwei Credentials. Die meisten Endpunkte akzeptieren beides; einige sind auf eines beschränkt.Patient Booking Tokens (empfohlen für Patientenflüsse)
Ein kurzlebiges JWT, das Ihr Partner-Backend für einen bestimmten Patienten ausstellt. Übergeben Sie es im HeaderX-RxScale-Booking-Token. Das Token wird gegen ein in RxScale hinterlegtes Organisations-Booking-Token-Secret verifiziert.
Algorithmus: HS256
JOSE-Header: muss kid enthalten — die key_id, die beim Provisionieren des Secrets zurückgegeben wurde.
Erforderliche Claims:
Booking-Token-Secrets werden in der RxScale-Datenbank verschlüsselt gespeichert. Nur Ihre
key_id liegt im Klartext für das Routing vor; der Secret-Wert wird sowohl bei der Token-Verifikation als auch beim Abruf durch einen Admin (Admin-Portal oder Secrets-API) im Speicher entschlüsselt. Rotieren Sie, indem Sie ein neues Secret provisionieren und das alte widerrufen, sobald Ihr Minter umgestellt ist.Organisations-API-Key
Senden SieX-API-Key: <key> statt des Booking Tokens für Server-zu-Server-Flüsse. Der Key benötigt die Berechtigung scheduling:write. Nutzen Sie das für Back-Office-Tools, skriptgesteuertes Umbuchen oder Operations-Skripte.
Terminarten auflisten
string
erforderlich
Shop-UID, mit der die Terminarten auf die richtige Organisation eingeschränkt werden.
Slots suchen
0 Minuten. Terminarten mit
selected_doctors_only liefern nur Ärzte mit aktiver arztspezifischer
Einstellung zurück.
string
erforderlich
string
erforderlich
int
erforderlich
Fensterstart (Unix-Sekunden).
int
erforderlich
Fensterende (Unix-Sekunden). Max. 31 Tage ab
from.string
Auf einen Arzt einschränken.
string
IANA-Zeitzone (z. B.
Europe/Berlin) zur Lokalisierung der Ausgabe. Standard ist Europe/Berlin. Jeder Slot enthält start_local/end_local in dieser Zone; start_date/end_date bleiben Unix-Sekunden.Booking Session erstellen
Verwenden Sie diesen Endpunkt beim Start der gehosteten UI oder des Widget-Skripts. Die Anfrage kann das signierte Patient Booking Token entweder inX-RxScale-Booking-Token oder im JSON-Body als booking_token enthalten.
string
erforderlich
booking für einen neuen Termin, rebooking für eine bestehende Buchung.string
Pflicht im
booking-Modus.int
Fensterstart (Unix-Sekunden). Pflicht im
booking-Modus.int
Fensterende (Unix-Sekunden). Pflicht im
booking-Modus.string
URL, zu der der Patient nach erfolgreicher Buchung weitergeleitet wird.
string
Patient Booking JWT, falls nicht im Header übergeben.
Booking Session abrufen
Die gehostete UI ruft diesen Endpunkt nur mit dem Launch-Code auf, um den Buchungskontext zu laden. Kein Auth-Header nötig — der Launch-Code selbst ist das Credential.patient_profile_uid und keine weiteren Patienten-Identifier, damit der Launch-Code gefahrlos durch die URL im Browser des Patienten geführt werden kann.
Holds erstellen und bestätigen
Authentifizierte Integrationen können Holds mit einem API-Key mitscheduling:write anlegen. Gehostete-UI-Integrationen nutzen die booking_launch_code-Routen.
string
erforderlich
string
erforderlich
int
erforderlich
Unix-Sekunden.
string
Optionaler Grund für den Termin, bis zu 2000 Zeichen. Leere Werte werden als
null gespeichert.string
Optional. Derselbe Key mit identischem Body liefert den bestehenden Hold zurück, statt einen neuen anzulegen.
string
Optionaler Grund für den Termin, bis zu 2000 Zeichen. Wird dieses Feld weggelassen, bleibt der beim Erstellen des Holds gesetzte Wert erhalten; ein leerer Wert löscht ihn.
Wenn ein Hold abgelaufen ist, der Slot aber noch nicht durch einen anderen Termin belegt wurde, ist die Bestätigung weiterhin möglich und der Termin wechselt in den Status
confirmed.Wenn
visit_reason gesetzt ist, ist der Grund für Ärzte/Admins sichtbar und kann in Termin-Erinnerungen per E-Mail/SMS sowie in synchronisierten Kalendereinladungen erscheinen. Er kann beim Erstellen des Holds gesetzt und beim Bestätigen bearbeitet oder gelöscht werden — ein Request-Body ohne visit_reason lässt den vorhandenen Wert unverändert.Termin stornieren
Storniert einen bestätigten oder gehaltenen Termin. Akzeptiert entweder ein Booking Token (patientenseitige Stornierung) oder einen Organisations-API-Key (Operations).string
Optionaler Freitext-Grund. Wird am Termin für Audit-Zwecke gespeichert.
cancellation_min_notice_minutes der Terminart. Eine Stornierung innerhalb der Frist gibt 400 mit dem betroffenen Feld zurück; buchen Sie den Patienten um oder rufen Sie den Endpunkt mit einem API-Key auf, wenn ein operativer Override nötig ist.
Termin umbuchen
Verschiebt einen bestehenden Termin auf einen neuen Slot. Der Rebook-Flow legt atomar einen neuen Termin an (mitprevious_meeting_uid auf den Originaltermin) und storniert den alten.
int
erforderlich
Unix-Sekunden für den neuen Slot.
string
Pflicht, wenn die Terminart
rebooking_mode: any_doctor setzt. Bei same_doctor_only wird der ursprüngliche Arzt übernommen.string
Optional. Standard ist die ursprüngliche Terminart.
string
Dringend empfohlen — schützt vor doppelten Umbuchungen bei Retries.
allow_patient_rebooking: false setzt, rebooking_min_notice_minutes nicht eingehalten ist oder der neue Slot bereits belegt ist.
Join-Token abrufen
Liefert ein kurzlebiges Jitsi-Waiting-Room-JWT und den Raumnamen. Wird von der Patient-UI verwendet, um den Videocall zu starten.Patienten-Meeting-Link zusammensetzen
Die Antwort enthält keinen fertigen Link. Ihre Integration muss ihn selbst zusammenbauen:return_url-Query-Parameter anhängen, um den Patienten nach dem
Gesprächsende zurück auf Ihre Plattform weiterzuleiten:
string
erforderlich
Der
token-Wert aus der Antwort dieses Endpunkts. Von RxScale signiert; nicht verändern.string
URL, zu der der Patient nach dem Gesprächsende weitergeleitet wird. Die Weiterleitung erfolgt
nur, wenn der Origin der URL (Schema + Host + Port) auf der admin-konfigurierten
Allowlist der Organisation steht. Ist der Origin nicht auf der Liste oder wird kein
return_url übergeben, kehrt der Patient einfach zur vorherigen Seite zurück. Konfigurieren
Sie die Allowlist im Admin-Portal unter Einstellungen → Rückleitungs-URLs.Dieses
return_url dient ausschließlich der Navigation nach dem Call auf der Meeting-Seite.
Es ist vom return_url im Booking-Session-Body zu unterscheiden, das den Patienten nach
einer erfolgreichen Buchung weiterleitet. Verwechseln Sie beide nicht.Join-Fenster
Der Endpunkt akzeptiert Join-Anfragen ab 10 Minuten vorstart_date des Termins bis 60 Minuten nach end_date. Anfragen außerhalb dieses Fensters liefern:
Gehostete UI
Leiten Sie den Patienten auf dielaunch_url aus der Booking-Session-Antwort weiter oder binden Sie das Widget-Skript ein:
Arztportal-Endpunkte
Diese Endpunkte sind auf den authentifizierten Arzt (Auth0-Token) eingeschränkt und werden vom RxScale-Arztportal genutzt. Partner müssen sie in der Regel nicht direkt aufrufen.Geplante Termine auflisten
status, from, to, patient_uid, page, limit.
Die Antwort enthält ausschließlich Termine des authentifizierten Arztes.
Verfügbarkeits-CRUD
weekday (0 = Montag … 6 = Sonntag), start_time und end_time in Minuten seit
Mitternacht, optional buffer_minutes zwischen Slots sowie optionale Gültigkeitsgrenzen
valid_from / valid_until (Unix-Sekunden). PATCH-Bodies sind partiell; mit
clear_valid_from: true oder clear_valid_until: true lassen sich gesetzte Grenzen entfernen.
DELETE ist ein Soft-Delete.
Admin-Endpunkte
Auf die authentifizierte Admin-Organisation (Auth0-Token) eingeschränkt.Termine auflisten
doctor_uid, patient_uid, status, from, to, page, limit. Standard:
aktive (gehalten + bestätigt) Termine ab jetzt; mit status=all und from=0 lässt sich die
Historie einsehen.
Termin stornieren
{"reason": "..."} erforderlich.
Terminart-Erinnerungen
recipient_role (patient / doctor / admin), minutes_before (positive
ganze Zahl bis 60 Tage), send_email, send_sms und active. Mehrere Erinnerungen pro
(appointment_type, recipient_role) sind erlaubt, solange sich der minutes_before-Offset
unterscheidet.
Ein Maintenance-Job läuft jede Minute, findet bestätigte Termine, deren Auslösefenster “jetzt”
umfasst, und publiziert pro auflösbarem Empfänger ein scheduling.appointment_reminder_due-Event.
Das Event feuert immer (Partner-Webhook-Subscriber erhalten es); der RxScale-eigene
Notification-Handler verschickt E-Mail/SMS nur, wenn die jeweiligen Flags send_email /
send_sms auf der Erinnerungszeile gesetzt sind.
Wenn der Termin einen visit_reason hat, enthalten das Reminder-Event und die RxScale-E-Mail/SMS-Inhalte diesen Grund.
Partner abonnieren das Event über den bestehenden Endpunkt für Organisations-
Benachrichtigungs-Abonnements mit notification_type=APPOINTMENT_REMINDER_DUE.
Verfügbarkeiten eines Arztes ansehen
404 zurück, wenn der
Arzt nicht in der Organisation des Admins ist.
Booking-Token-Secrets
POST legt ein neues Secret an und gibt {key_id, secret} zurück. GET liefert den Wert
entschlüsselt zurück — Secrets liegen verschlüsselt in der Datenbank, sind aber von Admins
jederzeit über die API und das Admin-Portal (Einstellungen → Buchungs-Secrets) wieder lesbar,
damit ein neuer Minter ohne Neu-Provisionierung konfiguriert werden kann. DELETE widerruft
das Secret.
Die legacy organisations-gebundenen Pfade
(/v1/admin/scheduling/organisations/{organisation_uid}/booking-token-secrets[/<key_id>])
werden weiterhin akzeptiert und gegen die authentifizierte Organisation validiert.