Unreleased documentation. These pages follow the main branch and can change before the next release. For supported guidance, use v0.15.2.
Produce evidence for one authorized fixed requirement
const url = 'https://example.com/v1/evidence';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"holderKeys":[{"alg":"ES256","crv":"P-256","kid":"example","kty":"EC","x":"example","y":"example"}],"purpose":"example","requestNonce":"example","requirement":"https://example.com","subjects":[{"role":"example","selector":{"profile":"example","values":{"additionalProperty":"example"}}}]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/v1/evidence \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "holderKeys": [ { "alg": "ES256", "crv": "P-256", "kid": "example", "kty": "EC", "x": "example", "y": "example" } ], "purpose": "example", "requestNonce": "example", "requirement": "https://example.com", "subjects": [ { "role": "example", "selector": { "profile": "example", "values": { "additionalProperty": "example" } } } ] }'Missing Accept, /, and the exact application/jose+json media type select the default signed flattened JWS. Only the exact application/vnd.registrystack.evidence-unsigned+json media type selects the unsigned envelope, only the exact application/dc+sd-jwt media type selects the SD-JWT VC serialization of the same assertion, and only the exact application/vnd.registrystack.evidence.batch+json media type selects the holder-bound batch issuance envelope carrying one credential per presented holder key; each is released only when the immutable bundle, the complete matched authority grant, and the requirement’s subject binding mode all permit it. Duplicate, combined, parameterized, weighted, or unknown negotiation returns 406 before source access.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
object
Responses
Section titled “Responses”Signed Evidence as flattened JWS JSON Serialization by default, or the explicitly authorized SD-JWT VC serialization, holder-bound batch issuance envelope, or self-identifying unsigned envelope
Compact SD-JWT VC: the issuer-signed JWT, then the root-value and configured structured-field disclosures, then a trailing tilde marking an absent key-binding JWT. The issuer never appends a key-binding JWT.
object
Examplegenerated
{ "payload": "example", "protected": "example", "signature": "example"}object
object
object
object
object
object
object
object
Example
{ "evidence": { "assuranceProfile": "local", "schema": "registry.assertion-evidence/v1", "subjectBinding": "audience-scoped", "supportedValues": [ { "value": { "form": "date-bucket" } } ], "type": "Evidence" }, "integrityProtection": "none", "schema": "registry.unsigned-evidence-envelope/v1", "type": "UnsignedEvidenceEnvelope", "warning": "not-cryptographically-verifiable"}object
Example
{ "schema": "registry.sd-jwt-vc-batch-envelope/v1", "type": "SdJwtVcBatchEnvelope"}Headers
Section titled “Headers”Evidence responses are never cacheable.
The response format is negotiated through the exact Accept matrix.
Server-minted operation identifier for this request. It is generated by Evidence, never taken from the caller, and is the identifier a caller quotes to an operator. Problem responses repeat it in the operation member.
Malformed request or invalid selector
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
Example
{ "code": "malformed_request", "status": 400, "title": "Request is not valid", "type": "https://registrystack.org/problems/evidence/malformed_request"}Headers
Section titled “Headers”Evidence responses are never cacheable.
The response format is negotiated through the exact Accept matrix.
Server-minted operation identifier for this request. It is generated by Evidence, never taken from the caller, and is the identifier a caller quotes to an operator. Problem responses repeat it in the operation member.
Authentication failed
object
object
object
object
object
object
object
object
object
object
Example
{ "code": "authentication_failed", "status": 401, "title": "Authentication failed", "type": "https://registrystack.org/problems/evidence/authentication_failed"}Headers
Section titled “Headers”Evidence responses are never cacheable.
The response format is negotiated through the exact Accept matrix.
Server-minted operation identifier for this request. It is generated by Evidence, never taken from the caller, and is the identifier a caller quotes to an operator. Problem responses repeat it in the operation member.
Request is not authorized, including a recognized response format the bundle or matched grant does not permit
object
object
object
object
object
object
object
object
object
object
Example
{ "code": "not_authorized", "status": 403, "title": "Request is not authorized", "type": "https://registrystack.org/problems/evidence/not_authorized"}Headers
Section titled “Headers”Evidence responses are never cacheable.
The response format is negotiated through the exact Accept matrix.
Server-minted operation identifier for this request. It is generated by Evidence, never taken from the caller, and is the identifier a caller quotes to an operator. Problem responses repeat it in the operation member.
Media negotiation is outside the closed Accept matrix
object
object
object
object
object
object
object
object
object
object
Example
{ "code": "response_format_not_acceptable", "status": 406, "title": "Requested response format is not acceptable", "type": "https://registrystack.org/problems/evidence/response_format_not_acceptable"}Headers
Section titled “Headers”Evidence responses are never cacheable.
The response format is negotiated through the exact Accept matrix.
Server-minted operation identifier for this request. It is generated by Evidence, never taken from the caller, and is the identifier a caller quotes to an operator. Problem responses repeat it in the operation member.
Evidence could not be produced
object
object
object
object
object
object
object
object
object
object
Example
{ "code": "evidence_not_available", "status": 422, "title": "Evidence could not be produced", "type": "https://registrystack.org/problems/evidence/evidence_not_available"}Headers
Section titled “Headers”Evidence responses are never cacheable.
The response format is negotiated through the exact Accept matrix.
Server-minted operation identifier for this request. It is generated by Evidence, never taken from the caller, and is the identifier a caller quotes to an operator. Problem responses repeat it in the operation member.
Request rate exceeded
object
object
object
object
object
object
object
object
object
object
Example
{ "code": "rate_limited", "status": 429, "title": "Request rate exceeded", "type": "https://registrystack.org/problems/evidence/rate_limited"}Headers
Section titled “Headers”Evidence responses are never cacheable.
The response format is negotiated through the exact Accept matrix.
Server-minted operation identifier for this request. It is generated by Evidence, never taken from the caller, and is the identifier a caller quotes to an operator. Problem responses repeat it in the operation member.
Dependency or service temporarily unavailable
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
Example
{ "code": "dependency_unavailable", "status": 503, "title": "Service temporarily unavailable", "type": "https://registrystack.org/problems/evidence/dependency_unavailable"}Headers
Section titled “Headers”Evidence responses are never cacheable.
The response format is negotiated through the exact Accept matrix.
Server-minted operation identifier for this request. It is generated by Evidence, never taken from the caller, and is the identifier a caller quotes to an operator. Problem responses repeat it in the operation member.