# How to read a FactReceipt | GuardianChain

Source: https://guardianchain.org/verify
Last modified: 2026-10-24T11:51:00-05:00

Independent verification
How to read a FactReceipt.

A FactReceipt is a sealed record of one AI action: who approved it, what it was allowed to do, what it did, and where the proof lives. Here is how to read one and check it yourself.

HomeVerify

The receiptPublic proofVerify itYour content

Request

A person asks an agent to do something, within limits they set.

Agent passport

The agent presents its passport. No passport, no access.

FactReceipt

The sealed record: who allowed it, what was done, what was refused.

Retrieve & verify

Anyone can check the receipt. No account, no permission from us.

FactReceipt

Evidence anchored

Retrieve & verify

Anatomy of the record
What a FactReceipt contains.

A signed approval from a named person — we call it a grant.

FactReceipt · Illustrative example

fr_161761c9840bed32

action.refusedSealed · 4/6 anchored

Illustrative ID only

Whopp_7Q2K… · parent pp_3M9A… · lineage depth 1Grant gr_A41C… · Delivery owner (role)

The passport, parent and human grant identify the agent and the role that allowed it to act.

What was allowedread · write:staging in repo:acme/app · db:stagingDenied: write:production · limit 50 writes per hour2026-10-14/2026-10-28 · pol_v12 · sha256:5d1e…

Scope, limits, expiry and the policy version describe the bounds of the approval.

What happeneddatabase.execute → db:productionRequest sha256:a9f3… · source agent-runtimePrevious receipt sha256:77be…

The request fingerprint, source and previous receipt connect this event to the surrounding record.

When2026-10-21T14:02:11ZRFC 3161 token · tsa_ref …no later than block 52,922,083 (Base)

Source time, timestamp evidence and a chain bound are different time references; the external values here are illustrative.

What resultednone — refused before execution

The stated effect is separate from the request; this illustrative action was refused before execution.

What did not happenreport every 15 min · met

An obligation and its recorded status show what was expected during the stated interval.

What was preventedREFUSED rule 17 — no production writes during freezeMode: enforce

The refusal names the attempted action and the rule in force; a refusal is evidence of restraint, not an executed write.

Where the proof lives4 of 6 delivered · 2 pending (provider, awaiting batch window)Base · deliveredEthereum · deliveredOptimism · deliveredArbitrum · deliveredPolygon · pending — providerArweave · pending — awaiting batch windowStorageCloudflare R2AWS S3Backblaze B2IPFS (Pinata)ArweaveBatch root sha256:… · leaf 418 · path length 12

Delivered and pending anchors are stated separately; the transaction and Merkle values remain illustrative placeholders.

Custody and retentionthe institution's own systemRetained until 2033-10-21 · last re-attested 2026-10-21

The custody and retention fields describe where content is kept and the date last recorded for its retention check.

Who watches the watcherGC-1 build sha256:08c58dd6324ec9ae8116834449b5b42379da38d67cbbb16996eb16175239293cPolicy bundle sha256:8acd41da7ed8df10c6cbd9a87464ecbd449d91dcc5e42ed2ebc4870661e38159

The watcher fields identify the software and policy references recorded by this illustrative receipt.

Canonicalisation: JCS (RFC 8785) · Hash: SHA-256 · Signature: Ed25519

{

"schema": "guardianchain.factreceipt/v1",

"receipt_id": "fr_161761c9840bed32",

"type": "action.refused",

"state": {

"sealed": true,

"anchors_owed": 6,

"anchors_delivered": 4,

"anchors_pending": 2,

"pending_reason": "provider"

},

"subject": {

"agent_passport": "pp_7Q2K…",

"lineage": {

"parent_passport": "pp_3M9A…",

"depth": 1

},

"human_grant": {

"grant_id": "gr_A41C…",

"signer": "Delivery owner (role)",

"signer_key_fpr": "ed25519:9f2c…41ab",

"sig_alg": "Ed25519",

"issued": "2026-10-14T09:00:00Z",

"expires": "2026-10-28T09:00:00Z"

}

},

"authority": {

"scope": {

"systems": [

"repo:acme/app",

"db:staging"

],

"actions": [

"read",

"write:staging"

],

"denied": [

"write:production"

]

},

"limits": {

"writes_per_hour": 50,

"window": "2026-10-14/2026-10-28"

},

"policy_version": "pol_v12 · sha256:5d1e…"

},

"action": {

"tool": "database.execute",

"request_hash": "sha256:a9f3…",

"target": "db:production",

"source_system": "agent-runtime",

"prev_receipt": "sha256:77be…"

},

"restraint": {

"decision": "REFUSED",

"rule": "rule 17 — no production writes during freeze",

"mode": "enforce"

},

"time": {

"source_time": "2026-10-21T14:02:11Z",

"timestamp_authority": "RFC 3161 token · tsa_ref …",

"chain_bound": "no later than block 52,922,083 (Base)"

},

"result": {

"effect": "none — refused before execution"

},

"absence": {

"obligation": "report every 15 min",

"status": "met"

},

"anchors": [

{

"chain": "Base",

"status": "delivered",

"tx": "illustrative-transaction-01",

"block": 52922083

},

{

"chain": "Ethereum",

"status": "delivered",

"tx": "illustrative-transaction-02",

"block": "…"

},

{

"chain": "Optimism",

"status": "delivered"

},

{

"chain": "Arbitrum",

"status": "delivered"

},

{

"chain": "Polygon",

"status": "pending",

"reason": "provider"

},

{

"chain": "Arweave",

"status": "pending",

"reason": "awaiting batch window"

}

],

"batch": {

"merkle_root": "sha256:…",

"leaf_index": 418,

"inclusion_path_len": 12

},

"storage": [

"Cloudflare R2",

"AWS S3",

"Backblaze B2",

"IPFS (Pinata)",

"Arweave"

],

"custody": {

"content_location": "the institution's own system",

"retention_until": "2033-10-21",

"last_reattested": "2026-10-21"

},

"watcher": {

"gc1_build_digest": "sha256:08c58dd6324ec9ae8116834449b5b42379da38d67cbbb16996eb16175239293c",

"policy_bundle": "sha256:8acd41da7ed8df10c6cbd9a87464ecbd449d91dcc5e42ed2ebc4870661e38159"

},

"content_hash": "sha256:161761c9840bed32f275d0db2c7f0f7679388423d66d51621d0764ca38f346ad",

"signature": {

"alg": "Ed25519",

"key_fpr": "ed25519:c29029a318a728e964bdd968910b573d27e0b8add9b36cc2a651c77c08f490ac",

"value": "IS1a63iGxoxERI8jPY7wcHD-3kh6WszCfywXW3cdHrnT4-cZgET1aCj0Z8WPUaBb5EV5Tk4T6Kna3HA5DjIjCw"

}

}

Canonicalise the receipt with JCS, omitting receipt_id, content_hash and signature.

Compute SHA-256 and compare it with content_hash.

Verify the Ed25519 signature over the 32 raw hash bytes with the published demo public key.

Check the Merkle inclusion path against merkle_root.

Look up the anchor transaction on the chain’s public explorer and compare the anchored root.

Confirm the retention re-attestation date.

Merkle, timestamp, transaction and retention values are illustrative; this page supplies a checkable demo hash and signature.

Demo public key fingerprint: ed25519:c29029a318a728e964bdd968910b573d27e0b8add9b36cc2a651c77c08f490ac

Download demo public key (PEM)Download demo key details

Published demo public key (JWK)
{
"kty": "OKP",
"crv": "Ed25519",
"x": "zhdqRd_bs-glJxd9o-DKGkjXrXI0Z8opcFgoTe6XImw"
}
Illustrative command — not an installed tool or a live verification result.
$ gc1 verify receipt.json
hash: SHA-256 · signature: Ed25519 (demo key)
hash input: omit receipt_id, content_hash, signature
external proofs: illustrative placeholders

Illustrative example. Values are generated for this page, signed with a demo key, and are not a GuardianChain production record.

Illustrative record, not a receipt issued by this website.

Public proof
Where the proof lives.

The evidence bundle carries the record and public proof needed to check it elsewhere.

Anchored on public blockchains, stored with independent providers, and re-checked so you can prove the content was kept.

One FactReceipt, six public blockchain anchors and five independent storage copies.

Six public blockchains · five storage providers

Three steps
Verify it yourself in three steps.

01Open the receipt.
DETAILS 

Read the approval, scope, event and the evidence behind it.

02Open its public proof.
DETAILS 

Follow the bundle's anchor and verification instructions.

03Compare the fingerprints.
DETAILS 

Check that the record and proof agree. Assess the underlying work separately.

Verify without GuardianChain.

The bundle holds the record and public proof so you can check it elsewhere. Verification can show that a record is intact and consistent. It does not decide whether the work is complete, suitable, or legally sufficient.

Verification can show:
The record is intact, consistent, and its evidence is where it says.

Verification cannot show:
The work is complete, fit for your purpose, or legally compliant.

You may:
Accept, hold and ask for more, or challenge.

A FactReceipt covers what crossed the connectors GC-1 was given. Coverage is stated in every evidence bundle.

Do I need a GuardianChain account?

Public verification does not require an account or GuardianChain's servers.

Does a passing check mean I should accept the work?

No. The receiving party decides whether the work is complete and suitable for their purpose.

Does a receipt recreate missing content?

No. The content remains in the systems that hold it; retention records support checking that it was kept.

Public verification tools are available to design partners. This website does not run verification or issue receipts.

Non-custodial
We never see your content.

Only a fingerprint leaves your systems. Your content stays with you.

A document remains inside your building. Only a fingerprint leaves across the system boundary.

Only a fingerprint crosses the boundary; your content never leaves your systems.

Bring a record you need to understand.

Tell us what your team needs to check and which evidence is difficult to carry across systems.

Apply as a design partnerSee connection options
