Signed receipts

Every response carries an Ed25519-signed receipt. Verify offline with malibu-verify.
Every Malibu response carries an X-Malibu-Receipt header signed with the provider’s Ed25519 receipt key. The receipt binds the canonical prompt hash, output hash, model hash, provider public key, and timestamp. You can verify it offline — no gateway trust required.

What the receipt contains

The v0.3 receipt is a nine-field tuple: Signed with the provider’s Ed25519 key. Streaming responses emit a settlement-capable receipt too. Back-compat with v0.1/v0.2 receipts is preserved.

Capturing the receipt

Verifying offline

Install malibu-verify from CLI Reference → malibu-verify. Then:
Or verify a bundled capture (receipt + OpenAI request body + OpenAI response body + provider_id):
Exit codes:

When to verify

Most buyers verify post-hoc for audit trails rather than on every request — per-request verification adds a round-trip. Batch a day’s receipts, run malibu-verify in a nightly job, keep the verified receipts for dispute resolution.

Trust boundary

A valid result proves:
  • A holder of the provider signing key signed the canonical tuple.
  • The verifier resolved that key through the configured trust source.
It does not prove: model honesty (beyond model_hash matching the catalog), timestamp honesty, response uniqueness, privacy, replay resistance, or absolute trust in the coordinator. See Network overview → Security & trust model.

Why it matters

  • Audit trail. A buyer can prove an inference happened, on which model, at which provider — without trusting the gateway to be honest after the fact.
  • Provider accountability. Disputes over output quality or downtime become resolvable from receipts rather than from memory.
  • New compositions. Receipts can be replayed into systems that don’t trust the issuer but trust the signature (escrow, reputation, on-chain settlement).
  • Settlement. Coordinator receipt verdicts drive gateway buyer debit/refund on the money path. See Verified model settlement.