Registry entry schema
The field contract of the registry entry object, read from registry_entry.schema.json. The schema file is the normative artifact; this page is a reading of it. Raw schema file at the release tag.
| Property of the schema | Value |
|---|---|
Schema identity ($id) |
https://schemas.loquitur.dev/v1/registry_entry.schema.json |
| JSON Schema dialect | https://json-schema.org/draft/2020-12/schema |
| Root type | object |
| Additional properties at the root | refused |
| Required at the root | object_type, schema_version, registry_entry_id, receipt_id, issuer_id, issuer_key_id, asset_type, workflow, subject_ref_hash, manifest_hash, receipt_hash, policy_id, policy_version, reason_code_catalog_version, verdict, reason_codes, issued_at, privacy_classification, disclosure_profile |
Fields
Field paths are dotted; [] marks the members of an array item. “Required” is stated against the object that holds the field.
| Field | Type | Required | Constraints | Description |
|---|---|---|---|---|
anchor |
object or null | no | no additional properties | |
anchor.anchor_reference |
string | yes | minLength 1 | |
anchor.method |
string | yes | pattern ^[a-z0-9][a-z0-9_]{0,63}$ |
The anchoring method: an identifier, a value of the registered vocabulary anchoring_method (verification-vocabularies.md section 5). No check reads it in this version, and an unknown method has no effect on a run (anchor-commitment.md section 6). |
anchor.system |
string | yes | minLength 1 | The system that carries the anchoring record, such as a CAIP-2 chain id for a blockchain transaction, the time-stamping authority for an RFC 3161 token, or the origin of a transparency log. Its lexical form is not fixed in this version (anchor-commitment.md section 6). |
anchored_at |
string or null | no | pattern ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)Z$ |
|
asset_type |
string | yes | pattern ^[a-z0-9][a-z0-9_]{0,63}$ |
An asset type: an identifier, a value of the registered vocabulary asset_type (verification-vocabularies.md section 5). Any well-formed identifier satisfies the contract; whether the reader’s vocabulary holds it is judged after the contract, and an unknown value is a question for review, not a refusal (section 7). |
disclosure_profile |
string | yes | enum: minimal_public, issuer_controlled_bundle, partner_authorized_bundle |
|
effective_at |
string or null | no | pattern ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)Z$ |
|
issued_at |
string | yes | pattern ^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)Z$ |
|
issuer_id |
string | yes | pattern ^issuer_[A-Za-z0-9_-]{3,128}$ |
|
issuer_key_id |
string | yes | minLength 1 | |
manifest_hash |
string | yes | pattern ^sha256:[a-f0-9]{64}$ |
|
object_type |
string | yes | const "registry_entry" |
|
policy_id |
string | yes | minLength 1 | |
policy_version |
string | yes | pattern ^[0-9]+\.[0-9]+\.[0-9]+(-[A-Za-z0-9_.-]+)?$ |
|
privacy_classification |
string | yes | enum: public_commitment |
|
reason_code_catalog_version |
string | yes | const "loquitur.reason_codes.v1" |
|
reason_codes |
array of string | yes | minItems 1; uniqueItems; items: enum: AUTHORIZATION_ISSUER_KEY_EXPIRED, AUTHORIZATION_ISSUER_KEY_NOT_YET_EFFECTIVE, AUTHORIZATION_ISSUER_KEY_REVOKED, AUTHORIZATION_ISSUER_KEY_SUSPENDED, AUTHORIZATION_ISSUER_NOT_RECOGNISED, AUTHORIZATION_SCOPE_MISMATCH, AUTHORIZATION_SIGNATURE_NOT_VERIFIED, AUTHORIZATION_SIGNING_METHOD_UNSUPPORTED, AUTHORIZATION_TRUST_MATERIAL_OUTSIDE_VALIDITY_WINDOW, AUTHORIZATION_TRUST_REGISTRY_AMBIGUOUS_KEY, AUTHORIZATION_VERIFIED, BUNDLE_EXTRA_FILES, COMPLETENESS_OFFLINE_CHECKS_SKIPPED, COMPLETENESS_OFFLINE_MATERIAL_MISSING, COMPLETENESS_OFFLINE_MISSING_CANONICAL_INPUT, COMPLETENESS_OFFLINE_MISSING_MANIFEST, CONFLICTING_EVIDENCE_DETECTED, FRESHNESS_OK, FRESHNESS_P1_TIMESTAMP_OOW, FRESHNESS_WARNING, INTEGRITY_CHECK_FAILED, INTEGRITY_OFFLINE_CANONICALIZATION_FAILED, INTEGRITY_OFFLINE_ENVELOPE_LINKS_MISMATCH, INTEGRITY_OFFLINE_ENVELOPE_SHA_MISMATCH, INTEGRITY_OFFLINE_EXTRA_FILES_STRICT, INTEGRITY_OFFLINE_FAIL, INTEGRITY_OFFLINE_INPUT_HASH_MISMATCH, INTEGRITY_OFFLINE_MANIFEST_FILE_MISMATCH, INTEGRITY_OFFLINE_MANIFEST_SHA_MISMATCH, INTEGRITY_OFFLINE_SCHEMA_INVALID, INTEGRITY_OK, MARK_ASOF_UNPARSEABLE, MARK_FAR_OUTSIDE_RANGE, MARK_NEAR_BOUNDARY, MARK_OFFSET_FROM_MIDPOINT, MARK_OUTSIDE_RANGE, MARK_STALE, MATERIAL_CHANGE_DETECTED, METHOD_BINDING_MISSING, MISSING_MARK_FIELDS, MISSING_REQUIRED_INPUTS, NEEDS_REVIEW, OFFLINE_CANONICAL_INPUT_MISSING, OFFLINE_INPUT_HASH_NOT_VERIFIED, OFFLINE_MANIFEST_MISSING, OFFLINE_MATERIAL_MISSING, OFFLINE_REPLAY_FAILED, OFFLINE_REPLAY_REVIEW, OFFLINE_REPLAY_SKIPPED, OFFLINE_REPLAY_WARN, P1_TIMESTAMP_OUT_OF_WINDOW, POLICY_BUNDLE_EXTRA_FILES, REQUIRED_CLAIMS_PRESENT, REQUIRED_EVIDENCE_PRESENT, UNSUPPORTED_KEY_CLAIM, VOCABULARY_VALUE_INVALID, VOCABULARY_VALUE_UNKNOWN |
|
receipt_hash |
string | yes | pattern ^sha256:[a-f0-9]{64}$ |
|
receipt_id |
string | yes | pattern ^vr_[A-Za-z0-9_-]{8,128}$ |
|
registry_entry_id |
string | yes | pattern ^reg_[A-Za-z0-9_-]{8,128}$ |
|
schema_version |
string | yes | enum: v1 |
|
signature |
one of | no | Issuer signature, in the signing-envelope v2 shape. This version defines no earlier shape: a signature object without payload_id and payload_version breaks the entry’s contract. | |
signature, variant 1 |
null | |||
signature, variant 2 |
object | no additional properties | Domain-separated signing-envelope v2 signature metadata. | |
signature.algorithm |
string | yes | pattern ^[a-z0-9][a-z0-9_]{0,63}$ |
Signature algorithm identifier. Any well-formed identifier is admitted; the verifier’s own allowlist decides, at the signature step, whether it is supported (UNSUPPORTED_SIGNATURE_ALGORITHM). |
signature.key_id |
string | yes | minLength 1 | |
signature.payload_id |
string | yes | const "registry_entry_signing_payload_v2" |
|
signature.payload_version |
integer | yes | const 2 |
|
signature.signature |
string | yes | pattern ^[a-f0-9]{128}$ |
ECDSA over secp256k1 in IEEE P1363 compact form: r and s concatenated, 64 bytes as 128 lowercase hex characters, low-S enforced. A length bound alone would make the single character “x” a schema-valid secp256k1 signature. |
subject_ref_hash |
string | yes | pattern ^sha256:[a-f0-9]{64}$ |
|
verdict |
string | yes | enum: PASS, WARN, REVIEW, FAIL |
|
workflow |
string | yes | pattern ^[a-z0-9][a-z0-9_]{0,63}$ |
A workflow: an identifier, a value of the registered vocabulary workflow (verification-vocabularies.md section 5). Any well-formed identifier satisfies the contract; whether the reader’s vocabulary holds it is judged after the contract, and an unknown value is a question for review, not a refusal (section 7). |
Example
The schema carries one example instance under its root keyword example, an annotation that decides nothing about any instance. Read it in the raw schema file.
Project site: loquitur.dev
Source: loquitur-protocol/docs/specification/schemas/registry_entry.schema.json at 3ff7899c0c76. Licence of this page's text: MIT OR Apache-2.0.