An open format for agent action receipts

Proofroom issues Action Receipts as JSON documents. The format is documented here so others can read, check and implement it. Anyone may implement this format, including competitors. It is an open format, not a standards-body standard, and this page does not claim industry adoption.

Schema version: 1.2 (backwards compatible with 1.1 and 1.0)

Where to find the schema

  • JSON Schema: schema/action-receipt-1.2.json (and historical 1.1, 1.0)
  • Plain-English specification: schema/ACTION-RECEIPT-1.2.md
  • Offline check script: scripts/verify-receipt.mjs

Machine-readable copy lives in this application repository under /schema. Public anchors also publish schema files under proofroom-anchors/schema.

What the format covers

Required structural fields, the three evidence levels (self_reported, system_confirmed, operator_confirmed), optional configuration provenance, optional scope_version, optional authorisation attachment summary (authorization), optional opaque lineage links, and an optional Ed25519 signature block.

Authorisation credentials are an attachment, not a fourth evidence level. See Authorisation evidence.

A signature shows the document was issued by the holder of a published key and has not been altered since. It does not evidence that the underlying action occurred. See Signed Action Receipts.

Authority on a receipt is never re-graded when scope later changes. See Scope and drift.

Worked example

{
  "schema_version": "1.2",
  "receipt_id": "PRF-00042",
  "use_case_public_id": "example-support-triage",
  "event_type": "decision_made",
  "authority_status": "in_scope",
  "evidence_level": "self_reported",
  "approval_status": "not_applicable",
  "timestamp": "2026-08-02T10:15:00.000Z",
  "event_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "config_fingerprint": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
  "config_provenance_level": "computed",
  "scope_version": 1,
  "authorization": {
    "protocol": "x401",
    "signature_status": "not_checked",
    "issuer": null
  },
  "links": [
    {
      "to_ref_type": "configuration",
      "to_ref_id": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
      "relation": "used"
    }
  ],
  "signature": {
    "alg": "EdDSA",
    "key_id": "prf-ed25519-default",
    "value": "BASE64_SIGNATURE_HERE"
  }
}

How Proofroom approaches this

Every minted Proofroom receipt carries schema_version "1.2". Evidence Packs and exports include the same fields. Lineage links are optional for senders and are populated automatically where Proofroom already knows the relationship.

Related pages