# BYOS SBOM Ingestion
Overview
Bring-your-own SBOM (BYOS) uploads accept SPDX and CycloneDX JSON and register them in the SBOM ledger for analysis.
Supported formats
- CycloneDX JSON: 1.4, 1.5, 1.6
- SPDX JSON: 2.3, 3.0
Upload endpoint
POST /sbom/uploadorPOST /api/v1/sbom/upload- Required:
artifactRef, plussbom(JSON object) orsbomBase64. - Optional:
formathint (cyclonedxorspdx) andsourcemetadata.
Example:
{
"artifactRef": "acme/app:2.0",
"sbom": { "spdxVersion": "SPDX-2.3", "packages": [] },
"source": { "tool": "syft", "version": "1.9.0" }
}
Validation notes
- CycloneDX requires
bomFormatand supportedspecVersion. - SPDX requires
spdxVersionand a supported version number. - Quality scoring prefers components with PURL, version, and license metadata.
- Lifecycle enrichment runs after format validation and normalization. It preserves lifecycle hints from SBOM component metadata and uses offline local catalog rules to flag known unsupported runtime lines.
- Accepted uploads can return
validationResult.tagsandvalidationResult.lifecycleFindings.runtime:eolmeans ingestion identified an EOL runtime component and Policy can consume the tag withsbom.has_tag("runtime:eol"). - Lifecycle catalog updates are an operator-maintained offline input. The upload path must stay deterministic and must not fetch lifecycle data from the internet.
Troubleshooting
- “sbom or sbomBase64 is required”: include an SBOM payload in the request.
- “Unable to detect SBOM format”: set
formatexplicitly or include required root fields. - Unsupported SBOM format/version: ensure CycloneDX 1.4–1.7 or SPDX 2.3/3.0.
- Low quality scores: include PURLs, versions, and license declarations where possible.
- Unexpected
runtime:eolwarning: inspectvalidationResult.lifecycleFindingsfor the matched component, source, EOL date, and tags, then refresh or correct the local lifecycle catalog if the source rule is stale.
