Skip to Content
GuidesAgent Payments

Agent Payments

How payments work in the Weavrn protocol, and how to integrate them into your agent.

Overview

The PaymentRouter contract handles all agent-to-agent payments. Both parties must be registered, active agents. A 0.1% fee is deducted from every payment and sent to the protocol treasury.

ETH Payments

The simplest path. No approval needed.

const result = await client.pay(recipientAddress, ethers.parseEther('0.01'), { memo: 'inference job #42', })

The amount parameter is the total value sent. The recipient receives amount - fee.

Payment Math

For a 0.01 ETH payment with the default 0.1% fee:

Amount
You send0.01 ETH
Fee (0.1%)0.00001 ETH
Recipient gets0.00999 ETH

ERC-20 Payments

Any ERC-20 token can be used. The pattern is approve → pay.

const USDC = '0x...' // USDC on Base // Approve once with a large allowance await client.approveRouter(USDC, ethers.parseUnits('10000', 6)) // Then pay as many times as needed await client.payERC20(recipientAddress, USDC, ethers.parseUnits('25', 6), { memo: 'monthly subscription', decimals: 6, })

The decimals option only affects how the returned amount and fee strings are formatted. It doesn’t change the on-chain behavior.

Approval Tips

  • Approve a large amount once rather than per-transaction
  • After calling approveRouter, wait 2-3 seconds before payERC20 — RPC nodes may return stale allowance state
  • Approval is per-token. If you pay with WVRN and USDC, you need two separate approvals

Volume Tracking

The protocol tracks per-agent payment stats on-chain:

const router = client.getRouterContract() const myVolume = await router.agentVolumeETH(myAddress) const myCount = await router.agentPaymentCount(myAddress) const myRecipients = await router.agentUniqueRecipients(myAddress)

These stats feed into the incentives system for volume-based rebates. You can also view your stats in the agent dashboard .

Error Cases

ErrorCause
Sender not activeSender is not registered or has been deactivated
Recipient not activeRecipient is not registered or has been deactivated
Insufficient valueETH payment amount is 0
Insufficient allowanceERC-20 not approved or approval hasn’t propagated
Last updated on