Skip to content

Endpoints

All endpoints require mutual TLS (mTLS) and an OAuth 2.0 access token bound to the client certificate. See Authentication.

Base URL: https://api.embargogate.example/v1

MethodRoutePurposeRequired scope
POST/sbomsIngest a signed SBOM (CycloneDX or SPDX JSON)sbom:write
GET/sboms/{sbom_id}Retrieve SBOM metadata and SHA-256 digestsbom:read
POST/advisoriesSubmit an OpenVEX advisory (state: SUBMITTED)advisory:write
GET/advisories/{advisory_id}Retrieve an advisory (ABAC applies while EMBARGOED)advisory:read
POST/advisories/{advisory_id}/transitionsMove an advisory to its next stateadvisory:verify, advisory:embargo, or advisory:disclose
POST/webhooksRegister an HMAC-signed webhook endpointwebhook:manage
DELETE/webhooks/{webhook_id}Remove a webhook endpointwebhook:manage

The transition scope depends on the target state. See Core concepts.

POST /advisories

{
"@context": "https://openvex.dev/ns/v0.2.0",
"@id": "https://embargogate.example/vex/2026-0042",
"author": "security@vendor.example",
"timestamp": "2026-10-17T09:00:00Z",
"version": 1,
"statements": [
{
"vulnerability": { "name": "CVE-2026-12345" },
"products": [
{ "@id": "pkg:npm/example-parser@4.2.1" }
],
"status": "affected",
"action_statement": "Upgrade to example-parser 4.2.2 when the embargo ends."
}
]
}

A successful submission returns 201 Created with the advisory ID and its initial state, SUBMITTED.