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.
| Method | Path | Idempotent |
|---|---|---|
POST | /v1/bill_of_materials | No |
GET | /v1/bill_of_materials/latest | — |
GET | /v1/bill_of_materials | — |
GET | /v1/bill_of_materials/{bom_id} | — |
GET | /v1/bill_of_materials/{bom_id}/components | — |
GET | /v1/bill_of_materials/components | — |
POST | /v1/bill_of_materials/{bom_id}/archive | No |
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:
parse_status | Meaning |
|---|---|
pending | Registered, not yet picked up by the parser. |
parsing | Parse in progress. |
parsed | Parsed successfully; components are available. |
failed | Parsing was attempted but failed (see parse_error). |
unsupported | File format is not CycloneDX or SPDX JSON; the file is stored but not parsed. |
The bill of materials object
Bill of materials ID (
cbbom_...).The owning vendor (
cbvndr_...).The stored source file (
cbvdoc_...), downloadable via the document object.One of
cyclonedx, spdx, or unknown.One of
sbom, aibom, hbom, saasbom, or other.Spec version of the source document, e.g.
1.5 (CycloneDX) or SPDX-2.3.Document serial number, if present in the source.
Number of parsed components.
BOM subject / primary component name.
Set when
parse_status is failed or unsupported.Unix timestamp (seconds) when parsing completed.
Whether the BOM has been archived.
Unix timestamp (seconds) of upload.
Unix timestamp (seconds) of last update.
The stored source file:
{ id, name, s3_url, size, extension, created_at }.The parsed components. Present on detail responses only (
/latest and /{bom_id}); null on list summaries.The component object
Component ID (
cbbomc_...).The BOM this component belongs to (
cbbom_...).The source file the component was parsed from (
cbvdoc_...).Component name. Required — the one field always present.
Component version.
Package URL (PURL).
Common Platform Enumeration identifier.
Namespace / group (e.g. Maven groupId).
Supplier or publisher.
Author.
Free-text description.
The source document’s internal reference for this component.
One of
application, library, framework, container, operating-system, device, firmware, file, machine-learning-model, data, other.Declared licenses.
Map of hash algorithm to value (e.g.
{ "SHA-256": "..." }).External references from the source document.
Arbitrary key/value properties from the source document.
Unix timestamp (seconds).
Upload a BOM
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
The owning vendor (
cbvndr_...).The
s3://... URL of the uploaded file, from GET /v1/file/uploadable_url.File size in bytes.
File name (e.g.
acme-sbom.cdx.json).File extension (e.g.
json).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
| Status | Body | When |
|---|---|---|
| 404 | {"detail": {"code": "vendor_not_found", "message": "Vendor not found."}} | vendor_id not found / not in org, or the bill-of-materials gate is off. |
| 422 | Standard validation error | A required field is missing or the body is malformed. |
Get the current applied BOM
GET /v1/bill_of_materials/latestnull if none has been uploaded.
Query parameters
A vendor (
cbvndr_...). Provide exactly one of vendor_id or service_id.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 /v1/bill_of_materialscomponents is null; use Retrieve a BOM or List components of a BOM to pull components.
Query parameters
A vendor (
cbvndr_...). Provide exactly one of vendor_id or service_id.A service (
cbsvc_...). Provide exactly one of vendor_id or service_id.Include archived BOMs in the history. Defaults to
false.Page size.
Page offset.
Example request
cURL
Example response
200 OK — a page of bill of materials objects (summaries, no components):
Retrieve a BOM
GET /v1/bill_of_materials/{bom_id}Path parameters
The bill of materials ID (
cbbom_...).Example request
cURL
components populated (same shape as the current applied BOM).
Error responses
| Status | Body | When |
|---|---|---|
| 404 | {"detail": {"code": "bom_not_found", "message": "Bill of materials not found."}} | bom_id not found / not in org, or the gate is off. |
List components of a BOM
GET /v1/bill_of_materials/{bom_id}/componentsPath parameters
The bill of materials ID (
cbbom_...).Query parameters
Free-text match against component fields (name, PURL, etc.).
Filter to a single
component_type (e.g. machine-learning-model).Page size.
Page offset.
Example request
cURL
Example response
200 OK — a page of component objects:
Search components across a vendor
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
The vendor to search within (
cbvndr_...).Free-text match against component fields.
Filter to a single
component_type.Restrict to a single BOM (
cbbom_...).Restrict to components from a single source file (
cbvdoc_...).Page size.
Page offset.
Example request
cURL
{ "data": [...], "total_count": <int> }), spanning every matching BOM for the vendor.
Archive a BOM
POST /v1/bill_of_materials/{bom_id}/archiveinclude_archived=true).
Path parameters
The bill of materials ID (
cbbom_...).Example request
cURL
is_archived: true.
Error responses
| Status | Body | When |
|---|---|---|
| 404 | {"detail": {"code": "bom_not_found", "message": "Bill of materials not found."}} | bom_id not found / not in org, or the gate is off. |
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, …):
kind | Returns | Args |
|---|---|---|
bill_of_materials | The latest applied BOM for a vendor, plus its components | vendor_id (required), limit (max components, default 100) |
bill_of_materials_history | All uploaded BOMs for a vendor, newest first (the first is the applied one) | vendor_id (required), limit (default 20) |
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.