Skip to main content
The Payment Evidence Frame (PEF) is a transport-agnostic envelope that wraps any AlgoVoi payment-lifecycle receipt into a single, verifiable artefact. Each frame carries a byte-deterministic frame_id (SHA-256 of the JCS-canonical preimage) and an optional detached RFC 9421 signature field. It is AlgoVoi-authored, specified in IETF Internet-Draft draft-hopley-x402-payment-evidence-frame-00 (published 2026-05-30, Independent Submission), and published as a standalone reference implementation: Both packages depend on algovoi-substrate / @algovoi/substrate for the JCS canonicalisation primitive. Apache 2.0.

Lifecycle position

PEF is the outermost envelope. It wraps every receipt type in the payment lifecycle stack:
All five wrapped formats anchor to the same canonicalisation discipline (urn:x402:canonicalisation:jcs-rfc8785-v1). A verifier holding a PEF can independently re-derive frame_id from the enclosed receipt without trusting the issuer’s assertion.

Why this format

Downstream consumers of payment evidence — auditors, regulators, acquiring counterparties — receive receipts from multiple sources in multiple formats. PEF answers three problems:
  • Canonical identity: frame_id is a SHA-256 of the JCS-canonical preimage. Any party can recompute it offline. There is no proprietary identifier or opaque token to trust.
  • Uniform verification surface: a single verifier handles all five receipt types without format-specific parsing logic. The claim_type field is the sole discriminator.
  • Optional signature binding: RFC 9421 HTTP Message Signatures attach a detached signature to the frame bytes, binding the issuer’s keypair to the canonical frame_id. The frame is fully verifiable without the signature; the signature narrows the trust surface for regulated contexts.

Frame shape

A PEF frame is a six-field JSON object canonicalised under RFC 8785 (JCS):
The optional signature field carries a detached RFC 9421 / RFC 9530 Content-Digest over the canonical frame bytes. Its presence is indicated by the sig key; its absence does not invalidate the frame.

Claim types

Five claim types, each mapping to an IETF I-D-anchored receipt format:

frame_id derivation

frame_id is excluded from the JCS preimage — standard JCS self-describing identifier pattern. Any verifier with the receipt bytes can recompute receipt_hash, recompute preimage, and independently verify frame_id without trusting the issuer.

Cross-implementation validation

frame_id derivation has been independently validated across eight JCS implementations in eight programming languages64/64 byte-for-byte agreements across all five claim types (both receipt_hash and frame_id layers per vector): Full attestation record: _attestations/2026-05-30-8-impl-pef-v1.md in chopmob-cloud/algovoi-jcs-conformance-vectors. The cumulative cross-validation corpus now stands at 880/880 byte-for-byte agreements across fourteen vector sets covering the full AlgoVoi agentic-payment receipt stack (as of 2026-06-18).

Quick start

Python

TypeScript

Platform integration

The platform wraps receipts automatically via pef_or_none() — returns None if algovoi-pef is not installed, so existing API responses are unaffected during a rolling deploy:

What this is NOT

  • Not a receipt format itself. PEF is a wrapper. The enclosed receipt retains its own canonical identity (receipt_hash) and IETF I-D normative status.
  • Not a cryptographic settlement proof. PEF records the operator’s categorical claim. Cryptographic proofs of payment conditions are orthogonal and compose on top.
  • Not a transport protocol. PEF is a JSON envelope. How it is transmitted (HTTP response header, webhook payload, audit-log row) is out of scope.

Companion IETF Internet-Draft

draft-hopley-x402-payment-evidence-frame-00 (Independent Submission, published 2026-05-30). AlgoVoi-authored, sole authorship. Normatively references draft-hopley-x402-canonicalisation-jcs-v1 and all five receipt-format I-Ds.

See also