Every endpoint of the Kabeen Public API, grouped by resource area, with the permission scope it requires and the shape of its inputs and outputs.
All paths are relative to https://{host}/public/v1 (host defaults to app.kabeen.io). All bodies are JSON. Ids are UUID strings; dates are ISO-8601 strings. In the request-body descriptions below, fields marked required must be present; every other field is optional. Unless stated otherwise, list endpoints use the standard offset pagination envelope (?limit=&offset= → { data, pagination }) described in Pagination and errors.
API keys themselves are managed by a workspace admin from inside the Kabeen application, not through the public API — see Authentication.
Introspection and workspace
| Method | Path | Scope | Description |
|---|
| GET | /me | any valid key | Introspect the presented key: { workspace{id,name}, key{id,name,alias?}, permissions[] }. |
| GET | /workspace | tenant:read | The workspace the key is bound to: { id, name, createdAt, currencyCode, publicLogoUrl?, wsLogoUrl?, supportUrl?, onboarding*, ki*, compliance* }. |
| PATCH | /workspace | tenant:edit | Partial update — name?, currencyCode?, supportUrl?, Kabeen Intelligence toggles (incl. kiDefaultProvider), compliance toggles. Logo is excluded (binary upload only). Returns the updated workspace. |
Applications
Core resource
| Method | Path | Scope | Description |
|---|
| GET | /applications | applications:read | Search/filter/sort, DB-paginated. Query: search, categoryId, criticality, hostingType, tag, teamId, sort, direction, limit, offset. Items: { id, name, description?, logo, state, criticality?, hostingType, category{id,name}? }. |
| GET | /applications/{id} | applications:read | Rich detail — see below. |
| POST | /applications | applications:add | Create. Body: name (required), description, categoryId (uuid), hostingType, accessUrl, iconUrl, organizationIds (uuid[]). Returns { id, name, description?, criticality?, logo }. |
| PATCH | /applications/{id} | applications:edit | Partial update — only fields present are changed: name, description, accessUrl, iconUrl, state, criticality, hostingType, support{phone,email,url}. Returns the updated detail. |
| PATCH | /applications/{id}/state | applications:edit | State-only convenience alias. Body: state (required, ACTIVE|ARCHIVED|DISCOVERED|REJECTED). |
| PATCH | /applications/{id}/category | applications:edit | Assign or clear the category. Body: { categoryId? } (validated in workspace). Returns the updated detail. |
| PATCH | /applications/{id}/vendor | applications:edit | Assign or clear the vendor. Body: { vendorId? }. Returns the updated detail. |
| PATCH | /applications/{id}/authentication | applications:edit | Partial — type?, primaryFactor?, secondaryFactor?, protocol?. Returns the updated detail. |
| PATCH | /applications/{id}/usage-settings | applications:edit | Partial — usageActivated?, desktopApplicationNames?. Returns the updated detail. |
| DELETE | /applications/{id} | applications:delete | Delete, cascading over flows, documents, custom-field values, and the icon. |
Application detail (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 }.
Each custom field is { id, name, type, description?, value } where type ∈ text|select|multi_select|date and value is polymorphic by type: string (text), ISO date-time (date), {id,value} (select), [{id,value}] (multi_select), or null when unset.
Sub-resources
| Method | Path | Scope | Description |
|---|
| GET | /applications/{id}/usage | applications:read | Usage metric: { value?, range }. |
| GET | /applications/{id}/flows | applications:read | Data flows, paginated. Items: { id, comment?, protocol?, format?, exchangeFrequency?, portType?, port?, encrypted?, source{id,name}, target{id,name}, dataCount, documentCount, middlewareCount }. |
| POST | /applications/{id}/flows | applications:edit | Create a flow. Body: { sourceId?, targetId?, dataIds[], comment?, protocol?, format?, exchangeFrequency?, portType?, port?, encrypted?, documentIds[], middlewares[{applicationId, position}] } — the source or the target must equal the application in the path (400 otherwise). |
| PATCH | /applications/{id}/flows/{flowId} | applications:edit | Partial flow update — only supplied fields are overlaid. |
| DELETE | /applications/{id}/flows/{flowId} | applications:delete | Delete a flow. |
| GET | /applications/{id}/technologies | applications:read | Paginated. Items: { id, name, type?, versionId?, version? } (plus EOL/LTS/obsolescence info). |
| PUT | /applications/{id}/technologies | applications:edit | Set the technologies. |
| DELETE | /applications/{id}/technologies/{technologyId} | applications:edit | Unlink a technology. |
| GET | /applications/{id}/contracts | applications:read | Paginated. Items: { id, nature, startDate, endDate?, amountPerMonth, enableProjection }. |
| POST | /applications/{id}/contracts | contracts:add | Create a contract on the application. |
| PATCH | /applications/{id}/contracts/{contractId} | contracts:edit | Update a contract. |
| DELETE | /applications/{id}/contracts/{contractId} | contracts:delete | Delete a contract. |
| GET | /applications/{id}/documents | applications:read | URL-backed documents (no binary upload). Items: { id, documentType, title, description?, published, url, createdAt } with documentType ∈ data_policy|security_policy|technical_documents. |
| POST | /applications/{id}/documents | applications:edit | Create a document. |
| PATCH | /applications/{id}/documents/{documentId} | applications:edit | Update a document (url is immutable). |
| DELETE | /applications/{id}/documents/{documentId} | applications:delete | Delete a document. |
| GET | /applications/{id}/owners | applications:read | List owners (bare array). |
| POST | /applications/{id}/owners | applications:edit | Add an owner. Body: { accountId }. |
| DELETE | /applications/{id}/owners/{accountId} | applications:edit | Remove an owner. |
| GET | /applications/{id}/tags | applications:read | List tags (bare array). |
| PUT | /applications/{id}/tags | applications:edit | Set tags (full set). Body: { tagIds[] }. |
| GET | /applications/{id}/teams | applications:read | List teams/organizations (bare array). |
| PUT | /applications/{id}/teams | applications:edit | Set teams (full set). |
| GET | /applications/{id}/lifecycle | applications:read | Milestone dates. |
| PUT | /applications/{id}/lifecycle | applications:edit | Set milestone dates (phaseInDate, deployedDate, phaseOutDate, retiredDate). |
| GET | /applications/{id}/comments | applications:read | List comments (authorless, bare array). |
| POST | /applications/{id}/comments | applications:comment | Add a comment. |
| DELETE | /applications/{id}/comments/{commentId} | applications:comment | Delete a comment. |
| GET | /applications/{id}/data | data:read | Data objects linked to the application, with access roles: { data, roles[] }. |
| PUT | /applications/{id}/custom-fields/{fieldId} | applications:edit | Set a custom-field value. Body: { value } — string for text/date, option id for select, option-id array for multi_select, null clears. Type-checked. |
| GET | /vendors | applications:read | Workspace + shared vendors, paginated: { id, name, url?, description? }. |
Experience metrics
Six read families backed by usage telemetry. Graph/list endpoints take ?period= (past_1_day | past_1_month | past_1_year, default past_1_month = last 30 days; unknown values → 400) and return 404 on an application outside the workspace. Ratings are lowercase (good | needs_improvement | poor).
| Method | Path | Scope | Description |
|---|
| GET | /applications/{id}/performance/graph | applications:read | Daily LCP: { dailyPerformance[{date, lcpP75?, lcpMin?, lcpMax?, lcpAvg?, lcpRating?}] }. |
| GET | /applications/{id}/performance/list | applications:read | LCP per team: { teams[{teamId, teamName, teamPath?, teamIcon?, lcpP75?, lcpRating?}] }. |
| GET | /applications/{id}/errors-incidents/graph | applications:read | Daily incidents: { dailyIncidents[{date, incidentCount, errors[{errorCode, count}]}] }. |
| GET | /applications/{id}/errors-incidents/list | applications:read | Errors per team, with per-path detail: { teams[{…, errorCount, errorDetails[{errorCode, count, paths[{path, count}]}]}] }. |
| GET | /applications/{id}/satisfaction/graph | applications:read | Daily satisfaction: { dailySatisfaction[{date, averageSatisfaction?, votersCount}] }. |
| GET | /applications/{id}/satisfaction/list | applications:read | Satisfaction per team. |
| GET | /applications/{id}/experience/summary | applications:read | Fixed 30-day rollup: { userExperience, errorCount, performanceRating?, hasWebUsers }. |
| GET | /applications/{id}/experience/all-indicators/graph | applications:read | Combined UX/errors/LCP daily graph over ?period=. |
| GET | /applications/{id}/experience/all-indicators/list | applications:read | Combined indicators per team over ?period=. |
| GET | /applications/{id}/experience/export | applications:read | 30-day per-event errors + LCP rows; userId/userName are included only with users:read and user tracking enabled. |
Functional capacities
| Method | Path | Scope | Description |
|---|
| GET | /applications/{id}/functional-capacities | applications:read | Capacities linked to the application (status lowercase). |
| PUT | /applications/{id}/functional-capacities | applications:edit | Set the application's capacities (capacity ids validated against the workspace taxonomy). |
| DELETE | /applications/{id}/functional-capacities/{functionalCapacityId} | applications:delete | Remove a capacity from the application. |
| POST | /applications/{id}/functional-capacities/{functionalCapacityId}/accept | applications:edit | Accept a discovered capacity. |
| POST | /applications/{id}/functional-capacities/{functionalCapacityId}/reject | applications:edit | Reject a discovered capacity. |
| GET | /functional-capacities | applications:read | The workspace capacity taxonomy. |
| POST | /functional-capacities | applications:add | Create a capacity. |
| PATCH | /functional-capacities/{id} | applications:edit | Rename a leaf capacity. Body: { name }. |
| DELETE | /functional-capacities/{id} | applications:delete | Remove a leaf capacity. |
| GET | /functional-capacities/diagram | capacity_map_diagram:read | Capacity-map tree (group → capabilities → applications). |
| POST | /functional-capacities/groups | applications:add | Create a capacity group. Body: { name, icon } (both required). |
| PATCH | /functional-capacities/groups/{groupId} | applications:edit | Partial update: { name?, icon? }. |
| DELETE | /functional-capacities/groups/{groupId} | applications:delete | Delete a capacity group. |
Custom-field definitions
Custom-field definitions are the workspace-level schema (distinct from a field's value on one resource, set with the per-resource PUT .../custom-fields/{fieldId} endpoints). One definition CRUD set exists per resource target — applications, servers, data, routers:
| Method | Path | Scope |
|---|
| GET | /applications/custom-fields · /servers/custom-fields · /data/custom-fields · /routers/custom-fields | tenant:read (paginated) |
| POST | same paths | tenant:edit |
| PATCH | same paths + /{id} | tenant:edit |
| DELETE | same paths + /{id} | tenant:edit |
Create body: name (required) · type (required, text|select|multi_select|date) · description · icon · options ([{value, position}], required for select/multi_select). Response: { id, name, type, description?, options[{id,value}] }. A PATCH/DELETE only affects definitions of the path's target type (404 otherwise).
Catalog and discovered applications
| Method | Path | Scope | Description |
|---|
| GET | /application-catalog | applications:read | Search the global reference catalog. Query: page (1-based), search, categoryId, lang. Response: { data[{id,name,vendor,description?,logo,categoryId?,type?}], total, page } — page-number pagination, fixed page size. |
| GET | /application-catalog/{id} | applications:read | One catalog entry (global reference data; 404 on unknown id). |
| GET | /discovered-applications | applications:read | Applications surfaced by auto-discovery, paginated: { id, name, icon, state, description?, urls[], desktopExeNames[], usage?, deltaUsage?, lastUpdate, organizations[] }. |
Data objects
| Method | Path | Scope | Description |
|---|
| GET | /data | data:read | Paginated list. |
| GET | /data/{id} | data:read | One data object. |
| POST | /data | data:add | Create. |
| PATCH | /data/{id} | data:edit | Update (full replace of the upsert body). |
| DELETE | /data/{id} | data:delete | Delete. |
| PUT | /data/{id}/applications | data:edit | Link/unlink applications. Body: { added?: uuid[], removed?: uuid[] }. |
| GET | /data/{id}/applications | data:read | Linked applications with access roles: { applicationId, applicationName, roles[] }. |
| PUT | /data/{id}/applications/{applicationId}/roles | data:edit | Set the access roles for one application↔data link. Body: { roles[] }. Returns 204. |
| GET | /data/{id}/responsibles | data:read | Data responsibles: { accountId, email, firstName?, lastName? }. |
| PUT | /data/{id}/custom-fields/{fieldId} | data:edit | Set a custom-field value ({ value }). |
Upsert body (POST and PATCH — full replace): name (required) · types (string[]) · privacy · criticality · description · categoryId · categoryName (id + name together to set a category).
Response: { id, name, types[], privacy?, criticality?, description?, updatedAt?, category{id,name}?, customFields[] }.
Servers
| Method | Path | Scope | Description |
|---|
| GET | /servers | infrastructure:read | Search/filter/sort, DB-paginated. Query: search, type, location, criticality, os, tag, applicationId, sort, direction, limit, offset. Items: { id, name, automatic, os, system, type?, location?, criticality?, dataCollectionStatus?, lastCheckTime? }. |
| GET | /servers/{id} | infrastructure:read | Rich detail — see below. |
| POST | /servers | infrastructure:add | Create a manual server. Body: name, os, ipAddress (all required) · manufacturer · type · location · description. |
| PATCH | /servers/{id} | infrastructure:edit | Partial update — all fields optional: name/os/manufacturer (manual servers only) · type/location/description (all servers). On an agent-reported server (automatic: true), writing name, os, or manufacturer is rejected with 422 rather than silently dropped. |
| DELETE | /servers/{id} | infrastructure:delete | Delete. |
| GET | /servers/{id}/owners | infrastructure:read | List owners (bare array). |
| POST | /servers/{id}/owners | infrastructure:edit | Add an owner. Body: { accountId }. |
| DELETE | /servers/{id}/owners/{accountId} | infrastructure:edit | Remove an owner. |
| GET | /servers/{id}/tags | infrastructure:read | List tags (bare array). |
| PUT | /servers/{id}/tags | infrastructure:edit | Set tags (full set). Body: { tagIds[] }. |
| GET | /servers/{id}/applications | infrastructure:read | Linked applications. |
| POST | /servers/{id}/applications | infrastructure:edit | Link an application. Body: { applicationId } (verified in workspace). |
| DELETE | /servers/{id}/applications/{applicationId} | infrastructure:edit | Unlink an application. |
| GET | /servers/{id}/interfaces | infrastructure:read | Network interfaces: { ipAddress, primary, network? }. |
| PUT | /servers/{id}/interfaces/{ipAddress} | infrastructure:edit | Add/update an interface; returns the re-listed interfaces. |
| DELETE | /servers/{id}/interfaces/{ipAddress} | infrastructure:delete | Remove an interface. |
| GET | /servers/{id}/network-flows | infrastructure:read | Network-flow graph: { center, sources[], targets[] } with per-endpoint connections[]. |
| GET | /servers/{id}/agent | infrastructure:read | The server's agent info (404 if none). |
| GET | /servers/{id}/schema | infrastructure:read | The server's topology neighbourhood. |
| GET | /servers/{id}/metrics | infrastructure:read | Metric history + averages. Query: period, system. |
| PUT | /servers/{id}/custom-fields/{fieldId} | infrastructure:edit | Set a custom-field value ({ value }). |
Server detail: { 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[] }.
Networks
| Method | Path | Scope | Description |
|---|
| GET | /networks | infrastructure:read | Paginated. Query: search, limit, offset. Items: { id, name, role, ipAddress, subnet, description?, vlanId? }. |
| GET | /networks/{id} | infrastructure:read | Detail: network fields + connected routers[]{ id, name, type, interfaceAddress? }. |
| POST | /networks | infrastructure:add | Create. Body: name, role, ipAddress, subnet (all required) · description · vlanId. role ∈ local|wireless|storage|vpn|data_center|edge|public|management|dmz|iot|intercommunication; subnet is CIDR notation (e.g. /24). |
| PATCH | /networks/{id} | infrastructure:edit | Partial update — all fields optional. |
| DELETE | /networks/{id} | infrastructure:delete | Delete. |
| GET | /networks/{id}/routers | infrastructure:read | Connected routers (bare array). |
| PUT | /networks/{id}/routers | infrastructure:edit | Set connected routers (full set). Body: { routerIds[] } — ids outside the workspace are silently ignored. |
| GET | /networks/{id}/overview | infrastructure:read | IP-pool / firewall / server statistics. |
| GET | /networks/{id}/schema | infrastructure:read | The network's topology neighbourhood. |
| GET | /infrastructure/schema | network_mapping_diagram:read | Global router ↔ network ↔ server topology tree. |
Routers
| Method | Path | Scope | Description |
|---|
| GET | /routers | infrastructure:read | Search/filter/sort, DB-paginated. Query: search, type, location, criticality, sort, direction, limit, offset. Items: { id, name, type, ipAddress?, location?, internetConnection?, criticality? }. |
| GET | /routers/{id} | infrastructure:read | Detail: router fields + criticality?, tags[]{id,name}, connected networks[]{ id, name, role, interfaceAddress? }, customFields[]. |
| POST | /routers | infrastructure:add | Create. Body: name, type (both required, type ∈ router|firewall|switch|access_point) · ipAddress · location · description · internetConnection. |
| PATCH | /routers/{id} | infrastructure:edit | Partial update — all fields optional. |
| DELETE | /routers/{id} | infrastructure:delete | Delete. |
| GET | /routers/{id}/networks | infrastructure:read | Connected networks (bare array). |
| PUT | /routers/{id}/networks | infrastructure:edit | Set connected networks (full set). Body: { networkIds[] } — foreign ids ignored. |
| GET | /routers/{id}/tags | infrastructure:read | Tags (bare array). |
| PUT | /routers/{id}/tags | infrastructure:edit | Set tags (full set). Body: { tagIds[] } — filtered to the workspace catalog. |
| PUT | /routers/{id}/custom-fields/{fieldId} | infrastructure:edit | Set a custom-field value ({ value }). |
Workstations, software and agents
| Method | Path | Scope | Description |
|---|
| GET | /workstations | infrastructure:read | Paginated; repeatable ?teamId= filter. Items include hostname, health, user info, laptop flag, hardware, OS, CPU/RAM/storage used, uptime, collect status, and compliance flags. |
| GET | /workstations/{id} | infrastructure:read | One workstation. |
| GET | /workstations/{id}/installed-programs | infrastructure:read | Installed programs. Query: search, limit, offset. |
| GET | /workstations/{id}/users | infrastructure:read | Users seen on the workstation. |
| GET | /software | infrastructure:read | Workspace software inventory, grouped by program. Query: search, limit, offset. |
| GET | /software/{name}/resources | infrastructure:read | Installs of one program across workstations/servers. Query: version, type. |
| GET | /agents/deployment-status | agents:read | { deploymentStatistics[], availableVersions[], deployedVersions[], activeAgents[] }. |
| Method | Path | Scope | Description |
|---|
| GET | /categories | categories:read | Paginated. Items: { id, name, appCount? }. |
| POST | /categories | categories:add | Create. Body: { name } (required). |
| PATCH | /categories/{id} | categories:edit | Rename. Body: { name }. |
| DELETE | /categories/{id} | categories:delete | Delete. |
| GET | /tags | tags:read | Paginated. Items: { id, name, countOfUse }. |
| POST | /tags | tags:add | Create. Body: { name } (required). |
| DELETE | /tags/{id} | tags:delete | Delete. |
Organization and teams
| Method | Path | Scope | Description |
|---|
| GET | /organization | organisation:read | The full organization tree: { organization, children[] }. |
| GET | /teams | organisation:read | Paginated. Items: { id, name, type, description?, icon?, parentOrganizationId?, createdAt, updatedAt }. |
| GET | /teams/{id} | organisation:read | One team. |
| POST | /teams | organisation:add | Create. Body: name, parentOrganizationId (both required) · icon. |
| PATCH | /teams/{id} | organisation:edit | Update: name?, description?, icon? (business-unit teams only). |
| DELETE | /teams/{id} | organisation:delete | Delete. |
| GET | /teams/{id}/owners | organisation:read | Team owners: { accountId, email, firstName?, lastName? }. |
People — tracked users and members
| Method | Path | Scope | Description |
|---|
| GET | /users | users:read | Tracked end-users, paginated: { 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 for one tracked user. |
| GET | /users/{id}/experience/all-indicators/graph · /list | users:read | Combined indicators over ?period=. |
| GET | /users/{id}/experience/errors-incidents/graph · /list | users:read | Errors/incidents over ?period=. |
| GET | /users/{id}/experience/performances/graph · /list | users:read | Performance over ?period=. |
| GET | /users/{id}/experience/export | users:read | Per-event export; the applicationId/applicationName columns additionally require applications:read. |
| GET | /members | members:read | Workspace members, paginated: { accountId, email, firstName, lastName, role?, pending, createdAt }. |
| GET | /members/{id} | members:read | One member. |
| PATCH | /members/{id} | members:edit | Set the member's role. Body: { role: uuid } (validated in workspace). |
| DELETE | /members/{id} | members:delete | Remove the member from the workspace. |
Tracked users are derived from usage telemetry — they are read-only (no create/update/delete). Member invitation is not available through the public API.
Announcements
| Method | Path | Scope | Description |
|---|
| GET | /announcements | announces:read | Paginated. |
| POST | /announcements | announces:add | Create. |
| PATCH | /announcements/{id} | announces:edit | Update. |
| DELETE | /announcements/{id} | announces:delete | Delete. |
Create/update body: title, content, type, startDate (ISO) — all required · teams (uuid[]) · app (uuid) · endDate (ISO).
Response: { id, title, content, type, teams[]?, app?, startDate, endDate?, createdAt, updatedAt, seenCount, likeCount, dislikeCount, likeRatio? }.
Contracts
| Method | Path | Scope | Description |
|---|
| GET | /contracts | contracts:read | All contracts across the workspace, paginated: { id, applicationId, applicationName, nature, startDate, endDate?, paymentFrom, paymentTo?, amountPerMonth, enableProjection, organizationIds[], documentIds[], createdAt, updatedAt }. |
| GET | /contracts/expiring | finance_dashboard:read | Soon-expiring contracts. Query: limit, teamId. Items: { applicationId, applicationName, applicationLogo, type, expiryDate, daysUntilExpiry }. |
| GET | /contracts/cost | finance_dashboard:read | Workspace contract total cost. Query: range. Response: { value?, queryType }. |
Contract writes are application-scoped — see POST/PATCH/DELETE under /applications/{id}/contracts above.
Audit log
| Method | Path | Scope | Description |
|---|
| GET | /audit-log | audit_log:read | Workspace audit events, newest first, cursor-paginated: { data[], total, nextCursor?, hasMore }. Query: from/to (ISO instants), actorId, category, actions (repeatable), resourceType, resourceId, query (free text), limit (max 200), cursor. |
| GET | /audit-log/{id} | audit_log:read | One audit event (404 if unknown). |
| GET | /audit-log/actors | audit_log:read | Distinct actors facet: { id, displayName }. |
An audit event looks like { id, timestamp, intent, action, category, actor{type,id,displayName}, resourceType, resourceId, resourceName, correlationId, message? }. Public API calls appear with the API key as a service actor.
Dashboards, insights and diagrams
Each dashboard returns a dedicated aggregated statistics object; most accept a range or period query parameter.
| Method | Path | Scope | Description |
|---|
| GET | /dashboards/finance | finance_dashboard:read | Financial overview. |
| GET | /dashboards/usage | usage_dashboard:read | Usage overview. |
| GET | /dashboards/operations | operations_dashboard:read | Operations overview. |
| GET | /dashboards/architecture | architecture_dashboard:read | Architecture overview. |
| GET | /dashboards/technology | technology_dashboard:read | Technology / obsolescence overview. |
| GET | /dashboards/workstations | workstations_dashboard:read | Workstation fleet overview. |
| GET | /dashboards/health | operations_dashboard:read | Daily health graph. Query: period. |
| GET | /dashboards/performance | operations_dashboard:read | LCP performance repartition. Query: period. |
| GET | /dashboards/overlap | architecture_dashboard:read | Application-overlap statistic. Query: costRange. |
| GET | /dashboards/documentation | architecture_dashboard:read | Documentation-completion statistic. |
| GET | /insights/application-health | applications:read | Per-application health insights, paginated. |
| GET | /insights/most-impacted-apps | operations_dashboard:read | Applications ranked by error impact. Query: period, limit. |
| GET | /insights/worst-performance-apps | operations_dashboard:read | Applications ranked by worst LCP. Query: period, limit. |
| GET | /diagrams/flows | flow_mapping_diagram:read | Application-flow diagram. Query: repeatable teamId. |
| GET | /diagrams/matrices | application_matrix_diagram:read | Application-matrix diagram. Query: repeatable teamId. |
| GET | /diagrams/quadrants | application_quadrant_diagram:read | Application-quadrant diagram. Query: repeatable teamId. |
| GET | /diagrams/life-cycles | application_lifecycle_diagram:read | Application life-cycle diagram. Query: repeatable teamId. |
Diagram endpoints return the same node shapes the in-product architecture diagrams use.
Not available in this release
- Webhooks / event push — the API is polling-only. See Pagination and errors for the recommended polling patterns.
- Rate limiting — the
429 status is reserved by the error contract but no per-key rate limiting is enforced yet.
- Member invitation and tracked-user writes.
- Binary uploads — application documents are URL-backed; workspace/application logos cannot be uploaded through the API.