Wire specs 0.1 + 0.2 · Python 0.2.1 · TypeScript 0.2.2

Portable proof for agent transactions.

Open Receipt is a portable signed evidence format for recording what was authorized, what executed, what was delivered, and how the transaction settled.

Used today for Receipt capability transactions and designed as a rail-agnostic evidence format for card, wallet, API, stablecoin, and account-to-account transactions. Those additional rails are design scope, not a claim of current Receipt execution.

settlement.completed
$0.05 USD
Receipt Labs · web.search
AssuranceDelivered
SignatureEd25519 / JWS
VerificationOnline · pinned · offline

Standards positioning

Designed to complement commerce protocols.

Open Receipt is designed to map cleanly to mandate semantics such as AP2 and to carry evidence alongside commerce and payment protocols such as ACP and x402. This is standards-aligned architecture, not a claim of endorsement or certification.

Commercial facts and assurance

Know what the signature does—and does not—say.

Commercial facts identify the transaction, quote, seller, amount, currency, capability, and settlement event. A valid signature shows that signed content has not changed. Delivered or validated assurance describes the bound outcome evidence; it is distinct from signature validity and issuer trust.

Open Receipt 0.2 · Backward compatible with v0.1

Signed evidence with verifiable issuer trust

Open Receipt defines portable commercial evidence and the rules for verifying it. Version 0.2 adds purpose-bound signing keys, signed issuer metadata, historical key status, and issuance attestations. Conformance is defined by the published schemas, test vectors, and verifier behavior for each version.

spec_versionevent_idevent_typeissuerissued_attransaction_idquote_idcommercial_factsevidenceprovenanceassuranceparent_event_hashessigning_key_idissuer_metadata_versionissuer_metadata_hashissuance_attestationsignature

Initial event types

quote.issued
authorization.granted
execution.attempted
validation.completed
settlement.completed
reversal.issued

Assurance

delivered records provider delivery.validated is used only when the bound Delivery Contract or validator ran and passed. Validation is evidence that the declared contract was satisfied—not a universal guarantee.

Deterministic and inspectable

Events use RFC 8785 JSON canonicalization and a detached compact JWS with Ed25519. Parent hashes bind signed events into a verifiable evidence chain. Signed, versioned issuer metadata publishes purpose-bound current and historical JWKs.

protected = { alg: "EdDSA", kid, typ: "open-receipt+jws" }
payload   = RFC8785(event without signature)
input     = b64url(protected) + "." + b64url(payload)
signature = Ed25519.sign(input)
event.signature = b64url(protected) + ".." + b64url(signature)

Verify online, pinned, or fully offline

The TypeScript package separates mathematical signature validity from issuer trust. Resolve signed metadata over allowlisted HTTPS, pin a trusted snapshot and hash, or use an embedded key for untrusted cryptographic consistency. Offline results report their metadata freshness and knowledge boundary.

Receipt documents use wire spec_version values 0.1 and 0.2. These are distinct from Python implementation version 0.2.1 and TypeScript implementation version 0.2.2.

TypeScript

npm install @receiptprotocol/open-receipt@0.2.2

import { verifyOpenReceiptTrust } from "@receiptprotocol/open-receipt";
const result = await verifyOpenReceiptTrust(receipt, {
  trustMode: "pinned_metadata",
  pinnedMetadata: cachedMetadata,
  pinnedMetadataHash
});

Python 3.10+

pip install open-receipt==0.2.1

# Local file or stdin
open-receipt verify ./receipt.json
cat receipt.json | open-receipt verify -

CLI — local cryptographic verification

npm install --global @receiptprotocol/cli@0.1.3
receipt verify ./open-receipt-v0.1.json

# Pin v0.1 issuer identity from a trusted local metadata copy
receipt verify ./open-receipt-v0.1.json \
  --issuer-metadata ./issuer.json

The CLI verifies v0.1 events and bundles from local files. Use the TypeScript package above for full v0.2 trust-aware verification.

Schemas and test vectors

The v0.2 catalog defines 30 deterministic lifecycle and trust vectors using non-production test keys. Every downloadable v0.1 example is also synthetic and uses a reviewed test-only signing key.

JSON Schemas

Synthetic offline examples

SYNTHETIC TEST VECTOR — NOT A PRODUCTION TRANSACTION

These deterministic conformance fixtures use test-only identities, transactions, amounts, keys, and signatures. You can also verify your own downloaded receipt entirely offline.

Small by design. Open to scrutiny.

Open Receipt is an open, versioned specification for portable, verifiable commercial evidence. The schemas, verifier, and vectors are public so implementers can inspect, test, and challenge the design. Conformance is defined by the published schemas, test vectors, and verifier behavior for each version.

Inspect the specification, verifier source, schemas, test vectors, examples, contribution process, and security policy on GitHub.