Evidence Locker API Reference
| Field | Value |
|---|---|
| Source spec | evidence-locker/openapi/v1.json |
| OpenAPI version | 3.1.1 |
| API version | 1.0.0 |
| Operations | 35 |
| Path filter | All paths |
Operations
GET /api/v1/buildinfo
API alias for /buildinfo.json (same payload).
| Property | Value |
|---|---|
| Operation ID | StellaOpsBuildInfoApi |
| Tags | StellaOps.EvidenceLocker.WebService |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /api/v1/bundles/{bundleId}/export
Trigger an async evidence bundle export
Enqueues an asynchronous export job for a specific evidence bundle. Returns 202 Accepted with the export job ID and a status polling URL. Returns 404 if the bundle ID is not registered.
| Property | Value |
|---|---|
| Operation ID | TriggerExport |
| Tags | Export |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
bundleId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
202 | Accepted | application/json |
404 | Not Found | - |
GET /api/v1/bundles/{bundleId}/export/{exportId}
Get export status or download exported bundle
Returns the current status of an evidence bundle export job. Returns 200 with the export manifest when complete, or 202 if the export is still in progress. Returns 404 if the export ID is not found.
| Property | Value |
|---|---|
| Operation ID | GetExportStatus |
| Tags | Export |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
bundleId | path | yes | |
exportId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
202 | Accepted | - |
404 | Not Found | - |
GET /api/v1/bundles/{bundleId}/export/{exportId}/download
Download the exported bundle
Streams the completed evidence bundle as a gzip-compressed archive. Returns 409 Conflict if the export is still in progress. Returns 404 if the export ID is not found.
| Property | Value |
|---|---|
| Operation ID | DownloadExport |
| Tags | Export |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
bundleId | path | yes | |
exportId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
404 | Not Found | - |
409 | Conflict | - |
GET /api/v1/evidence
Get evidence home summary and quick links.
Returns an evidence home dashboard summary including quick stats for the last 24 hours/7 days/30 days (new packs, sealed bundles, failed verifications, trust alerts) and lists of latest packs and failed verifications.
| Property | Value |
|---|---|
| Operation ID | GetEvidenceHome |
| Tags | Evidence Audit |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /api/v1/evidence/audit
Get unified evidence audit log slice.
Returns a paginated slice of the unified evidence audit log showing export, pack, and trust events. Use the limit query parameter (max 200) to control page size.
| Property | Value |
|---|---|
| Operation ID | ListEvidenceAuditLog |
| Tags | Evidence Audit |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
limit | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /api/v1/evidence/capsules
Create a new (unsealed) decision capsule
Assembles an unsealed capsule manifest from SBOM/reachability/policy/VEX references and returns the content-addressed, deterministic manifest.
| Property | Value |
|---|---|
| Operation ID | CreateCapsule |
| Tags | Capsules |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
201 | Created | application/json |
400 | Bad Request | - |
403 | Forbidden | - |
GET /api/v1/evidence/capsules/{capsuleId}
Get a decision capsule by id from the EvidenceLocker capsule store
Returns the sealed/unsealed decision capsule (manifest read projection, signing status, sealed-at, verification memory, regulatory retention) from evidence_locker.decision_capsules. This is the capsule-native read the console capsule route uses instead of the AdvisoryAI evidence-pack store; an unknown id returns 404 (never 500). Response carries lastVerifiedAt / lastVerifiedBy / lastVerifiedStatus (verification memory) so an auditor can cite when/by whom the capsule was last checked. Only status ok, produced by a successful signature and content-hash verification, supports a durable PROVEN presentation after reload.
For pii_policy_version = 0, ordinary GET never returns the stored signed manifest_json bytes. manifestJson is a marked, non-canonical legacy projection and legacyPiiSuppressed=true; detected PII-shaped scalars are tomb-stoned, and malformed, empty, whitespace-only, or non-object legacy manifests fail closed to a fixed suppression projection. Raw canonical bytes remain available only through the separately authorized and audited break-glass path.
| Property | Value |
|---|---|
| Operation ID | GetCapsule |
| Tags | Capsules |
| Auth | evidence:read |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK — CapsuleDetailResponse | application/json |
400 | Invalid non-canonical capsule id ({ "error": "invalid_capsule_id" }) | application/json |
403 | Forbidden | - |
404 | Unknown capsule id ({ "error": "capsule_not_found" }) | application/json |
POST /api/v1/evidence/capsules/tlpt-packs
Assemble and sign a DORA TLPT evidence pack capsule
Assembles a deterministic tlpt-evidence-pack.v1 capsule and records pack hash, signer, retention, capsule, and ledger identifiers in the audit trail.
| Property | Value |
|---|---|
| Operation ID | AssembleTlptEvidencePack |
| Tags | Capsules |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
201 | Created | application/json |
400 | Bad Request | - |
403 | Forbidden | - |
500 | Internal Server Error | - |
POST /api/v1/evidence/capsules/{capsuleId}/export
Export a capsule as a downloadable zip bundle
Produces a zip containing manifest.json, manifest.dsse.json (if sealed), assembly-inputs.json, and metadata.json.
| Property | Value |
|---|---|
| Operation ID | ExportCapsule |
| Tags | Capsules |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
capsuleId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
400 | Invalid non-canonical capsule id (invalid_capsule_id) | application/json |
403 | Forbidden | - |
404 | Not Found | - |
POST /api/v1/evidence/capsules/{capsuleId}/replay
Reconstruct the verdict from a sealed capsule
Reads back the sealed manifest, recomputes the content hash, and returns the reconstructed verdict and summary.
| Property | Value |
|---|---|
| Operation ID | ReplayCapsule |
| Tags | Capsules |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
capsuleId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Invalid non-canonical capsule id (invalid_capsule_id) | application/json |
403 | Forbidden | - |
404 | Not Found | - |
POST /api/v1/evidence/capsules/{capsuleId}/seal
Seal a capsule by signing its canonical manifest
Canonicalises the capsule manifest and produces a DSSE envelope via the registered signer. Gracefully degrades to an unsigned sealed capsule when no signer is available.
| Property | Value |
|---|---|
| Operation ID | SealCapsule |
| Tags | Capsules |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
capsuleId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Invalid non-canonical capsule id (invalid_capsule_id) | application/json |
403 | Forbidden | - |
404 | Not Found | - |
POST /api/v1/evidence/capsules/{capsuleId}/verify
Verify a sealed capsule’s content hash and DSSE signature
Recomputes the canonical content hash and validates the DSSE envelope (when present). Returns a structured verdict. The result is persisted as verification memory (last_verified_at / last_verified_by / last_verified_status on the capsule row, and echoed as lastVerifiedAt / lastVerifiedBy / lastVerifiedStatus in the response); GET /api/v1/evidence/capsules/{capsuleId} returns the same memory. A UI may restore PROVEN after reload only when that authoritative memory status is ok; unsigned, unsealed, invalid, failed, missing, or transport-error states remain explicitly not proven or unknown.
| Property | Value |
|---|---|
| Operation ID | VerifyCapsule |
| Tags | Capsules |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
capsuleId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Invalid non-canonical capsule id (invalid_capsule_id) | application/json |
403 | Forbidden | - |
404 | Not Found | - |
GET /api/v1/evidence/packs
List evidence packs.
Lists all registered evidence packs for the authenticated tenant, with release ID, environment, bundle version, seal status, and creation timestamp.
| Property | Value |
|---|---|
| Operation ID | ListEvidencePacks |
| Tags | Evidence Audit |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /api/v1/evidence/packs/{id}
Get evidence pack detail.
Returns the full detail record for a tenant-owned evidence pack including all artifact references, promotion run ID, manifest digest, release decision, and proof chain ID. Returns 404 if the pack ID is not registered for the authenticated tenant.
| Property | Value |
|---|---|
| Operation ID | GetEvidencePack |
| Tags | Evidence Audit |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
id | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /api/v1/evidence/proofs/{subjectDigest}
Get proof chain by subject digest.
Returns the proof chain record for an evidence artifact identified by its subject digest, including DSSE envelope reference, Rekor entry URL, and verification timestamp. Returns 404 if no proof chain exists for the digest.
| Property | Value |
|---|---|
| Operation ID | GetEvidenceProofChain |
| Tags | Evidence Audit |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
subjectDigest | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /api/v1/evidence/receipts/cvss/{id}
Get CVSS receipt by vulnerability id.
Returns the CVSS scoring receipt for a specific vulnerability ID, including base score, CVSS vector, scoring timestamp, and source. Returns 404 if no receipt is on file for the vulnerability.
| Property | Value |
|---|---|
| Operation ID | GetCvssReceipt |
| Tags | Evidence Audit |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
id | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
GET /api/v1/evidence/thread
List evidence threads matching a PURL
Lists all Artifact Canonical Records whose PURL matches the provided query parameter. Returns a paginated summary with per-thread attestation counts. The purl parameter is required.
| Property | Value |
|---|---|
| Operation ID | ListEvidenceThreads |
| Tags | Evidence Threads |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
purl | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | - |
500 | Internal Server Error | - |
GET /api/v1/evidence/thread/{canonicalId}
Retrieve the evidence thread for an artifact by canonical_id
Returns the Artifact Canonical Record for an artifact identified by its canonical ID, including format, artifact digest, PURL, and associated DSSE attestations ordered by signing timestamp. Use include_attestations=false to suppress the attestation list.
| Property | Value |
|---|---|
| Operation ID | GetEvidenceThread |
| Tags | Evidence Threads |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
canonicalId | path | yes | |
include_attestations | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
404 | Not Found | - |
500 | Internal Server Error | - |
GET /api/v1/regulatory/artifact-ledger
Query tenant-scoped regulatory artifact ledger records
Returns EvidenceLocker-owned regulatory artifact ledger records for tenant/regime/artifact-type/year lookups. Use requireMatch=true when the caller needs fail-closed lookup semantics.
| Property | Value |
|---|---|
| Operation ID | QueryRegulatoryArtifactLedger |
| Tags | Regulatory Artifact Ledger |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
artifactType | query | no | |
cursor | query | no | |
limit | query | no | |
regime | query | no | |
reportingYear | query | no | |
requireMatch | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | application/json |
404 | Not Found | application/json |
GET /api/v1/runs/{runId}/verdicts
List verdict attestations for a policy run
Lists all verdict attestations associated with a specific policy run ID. Returns a paginated collection ordered by creation time. Returns 404 if the run ID is not found.
| Property | Value |
|---|---|
| Operation ID | ListVerdictsForRun |
| Tags | Verdicts |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
runId | path | yes | |
limit | query | no | |
offset | query | no | |
severity | query | no | |
status | query | no |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
404 | Not Found | - |
500 | Internal Server Error | - |
POST /api/v1/verdicts
Store a verdict attestation
Persists a verdict attestation record, including the policy run ID, policy ID, finding ID, decision, and DSSE envelope. Returns the stored verdict ID and creation timestamp. Requires write authorization.
| Property | Value |
|---|---|
| Operation ID | StoreVerdict |
| Tags | Verdicts |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
201 | Created | application/json |
400 | Bad Request | - |
500 | Internal Server Error | - |
GET /api/v1/verdicts/{verdictId}
Retrieve a verdict attestation by ID
Returns the full verdict attestation record for the given verdict ID, including policy metadata, finding reference, decision, and the DSSE envelope. Returns 404 if the verdict ID is not found.
| Property | Value |
|---|---|
| Operation ID | GetVerdict |
| Tags | Verdicts |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
verdictId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
404 | Not Found | - |
500 | Internal Server Error | - |
GET /api/v1/verdicts/{verdictId}/envelope
Download DSSE envelope for verdict
Returns the raw DSSE envelope JSON for a specific verdict attestation. Used to retrieve the full envelope for offline verification or replay. Returns 404 if the verdict ID is not found.
| Property | Value |
|---|---|
| Operation ID | DownloadEnvelope |
| Tags | Verdicts |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
verdictId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
404 | Not Found | - |
500 | Internal Server Error | - |
POST /api/v1/verdicts/{verdictId}/verify
Verify verdict attestation signature
Verifies the DSSE envelope signature of a verdict attestation, confirming the signing key ID and signature integrity. Returns a structured result with isValid flag and per-step diagnostics. Returns 404 if the verdict ID is not found.
| Property | Value |
|---|---|
| Operation ID | VerifyVerdict |
| Tags | Verdicts |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
verdictId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
404 | Not Found | - |
500 | Internal Server Error | - |
GET /buildinfo.json
Image build provenance (module, gitSha, gitCommitTime, imageBuiltAt, branch) for drift detection.
| Property | Value |
|---|---|
| Operation ID | StellaOpsBuildInfoFile |
| Tags | StellaOps.EvidenceLocker.WebService |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
POST /evidence
Ingest producer gate artifact evidence and compute deterministic evidence score.
| Property | Value |
|---|---|
| Operation ID | StoreEvidenceGateArtifact |
| Tags | Evidence |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
201 | Created | application/json |
400 | Bad Request | application/json |
403 | Forbidden | application/json |
POST /evidence/hold/{caseId}
Create a legal hold for the specified case identifier.
| Property | Value |
|---|---|
| Operation ID | CreateEvidenceHold |
| Tags | Evidence |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
caseId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
201 | Created | application/json |
400 | Bad Request | application/json |
403 | Forbidden | application/json |
POST /evidence/qa/assurance-cases/{caseId}/readback-import
QA-only case-bound readback/import proof for evidence-pack-golden-assurance-001; does not claim legal compliance, regulator submission, or live external verification.
| Property | Value |
|---|---|
| Operation ID | ImportQaAssuranceCaseReadback |
| Tags | Evidence QA |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
caseId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | application/json |
403 | Forbidden | application/json |
GET /evidence/score
Get deterministic evidence score by artifact identifier.
| Property | Value |
|---|---|
| Operation ID | GetEvidenceScore |
| Tags | Evidence |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
artifact_id | query | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
400 | Bad Request | application/json |
403 | Forbidden | application/json |
404 | Not Found | application/json |
POST /evidence/snapshot
Create a new evidence snapshot for the tenant.
| Property | Value |
|---|---|
| Operation ID | CreateEvidenceSnapshot |
| Tags | Evidence |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
201 | Created | application/json |
400 | Bad Request | application/json |
403 | Forbidden | application/json |
POST /evidence/verify
| Property | Value |
|---|---|
| Operation ID | VerifyEvidenceBundle |
| Tags | Evidence |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
403 | Forbidden | application/json |
GET /evidence/{bundleId}
| Property | Value |
|---|---|
| Operation ID | GetEvidenceBundle |
| Tags | Evidence |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
bundleId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
403 | Forbidden | application/json |
404 | Not Found | application/json |
GET /evidence/{bundleId}/chain
Walk the supersede chain for an evidence bundle, oldest-first.
| Property | Value |
|---|---|
| Operation ID | GetEvidenceBundleChain |
| Tags | Evidence |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
bundleId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | application/json |
403 | Forbidden | application/json |
404 | Not Found | application/json |
GET /evidence/{bundleId}/download
| Property | Value |
|---|---|
| Operation ID | DownloadEvidenceBundle |
| Tags | Evidence |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
bundleId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
400 | Bad Request | application/json |
403 | Forbidden | application/json |
404 | Not Found | application/json |
GET /evidence/{bundleId}/portable
Download a sealed, portable evidence bundle for sealed or air-gapped distribution.
| Property | Value |
|---|---|
| Operation ID | DownloadPortableEvidenceBundle |
| Tags | Evidence |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|---|---|---|
bundleId | path | yes |
Responses:
| Status | Description | Content types |
|---|---|---|
200 | OK | - |
400 | Bad Request | application/json |
403 | Forbidden | application/json |
404 | Not Found | application/json |
