Veyto

Receipts

Every payment that clears the policy gate produces a receipt, signed with Ed25519 over a canonical serialization.

ts
const { items } = await veyto.listReceipts({ limit: 25 });
const receipt = await veyto.getReceipt(id);

The shape

ts
{
  receipt_id, intent_id, created_at,
  signed:   { body_canonical, signature },   // exactly what was signed
  finality: { state, observed_at, evidence, signed: false, source },
}

signed.body_canonical comes back byte-identical to what was signed — not reshaped, not prettified, not merged with anything. That is what makes it checkable by someone who does not trust the API that served it.

What the signed body binds

fieldwhat it is
amount_minor, currencywhat was authorized
payee_canonicalwho was to be paid
settled_amount_minor, settled_payeewhat actually settled
settlement_mismatchwhether those two disagree
rail, tx_hashwhere, and which transaction
policy_digesta fingerprint of the exact rules in force at that instant
policy_versionwhich version produced the decision
caller_asserted_goods_digesta hash of the bytes you say arrived (opt-in)
sig.alg, sig.kid, sig.pub, canon_vhow to check it, years later, with nothing else

policy_digest is the one nobody else can give you

It is a fingerprint of the rules that actually governed that payment, taken by the thing that made the decision, at the moment it made it. It proves the policy was not edited afterwards to make a payment look compliant. Only the decider can produce it, and only then.

caller_asserted_goods_digest is your claim, not ours

Enable it with attestGoods: true. Veyto records the digest you reported for the bytes that arrived. It is non-repudiation, not proof that Veyto inspected the goods — the word caller_asserted is in the field name for that reason.

Finality sits outside the signature

finality is what Veyto believes now about settlement — learned after the receipt was issued. It travels beside the signed body and is marked signed: false.

It is outside for a reason: a signature is fixed at signing time and cannot learn things. Folding later knowledge into it would make every receipt fail to verify.

Three separate questions, deliberately not merged:

  • the signed receipt — what Veyto attested, at signing time;
  • finality — what Veyto believes now about settlement;
  • delivery — whether the goods were any good, which Veyto does not judge.