MDT-API
Alle Statistiken dieser Instanz sind über eine schlanke HTTP-API abrufbar – ideal für Dashboards, Tabellen, Automationen und eigene Auswertungen. Diagramme werden serverseitig als PNG gerendert und lassen sich direkt einbetten.
Basis-URL: https://mdt.npdev.eu/api/v1
Bot zum eigenen Server hinzufügen: https://mdt.npdev.eu/invite
Authentifizierung
Externe Integrationen senden einen instanz-spezifischen API-Schlüssel als Bearer-Token:
Authorization: Bearer stmp_dein-schluessel
Einen Schlüssel erstellst du im Discord mit /apikey create – er wird nur einmal angezeigt. Weitere Schlüssel verwaltest du mit /apikey list und /apikey delete. Jeder Schlüssel ist an genau einen Server (Guild) gebunden; die API liefert ausschließlich Daten dieses Servers.
Die Web-Oberfläche verwendet stattdessen eine Discord-Session und den x-guild-id-Header. API-Key und Session sind alternative Authentifizierungswege; ein Browser muss keinen Schlüssel speichern. Ohne Authentifizierung erreichbar sind GET /api/v1/health, GET /docs, GET /api/v1/docs, /invite sowie die öffentlichen Branding-Endpunkte GET /api/v1/branding/:guildId und GET /api/v1/branding/:guildId/icon.png.
Wenn eine Guild rolePermissionsEnabled aktiviert, enthält GET /access neben dem Kompatibilitäts-Level auch capabilities, roleSystem und suspended. REST-Routen und Realtime-Themen werden dann mit den jeweils passenden Capability-Schlüsseln geprüft. API-Schlüssel behalten Vollzugriff auf ihre eigene Guild; die Rang- und Suspendierungsprüfung gilt für Browser-Sessions.
GET /access beantwortet außerdem drei Sichtbarkeitsfragen bereits verrechnet, weil die rohen Schalter dahinter Admin-Routen sind: versicherungVisible sagt, ob diese Person den Versicherungen-Bereich sieht, citizensRolloutEnabled, ob das Bürgerregister überhaupt eine Serverantwort hat — die Routen unter /platform/citizens hängen am Rollout-Flag canonicalCitizensEnabled und antworten sonst mit 404 —, und sharedDispatchRolloutEnabled dasselbe für sharedIncidentsUnitsEnabled, hinter dem /platform/units/board-catalog liegt. Ein Client, der diese Felder ignoriert, zeigt Reiter, die nur eine Fehlermeldung ausgeben können, und fragt Routen ab, die nur 404 kennen.
Fehlt der Header oder ist der Schlüssel ungültig, antwortet die API mit 401 und einem JSON-Body { "error": "..." }.
Mehrere Instanzen und Kooperationen
Jede Guild ist eine eigene, vollständig getrennte Instanz. Der Onboarding-Assistent unterstützt die Vorlagen rettungsdienst, polizei, feuerwehr und neutral. Terminologie, Branding, Badge-Format und die dreizehn Module werden pro Guild gespeichert.
Die Seed-Route schreibt Beispieldaten nur in Bereiche, die unmittelbar vor dem Schreiben noch leer sind. Bereits vorhandene Guild-Daten werden nicht ersetzt. Das aktuelle Rollen- und Suspendierungsmodell ist zusätzlich in