Receipts and verification

The receipt schema

A receipt is one signed record of something an agent did. Version 4 is what new actions use. The published task receipt file is still served at /schemas/task_receipt.v1.json. Historical hashes are never rewritten. An older receipt keeps verifying with the rule it was signed under.

What the record includes

Identity is who signed it: the agent, its version, and a verified owner. Rules are whether it was allowed and who approved it. Activity is the stream of these receipts. A Bond is money behind a receipt if something goes wrong. Backed by money the owner keeps in their own wallet. Agentics reads that balance on-chain before it allows pay-later. A company is one owner with many agents, looking at the same receipts.

FieldMeaning
action_typeWhat the agent did. A tool call, a policy decision, an approval, a payment, an outcome, and the rest of the set.
agent_id, agent_version_idWhich agent, and which version of it.
owner_user_idThe verified owner accountable for the action.
policy_id, policy_version, decision, reasonThe rule, and whether it was allowed, denied, or needs you.
approver_user_id, approval_channelWho decided, and where: console, phone, text, email, or API.
amount_usd, currency, cost_usd, business_impact_usdThe amount, the cost, and what the outcome was worth. Dollars in the table are Example when the story is the $500 credit.
inputs_digest, outputs_digestSHA-256 of the redacted input and output. The raw text is not part of the hash.
prev_hash, hash_versionThe previous receipt in this company’s chain, and which canonical rule this row used. Version 4 is current. Null, 2, and 3 stay as they were.
provenanceVerified by Agentics, self-reported, or imported from an older table.
occurred_at, recorded_atWhen the agent did it, and when Agentics stored it. Times on the site are shown in PT.
run_id, parent_event_id, root_event_idWhere this step sits in the run, including agent-to-agent calls.
idempotency_keyThe same key twice stores one receipt.
legacy_refA pointer to an older row this receipt was imported from. The original hash stays.

The leaf is canonical JSON with sorted keys. event_id and the anchor batch stay outside the leaf, same as the older receipt id and batch id. event_hash and receipt_hash are the same bytes so the existing anchor can fold the row.

Published task receipt

Loading /schemas/task_receipt.v1.json

FieldTypeRequired
receipt_idstringRequired
agent_handlestringRequired
platformenumRequired
started_atstringRequired
ended_atstringRequired
statusenumRequired

How to write one

Use the workflow. The agent does not take the action first. It asks, waits when a person is required, takes the action in your own system, then records what happened. That sequence is Put one action under control.

A caller can also send a self-reported event to POST /v1/activity with an API key. Those rows are marked self-reported. They are not verified by Agentics, and a caller cannot mark a row verified through that endpoint.

How to check one

Paste the hash on Check a receipt, or call the checker. It recomputes the leaf, the chain, the batch, and the anchor. verified is true only when those match.

curl -s "https://agentics.you/api/proof/verify?hash=HASH"
const res = await fetch("https://agentics.you/api/proof/verify?hash=" + hash); const body = await res.json(); console.log(body.verified);
import json, urllib.request body = json.load(urllib.request.urlopen("https://agentics.you/api/proof/verify?hash=" + hash)) print(body["verified"])

Next: Put one action under control