CBOM Documentation

CBOM Secure

  • Product Overview
    • Overview
    • Dashboard Interface
    • Dashboard Operations
    • Data Visualization
    • Overview
    • Host
    • Template
      • Networked Deployments
      • Cloud Deployments
      • Off-Grid Deployments
    • Discovery History
      • Tags
      • Tag Scope
      • Integrations
      • Cloud Servers
      • CycloneDX Export
    • Sensors Reference
    • Overview
    • Summary Report
    • PQC Report
    • AI Services
    • Source Code Visualizer
    • Key
    • Certificate
    • CipherSuites
    • Analysis
    • Policy Management
    • User Policy
    • Standard Policy
    • Overview
    • Cases
    • Criteria
    • Notification Format
    • Rules
      • Connections
      • Health
    • User Management
    • Roles & Permissions
    • Audit Trail
    • System Logs
    • Top Bar and User Menu
    • System Configuration
  • Login and Authentication
    • Introduction
      • Components
      • Data Flows
      • Execution Models
      • Incremental Scanning
      • Security Model
      • Topologies
      • Sizing Guide
      • HA and Scaling
      • Ports and Firewall
      • Prerequisites
      • Docker Compose
      • Native on Linux
      • Deployment Server
      • Install Troubleshooting
      • Validation Checklist
      • Managing Services
      • Logging
      • Certificates
      • Configuration
      • Backup and Recovery
      • Ops Troubleshooting
      • Methods
      • SAML 2.0 SSO
      • OIDC and Entra ID
      • Token Authentication
      • Password Policy
      • Sensor vs Connector
      • Sensor Guide Structure
      • Capability Matrix
      • GitHub Sensor
        • AWS
        • Azure
        • Google Cloud
        • Active Directory
        • LDAP Directories
        • AD CS
        • Thales Luna HSM
        • Entrust nShield HSM
        • HashiCorp Vault KMIP
        • Windows Cert Store
        • Linux Trust Store
        • MSSQL TDE
      • Roadmap
      • Integration Model
      • CrowdStrike
      • ServiceNow
      • ServiceNow and Jira Setup
      • Notification Engine
  • Administrative Guide
    • Glossary
    • Configuration Reference
    • Data Model Reference
    • API Reference
    • API Authentication
    • CycloneDX Export Specification
    • Risk and PQC Scoring
    • Built-in Standards
    • Widget Catalogue
    • AI Services Data Handling

API Reference

Everything CBOM Secure exposes over HTTP. For how to obtain and present a credential, see API Authentication.

Base path and interactive reference

PropertyValue
Base path/cbomsrv/api/v1/
TransportHTTPS only
Content typeapplication/json
Interactive reference/docs on the backend service

The running service publishes an OpenAPI description and renders it at /docs. That reference is generated from the code, so it is authoritative for request and response schemas; this page is the map of the namespaces and what each is for.

Ingestion is not part of this API. Discovery agents submit results to the collector service on its own address with a host certificate token, not with a user session. That interface is described in the Token Authentication page.

Response envelope

Every endpoint returns the same envelope.

{
  "status": 0,
  "message": "OK",
  "data": {}
}
FieldMeaning
status0 on success; any non-zero value is an error
messageOK, or a human-readable error description
dataPresent when the endpoint returns content

Check status, not just the HTTP code. A request can return HTTP 200 with a non-zero status when the operation was understood and refused. Treat the pair together: the HTTP code describes the request, status describes the operation.

HTTP status codes

CodeMeaning
200Request processed. Check status in the body.
400Malformed request, or a required parameter is missing.
401No session, or the session has expired. The body carries expired: true when a valid credential has timed out, so a client can distinguish "sign in" from "renew".
403Authenticated, but the session's roles do not hold the permission the endpoint requires.
404No such resource.
409Conflict — typically a uniqueness violation such as a duplicate policy or tag name.
422The request body failed schema validation. The response names the offending fields.
500Unhandled server error. The response carries no internal detail; consult the service log.

Conventions

AspectConvention
IdentifiersPath parameters, e.g. /policy/{policyId}.
Lists in query stringsComma-separated; any value matches.
TimestampsISO 8601, UTC, on both input and output.
PaginationPage and size parameters on list endpoints, with a server-enforced maximum size. No endpoint returns an unbounded result set.
Credential fieldsMasked on every read. Writing the mask back does not overwrite the stored secret.
Trailing slashesSignificant on some routes. Use the spelling given in the interactive reference.

Namespaces

Discovery — hosts
MethodPathPurpose
GET/hosts/List hosts
POST/hosts/Register a host
PUT/hosts/{hostId}/Edit a host
DELETE/hosts/{hostId}/Delete a host and detach it from its tasks
DELETE/hosts/Bulk delete
GET/hosts/summary/Host counts and status rollup
GET/hosts/offgrid/List off-grid hosts
POST/hosts/offgrid/Register an off-grid host
POST/hosts/import-csv/Start a CSV import
GET/hosts/import-csv/status/{jobId}/Import progress
GET/hosts/import-csv/queue/Pending imports
POST/hosts/import-csv/cancel/{jobId}/Cancel an import
Discovery — templates
MethodPathPurpose
GET/template/List task templates
POST/template/define/Define a template
PUT/template/define/Update a template
POST/template/clone/Clone a template
POST/template/activate/Activate templates
POST/template/inactivate/Deactivate templates
DELETE/template/Delete templates
GET/template/schemas/Sensor configuration schemas
GET/template/schemas/list/Available sensor schemas

A clone of a finalised template lands in draft. The lifecycle gate is deliberate: without it an unreviewed copy would be immediately assignable to hosts.

Discovery — tasks and deployment
MethodPathPurpose
GET/tasks/List tasks
GET/tasks/statusTask status rollup
POST/tasks/assign-hosts/Bind hosts to a task
PUT/tasks/assign-hosts/Update a task's host list
DELETE/tasks/assign-hosts/Remove a task
POST/deployment/Run a task against its hosts
GET/deployment/history/Past runs for a task
GET/deployment/cloud-servers/Cloud discovery targets
POST/deployment/cloud-servers/Create a cloud target
PUT/deployment/cloud-servers/{hostId}/Update a cloud target
DELETE/deployment/cloud-servers/{hostId}/Delete a cloud target
POST/deployment/cloud-servers/{hostId}/finalize/Finalise a draft target
GET / POST / PUT / DELETE/deployment/cloud-servers/draft/…Draft cloud targets
GET/deployment/offgrid/Off-grid deployments
POST/deployment/offgrid/bundle/Generate an off-grid bundle
PATCH/deployment/offgrid/status/Update off-grid deployment status

POST /deployment/ reports what the run actually delivered: requested, inserted, updated and skipped counts per host, alongside any errors. The skipped count is the only record of a document that failed validation, so read it rather than assuming a 200 means everything landed.

Discovery — off-grid import
MethodPathPurpose
POST/offgrid/importImport a result bundle produced on a disconnected network
GET/offgrid/import/status/{taskId}Import progress
Discovery — integrations
MethodPathPurpose
GET/integrations/List integrations
POST/integrations/Add an integration
PUT/integrations/{integrationId}Update an integration
DELETE/integrations/{integrationId}Remove an integration
GET/integrations/{name}/activeThe active integration for a provider
POST/crowdstrike/syncTrigger a host synchronisation
GET/crowdstrike/sync/statusSynchronisation status
GET/crowdstrike/dedupHosts awaiting a duplicate decision
GET/crowdstrike/dedup/countCount of pending decisions
POST/crowdstrike/dedup/{aid}/mergeMerge with an existing host
POST/crowdstrike/dedup/{aid}/keep-separateKeep as a distinct host
POST/crowdstrike/dedup/bulkResolve several at once
Ingestion processing
MethodPathPurpose
GET/processDeposit/Deduplication engine status
POST/processDeposit/Request a deduplication pass
GET/processDeposit/findings/summarySummary of the most recent findings
GET/processDeposit/cert/{hostId}A host's signing certificate
GET/processDeposit/key/{hostId}A host's test signing key

A full pass requires a scan start time. A full pass resolves every material older than its bound, so a request that supplies scan_type: full without one is rejected with a 400 rather than resolving the inventory against an unknowable bound.

Cryptographic materials
MethodPathPurpose
GET/cmhistory/Change feed across the inventory
GET/cmhistory/{canonicalId}One material's timeline
GET/cmhistory/{canonicalId}/atState at a point in time
GET/cmhistory/{canonicalId}/diffField-level change between versions
GET/cmtags/List tags
POST/cmtags/Create a tag
GET/cmtags/{tagId}Read a tag
PUT/cmtags/{tagId}Rename a tag
DELETE/cmtags/{tagId}Delete a tag
GET / POST / PUT / DELETE/cmtags/scopes…Named tag expressions

History is readable and never writable: no path in the API can modify or delete a history entry.

Analysis and policy
MethodPathPurpose
GET/analytic/host-analysis/Per-host risk rollup
POST/analytic/host-analysis-filtered/Per-host rollup under a filter
GET/analytic/enterprise-analysis/Estate-wide rollup
GET/policy/List policies
POST/policy/Create a policy
GET/policy/{policyId}Read a policy
PUT/policy/{policyId}Update a policy
DELETE/policy/{policyId}Delete a policy
GET/policy/algorithmsAlgorithm families and their options
GET/policy/standard-policyBuilt-in standard baselines
POST / PUT / DELETE/policy/standard-policy…Manage baselines — administrator only
Export
MethodPathPurpose
GET/cyclonedx/exportEvery type, time-bounded
GET/cyclonedx/export/certificatesCertificates
GET/cyclonedx/export/keysKeys
GET/cyclonedx/export/protocolsProtocol endpoints
GET/cyclonedx/export/binaryBinaries
GET/cyclonedx/export/sourcecodeSource-code findings

Filters and field mappings are documented on the CycloneDX Export Specification page.

Dashboards and widgets
MethodPathPurpose
GET/ui/dashboard/widgetsThe widget catalogue
GET/ui/dashboard/widgets/{wid}One widget's definition and query schema
POST/ui/dashboard/widgets/{wid}/dataData for that widget, under the posted parameters
GET/ui/layouts/user/{uid}A user's dashboard layout
PUT/ui/layouts/user/{uid}Save a layout
GET/ui/layouts/name/{name}A named layout
POST/ui/layouts/name/{name}Create a named layout
GET/ui/layouts/templatesLayout templates
POST / PUT / DELETE/ui/layouts/templates…Manage templates
PUT/ui/layouts/templates/defaultSet the default template
GET/ui/layouts/menu/{menuName}Menu definition
GET/ui/utils/lastCMDocsInsertTimeFreshness of the inventory

Every widget follows one pattern: GET its definition to learn its query schema, then POST parameters matching that schema to its /data path. Widget definitions live in the database, so the catalogue a deployment returns is the authoritative list for that deployment.

Administration
MethodPathPurpose
GET/admin/usersList users
GET/admin/users/searchSearch users
GET/admin/user/{uid}Read a user
POST/admin/userCreate or update a user
POST/admin/bulk-userBulk create or update
DELETE/admin/user/{uid}Delete a user and revoke its sessions
PUT/admin/{uid}/updateRolesChange a user's roles
GET/admin/rolesList roles
GET/admin/roles/{roleId}Read a role
GET/admin/roles/searchSearch roles
DELETE/admin/roles/{roleId}/{uid}Remove a user from a role
GET/admin/permissions/catalogueEvery permission the product defines
GET/admin/permissions/{uid}A user's effective permissions
PUT/admin/permissionsReplace the role-to-permission map
POST/admin/{realm}/createUserCreate a user in a named realm
PUT/admin/{realm}/{uid}/updateUserUpdate a user in a named realm

A role change takes effect on the live session rather than at next sign-in, and deleting a user revokes their sessions immediately. Both matter for offboarding.

Configuration
MethodPathPurpose
GET/configs/active/configThe active configuration
POST/configs/Create a configuration version
PUT/configs/{version}/Update a version
GET/configs/versions/List versions
GET/configs/versions/{version}Read a version
POST/configs/activate/{version}Activate a version
POST/configs/diff/{v1}/{v2}/Compare two versions
POST/configs/restartReload services
GET/configs/ui-configurationConsole display settings
GET / PUT/user-configs/ui-configs/{uid}Per-user interface preferences
Audit
MethodPathPurpose
GET/audit/Query the audit trail
GET/audit/{auditId}One audit record
GET/audit/facetsAvailable filter values
GET/audit/exportExport as CSV

Audit visibility is enforced on the server. The scope is merged into every query rather than passed by the client: administrators and auditors see everything, managers see everything but the audit domain itself, and a standard user sees only their own actions. A client cannot widen that by supplying its own actor filter.

Notifications

The notification and rule engine exposes its own namespace under /notifications/, covering rules, criteria, destinations, templates, delivery records, cases and health checks. It is the largest namespace in the API; see the Notification Engine page for the model and the interactive reference for the endpoint list.

Logging
MethodPathPurpose
POST/logsSensor log submission from a discovery agent

Authenticated with the host certificate token rather than a user session. Bounded per call in both element count and element size, redacted on receipt, and forwarded to the central log store so a scan is readable end to end.

Reserved paths

Some URL shapes were reserved during design and were never implemented. They are not part of the supported API, return no data, and have been withdrawn from the product; do not build against /objects, /query or /discovery.

On this Page:
Support Privacy Policy Terms of Service

Copyright 2026 Encryption Consulting LLC. All rights reserved.