Audit an SBOM or AI-BOM: resolve every component by package URL or model id and score it - or return the document enriched

Body: a CycloneDX JSON or SPDX JSON document, either as the whole body or under a top-level "sbom" key. Limits: 5 MB body, 5,000 components, 32 levels of nesting (413 above any of them). Components carrying a purl resolve only by purl (exact, via endoflife.ai/purl-map.json); components without one resolve by name. Unmatched components are listed with a reason, never guessed. Resolution and counts cover the whole document; scoring is capped at the tier's batch size (anonymous 3, free key 5, Starter 25, Pro 50). With ?enrich=1 (or "enrich": true beside "sbom") the response is the SAME document with lifecycle facts written onto every component: CycloneDX gets properties in the endoflife: namespace (status, product, cycle, eol_date, days_until_eol / days_past_eol, matched_by, score_url; risk_score, risk_grade, risk_band and kev_exposed on the scored subset; status=not-tracked with a reason otherwise) plus a metadata summary and a tools entry; SPDX gets one annotation per package from "Tool: endoflife.ai API" and one document-level annotation. Idempotent - re-enriching replaces earlier endoflife entries. Content-Type is application/vnd.cyclonedx+json or application/spdx+json; the X-Endoflife-Summary header carries the counts.

post/v1/sbom

Request

  • Base URL: https://api.endoflife.ai
  • URL: https://api.endoflife.ai/v1/sbom
  • Auth: one of:
    • none
    • API key in header X-API-Key
    • HTTP bearer

Query parameters

enrich'1'

Return the enriched SBOM document instead of the JSON report

strict'1'

Purl-only resolution: components without a package URL are reported as not tracked (reason 'no purl (strict mode)') instead of being matched by name

warn_daysinteger

Enrich mode gate: the document-level endoflife:gate is 'fail' when any resolved line is past end of life, 'warn' when any reaches it within this many days, else 'pass'

Request body

object required

CycloneDX or SPDX JSON, or { sbom: <document> }

Response

format, component/matched/scored counts, matched_by {purl,cpe,name,model}, low_confidence_matches, summary {past_eol, kev_exposed}, results (Score objects + component + matched_by; match_confidence 'low' and match_note on name-only matches of library-type components), unmatched [{component, reason}]

Changes

No recorded changes to this operation across all 1 revision of this API.