SHA-256 over the agent's full context — the request, the model called, the response, and the state posted to your system of record. Nothing is summarized away.
Paste a hash. See the receipt.
The receipt is the unit of trust on Lumin Flows. Every agent action gets one — a hashed, signed, append-only record of what the agent saw, what it did, and where it posted. Drop a SHA-256 below and the matching receipt comes back.
Three steps. One receipt.
Ed25519, one key per tenant. The private key never leaves your tenant boundary. Anyone with your public key can verify a receipt; only your tenant can mint one.
Append-only log, written once. Your operators can read it. Your auditors can read it. We can read it. None of us can rewrite it.
The receipt is a JSON document. You can verify it yourself.
Each receipt is shaped like the block below. Re-derive the SHA-256 from the canonical body, then verify the signature against the tenant’s published ed25519 public key.
{
"id": "RCP-1742",
"tenant": "northgate-eu",
"agent": "[email protected]",
"signed_at": "2026-05-20T14:32:08Z",
"input": { "ref": "TCK-1742" },
"model": ["claude-sonnet-4-5", "claude-haiku-4-5"],
"sor": { "system": "mcleod-tms", "status": 200 },
"duration_ms": 38192,
"hash": "9f3a17b8…c8e0d",
"signature": "ed25519:7a4f…91c2"
}# Verify a receipt against your tenant's public key.
curl "https://api.luminflows.com/v1/receipts/verify" \
-H "Authorization: Bearer $TENANT_TOKEN" \
-d "{\"hash\":\"9f3a17b8…c8e0d\"}"
The verification API isn’t public yet. When it ships, this page will call it directly — same input field, same result shape, real receipts instead of demo data.
Run an agent that writes its own receipts.
Bring a sample of your inbox. Leave with one agent running, one playbook live, and a stack of signed receipts your auditor can re-verify on their own.