Verification receipt schema
The field contract of the verification receipt object, read from verification_receipt.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/verification_receipt.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, bundle_id, asset_type, verification_mode, verified_at, policy_id, policy_version, status, reason_codes, manifest_sha256, reason_code_vocabulary_version |
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_provider |
string or null | no | minLength 1 | |
anchor_type |
string or null | no | minLength 1 | |
asset_id |
string or null | no | minLength 1 | |
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). |
bundle_id |
string | yes | minLength 1 | |
manifest_sha256 |
string | yes | pattern ^sha256:[a-f0-9]{64}$ |
|
network |
string or null | no | minLength 1 | |
object_type |
string | yes | const "verification_receipt" |
|
p1_sha256 |
string or null | no | pattern ^sha256:[a-f0-9]{64}$ |
|
policy_id |
string | yes | minLength 1 | Non-empty policy identity. The same logical field already carries minLength 1 at registry_entry.schema.json, and this one is required here, so the empty string is not a schema-valid answer to which policy the bundle was verified under. |
policy_pack_sha256 |
string or null | no | pattern ^sha256:[a-f0-9]{64}$ |
Opaque in this version: a self-describing digest whose preimage this specification does not define; nothing is inferred from it. |
policy_version |
integer | yes | minimum 1 | |
primary_anchor |
object or null | no | ||
reason_code_vocabulary_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 |
|
schema_version |
string | yes | enum: v2 |
|
status |
string | yes | enum: pass, warning, review, fail |
|
storage |
array of object | no | ||
verification_mode |
string | yes | minLength 1 | How the verification was performed. Deliberately not an enum: the protocol names three postures – online, offline, link – but an implementation reports the mode it actually ran, and the shipped fixtures and the conformance vectors carry finer identifiers such as offline_bundle. Closing this to the three posture names would invalidate every receipt in the corpus. What is rejected is emptiness: a receipt that will not say how it was verified. |
verified_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$ |
RFC 3339 UTC instant with a literal Z, the shape every other timestamp in this package uses. Without a pattern, the empty string, “yesterday” and 9999-99-99T99:99:99Z would all be schema-valid verification times on the field a compliance reader dates the receipt by. |
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/verification_receipt.schema.json at 3ff7899c0c76. Licence of this page's text: MIT OR Apache-2.0.