Early open specification · v0.1

Evidence that travels with the transaction.

Open Receipt v0.1 defines a small, portable envelope for commercial facts, execution evidence, validation, settlement, and reversals—signed so anyone can verify it without asking Receipt whether the signature is valid.

settlement.completed
$0.05 USD
Receipt Labs · web.search
AssuranceDelivered
SignatureEd25519 / JWS
VerificationOffline

Receipt Evidence Specification v0.1

One signed event envelope

The specification is intentionally narrow. It does not standardize catalogues, provider routing, wallets, payment rails, mandates, remedies, or scoring.

spec_versionevent_idevent_typeissuerissued_attransaction_idquote_idcommercial_factsevidenceprovenanceassuranceparent_event_hashessigning_key_idsignature

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 a bound validator actually ran and passed. v0.1 does not claim 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. Issuer metadata supports current and retained historical JWKs.

Inspect issuer metadata
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 without a network call

The TypeScript package verifies schema shape, detached JWS signatures, and parent hashes locally. Supply cached issuer metadata to pin issuer identity; an embedded key proves only that the matching key signed the document.

TypeScript

npm install @receiptprotocol/open-receipt

import { verifyOpenReceipt } from "@receiptprotocol/open-receipt";
const result = await verifyOpenReceipt(receipt, {
  issuerMetadata: cachedMetadata
});

CLI

npm install --global @receiptprotocol/cli
receipt verify ./receipt.json

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

Schemas and test vectors

The v0.1 vectors use a published, non-production test key. They are safe for local verifier tests and must never be treated as production Receipt evidence. A separate completed production Artifact v1 vector is preserved below for compatibility testing; it is not relabeled as an Open Receipt v0.1 event.

JSON Schemas

Completed production compatibility vector

Read-only snapshot of an already-completed signed Receipt. Its legacy signature verifies offline, but the file remains com.receiptprotocol.receipt.v1.

Valid local vectors

Small by design. Open to scrutiny.

Open Receipt v0.1 is an early open specification, not an adopted industry standard. The schemas, verifier, and vectors are public so implementers can inspect, test, and challenge the design without exposing Receipt's commerce engine or score formula.

View source on GitHub