# MDT-API > HTTP-API des Mobile Dispatch Terminal (MDT). Authentifizierung per `Authorization: Bearer ` oder Browser-Sitzung mit `x-guild-id`. Antworten sind JSON, Fehler `{ "error": "..." }`. Basis-URL: https://mdt.npdev.eu/api/v1 ## Dokumentation - [Interaktive Referenz](https://mdt.npdev.eu/docs) - [OpenAPI 3.1](https://mdt.npdev.eu/api/v1/openapi.json) - [Vollständiges Markdown](https://mdt.npdev.eu/api/v1/docs/apidocs.md) - [Änderungen (RSS)](https://mdt.npdev.eu/api/v1/docs/changelog.rss) ## Allgemein - `GET /access`: Zugriffsstatus und freigegebene Partnerbereiche (Recht: member) - `GET /branding/:guildId`: Öffentliches Erscheinungsbild einer Instanz (inkl. modules und tabOrder ) (öffentlich) - `GET /branding/:guildId/icon.png`: Öffentliches Instanz-Icon (öffentlich) - `GET /dispatch`: Leitstellenblatt im Browser (ohne Auth) (öffentlich) - `GET /emojis`: Auswählbare Server-Emojis der Instanz (Recht: member) - `GET /emojis/:id`: Bild eines Server-Emojis (Session-Cookie) - `POST /emojis/sync`: Server-Emojis sofort mit Discord abgleichen (Recht: admin) - `GET /health`: Statusprüfung (ohne Auth) (öffentlich) - `GET /letterheads`: Briefköpfe lesen (Recht: view) - `POST /letterheads`: Briefkopf anlegen oder löschen (Recht: admin) - `PATCH /letterheads/:id`: Briefkopf ändern (Recht: admin) - `DELETE /letterheads/:id`: Briefkopf anlegen oder löschen (Recht: admin) - `PUT /letterheads/order`: Briefköpfe sortieren (Recht: admin) - `GET /me/alarm`: Dashboard-, Alarm- und persönlichen Alarmstatus lesen (Recht: view, nur Sitzung) - `POST /me/clock-in`: Selbst einstempeln (Recht: view, nur Sitzung) - `POST /me/clock-out`: Selbst ausstempeln (Recht: view, nur Sitzung) - `PUT /me/dispatcher`: Selbst als Leitstelle setzen (Recht: view, nur Sitzung) - `GET /me/personal/activity`: Aktivität der eigenen Personalakte (nur Lesezugriff nötig) (Recht: view, nur Sitzung) - `GET /me/personal/history`: Verlauf der eigenen Personalakte (nur Lesezugriff nötig) (Recht: view, nur Sitzung) - `GET /me/preferences`: Eigene Benutzereinstellungen (Darstellung, Alarmton, abbestellte DMs); jedes Mitglied, nur Sitzung (Recht: member, nur Sitzung) - `PUT /me/preferences`: Eigene Benutzereinstellungen ändern, Body { "prefs": { … } } ; zusammengeführt, null setzt einen Wert auf den Standard (Recht: member, nur Sitzung) - `GET /me/stats`: Eigene Statistik (nur Lesezugriff nötig) (Recht: view, nur Sitzung) - `PUT /me/unit-status`: Status einer selbst besetzten Einheit setzen, Body { "callsign", "status" } (nur Sitzung) (Recht: view, nur Sitzung) - `POST /onboarding/:guildId/seed`: Vorlagen für leere Bereiche anwenden (Recht: admin) - `GET /onboarding/:guildId/seedable`: Leere Einrichtungsbereiche ermitteln (Recht: admin) - `GET /uploads`: Eigene Uploads verwalten (Recht: admin) - `POST /uploads`: Bild als multipart/form-data (Feld file ) hochladen, höchstens 5 MB (Recht: admin) - `GET /uploads/:id`: Authentifiziertes Dokumentbild - `DELETE /uploads/:id`: Eigene Uploads verwalten (Recht: admin) ## Statistik - `GET /embed/chart/:token.png`: Öffentlicher Einbett-Link eines Diagramms, der Token ist der Zugang (ohne Auth, außerhalb von /api/v1 ) (öffentlich) - `GET /stats/einsatz`: Einsatz-Kennzahlen im Zeitraum (Recht: admin) - `GET /stats/filters`: Ränge und Organisationseinheiten für die Filter (Recht: admin) - `GET /stats/heatmap`: Aktivitäts-Heatmap lesen, mit Unterbesetzung (Recht: admin) - `GET /stats/inactive`: Aktive Mitarbeiter mit ihrer letzten Schicht (Recht: admin) - `GET /stats/leaderboard`: Rangliste des Servers (Recht: admin) - `GET /stats/leaderboard/chart/:type.png`: Ranglisten-Diagramm (Recht: admin) - `GET /stats/shifts`: Einzelne Schichten im Zeitraum (Team oder userId ) (Recht: admin) - `GET /stats/user/:userId`: Statistik eines einzelnen Nutzers (Recht: admin) - `GET /stats/user/:userId/chart/:type.png`: Nutzer-Diagramm (Recht: admin) ## Leitstelle - `GET /alarm`: Dashboard-, Alarm- und persönlichen Alarmstatus lesen (Recht: view) - `GET /calls`: Meldungen aus dem Spiel für das Leitstellenblatt: offene, übernommene und die der letzten 6 Stunden (Recht: view) - `POST /calls/:id/:action`: Meldung bearbeiten: take (legt einen Einsatz mit Kartenpin an, wenn das Einsatz-Modul an ist), dismiss , reopen , assign mit { "callsign": "RTW 1" | null } (Einheit zuteilen; ihre Besatzung bekommt im Spiel einen Wegpunkt) (Recht: view) - `GET /overview`: Dashboard-, Alarm- und persönlichen Alarmstatus lesen (Recht: view) ## Administration - `GET /admin/api-usage/legacy`: Aufrufe der umbenannten Pfade /hospital und /firstaid in den letzten 7 Tagen, davon per API-Schlüssel (Admin) (Recht: admin) - `GET /admin/apikeys`: API-Schlüssel auflisten (Recht: admin) - `POST /admin/apikeys`: API-Key erstellen; Klartext nur in der Antwort (Recht: admin) - `DELETE /admin/apikeys/:id`: API-Schlüssel widerrufen (Recht: admin) - `GET /admin/audit`: Änderungsprotokoll lesen; Filter q , category , action , source , actor , target , sensitive , from / to , since / until , hours , tz (siehe unten) (Recht: admin) - `GET /admin/audit/actors`: Personen und Schlüssel, die im Protokoll vorkommen ( ?q= ) (Recht: admin) - `GET /admin/audit/entries/:id`: Ein Eintrag mit allen Feldern, weiteren Einträgen zum selben Ziel und seinen Rücknahmen (Recht: admin) - `GET /admin/audit/entries/:id/revert`: Vorschau einer Rücknahme: je Feld Vorher, Nachher, heutiger Wert und Konflikt (Recht: admin) - `POST /admin/audit/entries/:id/revert`: Änderung zurücknehmen ( { "keys": [...], "reason": "..." } ), läuft durch die ursprüngliche Route (Recht: admin) - `GET /admin/audit/export`: Gefilterte Einträge als Datei ( ?format=csv|json&cols=changes,ids,technical ) (Recht: admin) - `GET /admin/audit/meta`: Bereiche, Aktionen und Rechte der lesenden Person im Protokoll (Recht: admin) - `GET /admin/audit/security`: Abgewiesene Zugriffe gebündelt, Häufungen und Zugriffe von außen ( ?days= ) (Recht: admin) - `GET /admin/audit/settings`: Aufbewahrung, Stand der Kettenprüfung und wer das Protokoll lesen darf (Recht: admin) - `PUT /admin/audit/settings`: Aufbewahrung setzen ( retentionDays , sensitiveRetentionDays , timeclockRetentionDays ) (Recht: admin) - `GET /admin/audit/stats`: Übersicht über die gefilterten Einträge: Summen, je Stunde, Tag, Bereich und Person (Recht: admin) - `POST /admin/audit/verify`: Hash-Kette des Protokolls jetzt prüfen (Recht: admin) - `GET /admin/audit/views`: Eigene und geteilte gespeicherte Ansichten des Protokolls (Recht: admin) - `POST /admin/audit/views`: Ansicht speichern ( { "name", "query", "shared" } ) (Recht: admin) - `DELETE /admin/audit/views/:id`: Ansicht löschen (Recht: admin) - `GET /admin/audit/watch-rules`: Wachregeln auflisten (Recht: admin) - `POST /admin/audit/watch-rules`: Wachregel anlegen (Recht: admin) - `PATCH /admin/audit/watch-rules/:id`: Wachregel ändern oder nur ein-/ausschalten ( { "enabled": false } ) (Recht: admin) - `DELETE /admin/audit/watch-rules/:id`: Wachregel löschen (Recht: admin) - `PUT /admin/branding`: Instanzname, Badge-Format, Begriffe, Module und Reiterfolge ( tabOrder ) ändern; showcaseOnLanding (Startseiten-Galerie) und showcaseInviteUrl (nur https://discord.gg/… oder https://discord.com/invite/… , leer entfernt) (Recht: admin) - `POST /admin/branding/icon`: Instanz-Icon hochladen (Recht: admin) - `GET /admin/callsign-prefixes`: Rufnamen-Präfixe lesen (Recht: view) - `PUT /admin/callsign-prefixes`: Rufnamen-Präfixe setzen ( { "prefixes": [...] } , ersetzt die Liste); baut das Panel neu auf (Recht: edit) - `GET /admin/channels`: Discord-Kanäle auflisten (Recht: admin) - `GET /admin/chart-embeds`: Öffentliche Einbett-Links für Diagramme auflisten (Admin) (Recht: admin) - `POST /admin/chart-embeds`: Einbett-Link anlegen: { "kind": "leaderboard" | "user", "chart", "userId"?, "query"?, "label"?, "expiresInDays"? } , siehe „Einbett-Links für Diagramme" (Admin) (Recht: admin) - `DELETE /admin/chart-embeds/:id`: Einbett-Link widerrufen; der Link antwortet sofort mit 404 (Admin) (Recht: admin) - `POST /admin/clock-in`: Person per Dienstmarke einstempeln (Recht: edit) - `POST /admin/clock-out`: Person per Dienstmarke ausstempeln (Recht: edit) - `GET /admin/clock-status/:badge`: Ist die Dienstmarke im Dienst? (Recht: view) - `GET /admin/config/export`: Konfiguration als mdt-config.json (Formatversion, je Bereich der Stand; keine Personen, keine Schlüssel). organization und callsignTemplates nur für eine Sitzung, die die frische Prüfung als Server-Admin besteht (wie /platform/config ) (Recht: admin) - `POST /admin/config/import`: Import übernehmen ( { "file": {...}, "areas": [...] } ); legt vorher einen Sicherungspunkt an, eine Transaktion je Bereich. Nur mit Sitzung, nie mit API-Schlüssel; organization und callsignTemplates nur nach frischer Prüfung als Server-Admin, sonst ok: false für diese Bereiche (Recht: admin) - `POST /admin/config/import/preview`: Import prüfen ( { "file": {...} } ): je Bereich neu, geändert, unverändert, Warnungen und nicht übertragbare Discord-Ziele; ändert nichts (Recht: admin) - `GET /admin/config/snapshots`: Sicherungspunkte auflisten (manuell, täglich automatisch, vor Import und Wiederherstellung) (Recht: admin) - `POST /admin/config/snapshots`: Sicherungspunkt anlegen ( { "name": "..." } ) (Recht: admin) - `DELETE /admin/config/snapshots/:id`: Sicherungspunkt löschen (Recht: admin) - `GET /admin/config/snapshots/:id/compare`: Sicherungspunkt mit dem heutigen Stand vergleichen, je Bereich (Recht: admin) - `POST /admin/config/snapshots/:id/restore`: Sicherungspunkt wiederherstellen ( { "areas"?: [...] } ); legt vorher einen Sicherungspunkt vom heutigen Stand an. Nur mit Sitzung; gesperrte Bereiche wie beim Import (Recht: admin) - `GET /admin/cooperations`: Kooperationen der Instanz auflisten, je mit partnerDisplayName und ownBoundPolicyCount (eigene, nicht archivierte Datenregeln an der Verbindung) (Recht: admin) - `POST /admin/cooperations`: Kooperation vorschlagen; DM an die Admins der Partnerinstanz, die Antwort meldet in delivery ( botInPartnerGuild , adminsNotified , null = noch offen), wer erreicht wurde (Recht: admin) - `POST /admin/cooperations/:id/accept`: Kooperation annehmen; DM mit Link zu den Datenregeln an die Admins der vorschlagenden Instanz (Recht: admin) - `PUT /admin/cooperations/:id/grants`: Eigene Kooperationsfreigaben ändern (Recht: admin) - `POST /admin/cooperations/:id/health-ack`: Erfolgreiche eigene Verbindung zur API bestätigen (Admin-Session; kein Body oder {} ) (Recht: admin) - `PUT /admin/cooperations/:id/metadata`: Eigene Kontakt-, Protokoll- und Capability-Metadaten ändern (Recht: admin) - `POST /admin/cooperations/:id/resume`: Ausgesetzte Kooperation mit Begründung fortsetzen (Recht: admin) - `POST /admin/cooperations/:id/revoke`: Kooperation widerrufen (Recht: admin) - `POST /admin/cooperations/:id/supersede`: Kooperation mit Begründung ablösen (Recht: admin) - `POST /admin/cooperations/:id/suspend`: Kooperation mit Begründung aussetzen (Recht: admin) - `GET /admin/dispatch-codes`: Statuscodes lesen (Recht: view) - `PUT /admin/dispatch-codes`: Statuscodes setzen ( { "codes": [...], "pauseCode": ... } , ersetzt die Liste) (Recht: edit) - `GET /admin/dispatchers`: Aktuelle Leitstellen-Slots und Statusdefinitionen lesen (Recht: view) - `PUT /admin/dispatchers`: Leitstelle / Sek. Leitstelle / Höchstrangiger setzen (Recht: edit) - `GET /admin/gebiete`: Einsatzgebiete lesen (Recht: view) - `PUT /admin/gebiete`: Einsatzgebiete setzen ( { "gebiete": [...] } , ersetzt die Liste); nur Board, kein Panel-Neuaufbau (Recht: edit) - `DELETE /admin/instance`: Instanz vollständig löschen (nur Serverbesitzer) (Recht: admin) - `GET /admin/members`: Alle Mitarbeiter (Rolle + Dienstmarke) (Recht: view) - `GET /admin/members/search`: Mitglieder nach Server-Nickname, Account-Name oder Discord-ID suchen (Recht: admin) - `GET /admin/on-duty`: Alle offenen Schichten (im Dienst) (Recht: view) - `PUT /admin/on-duty/:userId/code`: Dienstcode setzen (Recht: edit) - `POST /admin/panel`: Stempeluhr-Panel veröffentlichen (Recht: admin) - `GET /admin/permissions/holders`: Wer welchen Rang (Discord, manuell, InGame) hält und wer welcher Abteilung angehört; discordComplete: false , wenn der Mitglieder-Cache unvollständig ist (Recht: admin) - `GET /admin/permissions/members/:userId`: Warum ein Mitglied welche Rechte hat: Admin-Status, Ränge samt Quelle, Abteilungen, Suspendierung und die wirksame Rechteliste (Recht: admin) - `GET /admin/permissions/objects`: Die Dinge mit Einzelrechten (Kurse, Listen, geschützte Spalten, Website-Seiten und Umfragen) eingeschalteter Module, je mit restricted : die Aktionen, für die das Bereichsrecht nicht genügt (Recht: admin) - `PUT /admin/permissions/objects/:resource/:id`: „Nur mit Einzelrecht" an einem Ding schalten, Rumpf { "restricted": ["…"] } (Recht: admin) - `GET /admin/presence`: Wer gerade eine Registerkarte des MDT offen hat ( { users: [{ userId, name, avatarUrl }] } ); unabhängig vom Dienststatus (Recht: admin) - `GET /admin/roles`: Discord-Rollen auflisten (Recht: admin) - `GET /admin/settings`: Instanz-Einstellungen lesen (Recht: admin) - `PUT /admin/settings`: Guild-, Stempeluhr- und Branding-Einstellungen ändern (Recht: admin) - `GET /admin/standby`: Bereitschaftsliste lesen (Recht: view) - `POST /admin/standby/call`: Bereitschaft rufen (Recht: edit) - `POST /admin/standby/revoke`: Bereitschaftsruf zurücknehmen (Recht: edit) - `GET /admin/statuses`: Aktuelle Leitstellen-Slots und Statusdefinitionen lesen (Recht: view) - `PUT /admin/statuses`: Statusmeldungen ersetzen, Body { "statuses": [ … ] } (Recht: edit) - `GET /admin/stempeluhr`: Stempeluhr-Einstellungen lesen (Recht: admin) - `PUT /admin/stempeluhr`: Guild-, Stempeluhr- und Branding-Einstellungen ändern (Recht: admin) - `POST /admin/stempeluhr/panel/test`: Stempeluhr-Panel als Testnachricht per DM an die aufrufende Person ( { "panelTitle", "panelAccentColor" } , ungespeicherte Werte) (Recht: admin) - `GET /admin/units`: Einheiten auflisten (Recht: view) - `POST /admin/units`: Einheit anlegen (Recht: edit) - `PUT /admin/units/:callsign`: Einheit aktualisieren (leere Besatzung löscht sie) (Recht: edit) - `DELETE /admin/units/:callsign`: Einheit löschen (Recht: edit) - `POST /admin/view-as/start`: „Ansicht als …“ beginnen ( { "target": "rank:" } oder "member:" ): prüft das Ziel und schreibt die Protokollzeile, Antwort { kind, id, label } . Die Ansicht selbst trägt der Kopf x-view-as jeder Anfrage: nur für Admins, Lesen mit den Rechten des Ziels, jede schreibende Anfrage mit diesem Kopf wird mit 403 abgewiesen (Recht: admin) - `POST /admin/view-as/stop`: „Ansicht als …“ beenden ( { "target": … } ), nur die Protokollzeile; ohne x-view-as senden (Recht: admin) - `GET /history/document/:id`: Verlauf eines Dokuments aus dem Protokoll (Recht: admin) - `GET /history/einsatz/:id`: Verlauf eines Einsatzblatts aus dem Protokoll (Recht: view) - `GET /history/employee/:id`: Verlauf einer Personalakte aus dem Protokoll ( ?notes=0 , ?timeclock=1 ) (Recht: admin) - `GET /history/unit/:id`: Verlauf einer Einheit aus dem Protokoll (Recht: edit) - `GET /settings/discord-check`: Alle in den Einstellungen verwendeten Kanäle und Rollen gegen die Bot-Rechte prüfen ( items[] mit status ok/warn/error, detail , steps ); 60 s zwischengespeichert, ?fresh=1 prüft neu (Recht: admin) - `GET /settings/health`: Gesundheitscheck der Einstellungen: Befunde ( findings[] mit severity , section , action ) und Kennzahlen ( stats ); ?fresh=1 prüft Discord neu (Recht: admin) - `GET /settings/impact`: Folgen eines Abschaltens zählen: ?module= (Kursspalten, verknüpfte Termine, wirkungslose Rechte) oder ?status= , ?calendarCategory= , ?documentCategory= , ?clearance= (Anzahl der Einträge, die den Wert benutzen) (Recht: admin) ## Personalblatt - `GET /personal`: Personalblatt lesen (Mitarbeiter + Spalten) (Recht: view) - `PUT /personal/columns`: Spalten des Personalblatts ersetzen (Recht: admin) - `POST /personal/employees`: Mitarbeiter manuell anlegen (Recht: admin) - `PATCH /personal/employees/:id`: Zellen eines Mitarbeiters aktualisieren (Recht: admin) - `GET /personal/employees/:id/activity`: Aktivität einer Personalakte lesen (Stunden, Schichten, letzter Login) (Recht: admin) - `POST /personal/employees/:id/archive`: Mitarbeiter archivieren (Recht: admin) - `PATCH /personal/employees/:id/discord-ranks`: Explizite Discord-Rangänderungen anwenden (Recht: admin) - `GET /personal/employees/:id/history`: Verlauf einer Personalakte lesen (Recht: admin) - `GET /personal/employees/:id/notes`: Notizen zur Personalakte lesen (Recht: admin) - `POST /personal/employees/:id/notes`: Notiz anlegen (Recht: admin) - `PATCH /personal/employees/:id/notes/:noteId`: Notiz ändern (Recht: admin) - `DELETE /personal/employees/:id/notes/:noteId`: Notiz löschen (Recht: admin) - `GET /personal/employees/:id/ranks`: Rangzuweisungen einer Mitarbeiterzeile lesen (Recht: admin) - `PUT /personal/employees/:id/ranks`: Manuelle oder InGame-Rangzuweisungen einer Mitarbeiterzeile ersetzen (Recht: admin) - `POST /personal/employees/:id/restore`: Archivierten Mitarbeiter reaktivieren (Recht: admin) - `GET /personal/ranks`: Rangdefinitionen lesen ( capabilities , discordRoleId , inGameKey ) (Recht: admin) - `PUT /personal/ranks`: Rangliste ändern (Recht: admin) - `GET /personal/sync`: Vorschläge aus dem Discord-Abgleich lesen (Recht: admin) - `POST /personal/sync/apply`: Vorschläge annehmen/verwerfen (Recht: admin) ## Einsatzblatt - `GET /einsatz`: Einsatzblätter lesen (ohne archived nur laufende) (Recht: view) - `POST /einsatz`: Einsatzblatt anlegen (Recht: view) - `GET /einsatz/:id`: Einzelnes Einsatzblatt lesen; ?ownerGuildId= liest ein freigegebenes Partnerblatt, bei Freigabestufe redacted geschwärzt (Recht: view) - `PATCH /einsatz/:id`: Titel, Ort, Kartenmarkierung oder Einsatzleiter setzen - Titel nur mit Admin-Rechten (Recht: view) - `DELETE /einsatz/:id`: Abgeschlossenes Einsatzblatt löschen (nur Archiv; ein offener Einsatz wird mit 409 abgelehnt) (Recht: admin) - `POST /einsatz/:id/close`: Einsatz abschließen (ins Archiv) (Recht: edit) - `GET /einsatz/:id/entries`: Verlauf des Einsatzes lesen (Einsatz- und Patienteneinträge) (Recht: view) - `POST /einsatz/:id/entries`: Notiz eintragen ( patientId: null = Lagemeldung) (Recht: view) - `PATCH /einsatz/:id/entries/:eid`: Eigene Verlaufsnotiz ändern (Recht: view) - `DELETE /einsatz/:id/entries/:eid`: Eigene Notiz zurücknehmen (Recht: view) - `POST /einsatz/:id/patients`: Patient erfassen (Recht: view) - `PATCH /einsatz/:id/patients/:pid`: Name, Zugehörigkeit, Triage, Ort oder Schritte ändern (Recht: view) - `DELETE /einsatz/:id/patients/:pid`: Patient entfernen (Recht: edit) - `POST /einsatz/:id/patients/:pid/announce`: Patient der Einrichtung ankündigen (erscheint dort ausgegraut über dem Warteraum) - optionales Feld buildingId ; die Verlegung löscht die Ankündigung (Recht: view) - `DELETE /einsatz/:id/patients/:pid/announce`: Ankündigung zurücknehmen (Recht: view) - `PUT /einsatz/:id/patients/:pid/register-link`: Patient mit authorityRecordId verknüpfen, mit null lösen oder mit createFromPatient: true eine neue Akte anlegen und verknüpfen; optional reason (Recht: view) - `GET /einsatz/:id/patients/:pid/register-suggestions`: Registerakten der eigenen Instanz als Vorschlag für einen Patienten, optional q (Standard: Patientenname); früher verknüpfte Akten zuerst; nur lesbare Akten (Recht: view) - `POST /einsatz/:id/patients/:pid/transfer`: Patient in die Einrichtung verlegen - optionales Feld buildingId wählt die Zieleinrichtung; ohne Angabe die erste (Recht: view) - `GET /einsatz/:id/register-warnings`: Warnhinweise und medizinische Registerangaben der verknüpften Patienten eines Einsatzes (Recht: view) - `POST /einsatz/:id/reopen`: Abgeschlossenen Einsatz wieder öffnen (Recht: edit) ## Einrichtung - `GET /facility`: Board der Einrichtung lesen - ohne Parameter die aktiven Patienten, pending die Entlassenen ohne geschriebene Akte (mit involved : wer beteiligt war), discharged das Archiv. ?discharged=1 bleibt als Alias für view=discharged , liefert seitdem aber nur noch Patienten mit geschriebener Akte - vor pending waren das alle Entlassenen, jetzt strikt weniger. Antwort enthält buildings (alle Einrichtungen der Guild); jeder Raum und jeder Patient trägt buildingId . Gefiltert wird im Client. Das Archiv ( discharged ) nimmt zusätzlich from / to (ISO-Zeitpunkte, Entlassung), triage , betreuer (Teil des Namens) und limit (1–100) an. Die aktive Ansicht trägt settings (Hinweis-Schwellen) und incoming (angekündigte Patienten). (Recht: view) - `PATCH /facility/beds/:id`: Bett umbenennen oder Position ändern (Recht: admin) - `DELETE /facility/beds/:id`: Bett löschen (Patient fällt in den Streifen „ohne Bett" zurück) (Recht: admin) - `GET /facility/buildings`: Einrichtungen auflisten (Recht: view) - `POST /facility/buildings`: Einrichtung anlegen (Recht: admin) - `PATCH /facility/buildings/:id`: Einrichtung umbenennen oder Position ändern (Recht: admin) - `DELETE /facility/buildings/:id`: Einrichtung löschen - 409, solange Patienten darin liegen oder es das letzte ist (Recht: admin) - `POST /facility/patients`: Patient direkt in der Einrichtung anlegen (Direktaufnahme, landet im Warteraum). Optionales Feld buildingId wählt die Einrichtung; ohne Angabe die erste. (Recht: view) - `GET /facility/patients/:id`: Einzelnen Einrichtung-Patienten lesen; ?ownerGuildId= liest einen freigegebenen Partnerpatienten (Recht: view) - `PATCH /facility/patients/:id`: Ort ( buildingId + Raum/Bett - alle drei Felder gemeinsam), Triage, Zugehörigkeit oder Schritte eines Patienten ändern (Recht: view) - `GET /facility/patients/:id/citizen`: Bürgerakte zum Patienten: Stammdaten (Blutgruppe, Allergien, Vorerkrankungen) und die letzten früheren Aufenthalte; citizen: null ohne verknüpften Bürger (Recht: view) - `GET /facility/patients/:id/entries`: Verlauf eines Einrichtung-Patienten lesen (Recht: view) - `POST /facility/patients/:id/entries`: Notiz zu einem Einrichtung-Patienten eintragen (Recht: view) - `DELETE /facility/patients/:id/entries/:eid`: Eigene Notiz eines Einrichtung-Patienten zurücknehmen (Leitstelle: jede) (Recht: view) - `POST /facility/patients/:id/handover`: Patient mit einer aktiven Partnerfreigabe an die Partner-Einrichtung übergeben (Recht: view) - `PATCH /facility/patients/:pid/entries/:eid`: Einrichtungpatient oder Verlauf ändern (Recht: view) - `GET /facility/queue`: Offene Wartenummern der Notaufnahme (Recht: view) - `POST /facility/queue`: Wartenummer am Tresen ausgeben { "name"? } (Recht: view) - `POST /facility/queue/:ticketId/:action`: Wartenummer: arrive , call { "calledTo"? } , done , cancel , triage { "triage": red|yellow|green|null } (Recht: view) - `GET /facility/rooms`: Einrichtungen mit ihren Räumen und Betten auflisten (Antwort: { buildings: [{ id, name, position, rooms: [...] }] } ) (Recht: view) - `POST /facility/rooms`: Raum anlegen (Felder buildingId , name ) (Recht: admin) - `PATCH /facility/rooms/:id`: Raum umbenennen oder Position ändern (Recht: admin) - `DELETE /facility/rooms/:id`: Raum löschen (Patienten fallen in den Warteraum zurück) (Recht: admin) - `POST /facility/rooms/:id/beds`: Bett in einem Raum anlegen (Recht: admin) - `GET /facility/settings`: Hinweis-Schwellen der Einrichtung lesen: stayWarnMinutes (Verweildauer-Warnung), fileReminderHours (Akten-Erinnerung); null = aus (Recht: view) - `PUT /facility/settings`: Hinweis-Schwellen setzen (Admin) - Teil-Update, Minuten 1–10080 oder null (Recht: admin) - `GET /facility/stats`: Kennzahlen der Einrichtung: Aufnahmen, Entlassungen, Ø/Median-Verweildauer, Belegung im Verlauf, Entlassungen pro Tag und je Früh/Spät/Nacht, offene Akten je Betreuer (Recht: view) ## Medic und InGame - `GET /integrations/ingame/calls`: Meldungen an die Leitstelle lesen: offene, übernommene und die der letzten 6 Stunden (Scope calls:read ) (Recht: view) - `POST /integrations/ingame/calls`: Meldung aus dem Spiel anlegen oder über dieselbe externalId aktualisieren, siehe „Meldungen aus dem Spiel" (Scope calls:call.report ) (Recht: edit) - `GET /integrations/ingame/calls/:externalId`: Eine Meldung über die Kennung des Spielservers lesen (Scope calls:read ) (Recht: view) - `POST /integrations/ingame/calls/:externalId/resolve`: Meldung abschließen, weil sie sich im Spiel erledigt hat: { "resolution"? } (Scope calls:call.report ) (Recht: edit) - `GET /integrations/ingame/capabilities`: Verfügbare InGame-Integrationsfunktionen lesen (Recht: view) - `GET /integrations/ingame/employees/:userId`: Mitarbeiter über die Discord-Kennung lesen: Name, Dienstnummer, Ränge mit inGameKey , im Dienst, gesperrt (Scope employees:read ) (Recht: view) - `POST /integrations/ingame/employees/:userId/clock-in`: Im Spiel einstempeln (Discord-Kennung); 409 , wenn schon eingestempelt (Scope timeclock:shift.ingame_clock ) (Recht: edit) - `POST /integrations/ingame/employees/:userId/clock-out`: Im Spiel ausstempeln; 404 , wenn nicht eingestempelt (Scope timeclock:shift.ingame_clock ) (Recht: edit) - `PUT /integrations/ingame/employees/:userId/ranks`: InGame-Ränge einer Discord-Person synchronisieren (Recht: admin) - `PUT /integrations/ingame/employees/:userId/unit-status`: Status der eigenen Einheit aus dem Spiel: { "status", "callsign"? } ; ohne callsign die Einheit, in der die Person sitzt; nur Besatzung, nur konfigurierte Status (Scope units:unit.ingame_status ) (Recht: edit) - `GET /integrations/ingame/hospital`: Das Krankenhaus im Spiel lesen: Häuser mit Räumen und Betten, je mit at ( x , y , z , heading oder null ), Belegung je Bett als Patienten-Ids, die Punkte ( xray , ct , theatre , reception ) und die Patienten im Haus mit Platz; 404 ohne Einrichtung-Modul (Scope facility:hospital.ingame_read ) (Recht: view) - `PUT /integrations/ingame/hospital/points`: Im Spiel einrichten: { "kind", "refId"?, "name"?, "buildingId"?, "roomId"?, "x", "y", "z", "heading" } ; ohne refId legt building , room und bed die Zeile im MDT an ( 201 , gleicher Name im selben Haus bzw. Raum 409 ), mit refId wird eine vorhandene Zeile oder ein Punkt der eigenen Gilde platziert bzw. verschoben (Scope facility:hospital.ingame_layout ) (Recht: admin) - `DELETE /integrations/ingame/hospital/points/:kind/:refId`: Entfernen: bei bed und room samt Zeile im MDT (wie in den Einstellungen), bei building nur die Stelle im Spiel, bei Punkten der Punkt (Scope facility:hospital.ingame_layout ) (Recht: admin) - `POST /integrations/ingame/queue-tickets`: Wartenummer am Automaten im Spiel ziehen: { "name"? } , wie am Tresen (Person ist da); 409 , wenn Wartenummern aus sind (Scope facility:queue.ingame_ticket ) (Recht: edit) - `GET /integrations/ingame/statuses`: Konfigurierte Status ( label , color , alarm ) für den Spielserver (Scope units:unit.ingame_status ) (Recht: view) - `POST /integrations/ingame/tablet-links`: Einmaligen Anmeldelink fürs MDT im Spiel anfordern: { "userId": "" } -> 201 { url, expiresAt } , 60 Sekunden gültig, siehe „Das MDT im Spiel" (Scope sessions:ingame.tablet_login ) (Recht: edit) - `GET /medic/citizens/:id`: Medic-Person lesen (Recht: view) - `PUT /medic/citizens/:id/state`: Medic-Personstatus setzen (Recht: edit) - `POST /medic/citizens/resolve`: Medic-Person auflösen (Recht: edit) - `POST /medic/events`: Medic-Ereignisse übernehmen; patient.admit ( { patientId, bedId, admittedByName? } , P7) legt auf ein Bett der eigenen Gilde, patient.discharge nimmt zusätzlich dischargedByName? und note? (Recht: edit) - `GET /medic/patients/:id`: Medic-Patient lesen, mit den letzten 20 EKG-Streifen ( ecgStrips ) (Recht: view) - `GET /medic/qualifications`: Medic-Qualifikationen lesen (Recht: view) - `GET /patients/:pid/injuries`: Verletzungen lesen (Recht: view) - `PUT /patients/:pid/injuries/:region`: Verletzung setzen (Recht: view) - `PATCH /patients/:pid/injuries/:region`: Verletzung ändern (Recht: view) - `DELETE /patients/:pid/injuries/:region`: Verletzung entfernen (Recht: view) ## Kurse - `GET /courses`: Kurse und ihre Anmeldungen lesen (Recht: view) - `POST /courses`: Anmeldung anlegen (Recht: view) - `PATCH /courses/:id`: Felder einer Anmeldung bearbeiten (Recht: admin) - `DELETE /courses/:id`: Anmeldung löschen (Recht: admin) - `POST /courses/:id/actions/:actionId`: Eine konfigurierte Aktion ausführen (Recht: admin) - `POST /courses/:id/pass`: Anmeldung abschließen (erste complete -Aktion) (Recht: admin) - `POST /courses/:id/unpass`: Abschluss zurücknehmen (erste reopen -Aktion) (Recht: admin) - `GET /courses/definitions`: Kurse mit Feldern und Aktionen, ohne Anmeldungen (Recht: admin) - `POST /courses/definitions`: Kurs anlegen (Recht: admin) - `PATCH /courses/definitions/:courseId`: Kurs umbenennen/einstellen (Recht: admin) - `DELETE /courses/definitions/:courseId`: Leeren Kurs löschen (Recht: admin) - `PUT /courses/definitions/:courseId/layout`: Felder und Aktionen eines Kurses setzen (Recht: admin) - `PUT /courses/definitions/order`: Kurse sortieren (Recht: admin) ## Kalender - `GET /calendar`: Kalendertermine lesen: ?month=JJJJ-MM für einen Monat oder ?from=JJJJ-MM-TT&to=JJJJ-MM-TT für eine Spanne (höchstens 120 Tage); geliefert wird, was den Zeitraum überlappt (Recht: view) - `POST /calendar`: Kalendertermin anlegen (Recht: view) - `PATCH /calendar/:id`: Kalendertermin ändern (Recht: view) - `DELETE /calendar/:id`: Kalendertermin löschen; ?scope=series löscht die ganze Serie, alles andere nur diesen Termin (Recht: view) - `GET /calendar/categories`: Kalenderkategorien lesen (Recht: view) - `PUT /calendar/categories`: Kalenderkategorien setzen (ersetzt die Liste; eine ungültige Kategorie lässt die gesamte Anfrage scheitern, statt Zeilen zu entfärben) (Recht: admin) - `GET /calendar/reminders`: Kalender-Erinnerungen lesen (Recht: view) - `GET /calendar/settings`: Kalendereinstellungen lesen (Recht: admin) - `PUT /calendar/settings`: Kalendereinstellungen setzen (Recht: admin) ## Schwarzes Brett - `GET /board-activity`: Letzte Änderungen am Leitstellenblatt (Protokoll, Kategorie board ) (Recht: view) - `GET /board-notices`: Aushänge des Schwarzen Bretts lesen (Recht: view) - `POST /board-notices`: Aushang veröffentlichen (Recht: admin) - `PATCH /board-notices/:id`: Aushang ändern (Recht: admin) - `DELETE /board-notices/:id`: Aushang entfernen (Recht: admin) ## Dokumente - `GET /documents`: Dokumente lesen (Recht: view) - `POST /documents`: Dokument oder Kategorie anlegen (Recht: admin) - `GET /documents/:id`: Dokument lesen (Recht: view) - `PATCH /documents/:id`: Dokument ändern oder in den Papierkorb legen ( ?permanent=1 : endgültig löschen) (Recht: admin) - `DELETE /documents/:id`: Dokument ändern oder in den Papierkorb legen ( ?permanent=1 : endgültig löschen) (Recht: admin) - `GET /documents/:id/access-log`: Zugriffe von Partnern und über öffentliche Links der letzten 30 Tage ( documents.share.manage ) (Recht: admin) - `POST /documents/:id/acknowledge`: Aktuelle Version als „Gelesen und verstanden" bestätigen (Recht: view) - `GET /documents/:id/acknowledgements`: Bestätigungen und noch offene Personen lesen (Admin) (Recht: admin) - `POST /documents/:id/acknowledgements/remind`: Alle, die die aktuelle Version noch nicht bestätigt haben, per Discord-Direktnachricht erinnern; höchstens alle 10 Minuten ( documents.acknowledgement.view ) (Recht: admin) - `GET /documents/:id/comments`: Anmerkungen eines Dokuments lesen (Recht: view) - `POST /documents/:id/comments`: Anmerkung schreiben { "body", "quote"?, "parentId"? } (Recht: view) - `PATCH /documents/:id/comments/:commentId`: Eigene Anmerkung ändern { "body" } oder Faden erledigen { "resolved" } (Recht: view) - `DELETE /documents/:id/comments/:commentId`: Anmerkung löschen (eigene; wer schreiben darf, auch fremde) (Recht: view) - `GET /documents/:id/discord-posts`: Discord-Posts eines Dokuments lesen ( documents.share.manage ) (Recht: admin) - `POST /documents/:id/discord-posts`: Dokument in einen Discord-Kanal posten { "channelId", "message"?, "withAckButton"?, "updateOnNewVersion"?, "mentionRoleId"? } ( documents.share.manage ) (Recht: admin) - `DELETE /documents/:id/discord-posts/:postId`: Post vergessen, mit message=1 auch in Discord löschen ( documents.share.manage ) (Recht: admin) - `POST /documents/:id/duplicate`: Dokument als Kopie anlegen (Admin) (Recht: admin) - `GET /documents/:id/pdf`: Dokument als PDF abrufen (Recht: view) - `POST /documents/:id/read`: Dokument als gelesen markieren (Recht: view) - `POST /documents/:id/restore`: Dokument aus dem Papierkorb zurückholen (Admin) (Recht: admin) - `GET /documents/:id/revisions`: Versionsverlauf eines Dokuments lesen (neueste zuerst, ohne Text) (Recht: view) - `GET /documents/:id/revisions/:rev`: Eine Version vollständig lesen (mit body ) (Recht: view) - `POST /documents/:id/revisions/:rev/restore`: Version als neue Version wiederherstellen (Admin) (Recht: admin) - `GET /documents/:id/sharing`: Freigaben eines Dokuments: Sichtbarkeit nach Rang, Partnerfreigaben, öffentlicher Link, wählbare Partner, access (Personen und Gruppen als Datenregeln, wählbare Abteilungen und Personen) ( documents.share.manage ) (Recht: admin) - `PUT /documents/:id/sharing/access`: Personen und Gruppen am Dokument { "subject": { "kind": "rank" | "unit" | "user", "id" }, "effect": "allow" | "deny" | null } ; jede Zeile ist eine verwaltete Datenregel, null entfernt sie ( documents.share.manage ) (Recht: admin) - `PUT /documents/:id/sharing/partners/:partnerGuildId`: Partnerfreigabe setzen { "access", "expiresAt"? } mit access = READ , CONTRIBUTE oder null ; null zieht zurück ( documents.share.manage ) (Recht: admin) - `PUT /documents/:id/sharing/public`: Öffentlichen Leselink ein-/ausschalten und einstellen { "enabled", "expiresAt"?, "password"?, "watermark"?, "latest"?, "regenerate"? } ( documents.share.manage ) (Recht: admin) - `GET /documents/categories`: Dokumentenkategorien mit Zählung je Kategorie, ohne Dokumente ( categories , counts ) (Recht: admin) - `POST /documents/categories`: Dokumentenkategorie anlegen (Recht: admin) - `PATCH /documents/categories/:id`: Dokumentenkategorie ändern (Recht: admin) - `DELETE /documents/categories/:id`: Dokumentenkategorie löschen (Recht: admin) - `PUT /documents/categories/order`: Dokumentenkategorien sortieren (Recht: admin) - `GET /documents/discord-targets`: Textkanäle und Rollen für Discord-Posts ( documents.share.manage ) (Recht: admin) - `PUT /documents/order`: Dokumente sortieren (Recht: admin) - `GET /documents/partner-shares`: Dokumente, die Partnerinstanzen mit dieser Instanz teilen (Recht: view) - `GET /documents/partner-shares/:shareId`: Ein geteiltes Dokument einer Partnerinstanz lesen (wird dort protokolliert) (Recht: view) - `GET /documents/partner-shares/:shareId/comments`: Anmerkungen eines geteilten Dokuments (nur mit „Mitarbeiten") (Recht: view) - `POST /documents/partner-shares/:shareId/comments`: Anmerkung zu einem geteilten Dokument schreiben (nur mit „Mitarbeiten") (Recht: view) - `PATCH /documents/partner-shares/:shareId/comments/:commentId`: Eigene Anmerkung ändern oder Faden erledigen (nur mit „Mitarbeiten") (Recht: view) - `DELETE /documents/partner-shares/:shareId/comments/:commentId`: Eigene Anmerkung löschen (nur mit „Mitarbeiten") (Recht: view) - `GET /documents/shares`: Alle Freigaben der Instanz mit Dokument, Empfänger, Ablauf und Aufrufen ( documents.share.manage ) (Recht: admin) - `POST /documents/shares/bulk`: Mehrere Freigaben verlängern oder entziehen { "ids", "action", "days"? } mit action = extend oder revoke ( documents.share.manage ) (Recht: admin) - `GET /documents/templates`: Dokumentvorlagen lesen (eingebaute zuerst) (Recht: view) - `POST /documents/templates`: Dokumentvorlage anlegen (Admin) (Recht: admin) - `PATCH /documents/templates/:id`: Dokumentvorlage ändern (Admin) (Recht: admin) - `DELETE /documents/templates/:id`: Dokumentvorlage löschen (Admin) (Recht: admin) - `PUT /documents/templates/order`: Dokumentvorlagen sortieren (Admin) (Recht: admin) - `GET /documents/unread`: Ungelesene Dokumente lesen (Recht: view) ## Listen - `GET /lists`: Listen samt ihrer Spalten lesen (Recht: view) - `POST /lists`: Liste anlegen oder löschen (Recht: admin) - `PATCH /lists/:id`: Liste ändern (Name, Beschreibung, wer darin schreiben darf) (Recht: admin) - `DELETE /lists/:id`: Liste anlegen oder löschen (Recht: admin) - `GET /lists/:id/entries`: Zeilen einer Liste lesen; Zählerstände gelten für den gefragten Zeitraum (Recht: view) - `POST /lists/:id/entries`: Zeile anlegen oder löschen (Recht: view) - `PATCH /lists/:id/entries/:entryId`: Zellen einer Zeile ändern (Recht: view) - `DELETE /lists/:id/entries/:entryId`: Zeile anlegen oder löschen (Recht: admin) - `GET /lists/:id/entries/:entryId/counts`: Gesamtzahl der Zählereignisse einer Zeile (Recht: view) - `POST /lists/:id/entries/:entryId/counts/:fieldId`: Zähler erhöhen (stempelt immer jetzt ) (Recht: view) - `DELETE /lists/:id/entries/:entryId/counts/:fieldId/latest`: Neuestes Zählereignis im gezeigten Zeitraum zurücknehmen (Recht: view) - `POST /lists/:id/fields`: Spalte anlegen (Recht: admin) - `PATCH /lists/:id/fields/:fieldId`: Spalte ändern (Recht: admin) - `DELETE /lists/:id/fields/:fieldId`: Spalte löschen (Recht: admin) - `GET /lists/:id/fields/:fieldId/usage`: Wie viele Zellen und Zählereignisse an einer Spalte hängen (Recht: admin) - `PUT /lists/:id/fields/order`: Spalten sortieren (Recht: admin) - `PUT /lists/order`: Listen sortieren (Recht: admin) ## Lager - `GET /lager`: Lager auflisten (Bestandsübersicht) - Admin-Rechte auch zum Lesen (Recht: admin) - `POST /lager`: Lager anlegen (Recht: admin) - `GET /lager/:id`: Inventur eines Tages lesen (ohne date der heutige) (Recht: admin) - `PATCH /lager/:id`: Lager umbenennen und/oder Artikelsortierung ändern (Recht: admin) - `DELETE /lager/:id`: Lager löschen (mit allen Artikeln, Tagen und Zählungen) (Recht: admin) - `PUT /lager/:id/day`: Heutige Inventur erfassen/aktualisieren (kein Datum im Body) (Recht: admin) - `POST /lager/:id/items`: Artikel anlegen (Recht: admin) - `PATCH /lager/:id/items/:itemId`: Artikel bearbeiten (Recht: admin) - `DELETE /lager/:id/items/:itemId`: Artikel archivieren (keine Löschung) (Recht: admin) - `PUT /lager/:id/items/order`: Eigene Artikelreihenfolge speichern (Recht: admin) - `GET /lager/search`: Artikel über alle Lager des Servers suchen ( lagerId optional, für Vorrang) (Recht: admin) ## Versicherungen - `GET /versicherung/catalog`: Preisliste lesen: Tarife, Modul×Tarif-Matrix, Rabattstaffel - Admin-Rechte auch zum Lesen (Recht: admin) - `GET /versicherung/customers`: Versicherte auflisten, je mit Personenzahl und gerechneter Prämie (Recht: admin) - `POST /versicherung/customers`: Versicherten anlegen ( name , tariffId , optional note ) (Recht: admin) - `GET /versicherung/customers/:id`: Ein Versicherter samt seiner Personen (Recht: admin) - `PATCH /versicherung/customers/:id`: Name, Tarif, Notiz, gebuchte Plätze ( bookedSlots , null = nach eingetragenen Personen rechnen), Vertragslaufzeit ( termFrom / termTo , "YYYY-MM-DD" , null = entfernen), Kontingente ( quotas : Liste aus { id, name, limit, taken } , ersetzt die gespeicherte ganz; id: null legt ein neues an, höchstens 12, Namen eindeutig) und/oder gebuchte Module ( moduleIds ) ändern (Recht: admin) - `DELETE /versicherung/customers/:id`: Versicherten löschen (Recht: admin) - `POST /versicherung/customers/:id/persons`: Versicherte Person hinzufügen (Recht: admin) - `PATCH /versicherung/customers/:id/persons/:personId`: Person umbenennen oder Notiz ändern (Recht: admin) - `DELETE /versicherung/customers/:id/persons/:personId`: Person entfernen (Recht: admin) - `PUT /versicherung/customers/:id/persons/order`: Reihenfolge der Personen setzen (Recht: admin) - `PUT /versicherung/customers/order`: Reihenfolge der Versicherten setzen (Recht: admin) - `POST /versicherung/discounts`: Rabattstufe anlegen oder überschreiben (eine je Personenzahl) (Recht: admin) - `DELETE /versicherung/discounts/:id`: Rabattstufe löschen (Recht: admin) - `GET /versicherung/expiring`: Verträge, deren Vertragsende in den eingestellten Vorlauf fällt - für das Band auf dem Leitstellenblatt (Recht: admin) - `GET /versicherung/kasse`: Kassenbuch lesen (ohne month alles); keine Summenzeile (Recht: admin) - `POST /versicherung/kasse`: Kassenzeile anlegen ( date , employeeId , purpose , amount vorzeichenbehaftet, optional note , paidOut ) (Recht: admin) - `PATCH /versicherung/kasse/:id`: Kassenzeile ändern (Recht: admin) - `DELETE /versicherung/kasse/:id`: Kassenzeile löschen (Recht: admin) - `GET /versicherung/kasse/persons`: Wer als Person einer Kassenzeile in Frage kommt: Admins dieser Gilde (Discord-Administratoren und die in den Einstellungen zusätzlich eingetragenen), geschnitten mit dem Personalblatt. partial: true heißt, der Mitglieder-Cache war noch nicht warm (kurz nach dem Start) - es wird bewusst nie pro Anfrage abgerufen (Recht: admin) - `POST /versicherung/modules`: Modul anlegen (Recht: admin) - `PATCH /versicherung/modules/:id`: Modul umbenennen, Abrechnungsart setzen ( perPerson : Preis je Person statt einmalig) und/oder Preise setzen ( prices: { tariffId: Betrag | null } , null löscht den Preis) (Recht: admin) - `DELETE /versicherung/modules/:id`: Modul archivieren (bleibt bei Kunden gebucht) (Recht: admin) - `PUT /versicherung/modules/order`: Reihenfolge der Module setzen (Recht: admin) - `GET /versicherung/overview`: Versicherungsnehmer, die gebuchten Module, Kontingente mit gerechnetem Stand ( quotas : { name, taken, limit } ) und Vertragsende - die einzige Ausnahme im Namensraum: ohne Admin-Rechte lesbar, aber nur wenn die Gilde die Übersicht freigegeben hat ( overviewPublic ); sonst 403. Für Admins immer lesbar (Recht: view) - `GET /versicherung/settings`: Vorlauf der Ablauf-Erinnerung und Freigabe der Übersicht lesen ( expiryLeadDays , overviewPublic ) (Recht: admin) - `PUT /versicherung/settings`: Beides setzen, jedes für sich ( expiryLeadDays , ganze Zahl 0–90; overviewPublic , Ja/Nein). Nur mitgeschickte Felder werden geschrieben (Recht: admin) - `PATCH /versicherung/tariffs/:id`: Tarifname und/oder Grundpreis ändern (Recht: admin) ## Postfach - `GET /postfach/banner/:guildId`: Panel-Banner als Bild (Session-Cookie, Einstellungsrecht) - `GET /postfach/cases`: Bewerbungen und Kontaktanfragen auflisten; Intern-Fälle nur mit postfach.intern (Recht: admin) - `POST /postfach/cases`: Gespräch mit einer Person eröffnen ( userId , category , subject , body ): Kontakt-Fall samt Ticket-Kanal und erster Nachricht; Intern nur mit postfach.intern ; verlangt postfach.case.create (Recht: admin) - `GET /postfach/cases/:id`: Fall mit Antworten, gespiegeltem Gespräch und Ereignissen (Recht: admin) - `PATCH /postfach/cases/:id`: Status setzen oder sich zuweisen ( assignee: "me" | null ) (Recht: admin) - `POST /postfach/cases/:id/channel`: Ticket-Kanal erneut anlegen (Recht: admin) - `POST /postfach/cases/:id/close`: Fall schließen, optional mit Abschlussnachricht (Recht: admin) - `POST /postfach/cases/:id/decline`: Bewerbung ablehnen, optional mit Grund (Recht: admin) - `GET /postfach/cases/:id/hire`: Vorschau zum Einstellen: Dienstnummer, Rang, Rollen, Nickname (Recht: admin) - `POST /postfach/cases/:id/hire`: Bewerbung annehmen: Rollen, Nickname, Personalblatt, Begrüßung, Abschluss (Recht: admin) - `POST /postfach/cases/:id/messages`: Antwort in den Ticket-Kanal senden ( multipart/form-data : body , bis zu 5 files ) (Recht: admin) - `POST /postfach/cases/:id/messages/:messageId/retry`: Fehlgeschlagene eigene Antwort erneut senden (Recht: admin) - `POST /postfach/cases/:id/notes`: Interne Notiz schreiben (wird nie nach Discord gesendet) (Recht: admin) - `POST /postfach/cases/:id/read`: Eigenen Lesestand setzen (Recht: admin) - `POST /postfach/cases/:id/reopen`: Geschlossenen oder abgelehnten Fall wieder öffnen; holt den Ticket-Kanal zurück oder legt ihn neu an (Recht: admin) - `GET /postfach/files/:messageId/:index`: Gespeicherter Anhang einer Postfach-Nachricht (Session-Cookie) - `GET /postfach/intern`: Nur die internen Nachrichten an die Leitung; verlangt postfach.intern (Recht: admin) - `GET /postfach/members`: Server-Mitglieder für „Neues Gespräch" suchen; verlangt postfach.case.create (Recht: admin) - `GET /postfach/settings`: Postfach-Einstellungen samt Kategorien und Warnungen (Recht: admin) - `PUT /postfach/settings`: Postfach-Einstellungen setzen; Team- und Leitungs-Rollen ändert nur, wer postfach.case.view bzw. postfach.intern.view oder settings.manage hält (Recht: admin) - `POST /postfach/settings/banner`: Panel-Banner hochladen (PNG/JPEG) (Recht: admin) - `DELETE /postfach/settings/banner`: Panel-Banner entfernen (Recht: admin) - `POST /postfach/settings/publish/:panel`: Panel bewerbung oder kontakt in einem Kanal veröffentlichen (Recht: admin) - `GET /postfach/settings/ranks`: Ränge für die Auswahl der Einstiegsränge (nur id und label ) (Recht: admin) - `GET /postfach/unread`: Anzahl der Fälle mit ungelesenen Nachrichten der anfragenden Person (Recht: admin) ## TV - `GET /tv/design`: KI-Design lesen: assets (Logo, Beispielfolien, Hintergründe mit role , note , enabled ), notes (Gestaltungshinweise) und ai ( canGenerate , blocked = Grund, warum nicht, imageModel , imageQuality , maxSlides ) (Admin/ tv.screen.view ) (Recht: admin) - `PUT /tv/design`: Gestaltungshinweise für die KI setzen: { "notes": "…" } (bis 2000 Zeichen) (Admin/ tv.design.edit ) (Recht: admin) - `POST /tv/design/assets`: Design-Asset hochladen ( multipart/form-data , Feld file ; PNG/JPEG/WebP, höchstens 12 Assets, auf 2048 px verkleinert, zählt zum Speicher der Gilde) (Admin/ tv.design.edit ) (Recht: admin) - `PATCH /tv/design/assets/:id`: Design-Asset ändern: name , role ( logo | example | background | other ), note , enabled (Admin/ tv.design.edit ) (Recht: admin) - `DELETE /tv/design/assets/:id`: Design-Asset löschen (Admin/ tv.design.edit ) (Recht: admin) - `GET /tv/design/assets/:id/image`: Bild eines Design-Assets (Admin/ tv.screen.view , Session-Cookie) - `GET /tv/presentations`: TV-Reiter lesen: Präsentationen samt Folien, Bildschirme, Standby-Bild, Speicherbelegung und can (je tv.* -Recht ein Wahrheitswert: present , screenCreate , screenEdit , screenDelete , links , presentationCreate , presentationEdit , presentationDelete , slideCreate , slideEdit , slideDelete , slideGenerate , design , standby ) sowie generations (laufende und gerade beendete KI-Erstellungen je Präsentation: status , total , done , failed , error , titles ). Ohne tv.screen.links fehlen die Bildschirm-Links ( streamUrl / stillUrl sind null ) (Admin/ tv.screen.view ) (Recht: admin) - `POST /tv/presentations`: TV-Präsentation anlegen (Admin/ tv.presentation.create ) (Recht: admin) - `PATCH /tv/presentations/:id`: Name und/oder defaultSlideSeconds (3–3600, Takt der Automatik) ändern (Admin/ tv.presentation.edit ) (Recht: admin) - `DELETE /tv/presentations/:id`: TV-Präsentation samt Folien löschen; ihre Bildschirme zeigen danach das Standby-Bild (Admin/ tv.presentation.delete ) (Recht: admin) - `POST /tv/presentations/:id/duplicate`: Präsentation samt Folien kopieren, ohne Bildschirme; Antwort mit createdId (Admin/ tv.presentation.create ) (Recht: admin) - `POST /tv/presentations/:id/generate`: Folien mit KI erzeugen und anhängen: { "topic": "…", "slideCount": 1-12, "assetIds"?: […] | null, "wishes"?: "…", "documentIds"?: […] } . documentIds sind die im Thema mit „#Titel" erwähnten Dokumente (höchstens 5); ihr Text geht an das Textmodell, jedes nur, wenn die Person es auch über GET /documents/:id lesen dürfte, sonst 403 vor dem Start. Antwortet sofort; der Lauf steht in generations , jede fertige Folie kommt über den tv -Push. Braucht die KI-Freigabe der Person und einen OpenAI-Schlüssel; 409, wenn für die Präsentation schon ein Lauf läuft (Admin/ tv.slide.generate ) (Recht: admin) - `DELETE /tv/presentations/:id/generate`: Laufende KI-Erstellung abbrechen bzw. einen beendeten Lauf aus generations entfernen (Admin/ tv.slide.generate ) (Recht: admin) - `POST /tv/presentations/:id/slides`: Folie(n) als multipart/form-data (Feld file ) anhängen: PNG/JPEG/WebP als eine Folie, PDF als eine Folie je Seite (höchstens 100 Seiten); je höchstens 7 MB, Speichergrenze je Gilde 500 MB (Admin/ tv.slide.create ) (Recht: admin) - `PATCH /tv/presentations/:id/slides/:slideId`: Folie ändern: name , notes (Sprechernotiz, nie im Stream), hidden , durationSeconds (oder null ), text bzw. live (Quelltext einer Text-/Live-Folie) (Admin/ tv.slide.edit ) (Recht: admin) - `DELETE /tv/presentations/:id/slides/:slideId`: Folie löschen (weich: 24 h wiederherstellbar); Bildschirme darauf springen weiter (Admin/ tv.slide.delete ) (Recht: admin) - `PUT /tv/presentations/:id/slides/:slideId/file`: Bild einer Bildfolie ersetzen ( multipart/form-data , Feld file ); Id und Position bleiben (Admin/ tv.slide.edit ) (Recht: admin) - `POST /tv/presentations/:id/slides/:slideId/restore`: Gelöschte Folie wiederherstellen (Admin/ tv.slide.delete ) (Recht: admin) - `POST /tv/presentations/:id/slides/google`: Alle Folien einer öffentlich freigegebenen Google-Slides-Präsentation in 1920×1080 importieren: { "url": "https://docs.google.com/presentation/d/…", "replace": false } - replace: true ersetzt die vorhandenen Folien (Admin/ tv.slide.create ) (Recht: admin) - `POST /tv/presentations/:id/slides/live`: Live-Folie anlegen: { "type": "onDuty" | "clock" | "countdown" | "stats" | "board" | "facility" | "einsatz", "title"?, "target"?, "ref"? } ( target ISO-Zeit mit Jahr 2000-2999, Pflicht bei countdown ; ref Haus-Id bei facility bzw. Einsatz-Id bei einsatz , fehlt/ null = alle) (Admin/ tv.slide.create ) (Recht: admin) - `PUT /tv/presentations/:id/slides/order`: Folien sortieren (Admin/ tv.slide.edit ) (Recht: admin) - `POST /tv/presentations/:id/slides/text`: Textfolie anlegen: { "title", "body", "background": "#rrggbb", "color": "#rrggbb", "letterheadId"? } (Admin/ tv.slide.create ) (Recht: admin) - `POST /tv/presentations/:id/slides/transfer`: Folien in eine andere Präsentation kopieren oder verschieben: { "slideIds", "targetPresentationId", "mode": "copy" | "move" } (Admin/ tv.slide.create , bei move zusätzlich tv.slide.delete ) (Recht: admin) - `POST /tv/screens`: Bildschirm (Fernseher) anlegen: { "label"?, "presentationId"? } ; Antwort mit createdId (Admin/ tv.screen.create ) (Recht: admin) - `PATCH /tv/screens/:id`: Bildschirm umbenennen ( label ) und/oder spiegeln ( followsScreenId , null beendet es) (Admin/ tv.screen.edit ) (Recht: admin) - `DELETE /tv/screens/:id`: Bildschirm löschen; offene Streams enden (Admin/ tv.screen.delete ) (Recht: admin) - `PUT /tv/screens/:id/autoplay`: Automatik ein/aus: { "autoplay": true } (Admin/ tv.screen.present ) (Recht: admin) - `PUT /tv/screens/:id/mode`: Modus setzen: { "mode": "slide" | "black" | "standby" } (Admin/ tv.screen.present ) (Recht: admin) - `PUT /tv/screens/:id/presentation`: Präsentation zuweisen: { "presentationId": "…" } oder null (Standby) (Admin/ tv.screen.present ) (Recht: admin) - `GET /tv/screens/:id/preview`: Der tatsächliche Stream eines Bildschirms fürs MDT; zählt nicht als Zuschauer und ändert lastFetchedAt nicht (Admin/ tv.screen.view , Session-Cookie) - `POST /tv/screens/:id/rotate-token`: Neuen Link erzeugen; der alte hört sofort auf, offene Streams enden (Admin/ tv.screen.links ) (Recht: admin) - `POST /tv/screens/:id/show`: Folie wechseln: { "step": 1 } , { "step": -1 } oder { "slideId": "…" } ; beendet Schwarz/Standby (Admin/ tv.screen.present ) (Recht: admin) - `GET /tv/slides/:id/image`: Folienbild für die Vorschau (Admin/ tv.screen.view , Session-Cookie) - `PUT /tv/standby`: Standby-Bild der Gilde hochladen ( multipart/form-data , Feld file ) (Admin/ tv.standby.edit ) (Recht: admin) - `DELETE /tv/standby`: Standby-Bild entfernen (danach Schwarz) (Admin/ tv.standby.edit ) (Recht: admin) - `GET /tv/standby/image`: Standby-Bild für die Vorschau (Admin/ tv.screen.view , Session-Cookie) ## Websites - `GET /public/documents/:token`: Öffentlich, ohne Anmeldung: Dokument über einen öffentlichen Leselink; 404, wenn der Link abgelaufen, zurückgezogen oder das Modul aus ist. Mit Passwort 401 { passwordRequired, wrong } bis zum Kopf x-document-password (höchstens 10 Fehlversuche je 15 Minuten) (öffentlich) - `GET /public/ingame/tablet/:token`: Öffentlich über den geheimen Teil: löst einen Tablet-Link genau einmal ein, setzt die Sitzung und leitet ins MDT der Instanz weiter; sonst eine kurze HTML-Seite mit 400 , 403 oder 410 (öffentlich) - `GET /public/queue/:token`: Öffentlich über den geheimen Teil: Stand einer Wartenummer (vor dir, geschätzte Minuten, aufgerufen) (öffentlich) - `DELETE /public/queue/:token`: Öffentlich: Wartenummer zurückgeben (öffentlich) - `GET /public/showcase`: Öffentlich, ohne Anmeldung: Galerie der Instanzen, die sich dafür freigegeben haben { instances: [{ id, name, iconUrl, template, memberCount, inviteUrl }] } , höchstens 12, größte zuerst; memberCount auf 10 gerundet. 5 Minuten zwischengespeichert (öffentlich) - `GET /public/site`: Nur auf einer bestätigten eigenen Domain: dieselbe Antwort, die Website bestimmt der Host (öffentlich) - `GET /public/site-domains/check`: Öffentlich: 200, wenn die Domain bestätigt zu einer Website gehört, sonst 404 - für Caddys on_demand_tls { ask … } (öffentlich) - `GET /public/site-preview/:token`: Öffentlich über den geheimen Vorschaulink: der Entwurf einer Seite (öffentlich) - `GET /public/sites/:guildId/:slug`: Öffentlich, ohne Anmeldung: veröffentlichte Seite einer öffentlichen Website samt Navigation, Farbschema und Live-Daten; 404, wenn es sie nicht gibt, sie intern, offline oder das Modul aus ist. Passwortseiten antworten 401 { passwordRequired } bis zum Kopf x-site-password , Weiterleitungen mit { redirect } (öffentlich) - `POST /public/sites/:guildId/:slug/forms`: Öffentlich: Formular einsenden { "pageId", "formId", "values": {…} } ; wird ein Fall im Postfach (Tempolimit je Absender) (öffentlich) - `POST /public/sites/:guildId/:slug/queue`: Öffentlich: Wartenummer der Notaufnahme ziehen { "name"? } ; nur mit dem Block „Wartenummer“ und solange jemand im Dienst ist. Antwort { token, ticket } (öffentlich) - `POST /public/sites/:guildId/:slug/requests`: Öffentlich: Anfrage an die Leitstelle aus dem Block „Anfrage an die Leitstelle“ { "pageId", "blockId", "values": { kind, location, phone, message, wanted } } ; nur solange jemand im Dienst ist, gesperrte Nummern werden abgewiesen (öffentlich) - `POST /public/sites/:guildId/:slug/track`: Öffentlich: Klicks und Scrolltiefe einer Seite melden { "pageId", "clicks": ["page:team", …], "depth": 25|50|75|100 } ; nur Summen je Tag, ohne IP und Cookie (Tempolimit je Absender) (öffentlich) - `GET /public/stats`: Öffentlich, ohne Anmeldung: Summen über alle Instanzen für die Startseite { generatedAt, servers, onDutyNow, shifts7d, einsaetze7d, daily: [{ date, shifts, einsaetze }] } (die letzten 7 UTC-Tage, ältester zuerst; keine Servernamen, keine Personen). 5 Minuten zwischengespeichert (öffentlich) - `GET /s/:code`: Öffentlich (ohne /api/v1 ): Kurzlink einer öffentlichen Website, leitet mit 302 auf /sites// (öffentlich) - `GET /site-assets/:file`: Öffentlich, ohne Anmeldung (ohne /api/v1 ): Bild einer Website, . (öffentlich) - `GET /sites`: Websites der Instanz lesen (Modul sites ) (Recht: view) - `POST /sites`: Website anlegen: { "name", "slug", "visibility": "public"|"internal", "description" } ; legt die leere Startseite an (Admin) (Recht: admin) - `GET /sites/:id`: Website samt Seitenliste für den Editor (Admin) (Recht: admin) - `PATCH /sites/:id`: Website ändern: { "values": { "name", "slug", "visibility", "description", "theme" } } (Admin) (Recht: admin) - `DELETE /sites/:id`: Website in den Papierkorb legen (7 Tage wiederherstellbar, dann endgültig gelöscht) (Admin) (Recht: admin) - `POST /sites/:id/ai`: KI-Chat im Editor: { "messages": [{ "role", "content" }], "pageId" } ; die KI ändert Entwürfe über Werkzeuge (KI-Freigabe und OpenAI-Schlüssel nötig) (Admin) (Recht: admin) - `POST /sites/:id/ai/rewrite`: Markierten Text mit KI umschreiben { "text", "style": kuerzer|freundlicher|foermlicher|einfacher|korrektur|englisch } ; speichert nichts (Admin, KI-Freigabe) (Recht: admin) - `GET /sites/:id/app.zip`: FiveM-Ressource, die die öffentliche Website als Handy-App zeigt (lb-phone oder Fenster per Befehl) (Admin) (Recht: admin) - `GET /sites/:id/assets`: Bilder der Website lesen (Admin) (Recht: admin) - `POST /sites/:id/assets`: Bild als multipart/form-data (Feld file , PNG/JPEG/GIF/WebP, höchstens 5 MB) hochladen (Admin) (Recht: admin) - `PATCH /sites/:id/assets/:assetId`: Alt-Text setzen: { "alt": "…" } (Admin) (Recht: admin) - `DELETE /sites/:id/assets/:assetId`: Bild löschen (Admin) (Recht: admin) - `POST /sites/:id/assets/:assetId/replace`: Bild ersetzen (multipart file ); jede Stelle, die das alte zeigt, zeigt danach das neue (Admin) (Recht: admin) - `GET /sites/:id/changes`: Seiten mit unveröffentlichten Änderungen samt Zahl der neuen, entfernten und geänderten Blöcke (Admin) (Recht: admin) - `GET /sites/:id/checklist`: Startklar-Liste einer Website bis zur ersten Veröffentlichung (Admin) (Recht: admin) - `POST /sites/:id/chrome/:kind`: Kopf- ( header ) oder Fußzeile ( footer ) der Website öffnen; legt sie beim ersten Mal an (Admin) (Recht: admin) - `GET /sites/:id/courses`: Eigene Anmeldungen, bestandene Kurse und fehlende Voraussetzungen für den Kurse-Block (Recht: view) - `POST /sites/:id/courses/:courseId/signup`: Selbst zu einem Kurs anmelden; bei vollen Plätzen auf die Warteliste (Recht: view) - `DELETE /sites/:id/courses/:courseId/signup`: Sich selbst abmelden; die erste Person der Warteliste rückt nach (Recht: view) - `GET /sites/:id/domains`: Eigene Domains der Website samt den nötigen DNS-Einträgen (Admin) (Recht: admin) - `POST /sites/:id/domains`: Eigene Domain hinzufügen: { "hostname": "www.meine-firma.de" } ; höchstens 5 je Website (Admin) (Recht: admin) - `DELETE /sites/:id/domains/:domainId`: Eigene Domain entfernen (Admin) (Recht: admin) - `POST /sites/:id/domains/:domainId/verify`: DNS prüfen: der TXT-Eintrag _mdt-site. mit dem Code bestätigt die Domain, der CNAME wird nur gemeldet (Admin) (Recht: admin) - `POST /sites/:id/duplicate`: Website samt Seiten, Design und Bildern kopieren (Admin) (Recht: admin) - `GET /sites/:id/export`: Website als Datei ( mdt-site@1 : Seiten, Design, Bilder als Base64) (Admin) (Recht: admin) - `GET /sites/:id/live`: Live-Daten aller MDT-Blöcke für die Vorschau im Editor (Admin) (Recht: admin) - `POST /sites/:id/pages`: Seite anlegen: { "title", "path", "copyFromPageId" } (Admin) (Recht: admin) - `PATCH /sites/:id/pages/:pageId`: Seite ändern: { "values": { "title", "path", "showInNav" } } ; der Pfad der Startseite ist fest (Admin) (Recht: admin) - `DELETE /sites/:id/pages/:pageId`: Seite in den Papierkorb legen; die Startseite antwortet 409 (Admin) (Recht: admin) - `GET /sites/:id/pages/:pageId/draft`: Entwurf einer Seite als Puck-Daten lesen (Admin) (Recht: admin) - `PUT /sites/:id/pages/:pageId/draft`: Entwurf speichern: { "data": , "baseUpdatedAt": "…" } , höchstens 1 MB; 409 samt aktuellem Stand, wenn jemand anderes zwischendurch gespeichert hat (Admin) (Recht: admin) - `GET /sites/:id/pages/:pageId/insights`: Statistik-Ebene: Aufrufe, Klicks je Linkziel, Scrolltiefe der Seite (Admin) (Recht: admin) - `DELETE /sites/:id/pages/:pageId/purge`: Seite aus dem Papierkorb endgültig löschen (Admin) (Recht: admin) - `POST /sites/:id/pages/:pageId/restore`: Seite aus dem Papierkorb holen; 409, wenn ihr Pfad inzwischen vergeben ist (Admin) (Recht: admin) - `GET /sites/:id/pages/:pageId/versions`: Versionen einer Seite (Veröffentlichungen, stündliche Sicherungen, KI-Änderungen; 30 Tage) (Admin) (Recht: admin) - `GET /sites/:id/pages/:pageId/versions/:versionId`: Puck-Daten einer Version (Admin) (Recht: admin) - `POST /sites/:id/pages/:pageId/versions/:versionId/restore`: Version als Entwurf übernehmen; der bisherige Entwurf wird vorher gesichert (Admin) (Recht: admin) - `PUT /sites/:id/pages/order`: Seiten sortieren: { "ids": [...] } (Admin) (Recht: admin) - `GET /sites/:id/polls/:blockId`: Umfrage oder Terminfindung einer internen Website: Stand und eigene Stimme (Recht: view) - `PUT /sites/:id/polls/:blockId`: Abstimmen { "pageId", "options": [0] } bzw. { "pageId", "answers": { "0": "y|m|n" } } (Recht: view) - `POST /sites/:id/polls/:blockId/fix`: Termin aus einer Terminfindung festlegen → Kalendereintrag { "pageId", "index" } (Admin) (Recht: admin) - `GET /sites/:id/presence`: Mitbearbeiten im Editor: meldet die eigene Stelle, liefert die der anderen samt Sperren und letzten Änderungen; ?leave=1 meldet ab (Admin) (Recht: admin) - `GET /sites/:id/previews`: Aktive Vorschaulinks auf den Entwurf (Admin) (Recht: admin) - `POST /sites/:id/previews`: Vorschaulink erstellen (24 h, ohne Anmeldung unter /sites/vorschau/ ) (Admin) (Recht: admin) - `DELETE /sites/:id/previews/:linkId`: Vorschaulink sperren (Admin) (Recht: admin) - `POST /sites/:id/previews/:linkId/extend`: Vorschaulink um 24 h verlängern (Admin) (Recht: admin) - `POST /sites/:id/publish`: Entwürfe veröffentlichen: { "pageIds": [...] } für eine Auswahl, sonst alle; postet die eingerichtete Discord-Ankündigung, außer mit "announce": false (Admin) (Recht: admin) - `DELETE /sites/:id/purge`: Website aus dem Papierkorb endgültig löschen, samt Bildern (Admin) (Recht: admin) - `POST /sites/:id/restore`: Website aus dem Papierkorb holen (Admin) (Recht: admin) - `GET /sites/:id/search`: Volltextsuche über die veröffentlichten Seiten, die die Person lesen darf (Recht: view) - `GET /sites/:id/stats`: Aufrufe der letzten 30 Tage, gesamt und je Seite (ohne IP, ohne Cookie) (Admin) (Recht: admin) - `POST /sites/:id/unpublish`: Website offline nehmen (Admin) (Recht: admin) - `GET /sites/:id/view`: Veröffentlichte Seite zum Lesen im MDT, auch für interne Websites (Recht: view) - `GET /sites/components`: Eigene Komponenten der Instanz (Admin) (Recht: admin) - `POST /sites/components`: Eigene Komponente anlegen: { "name", "description", "content": [Blöcke] } (Admin) (Recht: admin) - `PATCH /sites/components/:componentId`: Eigene Komponente ändern; verknüpfte Stellen zeigen die Änderung sofort (Admin) (Recht: admin) - `DELETE /sites/components/:componentId`: Eigene Komponente löschen (Admin) (Recht: admin) - `POST /sites/import`: Website aus einer Export-Datei anlegen: { "name", "slug", "visibility", "description", "data": } (Admin) (Recht: admin) - `POST /sites/mcp`: MCP-Server (Model Context Protocol, Streamable HTTP, JSON-RPC 2.0) mit denselben Werkzeugen; mit einem API-Schlüssel als Authorization: Bearer … (Admin) (Recht: admin) - `GET /sites/sources`: Auswahllisten für Live-Blöcke im Editor: Kalenderkategorien, Ränge, Häuser, offene Einsätze, eigene Komponenten (Admin) (Recht: admin) - `GET /sites/templates`: Vorlagen für neue Websites; POST /sites nimmt "template": "" (Admin) (Recht: admin) - `GET /sites/trash`: Websites im Papierkorb (Admin) (Recht: admin) - `GET /website-requests`: Anfragen von Websites an die Leitstelle: offene und die der letzten 6 Stunden (Recht: view) - `POST /website-requests/:requestId/:action`: Anfrage bearbeiten: take (legt einen Einsatz an), callback , reject , block / unblock (Nummer sperren) (Recht: view) ## KI - `GET /ai/access`: KI-Zugriff lesen (Recht: view) - `GET /ai/access/check`: Prüfen, ob eine Person ( ?userId= ) die KI benutzen darf, mit Begründung (Recht: admin) - `GET /ai/access/overview`: Wer das Recht ai.features.use hält (Ränge, Abteilungen, Alle Mitarbeiter, Leitstelle), aktive Personen je Aktion (Recht: admin) - `POST /ai/einsatz-report`: KI-Lagemeldung erzeugen (Recht: view) - `GET /ai/failures`: Fehlgeschlagene KI-Läufe der letzten 30 Tage nach Ursache und die aktuelle Fehlerserie (Recht: admin) - `POST /ai/feedback`: Eigenen KI-Bericht bewerten ( { runId, rating: 1|-1, reason?, comment? } ) (Recht: view) - `POST /ai/key`: OpenAI-Schlüssel prüfen und nur bei Erfolg speichern (Recht: admin) - `POST /ai/key/test`: Hinterlegten OpenAI-Schlüssel samt Modell und Guthaben testen (Recht: admin) - `GET /ai/models`: Verfügbare KI-Modelle lesen: models (Text) und imageModels (Bildmodelle für KI-Folien) (Recht: admin) - `GET /ai/quality`: Bewertungen der letzten 30 Tage je Aktion, Vorlage und Prompt-Stand (Recht: admin) - `POST /ai/report`: KI-Bericht erzeugen (Recht: view) - `GET /ai/revisions`: Verlauf eines Prompts oder einer Vorlage ( ?subject=prompt|template&key=... ) (Recht: admin) - `POST /ai/revisions/:id/restore`: Früheren Stand eines Prompts oder einer Vorlage wiederherstellen (legt einen neuen Stand an) (Recht: admin) - `POST /ai/run/:action`: Eine KI-Aktion aus dem Katalog ausführen (Schichtübergabe, Lagemeldung, Dokument zusammenfassen, Korrektur, Bewerbung) (Recht: view) - `GET /ai/settings`: KI-Einstellungen lesen (Recht: admin) - `PUT /ai/settings`: KI-Einstellungen setzen (Schlüssel, Modell, Prompts, Bildmodell aiImageModel und aiImageQuality : low | medium | high ); ein falsch typisiertes Feld schreibt nichts und antwortet mit 400 (Recht: admin) - `GET /ai/templates`: KI-Vorlagen lesen (Recht: view) - `POST /ai/templates`: KI-Vorlage anlegen (Name, Inhalt, Typ, Triage-Freigabe) (Recht: admin) - `PUT /ai/templates`: Vorlagenreihenfolge setzen ( { "ids": [...] } ); eine veraltete Liste wird mit 409 abgelehnt (Recht: admin) - `PATCH /ai/templates/:id`: KI-Vorlage ändern (Recht: admin) - `DELETE /ai/templates/:id`: KI-Vorlage löschen (Recht: admin) - `POST /ai/trial`: Probelauf eines Berichts mit Beispiel- oder echtem Fall, optional mit Prompt-Entwurf und anderem Modell (Recht: admin) - `GET /ai/trial/sources`: Beispielfälle und letzte Einsätze/Patienten für den Probelauf (Recht: admin) - `GET /ai/usage`: KI-Nutzung lesen (Recht: admin) - `GET /ai/usage/export`: KI-Nutzung als CSV (dieselben Filter) (Recht: admin) - `GET /ai/usage/query`: KI-Nutzung mit Zeitraum und Filtern ( ?from&to&action&user&status ), dazu Kennzahlen und Fehlschläge nach Ursache (Recht: admin) ## Bürgerimport - `POST /citizen-import/uploads`: Wiederaufnehmbaren Bürgerimport beginnen (Recht: admin, nur Sitzung) - `POST /citizen-import/uploads/:uploadId/abort`: Unvollständigen Import abbrechen (Recht: admin, nur Sitzung) - `PUT /citizen-import/uploads/:uploadId/chunks/:index`: Gehashten Import-Chunk hochladen (Recht: admin, nur Sitzung) - `POST /citizen-import/uploads/:uploadId/finalize`: Vollständigen Import prüfen und versiegeln (Recht: admin, nur Sitzung) - `GET /citizen-registry/batches`: Importläufe auflisten (Recht: admin) - `GET /citizen-registry/batches/:batchId`: Importlauf lesen (Recht: admin) - `POST /citizen-registry/batches/:batchId/commit`: Importlauf übernehmen (Recht: admin) - `POST /citizen-registry/batches/:batchId/dry-run`: Importlauf vorprüfen (Recht: admin) - `GET /citizen-registry/batches/:batchId/issues`: Importprobleme lesen (Recht: admin) - `GET /citizen-registry/batches/:batchId/preview`: Import-Probelauf lesen: Zusammenfassung, Zeilen mit Kandidat, Trefferquote und Vorschlag, bucket , cursor , limit , rollbackUntil (Recht: admin) - `POST /citizen-registry/batches/:batchId/preview`: Import-Probelauf für einen bereitgestellten Lauf mit expectedVersion berechnen; der Commit akzeptiert danach acceptSafeSuggestions: true , das Rückgängigmachen ist 7 Tage nach dem Commit möglich (Recht: admin) - `GET /citizen-registry/batches/:batchId/progress`: Importfortschritt lesen (Recht: admin) - `POST /citizen-registry/batches/:batchId/rollback`: Importlauf zurücksetzen (Recht: admin) - `GET /citizen-registry/batches/:batchId/rows`: Importzeilen lesen (Recht: admin) - `POST /citizen-registry/batches/:batchId/stage`: Importdaten vorverarbeiten (Recht: admin) - `POST /citizen-registry/links/:linkId/unlink`: Bürgerverknüpfung lösen (Recht: admin) - `POST /citizen-registry/links/:sourceEntityId/reject`: Bürgerverknüpfung ablehnen (Recht: admin) - `POST /citizen-registry/links/:sourceEntityId/review`: Bürgerverknüpfung prüfen (Recht: admin) - `POST /citizen-registry/links/legacy`: Legacy-Bürgerverknüpfung anlegen (Recht: admin) - `GET /citizen-registry/source-catalog`: Importquellen-Katalog lesen (Recht: admin) - `GET /citizen-registry/sources`: Bürgerdatenquellen auflisten (Recht: admin) - `POST /citizen-registry/sources`: Bürgerdatenquelle registrieren ( sourceSystem , authorityKind , adapterVersion , mappingVersion , imagesPolicy ); MedicNet akzeptiert nur die drei katalogisierten Mapping-Versionen (Recht: admin) - `POST /citizen-registry/sources/:sourceRegistryId/archive`: Importquelle archivieren (Recht: admin) ## Plattform - `GET /platform/casefile-catalogs/me/entries`: Katalogeinträge der eigenen Instanz (Fallakten: CASE_TYPE , POSITION_CATALOG , LINK_TYPE ), kind , includeArchived (Recht: view, nur Sitzung) - `POST /platform/casefile-catalogs/me/entries`: Katalogeintrag anlegen ( kind , key , label , color , classification , config ); 409 bei doppeltem Schlüssel (Recht: edit, nur Sitzung) - `PATCH /platform/casefile-catalogs/me/entries/:entryId`: Katalogeintrag ändern mit expectedVersion (Recht: edit, nur Sitzung) - `POST /platform/casefile-catalogs/me/entries/:entryId/archive`: Katalogeintrag archivieren; bestehende Daten zeigen ihn weiter an (Recht: edit, nur Sitzung) - `PUT /platform/casefile-catalogs/me/entries/:entryId/offer`: Katalogeintrag in Identitätsbereichen anbieten ( domainIds , nur aktive Mitgliedschaften); gibt keine Daten frei (Recht: edit, nur Sitzung) - `POST /platform/casefile-catalogs/me/entries/:entryId/restore`: Archivierten Katalogeintrag wiederherstellen (Recht: edit, nur Sitzung) - `PUT /platform/casefile-catalogs/me/entries/order`: Reihenfolge der Einträge einer Art setzen ( kind , entryIds ) (Recht: edit, nur Sitzung) - `PUT /platform/casefile-catalogs/me/mappings`: Fremden Eintrag zuordnen ( mode MAPPED , ADOPTED oder NONE ) (Recht: edit, nur Sitzung) - `GET /platform/casefile-catalogs/me/shared`: Angebotene Einträge der Partner im Identitätsbereich ( domainId ) mit eigener Zuordnung (Recht: view, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId`: Fallakte lesen, nur die lesbaren Teile; nicht lesbare Reiter nur als Anzahl (Recht: view, nur Sitzung) - `PATCH /platform/casefiles/:ownerGuildId/:caseFileId`: Fallakte ändern ( expectedVersion ); abgeschlossene Akten sind schreibgeschützt (Recht: edit, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/access-log`: Zugriffsprotokoll der Partner ( cursor , format=json|csv ) (Recht: view, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/appointments`: Termine der Fallakte; braucht read auf appointments (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/appointments`: Kalendertermin anlegen und mit der eigenen Fallakte verknüpfen (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/appointments/:linkId/unlink`: Terminverknüpfung der Fallakte lösen (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/appointments/link`: Bestehenden Kalendertermin mit der Fallakte verknüpfen (Recht: view, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/banners`: Hinweis-Banner der Fallakte nach den Regeln der eigenen Instanz (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/close`: Fallakte abschließen ( expectedVersion , confirm: true ); Folgen nur in eigenen Akten mit den eigenen Rechten (Recht: edit, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/closure`: Abschluss: Entwurf, Ergebnisse, Aufbewahrung, offene Punkte (Recht: view, nur Sitzung) - `PUT /platform/casefiles/:ownerGuildId/:caseFileId/closure`: Abschluss-Entwurf speichern ( resultKey , reportBody , consequences , retentionKey ) (Recht: edit, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/evidence`: Beweise der Fallakte; nicht lesbare als gesperrte Kachel mit Nummer; uploadsConfigured ist false ohne Beweisablage der Eigentümerinstanz (Recht: view, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/evidence-candidates`: Kürzlich hochgeladene Anhänge als Beweis-Kandidaten ( source=recent ) (Recht: view, nur Sitzung) - `PATCH /platform/casefiles/:ownerGuildId/:caseFileId/evidence/:evidenceId`: Beweis ändern ( expectedVersion ) (Recht: edit, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/evidence/:evidenceId/archive`: Beweis entfernen ( expectedVersion ) (Recht: edit, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/evidence/:evidenceId/chain`: Nachweiskette eines Beweises (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/evidence/:evidenceId/chain`: Eintrag in der Nachweiskette ( kind , text , at ) (Recht: edit, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/evidence/:evidenceId/content`: Beweisinhalt lesen; vermerkt VIEWED in der Nachweiskette (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/evidence/from-attachment`: Vorhandenen versiegelten Anhang als Beweis übernehmen ( attachmentId , title , classification ) (Recht: edit, nur Sitzung) - `PUT /platform/casefiles/:ownerGuildId/:caseFileId/evidence/order`: Reihenfolge der Beweise setzen ( evidenceIds ) (Recht: edit, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/evidence/uploads`: Beweis-Upload beginnen; braucht update auf evidence (Recht: edit, nur Sitzung) - `PUT /platform/casefiles/:ownerGuildId/:caseFileId/evidence/uploads/:attachmentId/versions/:versionId/bytes`: Beweisinhalt hochladen (roher Body) (Recht: edit, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/evidence/uploads/:attachmentId/versions/:versionId/finalize`: Beweis-Upload abschließen ( expectedSha256 , expectedBytes , securedBy , securedAt ) (Recht: edit, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/handover`: Federführung an eine Partnerinstanz übergeben ( partnerGuildId , include , keepReadAccess , reason ) (Recht: edit, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/history`: Änderungen der Fallakte ( cursor ) (Recht: view, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/links`: Verknüpfungen zu Einsätzen, Fallakten, Dokumenten und Listen (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/links`: Verknüpfung anlegen ( kind , targetOwnerGuildId , targetId , relationKey , note ); das Ziel muss lesbar sein (Recht: edit, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/links/:linkId/archive`: Verknüpfung entfernen (Recht: edit, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/persons`: Beteiligte Personen; Namen nur nach den Regeln der jeweiligen Bürgerakte (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/persons`: Person hinzufügen (Bürgerakte oder UNKNOWN mit Beschreibung, roleKey ) (Recht: edit, nur Sitzung) - `PATCH /platform/casefiles/:ownerGuildId/:caseFileId/persons/:personId`: Person ändern oder einer Bürgerakte zuordnen ( expectedVersion ) (Recht: edit, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/persons/:personId/archive`: Person aus der Fallakte entfernen ( expectedVersion ) (Recht: edit, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/positions`: Positionen mit Summen (von, bis, festgesetzt) (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/positions`: Position hinzufügen (aus dem Katalog oder frei, quantity , amount ) (Recht: edit, nur Sitzung) - `PATCH /platform/casefiles/:ownerGuildId/:caseFileId/positions/:positionId`: Position ändern ( expectedVersion ) (Recht: edit, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/positions/:positionId/archive`: Position entfernen ( expectedVersion ) (Recht: edit, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/reopen`: Fallakte wiedereröffnen ( expectedVersion , reason 10 bis 500 Zeichen) (Recht: edit, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/reports`: Berichte des Sachverhalts mit gemeinsamer und eigener Reihenfolge (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/reports`: Bericht anlegen ( title , body , classification , templateKey ) (Recht: edit, nur Sitzung) - `PATCH /platform/casefiles/:ownerGuildId/:caseFileId/reports/:reportId`: Bericht ändern ( expectedVersion ); gesperrte nur Verfasser oder Leitung (Recht: edit, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/reports/:reportId/archive`: Bericht entfernen ( expectedVersion ) (Recht: edit, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/reports/:reportId/lock`: Bericht sperren oder entsperren ( locked ) (Recht: edit, nur Sitzung) - `PUT /platform/casefiles/:ownerGuildId/:caseFileId/reports/order`: Reihenfolge der Berichte ( scope GLOBAL oder OWN , reportIds ) (Recht: view, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/share-partners`: Partnerinstanzen im Identitätsbereich der Fallakte, mit denen geteilt werden kann (Recht: view, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/shares`: Partnerinstanzen, mit denen die Fallakte geteilt ist (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/shares`: Fallakte mit einer Partnerinstanz teilen ( partnerGuildId , functionKey , tabs , includeRestricted , expiresAt ) (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/shares/:shareId/extend`: Teilen verlängern ( expectedVersion , expiresAt ) (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/shares/:shareId/revoke`: Teilen sofort beenden ( expectedVersion , reason ) (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/status`: Status setzen ( expectedVersion , statusKey , reason ); Abschluss nur über close (Recht: edit, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/tags`: Kennzeichen der Fallakte; braucht read auf facts (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/tags`: Kennzeichen an der Fallakte vergeben; braucht update auf facts (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/tags/:tagId/remove`: Kennzeichen von der Fallakte entfernen (Recht: view, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/tasks`: Aufgaben der eigenen Instanz an der Fallakte ( status ) (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/tasks`: Aufgabe an der Fallakte anlegen (Recht: view, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/team`: Fallgruppe mit Funktionen und Partnerinstanzen (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/team`: Mitglied der Fallgruppe hinzufügen ( userId , functionKey , until ) (Recht: edit, nur Sitzung) - `PATCH /platform/casefiles/:ownerGuildId/:caseFileId/team/:memberId`: Funktion oder Enddatum ändern ( expectedVersion ) (Recht: edit, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/team/:memberId/remove`: Mitglied entfernen ( expectedVersion ); die letzte Leitung bleibt (Recht: edit, nur Sitzung) - `GET /platform/casefiles/:ownerGuildId/:caseFileId/timeline`: Zeitachse ( certainty ); nicht lesbare Quellen ohne Inhalt (Recht: view, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/timeline`: Ereignis anlegen ( at , precision , text , certainty , personIds , sources ) (Recht: edit, nur Sitzung) - `PATCH /platform/casefiles/:ownerGuildId/:caseFileId/timeline/:eventId`: Ereignis ändern ( expectedVersion ) (Recht: edit, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/timeline/:eventId/archive`: Ereignis entfernen ( expectedVersion ) (Recht: edit, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/timeline/from-einsaetze`: Ereignisse aus verknüpften Einsätzen übernehmen ( einsatzRefs ) (Recht: edit, nur Sitzung) - `POST /platform/casefiles/:ownerGuildId/:caseFileId/view-as`: Fallakte so ansehen, wie ein Partner oder Rang sie sähe (nur Sichtbarkeit, nie Werte); braucht casefiles.setup.edit (Recht: view, nur Sitzung) - `PUT /platform/casefiles/:ownerGuildId/:caseFileId/watch`: Fallakte beobachten; braucht summary (sonst 403), die Detailantwort meldet das als summaryReadable (Recht: view, nur Sitzung) - `DELETE /platform/casefiles/:ownerGuildId/:caseFileId/watch`: Beobachtung der Fallakte beenden (Recht: view, nur Sitzung) - `GET /platform/casefiles/me`: Fallakten-Liste ( scope , type , status , member , q , view , cursor ); Partnerakten nach den Regeln ihres Besitzers (Recht: view, nur Sitzung) - `POST /platform/casefiles/me`: Fallakte anlegen ( typeEntryId , title , Vorfall, Einsätze, Personen); braucht casefiles.file.create oder das Einzelrecht des Falltyps (Recht: edit, nur Sitzung) - `GET /platform/casefiles/me/einsatz-candidates`: Einsätze zum Übernehmen ( at , hours 24|72|168, q ) mit Personenvorschlägen (Recht: view, nur Sitzung) - `GET /platform/casefiles/me/for-einsatz/:einsatzOwnerGuildId/:einsatzId`: Fallakten, zu denen ein Einsatz gehört (Hinweis am Einsatz) (Recht: view, nur Sitzung) - `GET /platform/casefiles/me/handovers`: Übergaben ( direction=incoming|outgoing ); eingehende nur mit casefiles.file.create (Recht: view, nur Sitzung) - `POST /platform/casefiles/me/handovers/:handoverId/decide`: Übergabe annehmen oder ablehnen ( expectedVersion , decision , typeEntryId , note ); braucht casefiles.file.create (Recht: edit, nur Sitzung) - `POST /platform/casefiles/me/handovers/:handoverId/withdraw`: Eigene offene Übergabe zurückziehen ( expectedVersion ) (Recht: edit, nur Sitzung) - `GET /platform/casefiles/me/participant-search`: Beteiligte suchen ( q , file ): Bürgerregister, eigenes Personal, Partnerinstanzen (Recht: view, nur Sitzung) - `GET /platform/casefiles/me/sidebar`: Seitenleiste der Fallakten: Typen mit Anzahl, Meine, Frist, Von Partnern, Ansichten (Recht: view, nur Sitzung) - `GET /platform/citizen-matching/:ownerGuildId/:domainId/sources/:sourceEntityId`: Importidentität für den Bürgerabgleich lesen (Recht: view, nur Sitzung) - `GET /platform/citizen-matching/:ownerGuildId/:domainId/sources/:sourceEntityId/candidates`: Abgleichkandidaten laden (Recht: view, nur Sitzung) - `POST /platform/citizen-matching/:ownerGuildId/:domainId/sources/:sourceEntityId/decisions`: Bürgerabgleich bestätigen oder ablehnen (Recht: view, nur Sitzung) - `POST /platform/citizen-matching/:ownerGuildId/:domainId/sources/:sourceEntityId/links/:linkId/unlink`: Bürgerabgleich korrigieren (Recht: view, nur Sitzung) - `POST /platform/citizen-register/:ownerGuildId/:domainId/access-requests`: Zugriff auf Felder im ganzen Identitätsbereich einer Partnerinstanz anfragen (Recht: view, nur Sitzung) - `GET /platform/citizen-register/:ownerGuildId/:domainId/assignable-members`: Aktive Mitarbeitende der eigenen Instanz als Zuständige ( q , höchstens 25) (Recht: view, nur Sitzung) - `GET /platform/citizen-register/:ownerGuildId/:domainId/duplicates`: Dubletten-Warteschlange der eigenen Instanz ( ownerGuildId oder me ), status=OPEN|SNOOZED , cursor , limit (1–100); nur Paare, deren beide Akten lesbar sind; total zählt nur sichtbare Paare (Recht: view, nur Sitzung) - `GET /platform/citizen-register/:ownerGuildId/:domainId/duplicates/:candidateId`: Vergleich nebeneinander: Werte je Seite nach eigener Freigabe, leftRedacted / rightRedacted , Übereinstimmung je Feld, benötigte Zustimmungen (Recht: view, nur Sitzung) - `POST /platform/citizen-register/:ownerGuildId/:domainId/duplicates/:candidateId/dismiss`: „Keine Dublette“ mit reason ; speichert die Ablehnung des Paares dauerhaft (Recht: view, nur Sitzung) - `POST /platform/citizen-register/:ownerGuildId/:domainId/duplicates/:candidateId/snooze`: Dublette mit days (1–30) zurückstellen (Recht: view, nur Sitzung) - `POST /platform/citizen-register/:ownerGuildId/:domainId/duplicates/scan`: Dublettensuche für die eigene Instanz starten (frisch geprüfter Besitzeradministrator); liefert scanned , found (Recht: admin, nur Sitzung) - `GET /platform/citizen-register/:ownerGuildId/:domainId/facets`: Zahlen der Schnellfilter (Warnhinweis, verknüpft, beobachtet, heute geändert); nur für die eigene Instanz, me steht für die Heimatinstanz (Recht: view, nur Sitzung) - `GET /platform/citizen-register/:ownerGuildId/:domainId/matrix`: Freigabe-Matrix Felder mal Partner (frischer Instanz-Admin) (Recht: admin, nur Sitzung) - `PUT /platform/citizen-register/:ownerGuildId/:domainId/matrix`: Freigabe-Matrix speichern (Zielzustand je Partner mit etag ; vertrauliche Felder nur mit confirmRestricted ) (Recht: admin, nur Sitzung) - `POST /platform/citizen-register/:ownerGuildId/:domainId/merge-requests`: Zusammenführung anfragen mit candidateId , keepTargetRecord ( left | right ), fieldChoices , reason ; braucht approve auf den eigenen betroffenen Akten; ohne fremde Besitzer sofort angewendet (Recht: view, nur Sitzung) - `GET /platform/citizen-register/:ownerGuildId/:domainId/narrative-categories`: Notizkategorien mit Lese- und Schreibrecht je Kategorie (Recht: view, nur Sitzung) - `POST /platform/citizen-register/:ownerGuildId/:domainId/partners/:partnerGuildId/pause`: Einen Partnernutzer pausieren ( userRef , hours 1 bis 168, reason ) oder Pause aufheben ( lift: true ) (Recht: admin, nur Sitzung) - `POST /platform/citizen-register/:ownerGuildId/:domainId/partners/:partnerGuildId/revoke-all`: Alle Matrix-Freigaben, Einzelfreigaben und Aktenauszüge eines Partners zurückziehen ( reason , confirm: true ) (Recht: admin, nur Sitzung) - `POST /platform/citizen-register/:ownerGuildId/:domainId/shares/:shareId/extend`: Bereichsweite Freigabe (aus einer Bereichsanfrage) verlängern ( expectedVersion , expiresAt ; frischer Instanz-Admin) (Recht: admin, nur Sitzung) - `POST /platform/citizen-register/:ownerGuildId/:domainId/shares/:shareId/revoke`: Bereichsweite Freigabe sofort zurückziehen ( expectedVersion , reason ; frischer Instanz-Admin) (Recht: admin, nur Sitzung) - `GET /platform/citizen-register/:ownerGuildId/:domainId/sharing-overview`: Freigaben-Übersicht je Partner mit Zugriffsvolumen, Auffälligkeiten und Pausen (Recht: admin, nur Sitzung) - `GET /platform/citizen-register/me/access-requests`: Eigene ( direction=outgoing ) oder zu entscheidende ( direction=incoming ) Zugriffsanfragen, optional status (Recht: view, nur Sitzung) - `POST /platform/citizen-register/me/access-requests/:requestId/decide`: Zugriffsanfrage entscheiden ( APPROVE , PARTIAL mit grantedFieldIds , REJECT ; Dauer nur kürzbar) (Recht: view, nur Sitzung) - `POST /platform/citizen-register/me/access-requests/:requestId/withdraw`: Eigene offene Zugriffsanfrage zurückziehen (Recht: view, nur Sitzung) - `GET /platform/citizen-register/me/extracts/:extractId/pdf`: Für die eigene Instanz bereitgestellten Aktenauszug herunterladen (wird protokolliert) (Recht: view, nur Sitzung) - `GET /platform/citizen-register/me/inbox`: Postfach des Bürgerregisters ( kind , unread , cursor ); eigene Meldungen und Instanz-Aufgaben, die man entscheiden darf (Recht: view, nur Sitzung) - `POST /platform/citizen-register/me/inbox/:itemId/read`: Postfacheintrag als gelesen markieren (Recht: view, nur Sitzung) - `POST /platform/citizen-register/me/inbox/read-all`: Alle sichtbaren Postfacheinträge als gelesen markieren (Recht: view, nur Sitzung) - `GET /platform/citizen-register/me/mentions`: Namen erwähnter Akten je Leser ( refs , höchstens 50); nicht lesbare ohne Namen (Recht: view, nur Sitzung) - `GET /platform/citizen-register/me/merge-requests`: Zusammenführungsanfragen, direction=incoming|outgoing (Recht: view, nur Sitzung) - `POST /platform/citizen-register/me/merge-requests/:requestId/decide`: Zustimmen oder ablehnen mit expectedVersion , decision ( APPROVE | REJECT ), reason ; mit der letzten Zustimmung wird die Verknüpfung angewendet oder mit Grund als fehlgeschlagen markiert (Recht: view, nur Sitzung) - `POST /platform/citizen-register/me/merge-requests/:requestId/withdraw`: Eigene offene Anfrage mit expectedVersion zurückziehen (Recht: view, nur Sitzung) - `GET /platform/citizen-register/me/search`: Eine Suche über alle lesbaren Registerbereiche ( q 2 bis 128 Zeichen, limit 1 bis 20); Akten derselben Person bilden einen Treffer mit mehreren Quellen, gesucht wird nur in lesbaren, nicht zurückgehaltenen Feldern (Recht: view, nur Sitzung) - `GET /platform/citizen-register/me/shares`: Für die eigene Instanz freigegebene Akten und Aktenauszüge (Recht: view, nur Sitzung) - `GET /platform/citizen-register/me/tasks`: Eigene Wiedervorlagen ( scope , due , status , target , cursor ) (Recht: view, nur Sitzung) - `PATCH /platform/citizen-register/me/tasks/:taskId`: Wiedervorlage ändern oder erledigen ( expectedVersion , done ) (Recht: view, nur Sitzung) - `POST /platform/citizen-register/me/tasks/:taskId/archive`: Wiedervorlage löschen ( expectedVersion ) (Recht: view, nur Sitzung) - `GET /platform/citizen-register/me/view-counts`: Anzahlen je Ansicht für die Seitenleiste ( area , höchstens 9999) (Recht: view, nur Sitzung) - `GET /platform/citizen-register/me/views`: Gespeicherte und eingebaute Ansichten ( area=CITIZENS|CASEFILES ) (Recht: view, nur Sitzung) - `POST /platform/citizen-register/me/views`: Ansicht speichern; shared: true braucht citizens.views.share bzw. casefiles.views.share (Recht: view, nur Sitzung) - `PATCH /platform/citizen-register/me/views/:viewId`: Ansicht ändern ( expectedVersion ) (Recht: view, nur Sitzung) - `DELETE /platform/citizen-register/me/views/:viewId`: Ansicht löschen (Recht: view, nur Sitzung) - `PUT /platform/citizen-register/me/views/order`: Reihenfolge der eigenen Ansichten setzen ( area , viewIds ) (Recht: view, nur Sitzung) - `GET /platform/citizen-register/me/watches`: Eigene beobachtete Akten (Recht: view, nur Sitzung) - `POST /platform/citizen-register/me/watches`: Bis zu 50 Akten auf einmal beobachten (Recht: view, nur Sitzung) - `GET /platform/citizen-register/me/workspace`: Offene Arbeits-Reiter der Person in dieser Instanz (Recht: view, nur Sitzung) - `PUT /platform/citizen-register/me/workspace`: Arbeits-Reiter speichern ( expectedVersion , tabs , höchstens 12) (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId`: Bürgerdatensätze eines Bereichs lesen (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId`: Bürgerdatensatz anlegen; jedes geschriebene Feld muss im Felddefinitionskatalog des Bereichs stehen und einzeln freigegeben sein (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId`: Einen Bürgerdatensatz lesen (Recht: view, nur Sitzung) - `PATCH /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId`: Bürgerdatensatz versionsgesichert ändern; ein Konflikt antwortet mit 409 und currentVersion (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/access-log`: Zugriffsprotokoll der Akte (nur eigene Instanz; cursor , `format=json (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/access-requests`: Zugriff auf nicht freigegebene Felder dieser Akte anfragen (Partner; fieldIds , purpose 10 bis 500 Zeichen, caseNumber , durationHours 24/168/720) (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/appointments`: Termine der Person ( upcoming , past ); Ort und Notiz nur mit appointmentDetails (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/appointments`: Kalendertermin anlegen und mit der eigenen Akte verknüpfen; braucht calendar.entry.create (Recht: view, nur Sitzung) - `PUT /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/appointments/:linkId/attendance`: Erscheinen vermerken ( attendance ATTENDED , MISSED oder null ) (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/appointments/:linkId/unlink`: Terminverknüpfung lösen (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/appointments/link`: Bestehenden Kalendertermin der eigenen Instanz verknüpfen ( calendarEntryId , location ) (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/archive`: Bürgerdatensatz archivieren (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/assignees`: Zuständige der Akte; Partner sehen ohne Freigabe nur die Anzahl (Recht: view, nur Sitzung) - `PUT /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/assignees`: Zuständige setzen ( userIds , höchstens 10, nur eigene Mitarbeitende, nur eigene Akten) (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/banners`: Hinweis-Banner der Akte nach den Regeln der eigenen Instanz (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/casefiles`: Fallakten der Person ( status=open|all ), je Besitzer nach dessen Regeln; hiddenOpenCount zählt die nicht freigegebenen, nicht abgeschlossenen (Recht: view, nur Sitzung) - `PUT /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/editing`: Bearbeitungshinweis erneuern (alle 20 s, gilt 45 s); antwortet mit den anderen Bearbeitenden (Recht: view, nur Sitzung) - `DELETE /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/editing`: Bearbeitungshinweis beenden (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/evidence-candidates`: Auswahl lesbarer, versiegelter Beweise ( source recent oder documents) (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/evidence-candidates/:attachmentId/preview`: Vorschaubild eines auswählbaren Beweises (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/evidence-links`: Aktive und archivierte Beweisverknüpfungen berechtigt und seitenweise lesen ( limit 1–100, cursor ; items , returnedCount , hasMore , nextCursor ); Metadaten, keine Dateibytes (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/evidence-links`: Beweisdatei mit Bürgerdatensatz verknüpfen (Recht: edit, nur Sitzung) - `PATCH /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/evidence-links/:linkId`: Beweisverknüpfung ändern (Recht: edit, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/evidence-links/:linkId/archive`: Beweisverknüpfung archivieren (Recht: edit, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/evidence-links/:linkId/preview`: Vorschaubild einer verknüpften Bilddatei (JPEG, PNG, WebP bis 5 MB) (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/evidence-links/:linkId/restore`: Beweisverknüpfung wiederherstellen (Recht: edit, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/extract-options`: Empfänger und verfügbare Abschnitte für einen Aktenauszug ( recipientGuildId ) (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/extracts`: Aktenauszüge der Akte (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/extracts`: Aktenauszug als PDF erstellen (Abschnitte, Felder, Aktenzeichen, Wasserzeichen, Briefkopf, optional shareDays für Partner) (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/extracts/:extractId/pdf`: Aktenauszug herunterladen (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/extracts/:extractId/revoke`: Aktenauszug zurückziehen ( reason ) (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/files`: Dateien der Akte; nicht lesbare als Platzhalter mit Größe und Instanz; uploadsConfigured ist false, solange die Instanz keine Beweisablage eingerichtet hat (Recht: view, nur Sitzung) - `PATCH /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/files/:linkId`: Titel, Beschreibung oder Einstufung einer Datei ändern ( expectedVersion , title? , description? , classification? ); Titel nur bei in der Akte hochgeladenen Dateien (Recht: edit, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/files/:linkId/content`: Dateiinhalt lesen; Partnerzugriffe werden protokolliert (Recht: view, nur Sitzung) - `PUT /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/files/order`: Reihenfolge der Dateien setzen ( linkIds ) (Recht: edit, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/files/uploads`: Datei-Upload an der Akte beginnen ( originalName , mimeType , byteSize , title , classification ); höchstens 50 MB (Recht: edit, nur Sitzung) - `PUT /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/files/uploads/:attachmentId/versions/:versionId/bytes`: Dateiinhalt hochladen (roher Body) (Recht: edit, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/files/uploads/:attachmentId/versions/:versionId/finalize`: Upload abschließen ( expectedSha256 , expectedBytes ) und an die Akte hängen (Recht: edit, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/history`: Verlauf mit Vorher/Nachher ( field , origin ALL/OWN/PARTNER/IMPORT, cursor ); Werte nur für lesbare Felder, sonst redacted (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/incidents`: Einsätze der eigenen Instanz, deren Patienten mit dieser Akte verknüpft sind (nur eigene Instanz) (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/match-assistant/rejections`: Vorschlag mit candidateOwnerGuildId , candidateAuthorityRecordId und reason ablehnen; beide Datensätze müssen die Aktion erlauben (Recht: edit, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/merges`: Identitätsverknüpfungen der Person dieser Akte; braucht Lesefreigabe für identity (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/notes/:narrativeId/archive`: Notiz löschen ( reason? ); Verfasser oder citizens.notes.manage , dazu Ändern der Notizkategorie (Recht: edit, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/notes/:narrativeId/lock`: Notiz sperren oder entsperren ( locked ); Verfasser oder citizens.notes.manage (Recht: edit, nur Sitzung) - `PUT /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/notes/order`: Reihenfolge der Notizen ( scope GLOBAL mit citizens.notes.manage oder OWN , lineageIds ) (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/quick-actions`: Schnellaktionen, die die Person an dieser eigenen Akte ausführen darf (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/quick-actions/:actionId/run`: Schnellaktion ausführen ( expectedVersion , inputs , reason ); alle Schritte in einer Transaktion, jeder mit den eigenen Rechten (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/relations`: Querverweise der Akte in beide Richtungen; nicht lesbare Gegenseiten ohne Namen (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/relations`: Querverweis anlegen ( targetRef , typeRef , direction , since , until , note , classification ) (Recht: edit, nur Sitzung) - `PATCH /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/relations/:relationId`: Querverweis ändern ( expectedVersion ) (Recht: edit, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/relations/:relationId/archive`: Querverweis entfernen ( expectedVersion , reason ) (Recht: edit, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/reveal`: Vertrauliche Werte mit Zweckangabe für 15 Minuten aufdecken (Partner; fieldIds , narrativeIds , purpose ); wird protokolliert (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/search`: Suche in der Akte ( q 2 bis 64 Zeichen), nur in lesbaren Inhalten; nennt nicht freigegebene Bereiche nur als Anzahl (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/share-partners`: Mögliche Partnerinstanzen für eine Einzelfreigabe (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/shares`: Einzelfreigaben der Akte und bereichsweite Freigaben je Partner (nur eigene Instanz mit Freigaberecht) (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/shares`: Akte befristet für eine Partnerinstanz freigeben ( partnerGuildId , fieldIds , purpose , caseNumber , expiresAt höchstens 90 Tage) (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/shares/:shareId/extend`: Einzelfreigabe verlängern ( expectedVersion , expiresAt ) (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/shares/:shareId/revoke`: Einzelfreigabe sofort zurückziehen ( expectedVersion , reason ) (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/sync-preview`: Vorschau des Basisdaten-Abgleichs für geänderte Felder, ohne zu schreiben (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/table-rows`: Zeilen aller lesbaren Tabellenfelder oder eines Feldes ( field ) (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/table-rows/:fieldKey`: Tabellenzeile anlegen ( values , classification , validUntil ); braucht update auf field: (Recht: edit, nur Sitzung) - `PATCH /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/table-rows/:fieldKey/:rowId`: Tabellenzeile ändern ( expectedVersion ) (Recht: edit, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/table-rows/:fieldKey/:rowId/archive`: Tabellenzeile entfernen ( expectedVersion , reason ) (Recht: edit, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/tags`: Kennzeichen der Akte und lesbare Kennzeichen anderer Akten derselben Person (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/tags`: Kennzeichen vergeben ( entryRef , expiresAt , note ); braucht update auf tags (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/tags/:tagId/remove`: Kennzeichen entfernen ( expectedVersion ) (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/tasks`: Wiedervorlagen der eigenen Instanz an dieser Akte ( status=open|done|all ) (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/tasks`: Wiedervorlage an der Akte anlegen ( title , dueAt , dueHasTime , assigneeUserId ) (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/view-as`: Akte als Partner oder lokaler Rang ansehen, mit Begründung je Feld (frischer Instanz-Admin) (Recht: admin, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/warnings`: Warnhinweise der Akte; eigene vollständig, bereichsweit geteilte als Kurzform (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/warnings`: Warnhinweis setzen ( kind , shortText , validUntil , shareWithDomain , showInDispatch , reason ) (Recht: view, nur Sitzung) - `PATCH /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/warnings/:warningId`: Warnhinweis versionsgesichert ändern (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/warnings/:warningId/archive`: Warnhinweis entfernen (Recht: view, nur Sitzung) - `PUT /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/watch`: Akte beobachten (Recht: view, nur Sitzung) - `DELETE /platform/citizens/:ownerGuildId/:domainId/:authorityRecordId/watch`: Beobachtung beenden (Recht: view, nur Sitzung) - `GET /platform/citizens/:ownerGuildId/:domainId/field-definitions`: Felddefinitionen lesen (Recht: admin, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/field-definitions`: Felddefinition anlegen ( key , label , valueType , classification , position ); der Schlüssel ist danach unveränderlich (Recht: admin, nur Sitzung) - `PATCH /platform/citizens/:ownerGuildId/:domainId/field-definitions/:definitionId`: Felddefinition ändern; valueType (bei SELECT mit selectOptionType und selectOptions ) nur, solange keine Werte gespeichert sind; die Optionen einer Auswahl jederzeit (Recht: admin, nur Sitzung) - `DELETE /platform/citizens/:ownerGuildId/:domainId/field-definitions/:definitionId`: Felddefinition ohne gespeicherte Werte endgültig löschen (Recht: admin, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/field-definitions/:definitionId/archive`: Felddefinition archivieren (Recht: admin, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/match-assistant`: Lesende Matching-Anfrage mit genau einem von authorityRecordId oder claims , optional limit (1–100); liefert nur policy-geprüfte Vorschläge und reviewRequired: true (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/merges`: Identitätszusammenführungen prüfen (Recht: view, nur Sitzung) - `POST /platform/citizens/:ownerGuildId/:domainId/merges/:mergeId/reverse`: Zusammenführung zurücknehmen (Recht: view, nur Sitzung) - `GET /platform/citizens/discovery`: Freigegebene Bürgerdatenquellen entdecken (Recht: view, nur Sitzung) - `GET /platform/config`: Plattform-Konfiguration lesen (Recht: admin, nur Sitzung) - `PUT /platform/config`: Plattform-Konfiguration versionsgesichert ändern (Recht: admin, nur Sitzung) - `POST /platform/custody/:sourceMedicalGuildId/offers`: Verwahrungsübergabe anbieten (Recht: view, nur Sitzung) - `GET /platform/custody/:sourceMedicalGuildId/transfers/:transferId`: Verwahrungsübergabe lesen (Recht: view, nur Sitzung) - `POST /platform/custody/:sourceMedicalGuildId/transfers/:transferId/accept`: Verwahrungsübergabe annehmen (Recht: view, nur Sitzung) - `POST /platform/custody/:sourceMedicalGuildId/transfers/:transferId/cancel`: Verwahrungsübergabe abbrechen (Recht: view, nur Sitzung) - `POST /platform/custody/:sourceMedicalGuildId/transfers/:transferId/events`: Verwahrungsverlauf ergänzen (Recht: view, nur Sitzung) - `POST /platform/custody/:sourceMedicalGuildId/transfers/:transferId/reject`: Verwahrungsübergabe ablehnen (Recht: view, nur Sitzung) - `GET /platform/custody/inbox`: Eingehende Verwahrungsübergaben auflisten (Recht: view, nur Sitzung) - `GET /platform/dispatchers/:ownerGuildId`: Explizit freigegebene Leitstellenbesetzung einer Instanz lesen (Recht: view, nur Sitzung) - `GET /platform/dispatchers/sources`: Für die Leitstelle freigegebene Dispatcherquellen auflisten (Browser-Sitzung, keine API-Schlüssel) (Recht: view, nur Sitzung) - `GET /platform/documents/:ownerGuildId`: Plattformdokumente auflisten (Recht: view, nur Sitzung) - `GET /platform/documents/:ownerGuildId/:documentId`: Plattformdokument lesen (Recht: view, nur Sitzung) - `POST /platform/documents/:ownerGuildId/:documentId/convert`: Legacy-Dokument konvertieren (Recht: edit, nur Sitzung) - `POST /platform/documents/:ownerGuildId/:documentId/profile`: Dokument für Plattformverwaltung aktivieren (Recht: edit, nur Sitzung) - `PATCH /platform/documents/:ownerGuildId/:documentId/profile`: Klassifizierung, Organisationseinheit oder Freigabestufe des Dokuments versionsgesichert ändern (Recht: edit, nur Sitzung) - `GET /platform/documents/:ownerGuildId/:documentId/projection/:action`: Dokumentaktion projizieren (Recht: view, nur Sitzung) - `POST /platform/documents/:ownerGuildId/:documentId/read`: Dokument als gelesen markieren (Recht: view, nur Sitzung) - `POST /platform/documents/:ownerGuildId/:documentId/sections`: Dokumentabschnitt anlegen (Recht: edit, nur Sitzung) - `GET /platform/documents/:ownerGuildId/:documentId/sections/:sectionId`: Dokumentabschnitt lesen (Recht: view, nur Sitzung) - `PATCH /platform/documents/:ownerGuildId/:documentId/sections/:sectionId`: Abschnitt versionsgesichert ändern: sectionKey , title , body sowie die Zugriffsregeln classificationKey , owningOrgUnitId und requiredClearanceLevelId ; reason ist Pflicht (Recht: edit, nur Sitzung) - `POST /platform/documents/:ownerGuildId/:documentId/sections/:sectionId/archive`: Dokumentabschnitt archivieren (Recht: edit, nur Sitzung) - `POST /platform/documents/:ownerGuildId/:documentId/sections/:sectionId/restore`: Dokumentabschnitt wiederherstellen (Recht: edit, nur Sitzung) - `GET /platform/documents/:ownerGuildId/:documentId/sections/:sectionId/revisions`: Abschnittsversionen lesen (Recht: view, nur Sitzung) - `PUT /platform/documents/:ownerGuildId/:documentId/sections/order`: Dokumentabschnitte sortieren (Recht: edit, nur Sitzung) - `GET /platform/documents/:ownerGuildId/count`: Anzahl der Plattformdokumente lesen (Recht: view, nur Sitzung) - `GET /platform/documents/:ownerGuildId/unread`: Ungelesene Plattformdokumente lesen (Recht: view, nur Sitzung) - `GET /platform/evidence/:ownerGuildId/attachments/:attachmentId/versions/:versionId/content`: Freigegebenen Beweisdateiinhalt einer Partnerinstanz lesen oder exportieren (Recht: view, nur Sitzung) - `GET /platform/evidence/:ownerGuildId/attachments/:attachmentId/write-requests`: Schreibanfragen als frisch geprüfter Besitzeradministrator lesen (Recht: admin, nur Sitzung) - `POST /platform/evidence/:ownerGuildId/attachments/:attachmentId/write-requests`: Mit reason Schreibzugriff beantragen; Browser-Sitzung, explizite Akteursinstanz und Lesefreigabe des Anhangs erforderlich (Recht: view, nur Sitzung) - `POST /platform/evidence/:ownerGuildId/attachments/:attachmentId/write-requests/:requestId/review`: Schreibanfrage als Besitzeradministrator mit expectedVersion , decision ( APPROVE / REJECT ) und reason entscheiden (Recht: admin, nur Sitzung) - `POST /platform/evidence/attachments`: Beweisdatei-Upload beginnen (Recht: admin, nur Sitzung) - `GET /platform/evidence/attachments/:attachmentId`: Beweisdatei-Metadaten lesen (Recht: admin, nur Sitzung) - `POST /platform/evidence/attachments/:attachmentId/archive`: Beweisdatei archivieren (Recht: admin, nur Sitzung) - `PUT /platform/evidence/attachments/:attachmentId/versions/:versionId/bytes`: Beweisdateiversion speichern (Recht: admin, nur Sitzung) - `GET /platform/evidence/attachments/:attachmentId/versions/:versionId/content`: Beweisdateiinhalt lesen (Recht: admin, nur Sitzung) - `POST /platform/evidence/attachments/:attachmentId/versions/:versionId/finalize`: Beweisdateiversion abschließen (Recht: admin, nur Sitzung) - `POST /platform/evidence/attachments/:attachmentId/versions/:versionId/purge`: Beweisdateiversion entfernen (Recht: admin, nur Sitzung) - `GET /platform/evidence/policy`: Beweisablage-Richtlinie lesen (Recht: admin, nur Sitzung) - `PUT /platform/evidence/policy`: Beweisablage-Richtlinie ändern (Recht: admin, nur Sitzung) - `GET /platform/incidents/:ownerGuildId/:einsatzId/citizens`: Beteiligte Bürger eines Einsatzes lesen (Recht: view, nur Sitzung) - `POST /platform/incidents/:ownerGuildId/:einsatzId/citizens`: Bürgerbeteiligung an einem Einsatz erfassen (Recht: edit, nur Sitzung) - `GET /platform/incidents/:ownerGuildId/:einsatzId/citizens/:contributorGuildId/:involvementId`: Bürgerbeteiligung lesen (Recht: view, nur Sitzung) - `POST /platform/incidents/:ownerGuildId/:einsatzId/citizens/:involvementId/close`: Bürgerbeteiligung beenden (Recht: edit, nur Sitzung) - `GET /platform/incidents/:ownerGuildId/:einsatzId/contributions`: Einsatzbeiträge auflisten (Recht: view, nur Sitzung) - `POST /platform/incidents/:ownerGuildId/:einsatzId/contributions`: Einsatzbeitrag anlegen (Recht: edit, nur Sitzung) - `POST /platform/incidents/:ownerGuildId/:einsatzId/contributions/:contributorGuildId`: Einsatzbeitrag im Namen einer beitragenden Instanz anlegen (nur vertrauenswürdiger Plattformkontext) (Recht: edit, nur Sitzung) - `GET /platform/incidents/:ownerGuildId/:einsatzId/contributions/:contributorGuildId/:contributionId`: Einsatzbeitrag lesen (Recht: view, nur Sitzung) - `PATCH /platform/incidents/:ownerGuildId/:einsatzId/contributions/:contributorGuildId/:contributionId`: Einsatzbeitrag ändern (Recht: edit, nur Sitzung) - `POST /platform/incidents/:ownerGuildId/:einsatzId/participations`: Instanz zu Einsatz einladen (Recht: edit, nur Sitzung) - `POST /platform/incidents/:ownerGuildId/:einsatzId/participations/:participationId/end`: Einsatzteilnahme beenden (Recht: edit, nur Sitzung) - `POST /platform/incidents/:ownerGuildId/:einsatzId/participations/:participationId/review`: Einsatzteilnahme prüfen (Recht: edit, nur Sitzung) - `GET /platform/incidents/:ownerGuildId/:einsatzId/patients`: Patientenbeteiligungen eines Einsatzes projiziert auflisten (Recht: view, nur Sitzung) - `POST /platform/incidents/:ownerGuildId/:einsatzId/patients`: Patientenbeteiligung verknüpfen (Recht: edit, nur Sitzung) - `GET /platform/incidents/:ownerGuildId/:einsatzId/patients/:medicalGuildId/:patientParticipationId`: Patientenbeteiligung lesen (Recht: view, nur Sitzung) - `POST /platform/incidents/:ownerGuildId/:einsatzId/patients/:patientParticipationId/unlink`: Patientenbeteiligung lösen (Recht: edit, nur Sitzung) - `GET /platform/incidents/:ownerGuildId/:einsatzId/personnel`: Einsatzpersonal auflisten (Recht: view, nur Sitzung) - `POST /platform/incidents/:ownerGuildId/:einsatzId/personnel`: Einsatzpersonal dokumentieren (Recht: edit, nur Sitzung) - `GET /platform/incidents/:ownerGuildId/:einsatzId/personnel/:contributorGuildId/:involvementId`: Personaleintrag lesen (Recht: view, nur Sitzung) - `POST /platform/incidents/:ownerGuildId/:einsatzId/personnel/:involvementId/close`: Personaleintrag beenden (Recht: edit, nur Sitzung) - `GET /platform/incidents/:ownerGuildId/:einsatzId/profile`: Einsatzprofil lesen (Recht: view, nur Sitzung) - `POST /platform/incidents/:ownerGuildId/:einsatzId/profile`: Einsatzprofil anlegen (Recht: edit, nur Sitzung) - `PATCH /platform/incidents/:ownerGuildId/:einsatzId/profile`: Einsatzprofil versionsgesichert ändern (Recht: edit, nur Sitzung) - `POST /platform/network/access/explain`: Zugriff auf eine hypothetische Ressource simulieren (Recht: admin, nur Sitzung) - `POST /platform/network/access/overview`: Was darf diese Person? Alle Datenarten mit Stufe, Feldern und Entscheidungsweg (echte Discord-Rollen) (Recht: admin, nur Sitzung) - `GET /platform/network/catalog`: Versionierten Aktions-, Ressourcen- und Feldkatalog lesen (Recht: admin, nur Sitzung) - `GET /platform/network/directory`: Explizit freigegebene Partner-Metadaten lesen (Recht: member, nur Sitzung) - `POST /platform/network/identity-domain-memberships/:membershipId/leave`: Identitätsbereich verlassen (Recht: admin, nur Sitzung) - `POST /platform/network/identity-domain-memberships/:membershipId/review`: Identitätsbereichsbeitritt prüfen (Recht: admin, nur Sitzung) - `GET /platform/network/identity-domain-memberships/sponsor-inbox`: Sponsor-Anfragen lesen (Recht: admin, nur Sitzung) - `POST /platform/network/identity-domains`: Identitätsbereich anlegen (Recht: admin, nur Sitzung) - `GET /platform/network/identity-domains/:domainId/matching-fields`: Matching-Feldkonfiguration des Identitätsbereichs lesen (frisch geprüfter Instanzadministrator) (Recht: admin, nur Sitzung) - `PUT /platform/network/identity-domains/:domainId/matching-fields`: Matching-Felder mit expectedVersion und fields ersetzen; jedes Feld enthält fieldKey , valueType , weight , position , required (Recht: admin, nur Sitzung) - `POST /platform/network/identity-domains/:domainId/requests`: Beitrittsanfrage erstellen; mit switchDomain: true aus einem anderen aktiven Bereich heraus (Bereich wechseln: die Annahme beendet die alte Mitgliedschaft) (Recht: admin, nur Sitzung) - `GET /platform/network/identity-domains/eligible`: Beitrittsfähige Identitätsbereiche lesen, mit sponsorName und diagnosis (warum die Liste so aussieht) (Recht: admin, nur Sitzung) - `GET /platform/network/identity-domains/memberships`: Identitätsbereichsmitgliedschaften lesen, mit sponsorName und bei offenen Anfragen requestState (Recht: admin, nur Sitzung) - `GET /platform/network/identity-domains/transfers`: Akten übernehmen: aktueller Bereich ( target ) und die Bereiche mit eigenen Akten ( sources , mit offenen, übernommenen und übersprungenen Akten) (Recht: admin, nur Sitzung) - `POST /platform/network/identity-domains/transfers/:domainId`: Akten in den aktuellen Bereich übernehmen; choices (Akten-ID → AUTO , NEW , SKIP ), copyRules (Standard true ). Die alten Akten bleiben als Archiv (Recht: admin, nur Sitzung) - `GET /platform/network/identity-domains/transfers/:domainId/preview`: Vorschau der Übernahme: je eigener Akte LINK , NEW oder MERGE mit Abgleichswert, neue Felder, Feldkonflikte, zu kopierende Regeln (Recht: admin, nur Sitzung) - `GET /platform/network/partner-diagnosis`: Warum die eigene Instanz bei Partnern nichts sieht: je Partner und Datenbereich die Hindernisse (Identitätsbereich, Kooperation, Plattformzugriff, fehlende oder spätere Regeln, Sicherheitsstufen, Pausen) (Recht: admin, nur Sitzung) - `POST /platform/network/partners/:partnerGuildId/clearance-mappings`: Dem Partner vorschlagen, welche eigene Sicherheitsstufe als die Stufe zählt, die seine Freigabe verlangt (optional neue Stufe anlegen); der Partner gibt den Vorschlag frei (Recht: admin, nur Sitzung) - `GET /platform/network/partners/:partnerGuildId/incoming`: Freigaben eines Partners für die eigene Instanz lesen (Recht: admin, nur Sitzung) - `POST /platform/network/partners/:partnerGuildId/requests`: Partner-Admins per DM um weitere Freigaben bitten (Recht: admin, nur Sitzung) - `GET /platform/network/policies`: Eigene Freigaberichtlinien auflisten (Recht: admin, nur Sitzung) - `POST /platform/network/policies`: Freigaberichtlinie anlegen (Recht: admin, nur Sitzung) - `PATCH /platform/network/policies/:id`: Freigaberichtlinie versionsgesichert ändern (Recht: admin, nur Sitzung) - `POST /platform/network/policies/:id/archive`: Freigaberichtlinie archivieren (Recht: admin, nur Sitzung) - `GET /platform/network/policies/:id/history`: Verlauf einer Freigaberichtlinie (Revisionen, neueste zuerst) (Recht: admin, nur Sitzung) - `POST /platform/network/policies/:id/restore`: Stand einer Revision als neue Version wiederherstellen (Recht: admin, nur Sitzung) - `POST /platform/network/policies/batch`: Mehrere Freigaberichtlinien in einer Transaktion ändern oder archivieren (Recht: admin, nur Sitzung) - `POST /platform/network/policies/draft`: Datenregel in eigenen Worten von der KI entwerfen lassen (Regeln als Entwurf) (Recht: admin, nur Sitzung) - `GET /platform/network/policies/export`: Eigene Freigaberichtlinien mit Namen der Ränge, Abteilungen und Stufen exportieren (Recht: admin, nur Sitzung) - `GET /platform/network/policies/findings`: Regel-Prüfung: wirkungslose, doppelte, verwaiste und abgelaufene Regeln (Recht: admin, nur Sitzung) - `GET /platform/network/policies/for-resource`: Wer einen bestimmten Datensatz sieht, samt Ausnahmen für genau diesen Datensatz (Recht: admin, nur Sitzung) - `POST /platform/network/policies/impact`: Wirkungsvorschau: wer durch geplante Änderungen Zugriff gewinnt oder verliert (Recht: admin, nur Sitzung) - `POST /platform/network/policies/import`: Freigaberichtlinien als Entwurf importieren (Recht: admin, nur Sitzung) - `GET /platform/network/policies/matrix`: Matrix „Wer sieht was?“: Gruppen der eigenen Instanz und der Partner × Datenarten (Recht: admin, nur Sitzung) - `GET /platform/network/policies/proposals`: Offene und zuletzt entschiedene Freigabe-Vorschläge auflisten (Recht: admin, nur Sitzung) - `POST /platform/network/policies/proposals`: Heikle Änderung als Vorschlag für einen zweiten Admin stellen (Recht: admin, nur Sitzung) - `POST /platform/network/policies/proposals/:id/approve`: Vorschlag eines anderen Admins freigeben und ausführen (Recht: admin, nur Sitzung) - `POST /platform/network/policies/proposals/:id/reject`: Vorschlag ablehnen (Recht: admin, nur Sitzung) - `GET /platform/network/policies/settings`: Vier-Augen-Prinzip und Zahl der Admins lesen (Recht: admin, nur Sitzung) - `PUT /platform/network/policies/settings`: Vier-Augen-Prinzip ein- oder ausschalten (Recht: admin, nur Sitzung) - `GET /platform/network/policies/usage`: Nutzung der Regeln und häufige Ablehnungen ( days 1 bis 90) (Recht: admin, nur Sitzung) - `GET /platform/network/records/labels`: Namen zu Datensatz-IDs in Regeln lesen (bis 50) (Recht: admin, nur Sitzung) - `GET /platform/network/records/search`: Datensätze für Regeln suchen (Bürgerakten, Dokumente, Kategorien, Einheiten, Einsätze) (Recht: admin, nur Sitzung) - `GET /platform/organization/clearances`: Freigabestufen auflisten (Recht: admin, nur Sitzung) - `POST /platform/organization/clearances`: Freigabestufe anlegen (Recht: admin, nur Sitzung) - `PATCH /platform/organization/clearances/:id`: Freigabestufe versionsgesichert ändern (Recht: admin, nur Sitzung) - `POST /platform/organization/clearances/:id/archive`: Freigabestufe archivieren (Recht: admin, nur Sitzung) - `POST /platform/organization/clearances/assignments/:id/revoke`: Mitarbeiterfreigabe widerrufen (Recht: admin, nur Sitzung) - `GET /platform/organization/clearances/employees/:employeeId`: Freigaben eines Mitarbeiters auflisten (Recht: admin, nur Sitzung) - `POST /platform/organization/clearances/employees/:employeeId`: Freigabe einem Mitarbeiter erteilen (Recht: admin, nur Sitzung) - `GET /platform/organization/memberships`: Zuordnungen von Mitarbeitern zu Organisationseinheiten auflisten (Recht: admin, nur Sitzung) - `POST /platform/organization/memberships`: Mitarbeiter einer Organisationseinheit zuordnen (Recht: admin, nur Sitzung) - `POST /platform/organization/memberships/:id/end`: Organisationszuordnung beenden (Recht: admin, nur Sitzung) - `GET /platform/organization/units`: Organisationseinheiten auflisten (Recht: admin, nur Sitzung) - `POST /platform/organization/units`: Organisationseinheit anlegen (Recht: admin, nur Sitzung) - `PATCH /platform/organization/units/:id`: Organisationseinheit versionsgesichert ändern; capabilities vergibt Rechte an alle Mitglieder der Einheit und ihrer Untereinheiten (Recht: admin, nur Sitzung) - `POST /platform/organization/units/:id/archive`: Organisationseinheit archivieren (Recht: admin, nur Sitzung) - `GET /platform/outbox/preferences`: Benachrichtigungseinstellungen auflisten (Recht: admin, nur Sitzung) - `POST /platform/outbox/preferences`: Benachrichtigungseinstellung anlegen (Recht: admin, nur Sitzung) - `PATCH /platform/outbox/preferences/:preferenceId`: Benachrichtigungseinstellung ändern (Recht: admin, nur Sitzung) - `DELETE /platform/outbox/preferences/:preferenceId`: Benachrichtigungseinstellung löschen (Recht: admin, nur Sitzung) - `GET /platform/register-catalogs/me/entries`: Katalogeinträge der eigenen Instanz (Bürgerregister: TAG , RELATION_TYPE , NOTE_CATEGORY , REPORT_TEMPLATE , BANNER_RULE , QUICK_ACTION ), kind , includeArchived (Recht: view, nur Sitzung) - `POST /platform/register-catalogs/me/entries`: Katalogeintrag anlegen ( kind , key , label , color , classification , config ); 409 bei doppeltem Schlüssel (Recht: edit, nur Sitzung) - `PATCH /platform/register-catalogs/me/entries/:entryId`: Katalogeintrag ändern mit expectedVersion (Recht: edit, nur Sitzung) - `POST /platform/register-catalogs/me/entries/:entryId/archive`: Katalogeintrag archivieren; bestehende Daten zeigen ihn weiter an (Recht: edit, nur Sitzung) - `PUT /platform/register-catalogs/me/entries/:entryId/offer`: Katalogeintrag in Identitätsbereichen anbieten ( domainIds , nur aktive Mitgliedschaften); gibt keine Daten frei (Recht: edit, nur Sitzung) - `POST /platform/register-catalogs/me/entries/:entryId/restore`: Archivierten Katalogeintrag wiederherstellen (Recht: edit, nur Sitzung) - `PUT /platform/register-catalogs/me/entries/order`: Reihenfolge der Einträge einer Art setzen ( kind , entryIds ) (Recht: edit, nur Sitzung) - `PUT /platform/register-catalogs/me/mappings`: Fremden Eintrag zuordnen ( mode MAPPED , ADOPTED oder NONE ) (Recht: edit, nur Sitzung) - `GET /platform/register-catalogs/me/settings`: Aktenkopf und Reiter der eigenen Instanz: Kurzname, Aktenzeichen-Muster mit Vorschau, Reiter-Layout (Recht: view, nur Sitzung) - `PUT /platform/register-catalogs/me/settings`: Kurzname, Aktenzeichen-Muster ( {JJJJ} , {JJ} , {NNNN} ) und Reiter-Layout speichern (Recht: edit, nur Sitzung) - `GET /platform/register-catalogs/me/shared`: Angebotene Einträge der Partner im Identitätsbereich ( domainId ) mit eigener Zuordnung (Recht: view, nur Sitzung) - `GET /platform/units/:ownerGuildId`: Plattform-Einheiten auflisten (Recht: view, nur Sitzung) - `POST /platform/units/:ownerGuildId`: Plattform-Einheit anlegen (Recht: edit, nur Sitzung) - `GET /platform/units/:ownerGuildId/:unitId`: Plattform-Einheit lesen (Recht: view, nur Sitzung) - `PATCH /platform/units/:ownerGuildId/:unitId`: Plattform-Einheit ändern (Recht: edit, nur Sitzung) - `DELETE /platform/units/:ownerGuildId/:unitId`: Plattform-Einheit versionsgesichert löschen ( { "expectedVersion": n } ); der Verlauf bleibt erhalten (Recht: edit, nur Sitzung) - `POST /platform/units/:ownerGuildId/:unitId/archive`: Plattform-Einheit archivieren (Recht: edit, nur Sitzung) - `GET /platform/units/:ownerGuildId/:unitId/assignments`: Einheitszuweisungen lesen (Recht: view, nur Sitzung) - `POST /platform/units/:ownerGuildId/:unitId/assignments`: Einheit einem Einsatz zuordnen (Recht: edit, nur Sitzung) - `POST /platform/units/:ownerGuildId/:unitId/assignments/:assignmentId/end`: Einheitszuweisung beenden (Recht: edit, nur Sitzung) - `POST /platform/units/:ownerGuildId/:unitId/assignments/:assignmentId/reassign`: Einheitszuweisung ändern (Recht: edit, nur Sitzung) - `POST /platform/units/:ownerGuildId/board-capabilities`: Lesende Berechtigungsprüfung für bis zu 100 Einheiten ( { "unitIds": ["…"] } ); gibt nur sichtbare IDs mit Aktionsfreigaben zurück (Browser-Sitzung, keine API-Schlüssel) (Recht: view, nur Sitzung) - `GET /platform/units/board-catalog`: Beide Quellenkataloge in einer Antwort: unitSources und dispatcherSources , jeweils mit derselben Prüfung wie die Einzelrouten. Eine Quelle, die die Einheitenfreigabe verweigert, kann weiterhin unter dispatcherSources stehen (Browser-Sitzung, keine API-Schlüssel) (Recht: view, nur Sitzung) - `GET /platform/units/board-sources`: Für die Leitstelle freigegebene Partnerquellen auflisten (Browser-Sitzung, keine API-Schlüssel) (Recht: view, nur Sitzung) ## Globale Administration - `GET /global-admin/instances`: Alle Instanzen mit Metadaten (nur Bot-Besitzer, Sitzung) (nur Sitzung) - `DELETE /global-admin/instances/:guildId`: Beliebige Instanz vollständig löschen, Body { "confirm": "" } (nur Bot-Besitzer, Sitzung) (nur Sitzung) - `PUT /global-admin/instances/:guildId/modules`: Beta-Module freischalten / Module verbergen, Body { "moduleGrants": [...], "hiddenModules": [...] } (nur Bot-Besitzer, Sitzung) (nur Sitzung) - `GET /global-admin/modules`: Modul-Schlüssel und globale Beta-Liste (nur Bot-Besitzer, Sitzung) (nur Sitzung) - `PUT /global-admin/modules`: Globale Beta-Liste setzen, Body { "beta": [...] } (nur Bot-Besitzer, Sitzung) (nur Sitzung) ## Dokumentation - `GET /docs`: Diese Dokumentation im Browser (ohne Auth) (öffentlich) - `GET /docs/apidocs.md`: Diese Dokumentation als Markdown (ohne Auth) (öffentlich) - `GET /docs/changelog.rss`: Neue, geänderte und entfernte Endpunkte als RSS-Feed (ohne Auth) (öffentlich) - `GET /docs/llms.txt`: Kompakte Referenz für KI-Assistenten, auch unter https://mdt.npdev.eu/llms.txt (ohne Auth) (öffentlich) - `GET /docs/model.json`: Datenmodell dieser Dokumentation: Endpunkte mit Recht, Capability, Audit-Aktion, Echtzeit-Themen, Modul und Rollout-Flag (ohne Auth) (öffentlich) - `GET /docs/postman.json`: Postman-Sammlung (auch für Bruno und Insomnia) mit den Variablen baseUrl und apiKey (ohne Auth) (öffentlich) - `GET /openapi.json`: OpenAPI-3.1-Beschreibung aller Endpunkte, aus derselben Quelle generiert (ohne Auth) (öffentlich)