Signed receipts
Every proxied call can carry an Ed25519-signed prune_metadata receipt. Verify it offline without trusting the dashboard.
Quick answer
Signatures cover a fixed allowlist (cache hit/type, tokens, dollar fields, request hash). Changing those after signing fails verification. Streams send a routing-policy header receipt, then a final event: prune.receipt SSE event.
Verify with the SDK
pip install "prune-sdk>=0.3.3"
from prune.verify import verify_receipt
verify_receipt(receipt_dict) # fetches https://api.withprune.com/v1/public-keyHosted check: withprune.com/verify or POST /v1/receipts/verify.
What is signed
Allowlist includes cache_hit, cache_type, cost_saved, cost_without_prune_usd, cost_with_prune_usd, token counts, models, and receipt_request_sha256 (canonical version v1: model + messages + tools + system).
Full algorithm and raw-Python example: see the repo docs/RECEIPT_SPEC.md.
Run receipts
Send the same X-Prune-Run-Id on every step of an agent run. Then GET /v1/runs/{run_id}/receipt with your prune_ key returns one signed story of the run (hosts, tools, fence decisions).
Related: Security · Error codes · How it works