A verifiable receipt for autonomous actions—not just payments.
ARS gives you a signed JSON document that proves what an agent did, who authorized it, and what settled—without handing verifiers your raw prompts or tenant secrets. Anyone can check the Gateway signature offline.
Happy path
- Prompt / agent intent
- Policy authorization
- Tool execution
- Evidence and payment digests
- Signed ARS receipt
From agent intent to a signed Agent Receipt Standard document: policy gates the tool, execution and evidence bind digests, Gateway composes the receipt.
What is ARS?
One envelope, many proofs
ARS composes existing Paybond artifacts into a single portable document. It complements—not replaces—settlement receipts, Harbor evidence, and funding credentials.
The Agent Receipt Standard (ARS) answers one question for auditors, downstream agents, and compliance tooling:
This action happened, under this policy, by this model configuration, with this payment and evidence proof—and here is the Gateway signature.
ARS composes authorization decisions, execution digests, evidence bindings, and funding receipts into one offline-verifiable envelope. Verifiers correlate the story without calling Paybond's live API for every field.
Why ARS exists
Portable proof for multi-tool agents
Side-effecting agents produce many calls per intent. Operators and partners need stable, handoff-friendly proof.
Multi-tool agents produce many side-effecting calls per intent. Operators and partners need:
- Portable proof they can verify outside Paybond's live API
- Stable correlation across authorization, Harbor evidence, funding transport, and settlement
- Agent-to-agent handoff without embedding full JSON in prompts
ARS ships that proof as a Gateway-signed JSON document with a published JSON Schema and public verify endpoint.
Where should I start?
I'm emitting receipts
I'm consuming / verifying
I'm auditing
Interactive example
Travel booking → signed receipt
A hotel booking agent matches policy, submits evidence, records settlement, and Gateway emits one portable ARS document.
Example scenario
Travel booking agent
- Policy matched (spend cap $150)
- Evidence submitted (hotel confirmation)
- Settlement recorded
How ARS relates to other artifacts
ARS links what you already have
Each proof type already exists in Paybond. ARS references them by digest so one document tells the full story.
Proves funding transport (MPP / x402)
- Evidence
Proves execution — Harbor completion and payee signature digests
- Policy decision
Proves authorization — spend decision digest at verify time
- Agent Receipt Standard (ARS)
Links them in one signed, offline-verifiable envelope
Full artifact reference
| Artifact | What it proves |
|---|---|
| Protocol settlement receipt | Final outcome for AP2/mandate flows |
| Harbor completion evidence | Payee-signed predicate satisfaction |
| MPP / x402 funding headers | Funding transport credentials |
| Spend authorization decision | Per-verify policy decision (not exported as a receipt) |
| Agent run trace | Operator observability timeline |
| Agent receipt (paybond.agent_receipt_v1) | Per-action composite of the above by digest |
How it works
From prompt to signed receipt
Most integrations follow the middleware path: policy gates the tool, evidence submits, Gateway composes the receipt.
- Authorize — Kit middleware checks spend policy and records a spend decision digest.
- Execute — The guarded tool runs; argument and result digests bind what happened.
- Submit evidence — Harbor evaluates the predicate; evidence and payee signature digests are recorded.
- Compose receipt — Gateway assembles authorization, execution, evidence, payment, and outcome blocks, then signs canonical JSON.
For a hands-on walkthrough without writing integration code, use sandbox smoke (see API below) or Agent middleware.
Receipt structure
For implementers — full block reference
Expand each block when you need field-level detail. Middleware integrations usually touch authorization, execution, and evidence first.
Every paybond.agent_receipt_v1 document composes the blocks below. Each row shows its purpose collapsed — expand for key fields.
Top-levelDocument identity and tenant binding
Key fields
- kind
- schema_version
- scope
- receipt_id
- issued_at
- tenant_id
authorizationWho authorized the action and which policy matched
Key fields
- principal
- agent model family
- config_hash_sha256_hex
- prompt_hash_sha256_hex
- policy digest
- spend decision
- mandate_digest_sha256_hex (optional)
- mandate_reference_id (optional)
executionWhat tool ran (action scope)
Key fields
- run_id
- tool_call_id
- tool_name
- operation
- arguments_digest_sha256_hex
- result_digest_sha256_hex
- timestamps
evidenceHarbor completion and payee signature digests — not raw payloads
Key fields
- evidence.payload_digest_sha256_hex
- payee signature digest
paymentFunding transport proof
Key fields
- MPP Payment-Receipt digest
- x402 delivery receipt digest
outcomeHarbor state and categorical settlement claim
Key fields
- harbor_state
- spend_reservation_outcome
- settlement_outcome (intent_terminal: SETTLED | PENDING_FINALITY | REVERSED | FAILED)
referencesCross-artifact correlation
Key fields
- intent_id
- settlement_receipt_id (optional)
- audit correlation
SignatureGateway attestation over canonical JSON
Key fields
- ed25519-sha256-json-v1
- message_digest_sha256_hex
operator_attestationOptionalDetached operator counter-signature over the Gateway digest
Key fields
- operator Ed25519 signature
- model attestation metadata
continuityOptionalOptional hash chain across action receipts in the same run
Key fields
- run_id
- sequence_number
- prev_message_digest_sha256_hex (when sequence > 1)
external_attestationsOptionalPartner-native proofs without making them canonical
Key fields
- SEP-2828
- x402
- AP2 mandate and protocol receipts
Partner external attestations
ARS optionally carries external_attestations[] for partner-native proofs. Supported sources today:
- SEP-2828 — MCP decision/outcome receipt pairs
- x402 — signed delivery receipts
- AP2 — signed agent mandates (
agent_mandate_v1), protocol authorization receipts (protocol_authorization_receipt_v1), and protocol settlement receipts (protocol_settlement_receipt_v1)
Kit verifies each artifact locally and normalizes it to a digest entry on the signed receipt. When a verified agent_mandate_v1 entry is present, compose also promotes its digest into load-bearing authorization.mandate_digest_sha256_hex (and optional mandate_reference_id); offline verify fail-closes if those fields disagree with the matching attestation. See Kit agent integrations — external attestations.
Scopes: per action vs final outcome
Two emission points
Action receipts cover one guarded tool call. Final-outcome receipts wrap the intent when Harbor reaches a terminal state.
Per action
action- When emitted
- After evidence submit for a side-effecting tool call
- receipt_id
- sha256(intent_id + "\x00" + tool_call_id) hex
- Status
- Shipped — Gateway compose, fetch, verify, audit export
Final outcome
intent_terminal- When emitted
- Harbor reaches terminal state (final outcome)
- receipt_id
- receipt_id = intent_id (UUID)
- Status
- References references.settlement_receipt_id; compose follows protocol settlement receipts
Most integrations start with action receipts — one signed envelope per guarded tool call. Add intent_terminal when you need a single receipt that summarizes the settled intent.
API
Fetch and verify signed receipts
Tenant-bound fetch for your receipts; public verify accepts the full JSON body without a live session.
After middleware evidence submit
Gateway composes and persists action receipts when Kit middleware completes the authorize → execute → evidence path (and when agent-receipt signing is configured). Persisted receipts are first-write-wins: identical recomposes are idempotent; a different digest for the same receipt_id conflicts and leaves the stored row unchanged. Compose or persist failures surface as structured agent_receipt fields on the Harbor evidence response (compose_status, optional warning_code / warning_message) — do not assume a receipt always exists after evidence success.
Fetch by receipt id or by intent and tool call:
HTTP (tenant-bound):
GET /protocol/v2/agent-receipts/{receipt_id}
GET /protocol/v2/agent-receipts?intent_id={uuid}&tool_call_id={id}
Kit:
paybond-session.ts
const receipt = await paybond.agent.getReceipt({
intentId: "…",
toolCallId: "…",
});
// or: await paybond.agent.getReceipt({ receiptId: "…" });CLI:
terminal
paybond login
paybond receipts get <receipt_id> --kind agent --format json
paybond receipts verify <receipt_id> --kind agent --format jsonOffline verify (no tenant fetch): POST /protocol/v2/agent-receipts/verify with the full receipt JSON body, or Kit TypeScript/Python verify helpers. Pass ?validity_tier=operational|primary|attested (default operational) when auditors need a stronger multi-party bar — see Verify modes.
Sandbox-friendly workflow
Run a local middleware smoke path, then inspect receipts:
terminal
paybond dev loop --offline # terminal 1
paybond dev trace # terminal 2 — timeline at http://127.0.0.1:9477Or explicit smoke:
terminal
paybond login
paybond agent sandbox smoke \
--operation paid-tool \
--requested-spend-cents 100 \
--evidence-preset cost_and_completion \
--result-body '{"status":"ok","cost_cents":100}' \
--format jsonAfter evidence submit, use paybond receipts get … --kind agent with the returned receipt_id or derived id from intent and tool call. See Agent middleware for the full bind → execute → evidence flow.
MCP resource handoff
Agent-to-agent receipt fetch
Hosts pass paybond://receipt/{receipt_id} between agents. resources/read verifies at the operational tier before handing off signed JSON.
The Paybond MCP server’s ARS role is agent-to-agent receipt handoff—not a full auditor console:
| Item | Value |
|---|---|
| URI template | paybond://receipt/{receipt_id} |
| MIME type | application/json |
| Source | Tenant-bound GET /protocol/v2/agent-receipts/{receipt_id} |
| Verify on read | Operational-tier signature check (schema, digest, Gateway Ed25519) |
Hosts call resources/read on paybond://receipt/{receipt_id} to fetch signed JSON without embedding it in prompts. Verification failure returns a clear error. Readonly tools paybond_get_agent_receipt_v1 and paybond_verify_agent_receipt_v1 (optional validity_tier) mirror the settlement-receipt pattern. Validity tiers beyond a quick handoff check, continuity-chain, inclusion proofs, owner disclosure, and ACTA/PEF/SCITT adapters stay on Kit TypeScript/Python, CLI, and Gateway. Details: MCP server — agent receipt resources. For MCP spend setup, see MCP agent spend controls.
Operator counter-signature (optional)
When present, operator_attestation is a detached Ed25519 signature over the Gateway message_digest_sha256_hex — not a second canonical body. Verifiers must confirm the attestation digest matches the Gateway digest before checking the operator key. The attestation operator_did must equal authorization.agent.operator_did.
Gateway compose does not require this block. Kit attach helpers add it when an operator signing key is available (model attestation for downstream trust registries). Authenticated verify with trust_mode=tenant_registry defaults operator registry checks on (empty registry rejects the attestation). Public Gateway JWKS verify leaves registry checks opt-in unless you request the attested validity tier.
Verify modes (validity tiers)
Auditors and downstream verifiers can require a named bar beyond “Gateway signature verifies”:
| Tier | Requirements |
|---|---|
operational (default) | Gateway signature, schema, and receipt_id binding |
primary | Operational plus Harbor-verified payee signature digest present and consistent with the intent |
attested | Primary plus operator attestation with a registry-checked signing key |
Gateway: POST /protocol/v2/agent-receipts/verify?validity_tier=primary (or attested). Offline verify helpers use the same tier names. Details: Agent receipts — trust model.
Continuity across a run
For multi-step agent runs, action compose may attach optional continuity fields (run_id, sequence_number, prev_message_digest_sha256_hex) that hash-link each action receipt to the prior one in the same run. Verify fail-closes when continuity is present and broken. Receipts without continuity remain valid at the requested validity tier.
Mandate binding and settlement outcome
When an AP2 mandate attestation is attached, the signed receipt may also carry load-bearing authorization fields:
| Field | Meaning |
|---|---|
authorization.mandate_digest_sha256_hex | Verified mandate envelope digest (must match an agent_mandate_v1 external attestation) |
authorization.mandate_reference_id | Optional mandate reference (must match the attestation reference_id when both are set) |
For intent-terminal receipts, compose also sets a categorical outcome.settlement_outcome:
| Harbor / dispute-terminal state | settlement_outcome |
|---|---|
released, resolved_split | SETTLED |
refunded | REVERSED |
escalated_external, disputed | PENDING_FINALITY |
failed | FAILED |
references.settlement_receipt_id remains available as today. Older receipts without these optional fields remain valid.
Tenant transparency (inclusion proofs)
When a receipt persists, Gateway also appends an idempotent leaf (message_digest_sha256_hex) to a tenant-scoped append-only Merkle log (RFC 6962-style). Possession of signed JSON plus an inclusion proof proves issuance against a published Signed Tree Head (STH):
| Route | Purpose |
|---|---|
GET /protocol/v2/agent-receipts/tree-head | Current STH for the authenticated tenant (signed with the agent-receipt key) |
GET /protocol/v2/agent-receipts/{receipt_id}/inclusion-proof | Inclusion proof and embedded STH for one receipt |
Offline helpers: Kit TypeScript/Python verifyAgentReceiptInclusion / verify_agent_receipt_inclusion. Cross-tenant proof fetch returns not found. This is not a public world log — leaves never leave the authenticated tenant boundary.
Interop export adapters
After you have a verified ARS receipt, Kit can project or wrap it for partner ecosystems without changing the native wire format:
- ACTA — decision-receipt shaped JSON for MCP/governance handoff
- PEF — content-addressed Payment Evidence Frame (
claim_type=paybond_agent_receipt_v1); audit export includes a companion*.pef.jsonalongside the signed receipt - SCITT — COSE Signed Statement over the ARS message digest for registration elsewhere
These are export adapters over a verified receipt — not alternate compose paths.
Confidential owner disclosure
When an operator needs a confidential handoff beyond the public receipt, Kit can encrypt a derived, still hash-only disclosure package to an owner's key. The signed public receipt stays digest-only; owner disclosure is a separate artifact and is never part of the signed body.
Optional TEE / ZK digest slots
The schema reserves optional slots for TEE execution and ZK policy-proof digests. Verifiers accept well-formed digests when present; Gateway compose does not emit them yet.
Audit export and Signal inputs
- Compliance bundles — opt-in
agent_receiptsinclude stores each receipt atagent_receipts/{receipt_id}.jsonplus a PEF companion*.pef.json. Verify withpaybond receipts verify --kind agentorPOST /protocol/v2/agent-receipts/verify. See Ledger and provenance. - Signal fraud inputs —
AGENT_RECEIPT_VOLUME_SPIKEandAGENT_RECEIPT_POLICY_DRIFTderive from gateway receipt rows (score-neutral operator signals).
Derived views
| View | Doc |
|---|---|
| Human-readable PDF | Agent receipt PDF export |
| OpenTelemetry span attributes | Agent receipt OTEL mapping |
PDFs are presentation-only; signed JSON remains canonical. Before rendering or accepting a PDF, run the verification gate documented in Agent receipt PDF export: verify signed JSON first, validate paybond.agent_receipt_pdf_export_manifest_v1, stamp receipt_id and message_digest_sha256_hex in the footer, and never embed unsigned JSON as authority.
Specification
Normative references
This guide is product-oriented. Implementers should use the platform doc and published schema for field-level contracts.
- Platform reference: Agent receipts
- Conformance:
kit/agent-receipt/conformance/in the repository - JSON Schema:
GET /.well-known/agent-receipt-v1.json - Signing keys (JWKS):
GET /.well-known/agent-receipt-signing-keys.json