Audit receipts
Every chain that runs through Arclasp produces a signed receipt when it completes. The receipt is your audit trail: it records what happened, who decided what, and when. It’s cryptographically signed so tampering is detectable, and hash-chained across your organization so deletion of any receipt is detectable too.Why receipts matter
Compliance, debugging, and trust all eventually need the same thing: a record of what your AI agents did that you can present to a third party and have them believe it. Arclasp receipts give you a tamper-evident record that authenticated users can verify through server-attested integrity checks.What a receipt contains
When a chain completes, the backend assembles a receipt that captures the chain in full:signature field is an HMAC-SHA256 over the entire structured data using a key held by the backend. The previous_receipt_hash links this receipt to the previous one for the same organization.
How signing works
When a receipt is generated, the backend:- Serializes the structured data to a canonical JSON form
- Computes
HMAC-SHA256(structured_data, server_secret)to produce the signature - Stores the receipt with both the structured data and the signature
How hash chaining works
Each receipt embeds the hash of the previous receipt for the same organization. This forms a chain: receipt N+1 references receipt N, which references receipt N-1, all the way back to the first receipt (the “genesis” receipt whereprevious_receipt_hash is null).
- Tampering with any single receipt breaks its signature
- Deleting a receipt entirely breaks the chain at that point (the next receipt’s
previous_receipt_hashno longer matches anything) - Reordering receipts is detectable because the hash sequence is checkable
Verification
Authenticated callers should use the v2 receipt verification endpoint:Verification from the SDK
The SDK exposes v2 helpers:verify_receipt() helper remains temporarily callable for compatibility with the legacy receipt verification route and emits a deprecation warning.
Receipt numbering
Receipts get human-readable numbers in the formatPR-YYYY-NNNNN:
PR-is the Arclasp prefixYYYYis the year the receipt was createdNNNNNis a zero-padded sequence number within your organization
PR-2026-00001, PR-2026-00042, PR-2026-15847.
These numbers are useful for reference in your internal systems, support tickets, and compliance documentation. The underlying receipt is identified by its UUID; the number is the human-friendly label.
What this gives you
The combination of HMAC signing and hash chaining gives authenticated users a server-attested integrity check over stored receipt data. If you ever need to review what your agents did with a regulator, customer, or security team, the receipt is the tamper-evident record. Raw/offline evidence export is future work. That is the design goal of the receipt system: strong integrity evidence without overstating current public or offline verification capabilities.Where to go next
Chain-level governance
Why we track the whole workflow, not just individual calls.
Policies
How decisions get made before receipts get generated.
Human approval
How approvals get recorded in receipts.
SDK reference
The full API surface, including verification.
Verification
Current public-token and authenticated v2 verification routes.