Endpoint reference

Every Kabeen Public API endpoint with its required scope, inputs, and outputs

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

MethodPathScopeDescription
GET/meany valid keyIntrospect the presented key: { workspace{id,name}, key{id,name,alias?}, permissions[] }.
GET/workspacetenant:readThe workspace the key is bound to: { id, name, createdAt, currencyCode, publicLogoUrl?, wsLogoUrl?, supportUrl?, onboarding*, ki*, compliance* }.
PATCH/workspacetenant:editPartial update — name?, currencyCode?, supportUrl?, Kabeen Intelligence toggles (incl. kiDefaultProvider), compliance toggles. Logo is excluded (binary upload only). Returns the updated workspace.

Applications

Core resource

MethodPathScopeDescription
GET/applicationsapplications:readSearch/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:readRich detail — see below.
POST/applicationsapplications:addCreate. Body: name (required), description, categoryId (uuid), hostingType, accessUrl, iconUrl, organizationIds (uuid[]). Returns { id, name, description?, criticality?, logo }.
PATCH/applications/{id}applications:editPartial update — only fields present are changed: name, description, accessUrl, iconUrl, state, criticality, hostingType, support{phone,email,url}. Returns the updated detail.
PATCH/applications/{id}/stateapplications:editState-only convenience alias. Body: state (required, ACTIVE|ARCHIVED|DISCOVERED|REJECTED).
PATCH/applications/{id}/categoryapplications:editAssign or clear the category. Body: { categoryId? } (validated in workspace). Returns the updated detail.
PATCH/applications/{id}/vendorapplications:editAssign or clear the vendor. Body: { vendorId? }. Returns the updated detail.
PATCH/applications/{id}/authenticationapplications:editPartial — type?, primaryFactor?, secondaryFactor?, protocol?. Returns the updated detail.
PATCH/applications/{id}/usage-settingsapplications:editPartial — usageActivated?, desktopApplicationNames?. Returns the updated detail.
DELETE/applications/{id}applications:deleteDelete, 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 typetext|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

MethodPathScopeDescription
GET/applications/{id}/usageapplications:readUsage metric: { value?, range }.
GET/applications/{id}/flowsapplications:readData flows, paginated. Items: { id, comment?, protocol?, format?, exchangeFrequency?, portType?, port?, encrypted?, source{id,name}, target{id,name}, dataCount, documentCount, middlewareCount }.
POST/applications/{id}/flowsapplications:editCreate 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:editPartial flow update — only supplied fields are overlaid.
DELETE/applications/{id}/flows/{flowId}applications:deleteDelete a flow.
GET/applications/{id}/technologiesapplications:readPaginated. Items: { id, name, type?, versionId?, version? } (plus EOL/LTS/obsolescence info).
PUT/applications/{id}/technologiesapplications:editSet the technologies.
DELETE/applications/{id}/technologies/{technologyId}applications:editUnlink a technology.
GET/applications/{id}/contractsapplications:readPaginated. Items: { id, nature, startDate, endDate?, amountPerMonth, enableProjection }.
POST/applications/{id}/contractscontracts:addCreate a contract on the application.
PATCH/applications/{id}/contracts/{contractId}contracts:editUpdate a contract.
DELETE/applications/{id}/contracts/{contractId}contracts:deleteDelete a contract.
GET/applications/{id}/documentsapplications:readURL-backed documents (no binary upload). Items: { id, documentType, title, description?, published, url, createdAt } with documentTypedata_policy|security_policy|technical_documents.
POST/applications/{id}/documentsapplications:editCreate a document.
PATCH/applications/{id}/documents/{documentId}applications:editUpdate a document (url is immutable).
DELETE/applications/{id}/documents/{documentId}applications:deleteDelete a document.
GET/applications/{id}/ownersapplications:readList owners (bare array).
POST/applications/{id}/ownersapplications:editAdd an owner. Body: { accountId }.
DELETE/applications/{id}/owners/{accountId}applications:editRemove an owner.
GET/applications/{id}/tagsapplications:readList tags (bare array).
PUT/applications/{id}/tagsapplications:editSet tags (full set). Body: { tagIds[] }.
GET/applications/{id}/teamsapplications:readList teams/organizations (bare array).
PUT/applications/{id}/teamsapplications:editSet teams (full set).
GET/applications/{id}/lifecycleapplications:readMilestone dates.
PUT/applications/{id}/lifecycleapplications:editSet milestone dates (phaseInDate, deployedDate, phaseOutDate, retiredDate).
GET/applications/{id}/commentsapplications:readList comments (authorless, bare array).
POST/applications/{id}/commentsapplications:commentAdd a comment.
DELETE/applications/{id}/comments/{commentId}applications:commentDelete a comment.
GET/applications/{id}/datadata:readData objects linked to the application, with access roles: { data, roles[] }.
PUT/applications/{id}/custom-fields/{fieldId}applications:editSet 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/vendorsapplications:readWorkspace + 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).

MethodPathScopeDescription
GET/applications/{id}/performance/graphapplications:readDaily LCP: { dailyPerformance[{date, lcpP75?, lcpMin?, lcpMax?, lcpAvg?, lcpRating?}] }.
GET/applications/{id}/performance/listapplications:readLCP per team: { teams[{teamId, teamName, teamPath?, teamIcon?, lcpP75?, lcpRating?}] }.
GET/applications/{id}/errors-incidents/graphapplications:readDaily incidents: { dailyIncidents[{date, incidentCount, errors[{errorCode, count}]}] }.
GET/applications/{id}/errors-incidents/listapplications:readErrors per team, with per-path detail: { teams[{…, errorCount, errorDetails[{errorCode, count, paths[{path, count}]}]}] }.
GET/applications/{id}/satisfaction/graphapplications:readDaily satisfaction: { dailySatisfaction[{date, averageSatisfaction?, votersCount}] }.
GET/applications/{id}/satisfaction/listapplications:readSatisfaction per team.
GET/applications/{id}/experience/summaryapplications:readFixed 30-day rollup: { userExperience, errorCount, performanceRating?, hasWebUsers }.
GET/applications/{id}/experience/all-indicators/graphapplications:readCombined UX/errors/LCP daily graph over ?period=.
GET/applications/{id}/experience/all-indicators/listapplications:readCombined indicators per team over ?period=.
GET/applications/{id}/experience/exportapplications:read30-day per-event errors + LCP rows; userId/userName are included only with users:read and user tracking enabled.

Functional capacities

MethodPathScopeDescription
GET/applications/{id}/functional-capacitiesapplications:readCapacities linked to the application (status lowercase).
PUT/applications/{id}/functional-capacitiesapplications:editSet the application's capacities (capacity ids validated against the workspace taxonomy).
DELETE/applications/{id}/functional-capacities/{functionalCapacityId}applications:deleteRemove a capacity from the application.
POST/applications/{id}/functional-capacities/{functionalCapacityId}/acceptapplications:editAccept a discovered capacity.
POST/applications/{id}/functional-capacities/{functionalCapacityId}/rejectapplications:editReject a discovered capacity.
GET/functional-capacitiesapplications:readThe workspace capacity taxonomy.
POST/functional-capacitiesapplications:addCreate a capacity.
PATCH/functional-capacities/{id}applications:editRename a leaf capacity. Body: { name }.
DELETE/functional-capacities/{id}applications:deleteRemove a leaf capacity.
GET/functional-capacities/diagramcapacity_map_diagram:readCapacity-map tree (group → capabilities → applications).
POST/functional-capacities/groupsapplications:addCreate a capacity group. Body: { name, icon } (both required).
PATCH/functional-capacities/groups/{groupId}applications:editPartial update: { name?, icon? }.
DELETE/functional-capacities/groups/{groupId}applications:deleteDelete 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:

MethodPathScope
GET/applications/custom-fields · /servers/custom-fields · /data/custom-fields · /routers/custom-fieldstenant:read (paginated)
POSTsame pathstenant:edit
PATCHsame paths + /{id}tenant:edit
DELETEsame 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

MethodPathScopeDescription
GET/application-catalogapplications:readSearch 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:readOne catalog entry (global reference data; 404 on unknown id).
GET/discovered-applicationsapplications:readApplications surfaced by auto-discovery, paginated: { id, name, icon, state, description?, urls[], desktopExeNames[], usage?, deltaUsage?, lastUpdate, organizations[] }.

Data objects

MethodPathScopeDescription
GET/datadata:readPaginated list.
GET/data/{id}data:readOne data object.
POST/datadata:addCreate.
PATCH/data/{id}data:editUpdate (full replace of the upsert body).
DELETE/data/{id}data:deleteDelete.
PUT/data/{id}/applicationsdata:editLink/unlink applications. Body: { added?: uuid[], removed?: uuid[] }.
GET/data/{id}/applicationsdata:readLinked applications with access roles: { applicationId, applicationName, roles[] }.
PUT/data/{id}/applications/{applicationId}/rolesdata:editSet the access roles for one application↔data link. Body: { roles[] }. Returns 204.
GET/data/{id}/responsiblesdata:readData responsibles: { accountId, email, firstName?, lastName? }.
PUT/data/{id}/custom-fields/{fieldId}data:editSet 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

MethodPathScopeDescription
GET/serversinfrastructure:readSearch/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:readRich detail — see below.
POST/serversinfrastructure:addCreate a manual server. Body: name, os, ipAddress (all required) · manufacturer · type · location · description.
PATCH/servers/{id}infrastructure:editPartial 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:deleteDelete.
GET/servers/{id}/ownersinfrastructure:readList owners (bare array).
POST/servers/{id}/ownersinfrastructure:editAdd an owner. Body: { accountId }.
DELETE/servers/{id}/owners/{accountId}infrastructure:editRemove an owner.
GET/servers/{id}/tagsinfrastructure:readList tags (bare array).
PUT/servers/{id}/tagsinfrastructure:editSet tags (full set). Body: { tagIds[] }.
GET/servers/{id}/applicationsinfrastructure:readLinked applications.
POST/servers/{id}/applicationsinfrastructure:editLink an application. Body: { applicationId } (verified in workspace).
DELETE/servers/{id}/applications/{applicationId}infrastructure:editUnlink an application.
GET/servers/{id}/interfacesinfrastructure:readNetwork interfaces: { ipAddress, primary, network? }.
PUT/servers/{id}/interfaces/{ipAddress}infrastructure:editAdd/update an interface; returns the re-listed interfaces.
DELETE/servers/{id}/interfaces/{ipAddress}infrastructure:deleteRemove an interface.
GET/servers/{id}/network-flowsinfrastructure:readNetwork-flow graph: { center, sources[], targets[] } with per-endpoint connections[].
GET/servers/{id}/agentinfrastructure:readThe server's agent info (404 if none).
GET/servers/{id}/schemainfrastructure:readThe server's topology neighbourhood.
GET/servers/{id}/metricsinfrastructure:readMetric history + averages. Query: period, system.
PUT/servers/{id}/custom-fields/{fieldId}infrastructure:editSet 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

MethodPathScopeDescription
GET/networksinfrastructure:readPaginated. Query: search, limit, offset. Items: { id, name, role, ipAddress, subnet, description?, vlanId? }.
GET/networks/{id}infrastructure:readDetail: network fields + connected routers[]{ id, name, type, interfaceAddress? }.
POST/networksinfrastructure:addCreate. Body: name, role, ipAddress, subnet (all required) · description · vlanId. rolelocal|wireless|storage|vpn|data_center|edge|public|management|dmz|iot|intercommunication; subnet is CIDR notation (e.g. /24).
PATCH/networks/{id}infrastructure:editPartial update — all fields optional.
DELETE/networks/{id}infrastructure:deleteDelete.
GET/networks/{id}/routersinfrastructure:readConnected routers (bare array).
PUT/networks/{id}/routersinfrastructure:editSet connected routers (full set). Body: { routerIds[] } — ids outside the workspace are silently ignored.
GET/networks/{id}/overviewinfrastructure:readIP-pool / firewall / server statistics.
GET/networks/{id}/schemainfrastructure:readThe network's topology neighbourhood.
GET/infrastructure/schemanetwork_mapping_diagram:readGlobal router ↔ network ↔ server topology tree.

Routers

MethodPathScopeDescription
GET/routersinfrastructure:readSearch/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:readDetail: router fields + criticality?, tags[]{id,name}, connected networks[]{ id, name, role, interfaceAddress? }, customFields[].
POST/routersinfrastructure:addCreate. Body: name, type (both required, typerouter|firewall|switch|access_point) · ipAddress · location · description · internetConnection.
PATCH/routers/{id}infrastructure:editPartial update — all fields optional.
DELETE/routers/{id}infrastructure:deleteDelete.
GET/routers/{id}/networksinfrastructure:readConnected networks (bare array).
PUT/routers/{id}/networksinfrastructure:editSet connected networks (full set). Body: { networkIds[] } — foreign ids ignored.
GET/routers/{id}/tagsinfrastructure:readTags (bare array).
PUT/routers/{id}/tagsinfrastructure:editSet tags (full set). Body: { tagIds[] } — filtered to the workspace catalog.
PUT/routers/{id}/custom-fields/{fieldId}infrastructure:editSet a custom-field value ({ value }).

Workstations, software and agents

MethodPathScopeDescription
GET/workstationsinfrastructure:readPaginated; 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:readOne workstation.
GET/workstations/{id}/installed-programsinfrastructure:readInstalled programs. Query: search, limit, offset.
GET/workstations/{id}/usersinfrastructure:readUsers seen on the workstation.
GET/softwareinfrastructure:readWorkspace software inventory, grouped by program. Query: search, limit, offset.
GET/software/{name}/resourcesinfrastructure:readInstalls of one program across workstations/servers. Query: version, type.
GET/agents/deployment-statusagents:read{ deploymentStatistics[], availableVersions[], deployedVersions[], activeAgents[] }.

Taxonomy — categories and tags

MethodPathScopeDescription
GET/categoriescategories:readPaginated. Items: { id, name, appCount? }.
POST/categoriescategories:addCreate. Body: { name } (required).
PATCH/categories/{id}categories:editRename. Body: { name }.
DELETE/categories/{id}categories:deleteDelete.
GET/tagstags:readPaginated. Items: { id, name, countOfUse }.
POST/tagstags:addCreate. Body: { name } (required).
DELETE/tags/{id}tags:deleteDelete.

Organization and teams

MethodPathScopeDescription
GET/organizationorganisation:readThe full organization tree: { organization, children[] }.
GET/teamsorganisation:readPaginated. Items: { id, name, type, description?, icon?, parentOrganizationId?, createdAt, updatedAt }.
GET/teams/{id}organisation:readOne team.
POST/teamsorganisation:addCreate. Body: name, parentOrganizationId (both required) · icon.
PATCH/teams/{id}organisation:editUpdate: name?, description?, icon? (business-unit teams only).
DELETE/teams/{id}organisation:deleteDelete.
GET/teams/{id}/ownersorganisation:readTeam owners: { accountId, email, firstName?, lastName? }.

People — tracked users and members

MethodPathScopeDescription
GET/usersusers:readTracked end-users, paginated: { userId, userRealName?, userAccount?, hostname, lastSeen, team?, teamPath?, userExperience }.
GET/users/{id}users:readDetail: { userId, userRealName?, userAccount?, hostname, lastSeen, workstationId, health, osName, osVersion }.
GET/users/{id}/experience/summaryusers:readExperience rollup for one tracked user.
GET/users/{id}/experience/all-indicators/graph · /listusers:readCombined indicators over ?period=.
GET/users/{id}/experience/errors-incidents/graph · /listusers:readErrors/incidents over ?period=.
GET/users/{id}/experience/performances/graph · /listusers:readPerformance over ?period=.
GET/users/{id}/experience/exportusers:readPer-event export; the applicationId/applicationName columns additionally require applications:read.
GET/membersmembers:readWorkspace members, paginated: { accountId, email, firstName, lastName, role?, pending, createdAt }.
GET/members/{id}members:readOne member.
PATCH/members/{id}members:editSet the member's role. Body: { role: uuid } (validated in workspace).
DELETE/members/{id}members:deleteRemove 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

MethodPathScopeDescription
GET/announcementsannounces:readPaginated.
POST/announcementsannounces:addCreate.
PATCH/announcements/{id}announces:editUpdate.
DELETE/announcements/{id}announces:deleteDelete.

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

MethodPathScopeDescription
GET/contractscontracts:readAll contracts across the workspace, paginated: { id, applicationId, applicationName, nature, startDate, endDate?, paymentFrom, paymentTo?, amountPerMonth, enableProjection, organizationIds[], documentIds[], createdAt, updatedAt }.
GET/contracts/expiringfinance_dashboard:readSoon-expiring contracts. Query: limit, teamId. Items: { applicationId, applicationName, applicationLogo, type, expiryDate, daysUntilExpiry }.
GET/contracts/costfinance_dashboard:readWorkspace contract total cost. Query: range. Response: { value?, queryType }.

Contract writes are application-scoped — see POST/PATCH/DELETE under /applications/{id}/contracts above.

Audit log

MethodPathScopeDescription
GET/audit-logaudit_log:readWorkspace 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:readOne audit event (404 if unknown).
GET/audit-log/actorsaudit_log:readDistinct 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.

MethodPathScopeDescription
GET/dashboards/financefinance_dashboard:readFinancial overview.
GET/dashboards/usageusage_dashboard:readUsage overview.
GET/dashboards/operationsoperations_dashboard:readOperations overview.
GET/dashboards/architecturearchitecture_dashboard:readArchitecture overview.
GET/dashboards/technologytechnology_dashboard:readTechnology / obsolescence overview.
GET/dashboards/workstationsworkstations_dashboard:readWorkstation fleet overview.
GET/dashboards/healthoperations_dashboard:readDaily health graph. Query: period.
GET/dashboards/performanceoperations_dashboard:readLCP performance repartition. Query: period.
GET/dashboards/overlaparchitecture_dashboard:readApplication-overlap statistic. Query: costRange.
GET/dashboards/documentationarchitecture_dashboard:readDocumentation-completion statistic.
GET/insights/application-healthapplications:readPer-application health insights, paginated.
GET/insights/most-impacted-appsoperations_dashboard:readApplications ranked by error impact. Query: period, limit.
GET/insights/worst-performance-appsoperations_dashboard:readApplications ranked by worst LCP. Query: period, limit.
GET/diagrams/flowsflow_mapping_diagram:readApplication-flow diagram. Query: repeatable teamId.
GET/diagrams/matricesapplication_matrix_diagram:readApplication-matrix diagram. Query: repeatable teamId.
GET/diagrams/quadrantsapplication_quadrant_diagram:readApplication-quadrant diagram. Query: repeatable teamId.
GET/diagrams/life-cyclesapplication_lifecycle_diagram:readApplication 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.