Require this from an AI vendor.
For every consequential action, ask for one signed ActionReceipt that is bound to the request and limits you accepted, delivered into your custody, and locally verifiable without the vendor’s service.
Six requirements
- 01Emit one ActionReceipt per consequential action.
- 02Bind it to the accepted request, authority, and limits.
- 03Sign it under a key accepted for the transaction.
- 04Deliver it to the customer for retention.
- 05Keep it verifiable in the open ActionReceipt format.
- 06Make verification independent of the vendor service’s continued availability.
Starting procurement language
Copy this into a vendor conversation or procurement draft. It is starting language, not legal advice.
For every consequential action performed on Customer’s behalf, Vendor will deliver one ActionReceipt in the agreed open format. The receipt will bind the action to the accepted request, authority, and limits; identify its evidence references and available challenge fields; and be signed under a key accepted for the transaction. Customer may retain and verify the receipt locally without continued access to Vendor’s service. Receipt verification does not by itself establish server identity, tool execution, result correctness, or complete recording.
Full procurement specification
The sections below separate requirements available with the released Bulla package from optional repository-source research material.
Vendor logs and customer records
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.
A provider can export the relevant event, bind it to the buyer’s request and accepted terms, authenticate it, and let the buyer retain it. Bulla places that material in a customer-facing transaction record so buyers do not need a new log schema for every provider.
Customer-retained files
An ActionReceipt records one transaction in an open, versioned format. Customers, auditors, claims handlers, and underwriters can check the retained file after an agent or provider endpoint becomes unavailable. Receipt verification alone does not establish occurrence or complete recording.
A constructed USD 125.00 example shows the records used for a payment dispute. Download the retained receipt or run the local checks.
Shipped receipt requirements
ActionReceipts cover the accepted request, authority and limits, reported result, evidence references, challenge fields, local verification, and customer reconciliation.
01
Accepted request and terms retained
Record the accepted request, authority, limits, evidence references, and challenge fields in the retained transaction record.
02
One signed receipt per consequential action
Require a separate signed action record for each payment, deployment, write, permission change, and data-egress action.
03
Customer-retained receiver records and coverage reconciliation
Keep an independent record of the actions the customer received, then compare it with the receipt set to identify unmatched actions.
04
Local verification and receiver policy
Deliver the receipt in the open format so the customer can verify it locally and apply its own RELY, REFUSE, or ESCALATE policy.
Receiver policy presets
Bulla 0.49.2 publishes three named policy definitions. Pin the canonical hash in each reliance record so another verifier can recompute the same choice.
| Preset | Temporal status | Revocation status | Evidence check | Canonical hash |
|---|---|---|---|---|
| reliance.strict.v1 | Accepted: within_window, not_applicable | Accepted: not_revoked, not_applicable | No minimum | sha256:a05fc64115edc0676b4bd0092c0cadf94400abf6cbb7d32520944bdefdc5ee0b |
| reliance.pragmatic.v1 | Explicitly accepts: within_window, unresolved, not_applicable | Explicitly accepts: not_revoked, unresolved, not_applicable | No minimum | sha256:2549faa0f297c8e43d9462a28b464cd2e0813e986b58555d9b29572351fc0b88 |
| reliance.evidence-strict.v1 | Accepted: within_window, not_applicable | Accepted: not_revoked, not_applicable | At least third_party_anchored | sha256:dc99f279515ff883294ba4ab7d9de8e1be92d2b3c47819f78586a92da7daa301 |
Strict excludes unresolved and adverse temporal or revocation states; it accepts within_window or not_applicable for temporal status and not_revoked or not_applicable for revocation status. Pragmatic additionally accepts unresolved for both. Evidence-strict retains the strict states and requires the receiver to validate the referenced evidence as third_party_anchored or execution_verified. A class label carried in the receipt does not satisfy that requirement by itself. None of these presets is legal advice or a universal default; the receiving party chooses and records its own rule.
Checks before accepting delivery
Treat the receipt as an input to customer policy. Before delivery, name acceptable signers, evidence sources, action-log coverage, and challenge terms.
Missing records may justify waiting for more evidence; a verified negative result may justify refusal. An eligible result still requires a separate authority record before any execution attempt.
- Verification-kit archive matches the contracted detached or signed-release digest.
- 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.
- Report identifies each evidence item as a provider statement, reproducible computation, counterparty-signed record, or another supported evidence class.
- Coverage report identifies the supplied action log and every unmatched action in it.
- Receipt names the challenge forum, window, remedies, and current reachability status.
Download the verification kit and its detached digest.
Who retains the records
Bulla Labs 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.
Vendor integration point
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.
Local receipt and coverage checks
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"])First, recompute one record. Next, run the drill under a network guard; it repeats supported checks and lists 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.
Applicable logging duties
EU AI Act requirements include 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. ActionReceipts complement those operational logs with 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.
Implementation work for vendors
Bulla Labs publishes Bulla under the Apache-2.0 license. Providers add Bulla to the gateway, tool router, payment handler, or agent runtime that already accepts and records the action. Customers receive the resulting file and can run local checks without a hosted service.
Send this page to the vendor, then use the quickstart or the Python integration guide.
Optional research material
Repository-source profiles extend the stable receipt with witnessing, capital allocation, challenge authorities, consequence eligibility, and settlement reporting. These clauses describe that research path; they are not part of the installed package.
R1
Named evidence rules and external trust roots
State which evidence test applies and obtain accepted signer keys, witness roots, and authority grants outside the vendor-supplied dossier.
R2
Challenge process and decision authority
Define the window, forum, correction path, and exact authority that may decide or authorize a consequence.
R3
Bounded capital and recourse
Name the maximum covered loss, required allocation, binding mode, permitted remedy, and authority for any attempted transfer.
R4
Portable assurance dossier
Deliver the promise, relevant receipts, receiver evidence, witness references, challenge state, and any consequence records in a retained package.
W1
Operator and key
Name the witness operator, log, key identifier, and authority epoch. Obtain the accepted trust roots outside the vendor-supplied dossier.
W2
Checkpoint exchange
Require signed checkpoints, leaf-bound inclusion, append-only consistency evidence, and a route for exchanging views between relying parties.
W3
Covered fault
State the exact objective predicate. For the current source profile, coverage is limited to two authentic different roots for the same log, epoch, and tree size.
W4
Challenge and authority
Name the challenge checkpoint, correction path, settlement authority, permitted destination, and maximum consequence.
W5
Bond allocation and priority
Name the unit, dedicated or pooled allocation, priority against competing claims, and the external evidence required to accept the reported lock.
W6
Rail evidence
Name the settlement adapter and distinguish eligibility, authorization, an attempted rail event, execution, and collection.
Review the current witness covenant and its limits before adapting these clauses.
Optional research rider
Where the parties adopt an answerability profile, they will also name the evidence rule, external trust roots, witness operator, checkpoint exchange, challenge procedure, decision authority, capital allocation, permitted consequence, destination, and settlement adapter. No financial consequence may be attempted unless the supplied dossier establishes the agreed predicate, coverage, challenge, authority, and capital conditions. Semantic or appraisal disputes will be routed to the named forum.