Skip to main content
For AI agents: a documentation index is available at https://docs.coverbase.com/llms.txt. This page is also available in markdown by appending .md to the URL.
A bill of materials (cbbom_...) is a machine-readable inventory of the components that make up a vendor’s product or a specific service. Upload one as a document, and Coverbase parses it in the background into a searchable list of components (cbbomc_...), each traceable back to the exact source file and vendor it came from. Supported BOM kinds: SBOM (software), AIBOM (AI/ML models and datasets), HBOM (hardware), SaaSBOM, and other. Supported formats are CycloneDX (JSON) and SPDX (JSON); files in any other format are still stored, but are not parsed into components. All endpoints are org-scoped. They are the endpoints the dashboard’s Bill of Materials tab uses, so they take a signed-in user’s dashboard session token (a JWT): an ak_ API key is rejected with 401 Unauthorized role. See Availability below, and API conventions for IDs, timestamps, and the error envelope.

How BOMs are versioned

A BOM is uploaded as a document and can be linked to a vendor, a single service, multiple services, or the vendor only, the same linking model as vendor documents. Many BOMs can be uploaded over time for the same vendor or service, and the platform keeps all of them as history. One non-archived BOM is “applied”: the one uploaded or promoted most recently. It is shown as current on the vendor or service page and returned by GET /v1/bill_of_materials/latest. Older BOMs remain viewable and downloadable as history via GET /v1/bill_of_materials. Archiving a BOM drops it from “latest” but keeps it in history.

Parse lifecycle

On upload a BOM starts at parse_status: "pending" and is parsed asynchronously. Poll the BOM (or the latest/list endpoints) to watch it move through the lifecycle:

The bill of materials object

string
Bill of materials ID (cbbom_...).
string
The owning vendor (cbvndr_...).
string
The stored source file (cbvdoc_...), downloadable via the document object.
string
One of cyclonedx, spdx, or unknown.
string
One of sbom, aibom, hbom, saasbom, or other.
string
One of pending, parsing, parsed, failed, unsupported. See parse lifecycle.
string | null
Spec version of the source document, for example, 1.5 (CycloneDX) or SPDX-2.3.
string | null
Document serial number, if present in the source.
integer
Number of parsed components.
string | null
BOM subject / primary component name.
string | null
Set when parse_status is failed or unsupported.
integer | null
Unix timestamp (seconds) when parsing completed.
object
Free-form metadata from the source document header (tools, authors, timestamp, lifecycle). Empty until parsed.
boolean
Whether the BOM has been archived.
integer
Unix timestamp (seconds) of upload.
integer
Unix timestamp (seconds) of last update.
object | null
The stored source file: { id, name, s3_url, size, extension, created_at }.
object[] | null
The parsed components. Present on detail responses only (/latest, /{bom_id}, and the upload response); omitted from list summaries and from the promote and archive responses.

The component object

string
Component ID (cbbomc_...).
string
The BOM this component belongs to (cbbom_...).
string
The source file the component was parsed from (cbvdoc_...).
string
Component name. Required: the one field always present.
string | null
Component version.
string | null
Package URL (PURL).
string | null
Common Platform Enumeration identifier.
string | null
Namespace / group (for example, Maven groupId).
string | null
Supplier or publisher.
string | null
Author.
string | null
Free-text description.
string | null
The source document’s internal reference for this component.
string
One of application, library, framework, container, operating-system, device, firmware, file, machine-learning-model, data, other.
string[]
Declared licenses.
object
Map of hash algorithm to value (for example, { "SHA-256": "..." }).
array
External references from the source document.
object
Arbitrary key/value properties from the source document.
integer
Unix timestamp (seconds).

Upload a BOM

POST
POST /v1/bill_of_materials
Registers a BOM against a vendor (and optionally one or more services), then parses it asynchronously. Returns the new BOM with parse_status: "pending". Upload the file first with the presigned POST from GET /v1/file/uploadable_url?extension=json, then pass the uploaded file’s URL here.

Request body

string
required
The owning vendor (cbvndr_...).
string
required
The URL of the uploaded file: the presigned url from GET /v1/file/uploadable_url followed by the key it returned in fields.
integer
required
File size in bytes.
string
required
File name (for example, acme-sbom.cdx.json).
string
required
File extension (for example, json).
string[]
Optional. Link the BOM to one or more services (cbsvc_...) under the vendor. Omit to link the BOM to the vendor only.

Example request

cURL

Example response

200 OK: the new bill of materials object, freshly registered:
format, bom_type, spec_version, and component_count are populated once parsing completes.

Error responses

Get the current applied BOM

GET
GET /v1/bill_of_materials/latest
Returns the latest applied BOM (with its components) for a vendor or a service. Returns null if none has been uploaded.

Query parameters

string
A vendor (cbvndr_...). Provide exactly one of vendor_id or service_id.
string
A service (cbsvc_...). Provide exactly one of vendor_id or service_id.
Supplying both vendor_id and service_id, or neither, returns 422.

Example request

cURL

Example response

200 OK: a bill of materials object with components, or null:

List the upload history

GET
GET /v1/bill_of_materials
Returns the full upload history for a vendor or service, newest upload first. The first item is the currently applied BOM unless an older upload has been promoted since. Items are summaries without components; use Retrieve a BOM or List components of a BOM to pull components.

Query parameters

string
A vendor (cbvndr_...). Provide exactly one of vendor_id or service_id.
string
A service (cbsvc_...). Provide exactly one of vendor_id or service_id.
boolean
Include archived BOMs in the history. Defaults to false.
integer
Page size. Default 25, range 1-500.
integer
Page offset. Default 0.

Example request

cURL

Example response

200 OK: a page of bill of materials objects (summaries, no components):

Retrieve a BOM

GET
GET /v1/bill_of_materials/{bom_id}
Returns one BOM with its full components list.

Path parameters

string
required
The bill of materials ID (cbbom_...).

Example request

cURL
The response is a bill of materials object with components populated (same shape as the current applied BOM).

Error responses

List components of a BOM

GET
GET /v1/bill_of_materials/{bom_id}/components
Returns the components of a single BOM, searchable and filterable.

Path parameters

string
required
The bill of materials ID (cbbom_...).

Query parameters

Free-text match against component fields (name, PURL, etc.).
string
Filter to a single component_type (for example, machine-learning-model).
integer
Page size. Default 50, range 1-200.
integer
Page offset. Default 0.

Example request

cURL

Example response

200 OK: a page of component objects:

Search components across a vendor

GET
GET /v1/bill_of_materials/components
Search components across all of a vendor’s BOMs at once. Because every component carries its bill_of_materials_id and vendor_document_id, each match traces straight back to the source file it came from, answering questions like “has this vendor ever shipped a BOM containing log4j?”

Query parameters

string
required
The vendor to search within (cbvndr_...).
string
Free-text match against component fields.
string
Filter to a single component_type.
string
Restrict to a single BOM (cbbom_...).
string
Restrict to components from a single source file (cbvdoc_...).
integer
Page size. Default 50, range 1-200.
integer
Page offset. Default 0.

Example request

cURL
The response is a page of component objects ({ "data": [...], "total_count": <int> }), spanning every matching BOM for the vendor.

Promote a historical BOM

POST
POST /v1/bill_of_materials/{bom_id}/promote
Makes an older, non-archived upload the applied BOM for its vendor and for every service it is linked to, until a newer upload or another promotion replaces it. The change is recorded in the vendor’s (and each linked service’s) activity log.

Path parameters

string
required
The bill of materials ID (cbbom_...).
The response is the promoted bill of materials object, without components. An unknown or archived bom_id returns 404 with {"detail": "Bill of materials not found"}.

Archive a BOM

POST
POST /v1/bill_of_materials/{bom_id}/archive
Archives a BOM. It drops out of “latest” (the next most recent non-archived BOM becomes the applied one) but stays in history and remains retrievable (and shows in the history list when include_archived=true).

Path parameters

string
required
The bill of materials ID (cbbom_...).

Example request

cURL
The response is the updated bill of materials object with is_archived: true, without components.

Error responses

MCP / assistant access

The Coverbase MCP server exposes BOMs read-only through the query_vendors dispatcher tool, with no new top-level tools. Two new kind values join the existing ones (documents, document_summary, risk_summary, …): Both are user- and org-scoped. See example prompts for natural-language phrasings.

Availability

Bill of Materials is available to every organization: the Bill of Materials tab appears on each vendor and service page, and no entitlement is required. Because these are dashboard endpoints, call them with a signed-in user’s session token rather than an ak_ API key.