Documentation preview. These pages target Registryctl v0.15.0, which is not published yet. Public download commands will not work until that release exists. For runnable released instructions, use v0.13.0.
Resolve attribute release
const url = 'https://data.example.test/v1/attribute-releases/example/versions/example/resolve';const options = { method: 'POST', headers: { 'Data-Purpose': 'identity_verification', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"claims":["example"],"subject":{"id_type":"example","value":"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://data.example.test/v1/attribute-releases/example/versions/example/resolve \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Data-Purpose: identity_verification' \ --data '{ "claims": [ "example" ], "subject": { "id_type": "example", "value": "example" } }'Resolves a single subject against a named release profile and returns the approved claim bundle. The subject identifier is sent in the request body so it does not appear in access logs.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Attribute release profile identifier.
Attribute release profile version.
Header Parameters
Section titled “Header Parameters”Purpose of use. The value must exactly match the selected attribute-release profile’s purpose and is checked before any source read. A missing value returns 400 auth.purpose_required; a mismatched value returns 403 auth.purpose_denied. Header names are case-insensitive (Data-Purpose and data-purpose are equivalent).
Example
identity_verificationOptional PDP trust context. Relay passes this value to policy evaluation only when the authenticated principal has the exact value-bound registry:trust:legal_basis:<value> scope. Without that scope, Relay treats the header as absent. Header names are case-insensitive.
Optional PDP trust context. Relay passes this value to policy evaluation only when the authenticated principal has the exact value-bound registry:trust:consent:<value> scope. Without that scope, Relay treats the header as absent. Header names are case-insensitive.
Optional PDP trust context. Relay passes this value to policy evaluation only when the authenticated principal has the exact value-bound registry:trust:assurance:<value> scope. Without that scope, Relay treats the header as absent. Header names are case-insensitive.
Optional PDP trust context. Relay passes this value to policy evaluation only when the authenticated principal has the exact value-bound registry:trust:jurisdiction:<value> scope. Without that scope, Relay treats the header as absent. Header names are case-insensitive.
Optional PDP trust context. Relay passes this value to policy evaluation only when the authenticated principal has the exact value-bound registry:trust:subject_ref:<value> scope. Without that scope, Relay treats the header as absent. Header names are case-insensitive.
Optional PDP trust context. Relay passes this value to policy evaluation only when the authenticated principal has the exact value-bound registry:trust:relationship:<value> scope. Without that scope, Relay treats the header as absent. Header names are case-insensitive.
Optional PDP trust context. Relay passes this value to policy evaluation only when the authenticated principal has the exact value-bound registry:trust:on_behalf_of:<value> scope. Without that scope, Relay treats the header as absent. Header names are case-insensitive.
Optional PDP trust context. Relay passes this value to policy evaluation only when the authenticated principal has the exact value-bound registry:trust:requested_credential_format:<value> scope. Without that scope, Relay treats the header as absent. Header names are case-insensitive.
Optional PDP trust context. Relay passes this value to policy evaluation only when the authenticated principal has the exact value-bound registry:trust:source_observed_at_unix_seconds:<value> scope. Without that scope, Relay treats the header as absent. Header names are case-insensitive.
Optional PDP trust context. Relay passes this value to policy evaluation only when the authenticated principal has the exact value-bound registry:trust:source_observed_age_seconds:<value> scope. Without that scope, Relay treats the header as absent. Header names are case-insensitive.
Request Bodyrequired
Section titled “Request Bodyrequired”Request body for resolving an attribute release profile against one subject.
object
Optional subset of claim names to return. Absent means the profile default set; an empty array is rejected (400); duplicate or over-bound arrays are rejected (400); any explicit subset must include every required claim; any unknown claim name is denied.
The subject to look up.
object
Subject identifier type (e.g. national_id, passport).
Non-blank scalar subject identifier value. String, number, and boolean values are matched without coercion. Never logged or echoed in responses.
Examplegenerated
{ "claims": [ "example" ], "subject": { "id_type": "example", "value": "example" }}Responses
Section titled “Responses”Resolved attribute release claim bundle.
Resolved attribute release claim bundle. Contains only the approved, minimised claims for the matched subject. Never includes raw source rows, subject identifiers outside released claims, or private source internals.
object
Released claim bundle. Keys are claim names; values are the projected or computed claim values.
object
Identifier of the release profile used to resolve this response.
Version of the release profile used to resolve this response.
Profile-sourced metadata about the release. Present only when the profile sets response.include_source_metadata: true; a minimising profile omits it entirely. Contains only metadata derived from the profile configuration — never private source table ids, paths, or secrets.
object
Stable attribute release always requires exactly one subject.
ISO 8601 timestamp at which the source was checked.
Dataset identifier for the backing source.
Entity name for the backing source.
Subject identifier type used in the lookup.
Example
{ "source": { "cardinality": "one" }}Invalid request: missing Data-Purpose header, malformed or schema-invalid body, unknown id_type, or invalid claims list.
RFC 9457 Problem Details, returned for every non-2xx response.
object
Example
{ "code": "auth.missing_credential", "detail": "no credential provided in Authorization or x-api-key header", "request_id": "01ARZ3NDEKTSV4RRFFQ69G5FAV", "status": 401, "title": "Missing credential", "type": "https://id.registrystack.org/problems/registry-relay/auth/missing_credential"}Missing or invalid bearer credential.
RFC 9457 Problem Details, returned for every non-2xx response.
object
Example
{ "code": "auth.missing_credential", "detail": "no credential provided in Authorization or x-api-key header", "request_id": "01ARZ3NDEKTSV4RRFFQ69G5FAV", "status": 401, "title": "Missing credential", "type": "https://id.registrystack.org/problems/registry-relay/auth/missing_credential"}Purpose denied, or subject denied because it was not found, was ambiguous, failed the release condition, or lacked a required claim. The response does not distinguish subject-denial cases.
RFC 9457 Problem Details, returned for every non-2xx response.
object
Example
{ "code": "auth.missing_credential", "detail": "no credential provided in Authorization or x-api-key header", "request_id": "01ARZ3NDEKTSV4RRFFQ69G5FAV", "status": 401, "title": "Missing credential", "type": "https://id.registrystack.org/problems/registry-relay/auth/missing_credential"}Profile not found or not visible to the authenticated principal. Does not confirm whether the profile ever existed.
RFC 9457 Problem Details, returned for every non-2xx response.
object
Example
{ "code": "auth.missing_credential", "detail": "no credential provided in Authorization or x-api-key header", "request_id": "01ARZ3NDEKTSV4RRFFQ69G5FAV", "status": 401, "title": "Missing credential", "type": "https://id.registrystack.org/problems/registry-relay/auth/missing_credential"}Unsupported media type: request body must be application/json.
RFC 9457 Problem Details, returned for every non-2xx response.
object
Example
{ "code": "auth.missing_credential", "detail": "no credential provided in Authorization or x-api-key header", "request_id": "01ARZ3NDEKTSV4RRFFQ69G5FAV", "status": 401, "title": "Missing credential", "type": "https://id.registrystack.org/problems/registry-relay/auth/missing_credential"}Source unavailable.
RFC 9457 Problem Details, returned for every non-2xx response.
object
Example
{ "code": "auth.missing_credential", "detail": "no credential provided in Authorization or x-api-key header", "request_id": "01ARZ3NDEKTSV4RRFFQ69G5FAV", "status": 401, "title": "Missing credential", "type": "https://id.registrystack.org/problems/registry-relay/auth/missing_credential"}default
Section titled “default”Problem Details error response.
RFC 9457 Problem Details, returned for every non-2xx response.
object
Example
{ "code": "auth.missing_credential", "detail": "no credential provided in Authorization or x-api-key header", "request_id": "01ARZ3NDEKTSV4RRFFQ69G5FAV", "status": 401, "title": "Missing credential", "type": "https://id.registrystack.org/problems/registry-relay/auth/missing_credential"}