Skip to content
Registry StackDocsv0.20.0

Produce evidence for one authorized fixed requirement

POST
/v1/evidence
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.

Media typeapplication/json
Evidence request Version 1
object
holderKeys
Array<object>
>= 1 items <= 16 items
object
alg
string
Allowed values: ES256
crv
required
string
Allowed values: P-256
kid
string
>= 1 characters <= 256 characters
kty
required
string
Allowed values: EC
x
required
string
/^[A-Za-z0-9_-]{43}$/
y
required
string
/^[A-Za-z0-9_-]{43}$/
purpose
required
string
/^[a-z][a-z0-9._:-]{0,127}$/
requestNonce
required
string
/^[A-Za-z0-9_-]{43}$/
requirement
required
string format: uri
>= 1 characters <= 512 characters
subjects
required
Array<object>
>= 1 items <= 8 items
object
role
required
string
/^[a-z][a-z0-9._-]{0,63}$/
selector
required
object
profile
required
string
/^[a-z][a-z0-9._-]{0,127}$/
values
object
>= 1 properties <= 16 properties
key
additional properties
One of:
string
>= 1 characters <= 512 characters

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.

string
/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+(~[A-Za-z0-9_-]+)*~$/
Cache-Control
string
Allowed values: no-store

Evidence responses are never cacheable.

Vary
string
Allowed values: Accept

The response format is negotiated through the exact Accept matrix.

traceparent
string
/^00-(?!0{32}-)[0-9a-f]{32}-(?!0{16}-)[0-9a-f]{16}-[0-9a-f]{2}$/

Effective W3C trace context. One valid inbound traceparent is retained; missing, invalid, or duplicate values are replaced and tracestate is never reflected.

Malformed request or invalid selector

Media typeapplication/problem+json
One of:
object
One of:
Evidence public problem Version 1
object
code
required
string
Allowed values: evidence.invalid_request
detail
required
string
Allowed values: the Evidence request is invalid
status
required
integer
Allowed values: 400
title
required
string
Allowed values: Evidence request is invalid
traceId
required
string
/^(?!0{32}$)[0-9a-f]{32}$/
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-evidence/evidence/invalid_request
code
required
string
Allowed values: evidence.invalid_request
detail
required
string
Allowed values: the Evidence request is invalid
status
required
integer
Allowed values: 400
title
required
string
Allowed values: Evidence request is invalid
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-evidence/evidence/invalid_request
Example
{
"code": "evidence.invalid_request",
"detail": "the Evidence request is invalid",
"status": 400,
"title": "Evidence request is invalid",
"type": "https://id.registrystack.org/problems/registry-evidence/evidence/invalid_request"
}
Cache-Control
string
Allowed values: no-store

Evidence responses are never cacheable.

Vary
string
Allowed values: Accept

The response format is negotiated through the exact Accept matrix.

traceparent
string
/^00-(?!0{32}-)[0-9a-f]{32}-(?!0{16}-)[0-9a-f]{16}-[0-9a-f]{2}$/

Effective W3C trace context. One valid inbound traceparent is retained; missing, invalid, or duplicate values are replaced and tracestate is never reflected.

Authentication failed

Media typeapplication/problem+json
object
One of:
Evidence public problem Version 1
object
code
required
string
Allowed values: evidence.invalid_request
detail
required
string
Allowed values: the Evidence request is invalid
status
required
integer
Allowed values: 400
title
required
string
Allowed values: Evidence request is invalid
traceId
required
string
/^(?!0{32}$)[0-9a-f]{32}$/
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-evidence/evidence/invalid_request
code
required
string
Allowed values: auth.invalid_credential
detail
required
string
Allowed values: bearer access token validation failed
status
required
integer
Allowed values: 401
title
required
string
Allowed values: Bearer access token is invalid
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-evidence/auth/invalid_credential
Example
{
"code": "auth.invalid_credential",
"detail": "bearer access token validation failed",
"status": 401,
"title": "Bearer access token is invalid",
"type": "https://id.registrystack.org/problems/registry-evidence/auth/invalid_credential"
}
Cache-Control
string
Allowed values: no-store

Evidence responses are never cacheable.

Vary
string
Allowed values: Accept

The response format is negotiated through the exact Accept matrix.

WWW-Authenticate
string
Allowed values: Bearer realm="registry-evidence"
traceparent
string
/^00-(?!0{32}-)[0-9a-f]{32}-(?!0{16}-)[0-9a-f]{16}-[0-9a-f]{2}$/

Effective W3C trace context. One valid inbound traceparent is retained; missing, invalid, or duplicate values are replaced and tracestate is never reflected.

Request is not authorized, including a recognized response format the bundle or matched grant does not permit

Media typeapplication/problem+json
object
One of:
Evidence public problem Version 1
object
code
required
string
Allowed values: evidence.invalid_request
detail
required
string
Allowed values: the Evidence request is invalid
status
required
integer
Allowed values: 400
title
required
string
Allowed values: Evidence request is invalid
traceId
required
string
/^(?!0{32}$)[0-9a-f]{32}$/
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-evidence/evidence/invalid_request
code
required
string
Allowed values: evidence.denied
detail
required
string
Allowed values: the Evidence request is not permitted
status
required
integer
Allowed values: 403
title
required
string
Allowed values: Evidence request is not permitted
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-evidence/evidence/denied
Example
{
"code": "evidence.denied",
"detail": "the Evidence request is not permitted",
"status": 403,
"title": "Evidence request is not permitted",
"type": "https://id.registrystack.org/problems/registry-evidence/evidence/denied"
}
Cache-Control
string
Allowed values: no-store

Evidence responses are never cacheable.

Vary
string
Allowed values: Accept

The response format is negotiated through the exact Accept matrix.

traceparent
string
/^00-(?!0{32}-)[0-9a-f]{32}-(?!0{16}-)[0-9a-f]{16}-[0-9a-f]{2}$/

Effective W3C trace context. One valid inbound traceparent is retained; missing, invalid, or duplicate values are replaced and tracestate is never reflected.

Media negotiation is outside the closed Accept matrix

Media typeapplication/problem+json
object
One of:
Evidence public problem Version 1
object
code
required
string
Allowed values: evidence.invalid_request
detail
required
string
Allowed values: the Evidence request is invalid
status
required
integer
Allowed values: 400
title
required
string
Allowed values: Evidence request is invalid
traceId
required
string
/^(?!0{32}$)[0-9a-f]{32}$/
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-evidence/evidence/invalid_request
code
required
string
Allowed values: format.unsupported
detail
required
string
Allowed values: the requested format is not supported
status
required
integer
Allowed values: 406
title
required
string
Allowed values: Requested format is not supported
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-evidence/format/unsupported
Example
{
"code": "format.unsupported",
"detail": "the requested format is not supported",
"status": 406,
"title": "Requested format is not supported",
"type": "https://id.registrystack.org/problems/registry-evidence/format/unsupported"
}
Cache-Control
string
Allowed values: no-store

Evidence responses are never cacheable.

Vary
string
Allowed values: Accept

The response format is negotiated through the exact Accept matrix.

traceparent
string
/^00-(?!0{32}-)[0-9a-f]{32}-(?!0{16}-)[0-9a-f]{16}-[0-9a-f]{2}$/

Effective W3C trace context. One valid inbound traceparent is retained; missing, invalid, or duplicate values are replaced and tracestate is never reflected.

Evidence could not be produced

Media typeapplication/problem+json
object
One of:
Evidence public problem Version 1
object
code
required
string
Allowed values: evidence.invalid_request
detail
required
string
Allowed values: the Evidence request is invalid
status
required
integer
Allowed values: 400
title
required
string
Allowed values: Evidence request is invalid
traceId
required
string
/^(?!0{32}$)[0-9a-f]{32}$/
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-evidence/evidence/invalid_request
code
required
string
Allowed values: evidence.unavailable
detail
required
string
Allowed values: evidence could not be produced for this request
status
required
integer
Allowed values: 422
title
required
string
Allowed values: Evidence could not be produced
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-evidence/evidence/unavailable
Example
{
"code": "evidence.unavailable",
"detail": "evidence could not be produced for this request",
"status": 422,
"title": "Evidence could not be produced",
"type": "https://id.registrystack.org/problems/registry-evidence/evidence/unavailable"
}
Cache-Control
string
Allowed values: no-store

Evidence responses are never cacheable.

Vary
string
Allowed values: Accept

The response format is negotiated through the exact Accept matrix.

traceparent
string
/^00-(?!0{32}-)[0-9a-f]{32}-(?!0{16}-)[0-9a-f]{16}-[0-9a-f]{2}$/

Effective W3C trace context. One valid inbound traceparent is retained; missing, invalid, or duplicate values are replaced and tracestate is never reflected.

Request rate exceeded

Media typeapplication/problem+json
object
One of:
Evidence public problem Version 1
object
code
required
string
Allowed values: evidence.invalid_request
detail
required
string
Allowed values: the Evidence request is invalid
status
required
integer
Allowed values: 400
title
required
string
Allowed values: Evidence request is invalid
traceId
required
string
/^(?!0{32}$)[0-9a-f]{32}$/
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-evidence/evidence/invalid_request
code
required
string
Allowed values: evidence.rate_limited
detail
required
string
Allowed values: the Evidence request rate is exhausted
status
required
integer
Allowed values: 429
title
required
string
Allowed values: Evidence request rate is exhausted
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-evidence/evidence/rate_limited
Example
{
"code": "evidence.rate_limited",
"detail": "the Evidence request rate is exhausted",
"status": 429,
"title": "Evidence request rate is exhausted",
"type": "https://id.registrystack.org/problems/registry-evidence/evidence/rate_limited"
}
Cache-Control
string
Allowed values: no-store

Evidence responses are never cacheable.

Retry-After
string
Allowed values: 1
Vary
string
Allowed values: Accept

The response format is negotiated through the exact Accept matrix.

traceparent
string
/^00-(?!0{32}-)[0-9a-f]{32}-(?!0{16}-)[0-9a-f]{16}-[0-9a-f]{2}$/

Effective W3C trace context. One valid inbound traceparent is retained; missing, invalid, or duplicate values are replaced and tracestate is never reflected.

Dependency or service temporarily unavailable

Media typeapplication/problem+json
One of:
object
One of:
Evidence public problem Version 1
object
code
required
string
Allowed values: evidence.invalid_request
detail
required
string
Allowed values: the Evidence request is invalid
status
required
integer
Allowed values: 400
title
required
string
Allowed values: Evidence request is invalid
traceId
required
string
/^(?!0{32}$)[0-9a-f]{32}$/
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-evidence/evidence/invalid_request
code
required
string
Allowed values: source.unavailable
detail
required
string
Allowed values: the authoritative source is unavailable
status
required
integer
Allowed values: 503
title
required
string
Allowed values: Authoritative source is unavailable
type
required
string
Allowed values: https://id.registrystack.org/problems/registry-evidence/source/unavailable
Example
{
"code": "source.unavailable",
"detail": "the authoritative source is unavailable",
"status": 503,
"title": "Authoritative source is unavailable",
"type": "https://id.registrystack.org/problems/registry-evidence/source/unavailable"
}
Cache-Control
string
Allowed values: no-store

Evidence responses are never cacheable.

Vary
string
Allowed values: Accept

The response format is negotiated through the exact Accept matrix.

traceparent
string
/^00-(?!0{32}-)[0-9a-f]{32}-(?!0{16}-)[0-9a-f]{16}-[0-9a-f]{2}$/

Effective W3C trace context. One valid inbound traceparent is retained; missing, invalid, or duplicate values are replaced and tracestate is never reflected.