Jeder Endpunkt der öffentlichen Kabeen-API, gruppiert nach Ressourcenbereich, mit dem erforderlichen Berechtigungs-Scope und der Form seiner Ein- und Ausgaben.
Alle Pfade sind relativ zu https://{host}/public/v1 (Host standardmäßig app.kabeen.io). Alle Bodies sind JSON. Ids sind UUID-Strings; Datumsangaben sind ISO-8601-Strings. In den Request-Body-Beschreibungen unten müssen mit erforderlich markierte Felder vorhanden sein; jedes andere Feld ist optional. Sofern nicht anders angegeben, nutzen Listen-Endpunkte den standardmäßigen Offset-Paginierungs-Umschlag (?limit=&offset= → { data, pagination }), beschrieben unter Paginierung und Fehler.
API-Schlüssel selbst werden von einem Workspace-Admin innerhalb der Kabeen-Anwendung verwaltet, nicht über die öffentliche API — siehe Authentifizierung.
Introspektion und Workspace
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /me | jeder gültige Schlüssel | Introspektion des vorgelegten Schlüssels: { workspace{id,name}, key{id,name,alias?}, permissions[] }. |
| GET | /workspace | tenant:read | Der Workspace, an den der Schlüssel gebunden ist: { id, name, createdAt, currencyCode, publicLogoUrl?, wsLogoUrl?, supportUrl?, onboarding*, ki*, compliance* }. |
| PATCH | /workspace | tenant:edit | Partielle Aktualisierung — name?, currencyCode?, supportUrl?, Kabeen-Intelligence-Schalter (inkl. kiDefaultProvider), Compliance-Schalter. Das Logo ist ausgenommen (nur Binär-Upload). Liefert den aktualisierten Workspace. |
Anwendungen
Kernressource
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /applications | applications:read | Suchen/Filtern/Sortieren, DB-paginiert. Query: search, categoryId, criticality, hostingType, tag, teamId, sort, direction, limit, offset. Einträge: { id, name, description?, logo, state, criticality?, hostingType, category{id,name}? }. |
| GET | /applications/{id} | applications:read | Ausführliches Detail — siehe unten. |
| POST | /applications | applications:add | Anlegen. Body: name (erforderlich), description, categoryId (uuid), hostingType, accessUrl, iconUrl, organizationIds (uuid[]). Liefert { id, name, description?, criticality?, logo }. |
| PATCH | /applications/{id} | applications:edit | Partielle Aktualisierung — nur vorhandene Felder werden geändert: name, description, accessUrl, iconUrl, state, criticality, hostingType, support{phone,email,url}. Liefert das aktualisierte Detail. |
| PATCH | /applications/{id}/state | applications:edit | Komfort-Alias nur für den Status. Body: state (erforderlich, ACTIVE|ARCHIVED|DISCOVERED|REJECTED). |
| PATCH | /applications/{id}/category | applications:edit | Kategorie zuweisen oder entfernen. Body: { categoryId? } (im Workspace validiert). Liefert das aktualisierte Detail. |
| PATCH | /applications/{id}/vendor | applications:edit | Anbieter zuweisen oder entfernen. Body: { vendorId? }. Liefert das aktualisierte Detail. |
| PATCH | /applications/{id}/authentication | applications:edit | Partiell — type?, primaryFactor?, secondaryFactor?, protocol?. Liefert das aktualisierte Detail. |
| PATCH | /applications/{id}/usage-settings | applications:edit | Partiell — usageActivated?, desktopApplicationNames?. Liefert das aktualisierte Detail. |
| DELETE | /applications/{id} | applications:delete | Löschen, kaskadierend über Flüsse, Dokumente, Werte benutzerdefinierter Felder und das Icon. |
Anwendungsdetail (GET /applications/{id}): { id, name, description?, logo, memo?, state, criticality?, hostingType, accessUrl?, usageActivated, desktopApplicationNames[], support{phone?,email?,url?}, authentication{type?,primaryFactor?,secondaryFactor?,protocol?}, category{id,name}?, vendor{id,name}?, tags[{id,name}], owners[{accountId,email,firstName,lastName,role?}], lifecycle{phaseInDate?,deployedDate?,phaseOutDate?,retiredDate?}?, customFields[], updatedAt }.
Jedes benutzerdefinierte Feld ist { id, name, type, description?, value }, wobei type ∈ text|select|multi_select|date und value je nach Typ polymorph ist: String (text), ISO-Datum/Zeit (date), {id,value} (select), [{id,value}] (multi_select) oder null, wenn nicht gesetzt.
Unterressourcen
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /applications/{id}/usage | applications:read | Nutzungsmetrik: { value?, range }. |
| GET | /applications/{id}/flows | applications:read | Datenflüsse, paginiert. Einträge: { id, comment?, protocol?, format?, exchangeFrequency?, portType?, port?, encrypted?, source{id,name}, target{id,name}, dataCount, documentCount, middlewareCount }. |
| POST | /applications/{id}/flows | applications:edit | Fluss anlegen. Body: { sourceId?, targetId?, dataIds[], comment?, protocol?, format?, exchangeFrequency?, portType?, port?, encrypted?, documentIds[], middlewares[{applicationId, position}] } — die Quelle oder das Ziel muss der Anwendung im Pfad entsprechen (sonst 400). |
| PATCH | /applications/{id}/flows/{flowId} | applications:edit | Partielle Fluss-Aktualisierung — nur übergebene Felder werden überlagert. |
| DELETE | /applications/{id}/flows/{flowId} | applications:delete | Fluss löschen. |
| GET | /applications/{id}/technologies | applications:read | Paginiert. Einträge: { id, name, type?, versionId?, version? } (plus EOL-/LTS-/Obsoleszenz-Informationen). |
| PUT | /applications/{id}/technologies | applications:edit | Technologien setzen. |
| DELETE | /applications/{id}/technologies/{technologyId} | applications:edit | Verknüpfung einer Technologie aufheben. |
| GET | /applications/{id}/contracts | applications:read | Paginiert. Einträge: { id, nature, startDate, endDate?, amountPerMonth, enableProjection }. |
| POST | /applications/{id}/contracts | contracts:add | Vertrag auf der Anwendung anlegen. |
| PATCH | /applications/{id}/contracts/{contractId} | contracts:edit | Vertrag aktualisieren. |
| DELETE | /applications/{id}/contracts/{contractId} | contracts:delete | Vertrag löschen. |
| GET | /applications/{id}/documents | applications:read | URL-basierte Dokumente (kein Binär-Upload). Einträge: { id, documentType, title, description?, published, url, createdAt } mit documentType ∈ data_policy|security_policy|technical_documents. |
| POST | /applications/{id}/documents | applications:edit | Dokument anlegen. |
| PATCH | /applications/{id}/documents/{documentId} | applications:edit | Dokument aktualisieren (url ist unveränderlich). |
| DELETE | /applications/{id}/documents/{documentId} | applications:delete | Dokument löschen. |
| GET | /applications/{id}/owners | applications:read | Verantwortliche auflisten (nacktes Array). |
| POST | /applications/{id}/owners | applications:edit | Verantwortlichen hinzufügen. Body: { accountId }. |
| DELETE | /applications/{id}/owners/{accountId} | applications:edit | Verantwortlichen entfernen. |
| GET | /applications/{id}/tags | applications:read | Tags auflisten (nacktes Array). |
| PUT | /applications/{id}/tags | applications:edit | Tags setzen (vollständiger Satz). Body: { tagIds[] }. |
| GET | /applications/{id}/teams | applications:read | Teams/Organisationen auflisten (nacktes Array). |
| PUT | /applications/{id}/teams | applications:edit | Teams setzen (vollständiger Satz). |
| GET | /applications/{id}/lifecycle | applications:read | Meilenstein-Daten. |
| PUT | /applications/{id}/lifecycle | applications:edit | Meilenstein-Daten setzen (phaseInDate, deployedDate, phaseOutDate, retiredDate). |
| GET | /applications/{id}/comments | applications:read | Kommentare auflisten (ohne Autor, nacktes Array). |
| POST | /applications/{id}/comments | applications:comment | Kommentar hinzufügen. |
| DELETE | /applications/{id}/comments/{commentId} | applications:comment | Kommentar löschen. |
| GET | /applications/{id}/data | data:read | Mit der Anwendung verknüpfte Datenobjekte, mit Zugriffsrollen: { data, roles[] }. |
| PUT | /applications/{id}/custom-fields/{fieldId} | applications:edit | Wert eines benutzerdefinierten Felds setzen. Body: { value } — String für text/date, Options-Id für select, Options-Id-Array für multi_select, null leert das Feld. Typgeprüft. |
| GET | /vendors | applications:read | Workspace- + gemeinsame Anbieter, paginiert: { id, name, url?, description? }. |
Experience-Metriken
Sechs Lese-Familien auf Basis der Nutzungstelemetrie. Graph-/Listen-Endpunkte akzeptieren ?period= (past_1_day | past_1_month | past_1_year, Standard past_1_month = letzte 30 Tage; unbekannte Werte → 400) und liefern 404 für eine Anwendung außerhalb des Workspace. Bewertungen sind kleingeschrieben (good | needs_improvement | poor).
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /applications/{id}/performance/graph | applications:read | Täglicher LCP: { dailyPerformance[{date, lcpP75?, lcpMin?, lcpMax?, lcpAvg?, lcpRating?}] }. |
| GET | /applications/{id}/performance/list | applications:read | LCP pro Team: { teams[{teamId, teamName, teamPath?, teamIcon?, lcpP75?, lcpRating?}] }. |
| GET | /applications/{id}/errors-incidents/graph | applications:read | Tägliche Vorfälle: { dailyIncidents[{date, incidentCount, errors[{errorCode, count}]}] }. |
| GET | /applications/{id}/errors-incidents/list | applications:read | Fehler pro Team, mit Detail pro Pfad: { teams[{…, errorCount, errorDetails[{errorCode, count, paths[{path, count}]}]}] }. |
| GET | /applications/{id}/satisfaction/graph | applications:read | Tägliche Zufriedenheit: { dailySatisfaction[{date, averageSatisfaction?, votersCount}] }. |
| GET | /applications/{id}/satisfaction/list | applications:read | Zufriedenheit pro Team. |
| GET | /applications/{id}/experience/summary | applications:read | Fester 30-Tage-Rollup: { userExperience, errorCount, performanceRating?, hasWebUsers }. |
| GET | /applications/{id}/experience/all-indicators/graph | applications:read | Kombinierter UX-/Fehler-/LCP-Tagesgraph über ?period=. |
| GET | /applications/{id}/experience/all-indicators/list | applications:read | Kombinierte Indikatoren pro Team über ?period=. |
| GET | /applications/{id}/experience/export | applications:read | 30 Tage Fehler- + LCP-Zeilen pro Ereignis; userId/userName sind nur mit users:read und aktiviertem User-Tracking enthalten. |
Funktionale Fähigkeiten
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /applications/{id}/functional-capacities | applications:read | Mit der Anwendung verknüpfte Fähigkeiten (Status kleingeschrieben). |
| PUT | /applications/{id}/functional-capacities | applications:edit | Fähigkeiten der Anwendung setzen (Fähigkeits-Ids werden gegen die Workspace-Taxonomie validiert). |
| DELETE | /applications/{id}/functional-capacities/{functionalCapacityId} | applications:delete | Fähigkeit von der Anwendung entfernen. |
| POST | /applications/{id}/functional-capacities/{functionalCapacityId}/accept | applications:edit | Eine entdeckte Fähigkeit akzeptieren. |
| POST | /applications/{id}/functional-capacities/{functionalCapacityId}/reject | applications:edit | Eine entdeckte Fähigkeit ablehnen. |
| GET | /functional-capacities | applications:read | Die Fähigkeits-Taxonomie des Workspace. |
| POST | /functional-capacities | applications:add | Fähigkeit anlegen. |
| PATCH | /functional-capacities/{id} | applications:edit | Blatt-Fähigkeit umbenennen. Body: { name }. |
| DELETE | /functional-capacities/{id} | applications:delete | Blatt-Fähigkeit entfernen. |
| GET | /functional-capacities/diagram | capacity_map_diagram:read | Fähigkeits-Karten-Baum (Gruppe → Fähigkeiten → Anwendungen). |
| POST | /functional-capacities/groups | applications:add | Fähigkeits-Gruppe anlegen. Body: { name, icon } (beide erforderlich). |
| PATCH | /functional-capacities/groups/{groupId} | applications:edit | Partielle Aktualisierung: { name?, icon? }. |
| DELETE | /functional-capacities/groups/{groupId} | applications:delete | Fähigkeits-Gruppe löschen. |
Definitionen benutzerdefinierter Felder
Definitionen benutzerdefinierter Felder sind das Schema auf Workspace-Ebene (zu unterscheiden vom Wert eines Felds auf einer Ressource, der mit den ressourcenspezifischen PUT .../custom-fields/{fieldId}-Endpunkten gesetzt wird). Pro Zielressource existiert ein CRUD-Satz für Definitionen — Anwendungen, Server, Daten, Router:
| Methode | Pfad | Scope |
|---|
| GET | /applications/custom-fields · /servers/custom-fields · /data/custom-fields · /routers/custom-fields | tenant:read (paginiert) |
| POST | dieselben Pfade | tenant:edit |
| PATCH | dieselben Pfade + /{id} | tenant:edit |
| DELETE | dieselben Pfade + /{id} | tenant:edit |
Create-Body: name (erforderlich) · type (erforderlich, text|select|multi_select|date) · description · icon · options ([{value, position}], erforderlich für select/multi_select). Antwort: { id, name, type, description?, options[{id,value}] }. Ein PATCH/DELETE betrifft nur Definitionen des Zieltyps des Pfads (sonst 404).
Katalog und entdeckte Anwendungen
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /application-catalog | applications:read | Den globalen Referenzkatalog durchsuchen. Query: page (1-basiert), search, categoryId, lang. Antwort: { data[{id,name,vendor,description?,logo,categoryId?,type?}], total, page } — Seitennummern-Paginierung, feste Seitengröße. |
| GET | /application-catalog/{id} | applications:read | Ein Katalogeintrag (globale Referenzdaten; 404 bei unbekannter Id). |
| GET | /discovered-applications | applications:read | Von der Auto-Discovery gemeldete Anwendungen, paginiert: { id, name, icon, state, description?, urls[], desktopExeNames[], usage?, deltaUsage?, lastUpdate, organizations[] }. |
Datenobjekte
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /data | data:read | Paginierte Liste. |
| GET | /data/{id} | data:read | Ein Datenobjekt. |
| POST | /data | data:add | Anlegen. |
| PATCH | /data/{id} | data:edit | Aktualisieren (vollständiges Ersetzen des Upsert-Bodys). |
| DELETE | /data/{id} | data:delete | Löschen. |
| PUT | /data/{id}/applications | data:edit | Anwendungen verknüpfen/entkoppeln. Body: { added?: uuid[], removed?: uuid[] }. |
| GET | /data/{id}/applications | data:read | Verknüpfte Anwendungen mit Zugriffsrollen: { applicationId, applicationName, roles[] }. |
| PUT | /data/{id}/applications/{applicationId}/roles | data:edit | Zugriffsrollen für eine Anwendung↔Daten-Verknüpfung setzen. Body: { roles[] }. Liefert 204. |
| GET | /data/{id}/responsibles | data:read | Datenverantwortliche: { accountId, email, firstName?, lastName? }. |
| PUT | /data/{id}/custom-fields/{fieldId} | data:edit | Wert eines benutzerdefinierten Felds setzen ({ value }). |
Upsert-Body (POST und PATCH — vollständiges Ersetzen): name (erforderlich) · types (string[]) · privacy · criticality · description · categoryId · categoryName (Id + Name zusammen, um eine Kategorie zu setzen).
Antwort: { id, name, types[], privacy?, criticality?, description?, updatedAt?, category{id,name}?, customFields[] }.
Server
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /servers | infrastructure:read | Suchen/Filtern/Sortieren, DB-paginiert. Query: search, type, location, criticality, os, tag, applicationId, sort, direction, limit, offset. Einträge: { id, name, automatic, os, system, type?, location?, criticality?, dataCollectionStatus?, lastCheckTime? }. |
| GET | /servers/{id} | infrastructure:read | Ausführliches Detail — siehe unten. |
| POST | /servers | infrastructure:add | Manuellen Server anlegen. Body: name, os, ipAddress (alle erforderlich) · manufacturer · type · location · description. |
| PATCH | /servers/{id} | infrastructure:edit | Partielle Aktualisierung — alle Felder optional: name/os/manufacturer (nur manuelle Server) · type/location/description (alle Server). Auf einem agentengemeldeten Server (automatic: true) wird das Schreiben von name, os oder manufacturer mit 422 abgelehnt statt stillschweigend verworfen. |
| DELETE | /servers/{id} | infrastructure:delete | Löschen. |
| GET | /servers/{id}/owners | infrastructure:read | Verantwortliche auflisten (nacktes Array). |
| POST | /servers/{id}/owners | infrastructure:edit | Verantwortlichen hinzufügen. Body: { accountId }. |
| DELETE | /servers/{id}/owners/{accountId} | infrastructure:edit | Verantwortlichen entfernen. |
| GET | /servers/{id}/tags | infrastructure:read | Tags auflisten (nacktes Array). |
| PUT | /servers/{id}/tags | infrastructure:edit | Tags setzen (vollständiger Satz). Body: { tagIds[] }. |
| GET | /servers/{id}/applications | infrastructure:read | Verknüpfte Anwendungen. |
| POST | /servers/{id}/applications | infrastructure:edit | Anwendung verknüpfen. Body: { applicationId } (im Workspace geprüft). |
| DELETE | /servers/{id}/applications/{applicationId} | infrastructure:edit | Verknüpfung einer Anwendung aufheben. |
| GET | /servers/{id}/interfaces | infrastructure:read | Netzwerkschnittstellen: { ipAddress, primary, network? }. |
| PUT | /servers/{id}/interfaces/{ipAddress} | infrastructure:edit | Schnittstelle hinzufügen/aktualisieren; liefert die neu aufgelisteten Schnittstellen. |
| DELETE | /servers/{id}/interfaces/{ipAddress} | infrastructure:delete | Schnittstelle entfernen. |
| GET | /servers/{id}/network-flows | infrastructure:read | Netzwerkfluss-Graph: { center, sources[], targets[] } mit connections[] pro Endpunkt. |
| GET | /servers/{id}/agent | infrastructure:read | Agent-Informationen des Servers (404, wenn keiner vorhanden). |
| GET | /servers/{id}/schema | infrastructure:read | Die Topologie-Nachbarschaft des Servers. |
| GET | /servers/{id}/metrics | infrastructure:read | Metrik-Verlauf + Durchschnittswerte. Query: period, system. |
| PUT | /servers/{id}/custom-fields/{fieldId} | infrastructure:edit | Wert eines benutzerdefinierten Felds setzen ({ value }). |
Serverdetail: { id, name, automatic, system, os, description?, criticality?, model?, serialNumber?, manufacturer?, type?, location?, dataCollectionStatus?, lastCheckTime?, uptime?, domain?, fqdn?, cpu{model?,count?,coreCount?}, memorySize?, disks[], metrics{cpu?,load?,memory?,storage?,storageTotal?}, owners[], tags[], linkedApplications[], interfaces[], customFields[] }.
Netzwerke
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /networks | infrastructure:read | Paginiert. Query: search, limit, offset. Einträge: { id, name, role, ipAddress, subnet, description?, vlanId? }. |
| GET | /networks/{id} | infrastructure:read | Detail: Netzwerkfelder + verbundene routers[]{ id, name, type, interfaceAddress? }. |
| POST | /networks | infrastructure:add | Anlegen. Body: name, role, ipAddress, subnet (alle erforderlich) · description · vlanId. role ∈ local|wireless|storage|vpn|data_center|edge|public|management|dmz|iot|intercommunication; subnet ist CIDR-Notation (z. B. /24). |
| PATCH | /networks/{id} | infrastructure:edit | Partielle Aktualisierung — alle Felder optional. |
| DELETE | /networks/{id} | infrastructure:delete | Löschen. |
| GET | /networks/{id}/routers | infrastructure:read | Verbundene Router (nacktes Array). |
| PUT | /networks/{id}/routers | infrastructure:edit | Verbundene Router setzen (vollständiger Satz). Body: { routerIds[] } — Ids außerhalb des Workspace werden stillschweigend ignoriert. |
| GET | /networks/{id}/overview | infrastructure:read | IP-Pool-/Firewall-/Server-Statistiken. |
| GET | /networks/{id}/schema | infrastructure:read | Die Topologie-Nachbarschaft des Netzwerks. |
| GET | /infrastructure/schema | network_mapping_diagram:read | Globaler Topologie-Baum Router ↔ Netzwerk ↔ Server. |
Router
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /routers | infrastructure:read | Suchen/Filtern/Sortieren, DB-paginiert. Query: search, type, location, criticality, sort, direction, limit, offset. Einträge: { id, name, type, ipAddress?, location?, internetConnection?, criticality? }. |
| GET | /routers/{id} | infrastructure:read | Detail: Routerfelder + criticality?, tags[]{id,name}, verbundene networks[]{ id, name, role, interfaceAddress? }, customFields[]. |
| POST | /routers | infrastructure:add | Anlegen. Body: name, type (beide erforderlich, type ∈ router|firewall|switch|access_point) · ipAddress · location · description · internetConnection. |
| PATCH | /routers/{id} | infrastructure:edit | Partielle Aktualisierung — alle Felder optional. |
| DELETE | /routers/{id} | infrastructure:delete | Löschen. |
| GET | /routers/{id}/networks | infrastructure:read | Verbundene Netzwerke (nacktes Array). |
| PUT | /routers/{id}/networks | infrastructure:edit | Verbundene Netzwerke setzen (vollständiger Satz). Body: { networkIds[] } — fremde Ids werden ignoriert. |
| GET | /routers/{id}/tags | infrastructure:read | Tags (nacktes Array). |
| PUT | /routers/{id}/tags | infrastructure:edit | Tags setzen (vollständiger Satz). Body: { tagIds[] } — gefiltert auf den Workspace-Katalog. |
| PUT | /routers/{id}/custom-fields/{fieldId} | infrastructure:edit | Wert eines benutzerdefinierten Felds setzen ({ value }). |
Arbeitsplatzrechner, Software und Agenten
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /workstations | infrastructure:read | Paginiert; wiederholbarer ?teamId=-Filter. Einträge umfassen Hostname, Health, Nutzerinformationen, Laptop-Flag, Hardware, OS, genutzte CPU/RAM/Speicher, Uptime, Collect-Status und Compliance-Flags. |
| GET | /workstations/{id} | infrastructure:read | Ein Arbeitsplatzrechner. |
| GET | /workstations/{id}/installed-programs | infrastructure:read | Installierte Programme. Query: search, limit, offset. |
| GET | /workstations/{id}/users | infrastructure:read | Auf dem Arbeitsplatzrechner gesehene Nutzer. |
| GET | /software | infrastructure:read | Software-Inventar des Workspace, nach Programm gruppiert. Query: search, limit, offset. |
| GET | /software/{name}/resources | infrastructure:read | Installationen eines Programms über Arbeitsplatzrechner/Server hinweg. Query: version, type. |
| GET | /agents/deployment-status | agents:read | { deploymentStatistics[], availableVersions[], deployedVersions[], activeAgents[] }. |
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /categories | categories:read | Paginiert. Einträge: { id, name, appCount? }. |
| POST | /categories | categories:add | Anlegen. Body: { name } (erforderlich). |
| PATCH | /categories/{id} | categories:edit | Umbenennen. Body: { name }. |
| DELETE | /categories/{id} | categories:delete | Löschen. |
| GET | /tags | tags:read | Paginiert. Einträge: { id, name, countOfUse }. |
| POST | /tags | tags:add | Anlegen. Body: { name } (erforderlich). |
| DELETE | /tags/{id} | tags:delete | Löschen. |
Organisation und Teams
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /organization | organisation:read | Der vollständige Organisationsbaum: { organization, children[] }. |
| GET | /teams | organisation:read | Paginiert. Einträge: { id, name, type, description?, icon?, parentOrganizationId?, createdAt, updatedAt }. |
| GET | /teams/{id} | organisation:read | Ein Team. |
| POST | /teams | organisation:add | Anlegen. Body: name, parentOrganizationId (beide erforderlich) · icon. |
| PATCH | /teams/{id} | organisation:edit | Aktualisieren: name?, description?, icon? (nur Geschäftseinheits-Teams). |
| DELETE | /teams/{id} | organisation:delete | Löschen. |
| GET | /teams/{id}/owners | organisation:read | Team-Verantwortliche: { accountId, email, firstName?, lastName? }. |
Personen — erfasste Nutzer und Mitglieder
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /users | users:read | Erfasste Endnutzer, paginiert: { userId, userRealName?, userAccount?, hostname, lastSeen, team?, teamPath?, userExperience }. |
| GET | /users/{id} | users:read | Detail: { userId, userRealName?, userAccount?, hostname, lastSeen, workstationId, health, osName, osVersion }. |
| GET | /users/{id}/experience/summary | users:read | Experience-Rollup für einen erfassten Nutzer. |
| GET | /users/{id}/experience/all-indicators/graph · /list | users:read | Kombinierte Indikatoren über ?period=. |
| GET | /users/{id}/experience/errors-incidents/graph · /list | users:read | Fehler/Vorfälle über ?period=. |
| GET | /users/{id}/experience/performances/graph · /list | users:read | Performance über ?period=. |
| GET | /users/{id}/experience/export | users:read | Export pro Ereignis; die Spalten applicationId/applicationName erfordern zusätzlich applications:read. |
| GET | /members | members:read | Workspace-Mitglieder, paginiert: { accountId, email, firstName, lastName, role?, pending, createdAt }. |
| GET | /members/{id} | members:read | Ein Mitglied. |
| PATCH | /members/{id} | members:edit | Rolle des Mitglieds setzen. Body: { role: uuid } (im Workspace validiert). |
| DELETE | /members/{id} | members:delete | Mitglied aus dem Workspace entfernen. |
Erfasste Nutzer stammen aus der Nutzungstelemetrie — sie sind schreibgeschützt (kein Anlegen/Aktualisieren/Löschen). Das Einladen von Mitgliedern ist über die öffentliche API nicht verfügbar.
Ankündigungen
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /announcements | announces:read | Paginiert. |
| POST | /announcements | announces:add | Anlegen. |
| PATCH | /announcements/{id} | announces:edit | Aktualisieren. |
| DELETE | /announcements/{id} | announces:delete | Löschen. |
Create-/Update-Body: title, content, type, startDate (ISO) — alle erforderlich · teams (uuid[]) · app (uuid) · endDate (ISO).
Antwort: { id, title, content, type, teams[]?, app?, startDate, endDate?, createdAt, updatedAt, seenCount, likeCount, dislikeCount, likeRatio? }.
Verträge
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /contracts | contracts:read | Alle Verträge des Workspace, paginiert: { id, applicationId, applicationName, nature, startDate, endDate?, paymentFrom, paymentTo?, amountPerMonth, enableProjection, organizationIds[], documentIds[], createdAt, updatedAt }. |
| GET | /contracts/expiring | finance_dashboard:read | Bald ablaufende Verträge. Query: limit, teamId. Einträge: { applicationId, applicationName, applicationLogo, type, expiryDate, daysUntilExpiry }. |
| GET | /contracts/cost | finance_dashboard:read | Gesamtkosten der Verträge des Workspace. Query: range. Antwort: { value?, queryType }. |
Vertrags-Schreibvorgänge sind anwendungsbezogen — siehe POST/PATCH/DELETE unter /applications/{id}/contracts oben.
Audit-Log
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /audit-log | audit_log:read | Workspace-Audit-Ereignisse, neueste zuerst, cursor-paginiert: { data[], total, nextCursor?, hasMore }. Query: from/to (ISO-Zeitpunkte), actorId, category, actions (wiederholbar), resourceType, resourceId, query (Freitext), limit (max. 200), cursor. |
| GET | /audit-log/{id} | audit_log:read | Ein Audit-Ereignis (404, falls unbekannt). |
| GET | /audit-log/actors | audit_log:read | Facette der verschiedenen Akteure: { id, displayName }. |
Ein Audit-Ereignis sieht aus wie { id, timestamp, intent, action, category, actor{type,id,displayName}, resourceType, resourceId, resourceName, correlationId, message? }. Öffentliche API-Aufrufe erscheinen mit dem API-Schlüssel als service-Akteur.
Dashboards, Insights und Diagramme
Jedes Dashboard liefert ein eigenes aggregiertes Statistikobjekt; die meisten akzeptieren einen range- oder period-Query-Parameter.
| Methode | Pfad | Scope | Beschreibung |
|---|
| GET | /dashboards/finance | finance_dashboard:read | Finanzüberblick. |
| GET | /dashboards/usage | usage_dashboard:read | Nutzungsüberblick. |
| GET | /dashboards/operations | operations_dashboard:read | Betriebsüberblick. |
| GET | /dashboards/architecture | architecture_dashboard:read | Architekturüberblick. |
| GET | /dashboards/technology | technology_dashboard:read | Technologie-/Obsoleszenzüberblick. |
| GET | /dashboards/workstations | workstations_dashboard:read | Überblick über die Arbeitsplatzrechner-Flotte. |
| GET | /dashboards/health | operations_dashboard:read | Täglicher Health-Graph. Query: period. |
| GET | /dashboards/performance | operations_dashboard:read | LCP-Performance-Verteilung. Query: period. |
| GET | /dashboards/overlap | architecture_dashboard:read | Anwendungs-Überschneidungsstatistik. Query: costRange. |
| GET | /dashboards/documentation | architecture_dashboard:read | Statistik zur Dokumentationsvollständigkeit. |
| GET | /insights/application-health | applications:read | Health-Insights pro Anwendung, paginiert. |
| GET | /insights/most-impacted-apps | operations_dashboard:read | Anwendungen nach Fehlerauswirkung sortiert. Query: period, limit. |
| GET | /insights/worst-performance-apps | operations_dashboard:read | Anwendungen nach schlechtestem LCP sortiert. Query: period, limit. |
| GET | /diagrams/flows | flow_mapping_diagram:read | Anwendungsfluss-Diagramm. Query: wiederholbares teamId. |
| GET | /diagrams/matrices | application_matrix_diagram:read | Anwendungsmatrix-Diagramm. Query: wiederholbares teamId. |
| GET | /diagrams/quadrants | application_quadrant_diagram:read | Anwendungsquadranten-Diagramm. Query: wiederholbares teamId. |
| GET | /diagrams/life-cycles | application_lifecycle_diagram:read | Anwendungs-Lebenszyklus-Diagramm. Query: wiederholbares teamId. |
Diagramm-Endpunkte liefern dieselben Knotenformen, die auch die Architekturdiagramme im Produkt verwenden.
In dieser Version nicht verfügbar
- Webhooks / Event-Push — die API ist ausschließlich Polling-basiert. Die empfohlenen Polling-Muster stehen unter Paginierung und Fehler.
- Rate-Limiting — der Status
429 ist vom Fehlervertrag reserviert, aber es wird noch kein Rate-Limiting pro Schlüssel durchgesetzt.
- Einladen von Mitgliedern und Schreibvorgänge auf erfassten Nutzern.
- Binär-Uploads — Anwendungsdokumente sind URL-basiert; Workspace-/Anwendungslogos können nicht über die API hochgeladen werden.