Agent Transaction Primitive
WAB is no longer just a discovery and execution protocol — it is the trust + transaction layer for agentic commerce. ATP makes four guarantees first-class: a signed intent contract from the human, idempotent execution, a cryptographically verifiable receipt, and explicit compensation.
The lifecycle
Why this matters
For users
You see exactly what you authorized, what the agent did, and you can verify the receipt later — even without WAB online.
For agents
No more retries causing double-charges. idempotency-key + the intent's spend cap make safe execution structural, not aspirational.
For sites
Every transaction comes with a signed proof of consent. Disputes become deterministic, not he-said-she-said.
For ecosystems
The protocol is open. The verification endpoint is public. The receipt format is canonical JSON. No vendor lock-in.
Quick start
// Node 18+ — install: npm i web-agent-bridge
const { ATPClient } = require('web-agent-bridge/sdk');
const atp = new ATPClient({ baseUrl: 'https://webagentbridge.com', token: USER_JWT });
// 1) The human declares the contract.
const intent = await atp.createIntent({
purpose: 'Buy a book ≤ €30',
scope: { actions: ['search','add_to_cart','checkout'] },
spend_cap_cents: 3000,
ttl_seconds: 600,
});
// 2) The human confirms.
await atp.authorizeIntent(intent.id);
// 3) The agent executes — idempotent by key.
const tx = await atp.beginTransaction({
intent_id: intent.id, amount_cents: 1500,
idempotency_key: 'order-' + Date.now(),
});
await atp.transition(tx.id, 'executing');
await atp.step(tx.id, { action: 'checkout.confirm', evidence: { order_id: 'X1' } });
await atp.transition(tx.id, 'executed');
await atp.transition(tx.id, 'settled');
// 4) Signed receipt — anyone can verify.
const receipt = await atp.issueReceipt(tx.id);
const verification = await atp.verifyReceipt(receipt.id);
console.log(verification.verification.ok); // true
The signed receipt
Every receipt is a canonical JSON document signed with Ed25519. The public verification endpoint (POST /api/atp/receipts/verify) requires no authentication — that is the whole point. Anyone can hold a receipt accountable.
{
"type": "atp.receipt.v1",
"receipt_id": "atp_rcpt_…",
"transaction": { "id": "atp_tx_…", "status": "settled", "amount_cents": 1500, … },
"intent": { "id": "atp_int_…", "purpose": "Buy a book ≤ €30", "scope": { … }, … },
"steps": [ { "seq": 1, "action": "checkout.confirm", "state": "succeeded" } ],
"signature": {
"algorithm": "ed25519",
"value": "BASE64…",
"key_id": "16-char fingerprint",
"public_key":"BASE64…",
"signed_at": "ISO-8601"
}
}
Open core · paid features
The protocol and verification stay open so the standard can spread. Higher throughput, persistent key binding, and enterprise features fund the work.
| Capability | Tier | Notes |
|---|---|---|
| Protocol spec & SDK | open source | MIT licensed. Implement it anywhere. |
| Public receipt verification (no auth) | open source | Anyone can verify any ATP receipt. |
| Intent creation | free | 10/day on Free, 50/day on Starter. |
| Receipts with persistent site key binding | pro | 500 intents/day. Continuity of trust across receipts. |
| Idempotent execution at scale | pro | Higher quotas, audit export. |
| Compensation flows + retry classification | business | 5 000 intents/day, webhook subscriptions. |
| HSM-backed signing, custom workflows, SLA | enterprise | Unlimited, dedicated settlement queue. |
Security posture
- Single-use nonces. Authorization burns the nonce in
atp_nonces— replays fail at the DB layer. - State machine in the DB. CHECK constraints make illegal transitions unrepresentable, not just unlikely.
- Idempotency.
UNIQUE (intent_id, idempotency_key)means retries can never double-execute. - Spend cap on every transition. Enforced server-side, not in the agent.
- Canonical JSON signing. RFC 8785-style key ordering means a tampered receipt cannot pass verification.
- Public verify rate-limited. 120 req/min per IP, cryptographic check is the answer.
Reference
Full API in /docs.html and machine-readable spec in docs/SPEC.md. Mount path: /api/atp. Source: github.com/abokenan444/web-agent-bridge.
We run our own business on it
WAB doesn't just publish this protocol — it bills its own customers with it. Every subscription processed through webagentbridge.com produces a publicly-verifiable Ed25519 receipt. Audit the books at /transparency.html.