An agent calls a paid API, gets a 402 with a price, pays it in USDC on Arc and gets the data. No card, no account. The same contracts work for people too: payment links, .agent names, scheduled sends, splits. Money goes from payer to recipient in one transaction. We never hold it.
live on arc mainnet · five verified contracts · testnet sandbox ↗ · open source ↗
{ typical time to settle }
{ verified contracts, none hold funds }
{ fee cap, set in the contract }
{ balance we hold for you }
Cards and bank transfers need a person to approve them. An agent calling an API a thousand times a day can't do that. With zunivo the endpoint answers HTTP 402 with a price, the agent pays it from its own wallet, retries with the tx hash and gets the response. Adding the 402 to your Express app is one middleware. Every paid call has a transaction on Arc you can look up.
This is the actual flow on mainnet, not a mockup. Try it yourself: curl https://api.zunivo.io/x402/arc-pulse returns a 402 you can pay.
Each one is a separate contract. They are short, you can read them, and they are verified on ArcScan.
Make a payment link or a QR code. The payer can use any wallet, or a passkey if they don't have one.
Create a link //02Pay a .agent name or a 0x address. Settles in about a second. Both sides get a receipt in their dashboard.
Send now //03Lock a payment until a date. Once it's locked nobody can pull it back, including us. The recipient sees the countdown in their dashboard.
Schedule //04One payment, split between 2 to 20 addresses in the same transaction. The percentages can't be changed after the link is made.
Create a splityourname.agent is an ERC-721 on Arc. Whoever holds it receives the USDC sent to that name, so if you sell or transfer the name the payments go with it. The image and metadata are stored in the contract, not on a server. 1 USDC to mint.
Five contracts: settlement, names, scheduled sends, splits and agent records. Payments pass straight through to the recipient. Locked sends sit in a contract that has no owner function to move them. There is no pooled balance for anyone to drain, including us.
Mainnet v1.3 · Arc chainId 5042 · verified on ArcScan. The testnet sandbox set is listed in the docs. Full source, the 91-test adversarial suite, and our security review live at github.com/zunivo-pay ↗
No. A payment goes from the payer to the recipient inside one transaction. A locked send sits in the ScheduledSends contract, which has no function that lets us move it. There is no balance held on your behalf anywhere.
If you created it without the reclaim option, correct. Before the unlock time nothing can move it, not the sender, not us. After unlock anyone can call release, but the money can only go to the recipient set at creation. The tests for this are in the repo.
No. The list of recipients and percentages is written once when the split is created and the contract has no function to edit it. If you need different shares, make a new split.
No, it's not DNS. It's an NFT on Arc that resolves to a payout address, and you can transfer or sell it like any NFT. It has nothing to do with Unstoppable Domains' .agent TLD or any ICANN registry.
A way to pay for an API call without a human approving it. The server returns 402 with a price, the agent's wallet pays it on Arc, the server checks the tx and returns the data. The SDK handles the 402, the payment and the retry; the MCP server does the same for Claude and other desktop agents.
Gas on Arc is a fraction of a cent, paid in USDC. The protocol fee is hard-capped at 1% in immutable
code and is currently 0.5% on mainnet (0% on the testnet sandbox). A .agent name is 1 USDC on mainnet.
On Arc mainnet now. Testnet is still up if you want to try it with fake money first.