Skip to content
Preview (Alpha), release 0.1. No independent cryptographic review of the protocol or its reference verifiers has been done.

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.