SKIP TO CONTENT
Protocol9 minStandards That Ship / Ep. 3

Agent Payments, x402, and Who Is Liable When an Agent Pays

Adam Boudjemaa
SHARE
Pixel-art illustration of a robot at a payment terminal tethered by a glowing cord back to a distant human silhouette.

KEY TAKEAWAYS

  • When an autonomous agent pays, liability is usually undefined: x402 moves the money, but no standard records which principal authorized the payment or what limit it was under.
  • The fix isn't new. It's KYC turned into Know Your Agent: on-chain identity (OnchainID, ERC-734/735), identity-gated transfer (ERC-3643), and account-abstraction rails (ERC-4337/7579).
  • I already shipped those pieces: ERC-3643 identity-gated transfer at Tokeny, and ERC-4337/7579 rails at Biconomy that moved $441M across 38M+ transactions.
  • ERC-8203, Agent Offchain Conditional Settlement, is where the missing layer is forming. I co-author it, second of three named authors, and wrote its reference implementation (PR #1614); Xianrui Qin is the primary author. It is still a Draft and not merged.
  • A workable liability model needs three on-chain anchors: which principal authorized the agent, what it could spend, and proof the transfer met those terms.
$441M
MOVED ON THE RAILS
Biconomy (ERC-4337/7579)
38M+
TRANSACTIONS
across the same rails
$32B+
GATED ON IDENTITY
tokenized on ERC-3643

The agent paid. Now who is liable?

Last month an AI agent bought API credits for me. It found the endpoint, hit a paywall, paid, and moved on. The payment worked. Nobody had decided who'd answer for it if it had paid the wrong bill.

That gap, not the payment tech, is the real problem with agent payments. x402 and the protocols around it solved how an agent hands over money. They didn't solve who stands behind that money when it goes wrong. The layer that records the principal, the spending limit, and the proof the payment was authorized is still missing.

I'm not writing this as a spectator. I shipped the three pieces that layer needs: on-chain identity at Tokeny, identity-gated transfer with ERC-3643, and account-abstraction rails at Biconomy that moved $441M across 38M+ transactions. This is the case for turning KYC into Know Your Agent, from someone who put KYC on-chain.

THE LIABILITY QUESTION
Decide: An agent paid a bill on its own. Who answers for it?Decision tree: An agent paid a bill on its own. Who answers for it? If All three are recorded: the principal, the spending scope, and proof the transfer met those terms, then Liability is the principal's, provably. If The principal is named, but the spending scope was never recorded, then Liability is undefined. If None of the three is recorded, which is where agent payments sit today, then No accountable owner.DECIDEAn agent paid a bill on its own. Whoanswers for it?IF All three are recorded: theprincipal, the spending scope, andproof the transfer met those termsLiability is theprincipal's, provablyNobody has to be believed. Therecord answers the question on itsown.IF The principal is named, but thespending scope was never recordedLiability is undefinedYou can say who the agent acts for.You can't say the payment wasinside what that principalauthorized.IF None of the three is recorded,which is where agent payments sittodayNo accountable ownerx402 moved the money. On its own itrecords none of the three.
The whole article is one branch of this tree. Everything below is how you get from the bottom branch to the top one, using standards that already exist.

What x402 does, and what it leaves open

Let me be precise about what x402 is, because the hype blurs it. x402 is a payment protocol Coinbase introduced in 2025 that revives the old HTTP 402 'Payment Required' status code. A server answers a request with 402 and a price; the client, often an agent, pays in stablecoins and retries. It's a clean way for software to pay software.

That's genuinely useful, and it's not the same as solving liability. x402 standardizes the request and the settlement of a single payment. It doesn't standardize the identity of the agent paying, the authority it was granted, or the record a regulator would ask for later. A public tracker, x402scan, lists live x402 activity as of mid-2026. The unanswered question is who's accountable for each of those payments.

THE X402 HANDSHAKE
Sequence diagram: 2 participants: Agent, ServerSequence diagram: 2 participants: Agent, Server. Step 1: Agent to Server, Requests a paid endpoint.. Step 2: Server to Agent, Answers 402 Payment Required, with a price.. Step 3: Agent to Server, Pays the quoted price in stablecoins.. Step 4: Agent to Server, Retries the same request. It completes..AGENT > SERVERRequests a paid endpoint.SERVER > AGENTAnswers 402 Payment Required, with aprice.The HTTP status code nobody used, revived.AGENT > SERVERPays the quoted price in stablecoins.AGENT > SERVERRetries the same request. Itcompletes.Four clean steps, and not one of them recordswho authorized the agent or what it wasallowed to spend.
Nothing here is broken. The handshake does exactly what it promises, and the liability record simply isn't part of it.

Know Your Agent is KYC, moved to the agent

Here's the reframe that makes the problem tractable. We already solved a version of this for humans. It's called KYC: before a person can move regulated money, an institution verifies who they are and what they're allowed to do. Agent payments need the same thing, aimed at the agent. Call it Know Your Agent.

The difference is where the identity lives. A human's KYC record sits in a bank's private database. An agent operates across services that don't share a database, so its identity has to be portable and verifiable by anyone, which is exactly what an on-chain identity is. I built that primitive at Tokeny as OnchainID, using ERC-734 and ERC-735, before agents were the reason anyone wanted it.

KYC, for a person

A bank verifies a human once, stores the result privately, and trusts its own record. The identity is real but locked inside one institution, useless to the next service the person deals with.

KYA, for an agent

An agent carries a verifiable on-chain identity: a claim that names which principal it acts for and what it may do. Any service, or any token, can check it at the moment of payment, without calling the bank that issued it.

The three pieces I already shipped

Know Your Agent isn't a research project for me. It's three shipped standards and systems, stacked. Each already runs in production for regulated assets. Agent payments just point them at a new payer.

THREE PIECES, ALREADY SHIPPED
1

Identity: OnchainID (ERC-734/735)

An on-chain identity contract that holds signed claims from trusted issuers. It answers 'who's this actor and who vouches for it'. I built this layer at Tokeny. For an agent, the claim names its principal.

2

Identity-gated transfer: ERC-3643

The token checks the receiver's identity claims at transfer time and reverts if they don't match. I'm one of five named authors of ERC-3643, now a Final standard behind $32B+ in tokenized assets. It proves an on-chain rule can gate money on identity, which is what a scoped agent payment needs.

3

Account-abstraction rails: ERC-4337/7579

Smart-contract accounts with programmable permissions, session keys, and spending limits. At Biconomy I was the top contributor to Nexus, an ERC-4337/7579 stack that moved $441M across 38M+ transactions. This is where an agent's spending authority becomes code, not a trusted prompt.

Three layers in the order they answer the question: who the agent is, whether the token will let it move, and what it may spend. None of them were designed for agents. All three already hold real money.

Stack those three and an agent payment stops being a bare transfer. It becomes a transfer from a scoped smart account, by an agent with a named principal, gated on an identity rule. The mechanics of that gate are the ones I detail in ERC-3643: identity-gated transfer, explained.

ERC-8203: the draft settlement layer I co-author

There's still a missing piece, and it's the one I'm closest to right now. Identity says who the agent is. Scoped accounts say what it may spend. Neither says: settle this payment only if an off-chain condition is later proven true. That conditional step is where a lot of real agent commerce lives, and it's what ERC-8203 is trying to standardize.

ERC-8203, 'Agent Offchain Conditional Settlement', is an early draft. I need to be exact about my role, because it's easy to overstate. The standard's primary author is Xianrui Qin. I wrote the reference implementation, the working code that shows the interface can be built, submitted as PR #1614. I authored three Ethereum standards, ERC-3643, ERC-6960, and ERC-7410. ERC-8203 is a fourth, but it is not finished: I am second of three named authors on a Draft that is still an open PR.

The reference implementation sketches an interface roughly like this. Treat it as a shape, not the normative text, which is Xianrui Qin's to define.

IAgentConditionalSettlement.sol
// ERC-8203 (draft): Agent Offchain Conditional Settlement.
// Primary author: Xianrui Qin. This is the reference-implementation
// shape I submitted as PR #1614, simplified. Illustrative, not the spec.
interface IAgentConditionalSettlement {
    // An agent opens a settlement it will honor IF a condition is later proven.
    function openSettlement(
        bytes32 agentId,        // the agent's on-chain identity
        address principal,      // who is liable if this settles
        bytes32 conditionHash,  // hash of the off-chain condition to satisfy
        uint256 maxAmount       // the ceiling the principal authorized
    ) external returns (bytes32 settlementId);

    // Settlement executes only when the proof matches, and within maxAmount.
    function settle(bytes32 settlementId, bytes calldata proof) external;
}

Three highlighted fields carry the liability argument. agentId is the agent's on-chain identity, the thing a signed claim can tie back to a principal. principal records the human or company on the hook if the payment settles. maxAmount records the ceiling they authorized. Settlement only fires when a proof satisfies the committed condition, so nothing moves outside the scope the principal set.

A liability model that could actually work

Put the pieces together and you can write down a liability model that a regulator, an engineer, and an insurer could all read. It has three anchors, and the whole thing turns on whether all three are present.

This is the diagram I keep coming back to. Each anchor maps to a standard I've already named. The point isn't that it's finished. The point is that every part of it already exists in production somewhere, waiting to be pointed at agent payments.

AGENT PAYMENT, WITH ANCHORS
Sequence diagram: 5 participants: Agent, Server, OnchainID, Scoped account, SettlementSequence diagram: 5 participants: Agent, Server, OnchainID, Scoped account, Settlement. Step 1: Agent to Server, Hits a paid endpoint on its principal's behalf.. Step 2: Server to Agent, Answers HTTP 402 with a price (x402).. Step 3: Agent to OnchainID, Proves which principal it acts for.. Step 4: Agent to Scoped account, Pays from a scoped smart account.. Step 5: Scoped account to Settlement, Settles only if the condition is proven.. Step 6: Settlement to Agent, Payment clears, and the principal is on the hook..AGENT > SERVERHits a paid endpoint on itsprincipal's behalf.SERVER > AGENTAnswers HTTP 402 with a price (x402).x402 moves the money. On its own it recordsnone of the three liability anchors.AGENT > ONCHAINIDProves which principal it acts for.Anchor 1, who authorized: OnchainID(ERC-734/735) names the principal.AGENT > SCOPED ACCOUNTPays from a scoped smart account.Anchor 2, what it could spend: ERC-4337/7579caps the amount and scopes the session keys.SCOPED ACCOUNT > SETTLEMENTSettles only if the condition isproven.Anchor 3, did it meet terms: ERC-8203 (draft)checks the proof against maxAmount.SETTLEMENT > AGENTPayment clears, and the principal ison the hook.All three anchors resolved, so liability isthe principal's, provably.
The same payment, but now every step writes one of the three liability anchors. x402 handles the handshake; identity, scope, and proof are what leave the principal provably on the hook.
THE THREE ANCHORS
Layered stack diagram: 3 layers, top to bottomLayered stack diagram: 3 layers, top to bottom. Layer 1, WHO AUTHORIZED: Principal identity, OnchainID, ERC-734/735. Layer 2, WHAT IT COULD SPEND: Authorization scope, ERC-3643, ERC-4337/7579. Layer 3, DID IT MEET TERMS: Settlement proof, ERC-8203 (draft).WHO AUTHORIZEDPrincipal identityOnchainIDERC-734/735WHAT IT COULD SPENDAuthorization scopeERC-3643ERC-4337/7579DID IT MEET TERMSSettlement proofERC-8203 (draft)
Each anchor maps to a standard already running in production. The middle band, the agent's spending scope, is load-bearing: remove it and liability is undefined.

Resolve all three and liability is the principal's, provably. Remove the middle anchor and liability is undefined. That gap is where agent payments sit today.

Party
Liable for
The on-chain anchor that proves it
Principal (human or company)
Payments made within the scope it granted
A signed claim naming the principal for the agent identity
Agent operator
Keeping the agent inside its granted scope
Spending limits and session keys in the ERC-4337/7579 account
Nobody, today
Any payment made with no recorded scope
There's no anchor, which is the problem

What this unlocks, and why now

So what does this buy you, and why write it now? Because the standards are landing faster than the liability conversation. x402 made machine payments easy this year. The identity and settlement layer under it is being drafted right now, in public, in threads like the ERC-8203 discussion.

If you build agents that touch money, the practical move isn't to wait for the settlement standard to finalize. Give every money-moving agent a real identity and a scoped account today, with the pieces that are already Final. I go deeper on the containment side of this in least privilege for agents that move money.

Standards harden fast once they ship, and the first credible implementations shape the normative text. I'd rather the liability model that wins be one built by someone who's actually gated regulated money on-chain than one written by a team optimizing for a demo. That's the same reason I wrote the ERC-8203 reference implementation instead of waiting to comment on the finished spec.

FAQ

Today, often nobody clearly is, and that's the problem. Clean liability needs three facts recorded on-chain: which principal authorized the agent, what it was allowed to spend, and proof the payment met those conditions. Payment protocols like x402 move the money but don't record those three, so an autonomous payment can end up with no accountable owner.

x402 is a payment protocol Coinbase introduced in 2025 that revives the HTTP 402 'Payment Required' status code. A server responds with a price, and the client, often an agent, pays in stablecoins and retries. It standardizes the payment handshake between machines. It doesn't standardize the agent's identity or who's liable for the payment.

Yes, as a co-author, and the caveat matters more than the credit. I am the second of three named authors on ERC-8203, 'Agent Offchain Conditional Settlement'. Xianrui Qin is the primary author and it was his PR, #1614. I wrote its reference implementation. It is still a Draft and it is not merged into the ERCs repository yet, so treat it as work in progress rather than something you can build against today. My other three are ERC-3643, ERC-6960 and ERC-7410, all merged.

Because it turns KYC into Know Your Agent. An on-chain identity gives an agent a verifiable record of which principal it acts for and what it may do, that any service or token can check at the moment of payment. ERC-3643 already enforces that kind of identity check at transfer time for $32B+ in tokenized assets, so the mechanism is proven, not hypothetical.

Two of the three are. ERC-3643 is a Final standard, and the ERC-4337/7579 account-abstraction rails I worked on at Biconomy moved $441M across 38M+ transactions. The conditional-settlement piece, ERC-8203, is still an early draft. So you can give agents identity and scoped accounts now, and the settlement standard is the part still being written.

Standards That Ship

Episode 3 · 5 published

Adam Boudjemaa

Adam Boudjemaa

Former CTO of Integra. Named author (1 of 5) of ERC-3643, first author of ERC-6960, co-author of ERC-7410, and co-author of ERC-8203, which is still a draft. Building production AI and regulated Web3 systems.

Enjoyed this post?

Get more like it in your inbox every Tuesday.