FluxFluxDocs
Arc · 5042Launch app
Docs/Agent Registry

Agent Registry

Give an AI agent its own USDC wallet, set hard spending limits on it, and let it pay on its own. The agent keeps its own funds — Flux never holds them — and every payment is checked against your limits before it can go through.

Non-custodial. An agent is any wallet you choose — a Circle wallet, MetaMask, or a plain key an autonomous script holds. Flux never takes custody of its funds; it only enforces the limits you set.

How it works

Register an agent wallet with three caps: a per-transaction limit, a daily limit, and a lifetime limit. The agent wallet then approves the registry contract to move its own USDC, the same way you'd approve any contract to spend a token on your behalf. After that, the agent can pay recipients directly, and the registry checks every payment against your caps before it happens.

You can update caps, pause an agent, resume it, or shut it down permanently at any time. Only you, as the wallet that registered it, can change its settings.

Two ways an agent can pay

Caps mean different things depending on how the payment moves, and it's worth knowing the difference before you rely on them:

On-chain payments

The agent calls recordPayment. The registry itself pulls the funds from the agent's wallet and sends them. This is trustless: the cap physically cannot be exceeded, because the money can't move without passing the check first.

Gateway / x402 payments

For agent-to-service payments (an AI agent paying per API call, for example), Circle's Gateway moves the funds directly through its own settlement path — the registry never touches that money. The agent calls recordExternalSpend to log the payment against the same caps, but this only works if the agent's own code calls it before paying. Nothing on-chain forces that call to happen, so this cap is enforced by convention, not by the contract. Flux's own agent-payment code always calls it; a third-party integration would need to as well.

Flux agents can only pay for services today — publishing your own endpoint so other agents pay you through Flux is intentionally out of scope for now.

Guardrails

Beyond the three caps, each agent can have:

An expiry. After it passes, the agent can't spend anymore. Optional — leave it unset for no expiry.
A blocklist. Addresses this agent can never pay, regardless of caps.
An allowlist. Turn on “restrict to allowlist” and the agent can only pay addresses you've explicitly added.
A kill switch. Revoke shuts an agent down permanently. There's no reactivating it — register a new one if you need to.

Why this runs on Flux, not Circle

Flux enforces agent caps itself, on-chain, through this registry — trustless and independent of any wallet provider, so the limits can't be bypassed. Circle's own wallet-level spending policies (per-transaction, daily, weekly, and monthly caps) can layer on top as a second control now that Arc is on mainnet, but the on-chain registry is the enforcement that always holds.

The allowlist, blocklist, and expiry described above go beyond Circle's own policy vocabulary — they're Flux additions, not a mirror of what Circle offers.

Contract

Full function and event signatures are on the Reference page.

Registering an agent
function registerAgent(
    address agentWallet,
    uint256 perTxCap,
    uint256 dailyCap,
    uint256 totalCap,
    uint64  expiry
) external returns (uint256 agentId)

FluxAgentRegistry on ArcScan ↗