Require a transaction record your organization can keep.
Ask vendors to deliver one ActionReceipt for each consequential agent action, together with the evidence and checker needed to inspect it later.
Why the vendor’s logs are not always enough
Provider logs are useful, and Bulla does not replace them. But those logs usually use the provider’s schema, live in the provider’s account, and cover activity across its system. A customer reviewing one transaction later may depend on the provider’s access controls, export format, and retention policy.
If a provider exports the relevant event, binds it to the buyer’s request and accepted terms, authenticates it, and lets the buyer keep it, that export can become evidence for an ActionReceipt. Bulla standardizes the customer-facing transaction record so every buyer does not need a custom integration for every provider’s logs.
A file that stays with the customer
An ActionReceipt records one transaction in an open, versioned format the customer can retain. A customer, auditor, claims handler, or underwriter can check the file after the agent or provider endpoint is unavailable. The receipt does not by itself establish that the reported action occurred or that every action was recorded.
The constructed USD 125.00 example shows the exact separation used for a payment dispute. Download the retained receipt or run the local checks.
What to require
01
One receipt per consequential action
Require a separate record for each payment, write, permission change, and data-egress action. Each record names the action, subject, and reported outcome.
02
Authority inside the record
Each receipt names the acting principal, governing policy, and declared limits for that action. Verification reports whether the authority claim is authenticated.
03
A recourse path
Each receipt names the challenge forum, challenge window, and available remedies. Reachability remains a separate check.
04
Local verification
The records recompute on customer machines from the published specification. Digest checks do not require a vendor account, dashboard, or endpoint.
05
A coverage report
Receipts are compared with a customer-retained action log. The report names actions in that log with no matching receipt.
06
Retention that outlives the contract
The contract specifies receipt, verifier-kit, evidence, and coverage-record retention after the engagement ends.
What this check cannot tell you
This checks the receipt file. Evidence from the systems that performed or observed the action is still needed to establish what happened.
Technical evidence
Verification establishes only the reported digest, identity, or inclusion depth; it does not establish the truth of the underlying process.
Contract language
Starting language for a procurement conversation, not legal advice. Adapt the terms and periods to the engagement.
Vendor will emit an ActionReceipt conforming to the Glyph ActionReceipt specification (v0.2) for each consequential action its agents take on Customer systems or on Customer’s behalf, including payments, writes, permission changes, and data egress. Each receipt will bind the acting principal, the governing policy, and the bounds that applied, and will carry a recourse envelope naming a challenge forum and window. Vendor will deliver the receipts together with a periodic coverage report reconciling them against a Customer-retained dispatch record and identifying each unmatched action. Vendor will also deliver the ActionReceipt v0.2 verification kit and its detached SHA-256 digest. Customer may retain the receipts, supplied evidence, coverage record, and verification kit for an agreed period after termination. Before acceptance, Vendor will demonstrate thatbulla receipt drill reproduces the declared local checks with network access blocked and reports unresolved external claims separately.Acceptance checklist
This checklist accepts or rejects the delivered record set. It does not accept the action itself. The contract must state which signers, evidence sources, action-log coverage, and challenge terms are acceptable.
- The verification-kit archive matches the contracted detached or signed-release digest.
- The retained-receipt drill reports checker agreement and rejects its tamper control.
- Receipt integrity is reported as a named dimension rather than a global status.
- Authority is reported as authenticated, unauthenticated, forged, unresolved, or not applicable.
- The report identifies whether each evidence item is a provider statement, a reproducible computation, a counterparty-signed record, or another supported evidence class.
- The coverage report identifies the supplied action log and every unmatched action in it.
- The receipt names the challenge forum, window, remedies, and current reachability status.
Download the verification kit and its detached digest.
Storage and custody
Glyph does not host operational receipt sets. The customer and counterparty retain their own copies under an agreed policy. No independent receipt register is currently operated.
Why a provider would support ActionReceipts
Buyers, routers, and marketplaces can make receipt support a condition for routing work or accepting a delivery. A provider that supports the format can participate in those workflows and use the same agreed record for acceptance, audit, and disputes. The model itself does not need to create the receipt; the provider’s gateway or runtime can emit it.
Current evidence does not establish that receipt support makes payment faster, lowers insurance costs, or creates portable reputation. Those are possible outcomes to test, not claims of this standard.
Checking what you receive
The customer can paste a single receipt into the browser verifier, or verify a delivered receipt with the published CLI. The released Python API reconciles a delivery against a customer-retained dispatch record:
$ bulla receipt verify receipt.json --format json
$ bulla receipt drill receipt.json --format jsonfrom bulla import event_coverage
# Fact-bearing dispatch rows must carry record_sha256, and each delivered
# receipt must bind that digest in its result or evidence references.
report = event_coverage(
vendor_dispatch_log,
delivery_receipts,
anchor="vendor-dispatch-log",
)
print(report["unreceipted_delta"])The first command recomputes one record. The drill repeats supported checks under a network guard and reports external evidence requirements separately. event_coverage reconciles a delivery against the action log and returns actions with no matching receipt. Fact-bearing rows fail closed unless their canonical record digest is bound into the receipt. The blind-spot walkthrough runs both checks on a sample delivery.
Limits of the action-log comparison
Bulla can find actions in the supplied action log that have no matching receipt. It cannot find actions missing from that log.
Technical evidence
Coverage is computed relative to the supplied denominator; a compromised or incomplete independent log narrows what reconciliation can find. The browser recomputes digests and the set difference over unsigned fixture receipts and does not verify signer identity or the denominator's independence.
Logging is already law
The EU AI Act requires automatic event logging for high-risk AI systems (Article 12) and retention of at least six months (Article 26(6)), with high-risk obligations applying from August 2, 2026. An ActionReceipt is not a substitute for those operational logs. It provides a separate customer-facing transaction record that another party can retain and check. Whether a given deployment is high-risk is a determination for the deployer and its counsel, and this page does not make it.
What the vendor has to implement
The standard is open and the Bulla reference implementation is Apache-2.0 licensed. A provider adds Bulla to the gateway, tool router, payment handler, or agent runtime that already accepts and records the action. The customer receives the resulting file and can run local checks without a hosted service.
Send this page to the vendor. The build path is the quickstart, and the Python interface is at Wrap your agent’s actions.