VEX Evidence through Owner APIs

Source-verified against commit 2021a48f6e (2026-10-05). Re-verify the named source contracts before applying this description to an installation. Re-verify: git show HEAD:src/Vulnerabilities/StellaOps.Vulnerabilities.WebService/Program.cs.

Clients reach owner routes through the gateway. The former draft /vex/statements proxy surface and the retired Excititor/VexLens hosts are not the current API contract.

Statements and provenance

Method and routeScopeResult
GET /api/vulnerabilities/v1/issues/{vulnerabilityId}/{productKey}/factsadvisory:readLive statements, issuer identities, justification and applicability.
GET /api/vulnerabilities/v1/facts/{factId}/evidenceadvisory:readProvenance and source evidence for the fact.
POST /api/vulnerabilities/v1/issuers/{issuerId}/vexvuln:submit, plus configured issuer/client/key admissionSigned OpenVEX DSSE ingestion.

Encode each route segment, including the versionless product key. Retain the exact fact identity and source evidence when explaining an outcome.

Tenant result

POST /api/policy/vex/effective-status requires policy:read and an authenticated tenant. It returns the projected effective status, justification, winning issuers, conflict flag, overlay flag and decision hash for a batch of issues.

Findings owns tenant decisions at /api/findings/v1/vex-decisions; its machine-only overlay feed carries those decisions to Policy. A global hub statement read is distinct from the tenant’s effective decision.

See the consensus runbook and Vulnerabilities architecture.

The earlier design is frozen history. It does not describe the current runtime.