# Receipt (/docs/primitives/receipt)



A **Receipt** is the signed, verifiable record of what happened and what it cost
— <TechnicalName public="Receipt" api="WorkReceipt" /> in the API. It joins the
route's explanation, a signed manifest for every tool an agent invoked, the cost
in exact units, the consent trail, and the settlement reference into one object:
the artifact you hand an auditor, a customer, or a counterparty when they ask
*what exactly happened, and what did it cost*.

The evidence exists today as separate records — decision explanations,
content-hashed tool-exposure manifests, per-request cost accounting, consent
certificates. The unified, signed receipt is the object that joins them and makes
"provable" literal.

<Fact label="Status">
  shipping — the joined `WorkReceipt` aggregate, its Ed25519 signer, the verify
  surface, and JWKS key publication are live; issuance is enabled per deployment
  behind a config gate.
</Fact>

## What "signed" means [#what-signed-means]

A receipt is immutable and Ed25519-signed. Signing binds a versioned canonical
serialization of the payload — including the algorithm and signing-key id, under
a domain-separation constant — so a verifier can recompute the hash, check the
signature against a key published via JWKS, and confirm the key was valid when
the receipt was issued — offline, without calling Ductor. Lifecycle state is
never inside the signed bytes: it is derived, so a receipt settling later can
never disturb its signature. A redacted shareable receipt is a distinct
re-signed object issued under a revocable, expiring share grant — never a
blanked copy of the original, and the full receipt is never public.

<StateGrid label="Receipt lifecycle">
  <StateCard title="draft" code="WorkReceipt" tone="muted">
    Assembled at terminal outcome from the evidence records.
  </StateCard>

  <StateCard title="signed" code="WorkReceipt" tone="worker">
    Canonical bytes signed and stored.
  </StateCard>

  <StateCard title="settled" code="WorkReceipt" tone="commit">
    Finalized once settlement commits.
  </StateCard>

  <StateCard title="amended" code="WorkReceipt" tone="halt">
    A claw-back appends a compensating receipt — the original is never mutated,
    and amendments carry stable identities so retries converge instead of
    duplicating.
  </StateCard>
</StateGrid>

## Where to go deeper [#where-to-go-deeper]

<Cards>
  <Card title="Verify a receipt" href="/docs/guides/verify-a-receipt">
    The counterparty's guide — prove a receipt offline against published keys.
  </Card>

  <Card title="Agent tool security" href="/docs/ai/agent-tool-security">
    The signed tool manifests and exposure receipts a Work Receipt joins.
  </Card>

  <Card title="Usage metering" href="/docs/billing/usage-metering">
    The per-request cost accounting a receipt records.
  </Card>
</Cards>
