What is AP2
Agent Payments Protocol (AP2) is Google’s open protocol for AI agents to negotiate, authorise, and settle payments on behalf of humans. Unlike x402’s per-request model, AP2 introduces mandates: signed, scoped authorisations a human gives an agent. For example, “you may spend up to $50 buying flights from these vendors”. AlgoVoi provides the on-chain settlement extension for AP2. When a mandate is exercised, the resulting payment lands on Algorand, VOI, Hedera, Stellar, Base, Solana, or Tempo as USDC.When to use AP2
Bounded autonomy
“Buy any of these 5 SKUs under $20 each, max $100 total this week.”
Cross-vendor mandates
One mandate authorises an agent to pay multiple vendors without re-confirmation.
Audit-grade commerce
Every transaction traces back to a signed human mandate, giving you a strong audit story.
Human-present scenarios
Agent proposes, human approves once, then the agent executes without further approvals.
How AP2 differs
| x402 / MPP | AP2 | |
|---|---|---|
| Authorisation | Per-payment | Mandate (multi-payment, scoped) |
| Counter-party signing | Just the payer | Both human and agent |
| Settlement | Direct | Direct (with extension) |
| Best for | Unattended API calls | Agent-mediated purchases |
Sample scenarios
AlgoVoi has shipped two reference scenarios upstream into the official AP2 samples repo:crypto-algo human-present
Algorand USDC settlement of an AP2 mandate, with full agent and ADK code.
crypto-solana human-present
Solana Pay reference-binding settlement of an AP2 mandate.
Architecture
AlgoVoi sits in the verifier role, the same as in x402, but the agent is now spending against a pre-signed mandate rather than per-call human approval.Live demos
A working AP2 over A2A v1.0 REST + MCP demo runs against AlgoVoi’s production gateway. The agent card publishes:verify-paymentskill (AP2-compatible verification)create-checkoutskill (agent-initiated AP2 mandate exercise)check-statusskill
Canonicalisation conformance
AP2 mandates carry anopen_mandate_hash field that identifies the mandate stably across the agent, the credential provider, and the merchant. The hash needs to be implementation-independent — two parties must derive the same bytes from the same mandate body, or interop breaks silently.
AlgoVoi follows this derivation rule:
v0 conformance vectors
We published a 7-vector reference set anchored to AP2’sopen_checkout_mandate.json schema (sha e3d9cafa), structured as pairs so the canonicalisation rules are self-checking:
| Vector | Pair | Rule |
|---|---|---|
baseline-001 | — | reference baseline |
object-key-order-002 | with 001 | JCS sorts object members → byte-identical to 001 |
array-order-003 | with 001 | arrays are order-significant; do NOT sort → differs from 001 |
optional-fields-004 | with 001 | presence is not absence; not collapsed → differs from 001 |
currency-minor-unit-005 | — | ISO-4217 integer minor units; no decimal/float |
unicode-nfc-006a | with 006b | RFC 8785 does NO Unicode normalisation |
unicode-nfd-006b | with 006a | NFC and NFD inputs hash differently |
Cross-implementation validation
The v0 conformance vectors are part of the JCS canonicalisation substrate — validated byte-for-byte across five reference implementations authored by four independent teams. 7 vectors × 5 impls = 35 byte-for-byte agreements for this set.| Implementation | Authors | Language | Result |
|---|---|---|---|
rfc8785@0.1.4 | William Woodruff (Trail of Bits) | Python | 7/7 JCS bytes + 7/7 hashes + 4/4 pair invariants ✓ |
canonicalize@3.0.0 | Samuel Erdtman + Anders Rundgren | JavaScript | 7/7 JCS bytes + 7/7 hashes + 4/4 pair invariants ✓ |
gowebpki/jcs v1.0.1 | Web PKI WG | Go | 7/7 JCS bytes + 7/7 hashes + 4/4 pair invariants ✓ |
cyberphone/json-canonicalization | Anders Rundgren (RFC 8785 author) | Java | 7/7 JCS bytes + 7/7 hashes + 4/4 pair invariants ✓ |
serde_jcs 0.2.0 | seritalien (Vauban Pay) | Rust | 7/7 JCS bytes + 7/7 hashes + 4/4 pair invariants ✓ (report) |
References
- v0 conformance vectors gist — the 7 paired vectors with their canonical JCS bytes and expected hashes
- AP2 issue #265 — formal proposal to adopt the v0 set as spec-level conformance fixtures
- AP2 Discussion #262 — full validation history, including the rfc8785 + canonicalize cross-impl runs