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 byGET /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 atparse_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
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_materialsparse_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/latestnull 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_materialscomponents; 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}Path parameters
string
required
The bill of materials ID (
cbbom_...).Example request
cURL
components populated (same shape as the current applied BOM).
Error responses
List components of a BOM
GET
GET /v1/bill_of_materials/{bom_id}/componentsPath parameters
string
required
The bill of materials ID (
cbbom_...).Query parameters
string
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/componentsbill_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
{ "data": [...], "total_count": <int> }), spanning every matching BOM for the vendor.
Promote a historical BOM
POST
POST /v1/bill_of_materials/{bom_id}/promotePath parameters
string
required
The bill of materials ID (
cbbom_...).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}/archiveinclude_archived=true).
Path parameters
string
required
The bill of materials ID (
cbbom_...).Example request
cURL
is_archived: true, without components.
Error responses
MCP / assistant access
The Coverbase MCP server exposes BOMs read-only through thequery_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 anak_ API key.