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 to the API key and require the bill-of-materials entitlement. See Availability below. See API conventions for authentication, 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. Only the latest (most recently uploaded, non-archived) BOM is “applied” — it is the one 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, e.g.
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.
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 and /{bom_id}); null on list summaries.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 (e.g. 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 (e.g.
{ "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 to the presigned URL from GET /v1/file/uploadable_url first, then pass the resulting s3_url here.
Request body
string
required
The owning vendor (
cbvndr_...).string
required
The
s3://... URL of the uploaded file, from GET /v1/file/uploadable_url.integer
required
File size in bytes.
string
required
File name (e.g.
acme-sbom.cdx.json).string
required
File extension (e.g.
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 is null; 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.
integer
Page offset.
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 (e.g. machine-learning-model).integer
Page size.
integer
Page offset.
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.
integer
Page offset.
Example request
cURL
{ "data": [...], "total_count": <int> }), spanning every matching BOM for the vendor.
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.
Error responses
MCP / assistant access
The Coverbase MCP server exposes BOMs read-only through thequery_vendors dispatcher tool — 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
The Bill of Materials feature is gated by the org-levelbill-of-materials entitlement. When it is off, the Bill of Materials tab is hidden in the dashboard and every /v1/bill_of_materials route returns 404. Ask your Coverbase administrator (or your account manager) to enable it for your organization.