Robinhood Chain (USDG)
Payment wires: every paid endpoint accepts x402 and MPP (Machine Payments Protocol) on the same 402 - see Paying with x402 and Paying with MPP. Agent402 is the applied layer of Agentic Finance: agents that pay and get paid on their own.
Agent402 settles x402 payments in USDG (Global Dollar) on Robinhood Chain - an Arbitrum Orbit L2, chain id 4663. The rail is re-proven daily by an automated on-chain canary purchase. Everything below is also on the live /robinhood page and in the full guide.
Chain parameters
| Chain id | 4663 (CAIP-2 eip155:4663) |
| RPC | https://rpc.mainnet.chain.robinhood.com |
| Explorer | robinhoodchain.blockscout.com |
| Stablecoin | USDG (Global Dollar) - 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168, 6 decimals |
| EIP-712 domain | name "Global Dollar", version "1" |
Buy in USDG
With agent402-mcp (≥ 0.11.0): set AGENT402_NETWORKS=robinhood (plus
AGENT_KEY for a wallet holding USDG on chain 4663) and every MCP tool call
settles in USDG.
With agent402-client (≥ 0.4.0) or any @x402 client:
import { withNetworkPreference } from "agent402-client";
withNetworkPreference(x402client, ["robinhood"]); // or ["eip155:4663"]
Agent402's 402 lists Base first, so pinning the chain is required - an unmodified client that takes the first accept it can pay settles on Base. The preference throws before paying if the seller doesn't offer the chain.
Sell in USDG
- Agent402 server:
PAYMENT_NETWORKS=…,robinhood+ROBINHOOD_FACILITATOR_URL=<an x402 facilitator that settles eip155:4663>. If the facilitator URL is unset the rail is omitted gracefully - every other chain keeps serving. See Self-Hosting. - Settle fallback: the variable also takes an ordered, comma-separated
list,
ROBINHOOD_FACILITATOR_URL=<primary-url>,<fallback-url>. The first settles every payment; the rest are tried, in order, only when the one before refused without moving money (an HTTP 402, a billing refusal, or a reverted transfer with no transaction), and only withPAYMENT_SETTLE_FALLBACK=true. A fallback is used once its/supportedlists exact oneip155:4663. A single URL behaves exactly as before. - Your own settler (optional):
ROBINHOOD_RELAYER_KEY=<a dedicated relayer private key>adds a settler you run after every listed facilitator. It submits the buyer's signed authorization from that wallet and pays the gas, only when the listed facilitators could not settle, and only for payments to your ownWALLET_ADDRESSin USDG oneip155:4663. Fund the wallet with a little ETH on the chain for gas and nothing else. Optional caps:ROBINHOOD_RELAYER_MAX_GWEI(default 5),ROBINHOOD_RELAYER_GAS_CAP(default 200000),ROBINHOOD_RELAYER_RECEIPT_MS(default 30000). It reads the chain throughEVM_RPC_4663when set, else the built-in RPC. With it set, a listed facilitator that errors or times out without saying what happened no longer ends the sale: the buyer's authorization is read on chain. Used with the transfer to you, the call is served; still unused afterROBINHOOD_AMBIGUOUS_WAIT_MS(default 8000; the wait always ends inside the authorization's own deadline and, behind a CDN, its answer window), your settler submits it, unless the buyer already left, the deadline leaves no time, or the CDN window is shorter than the settler's lock wait plus receipt wait. When the chain cannot be read, or a decision cannot be made, the buyer gets a 402 and the authorization is watched, so a transfer that lands later is recorded as owed. - Tollbooth (≥ 0.4.0):
TOLLBOOTH_NETWORK=eip155:4663 TOLLBOOTH_ASSET=USDGquotes crawlers in USDG. To settle it, use the library API -createTollbooth({ x402: paymentMiddleware(...) })with a scheme your facilitator settles on chain 4663; the CLI's built-in settlement covers USDC only and refuses to start with a facilitator URL and a non-USDC asset. See Pay-per-crawl.
Find other sellers on the chain
The neutral router takes a network filter:
GET /api/route?q=<task>&network=robinhood - only sellers whose crawled 402
advertises eip155:4663 are ranked (sellers with unknown accepts are kept;
the filter excludes sellers known not to settle there).
Recognizing a settlement on-chain
There is no "402" label on-chain. An x402 settlement is a
transferWithAuthorization (EIP-3009, selector 0xe3ee160e) on the USDG
contract, submitted by the facilitator's relayer (the buyer paid no gas), with
the decoded transfer showing buyer → seller for the quoted price. A real
example: 0xae8e3e40…f826.
Ops notes
- The paid canary makes one real $0.001 USDG settlement daily (pinned to the chain via accepts filtering - no silent Base fallback).
- The heartbeat decodes the live 402 on every run and opens an issue
if the rail drops out of the offer while the
ROBINHOOD_FACILITATOR_URLsecret says it should be there. SCAN_NETWORK=robinhood node scripts/revenue-scan.jsreports USDG received by the revenue wallet.- Settlement gas: every 10 minutes the server reads each listed
facilitator's settlement signer (from its
/supported) and that signer's balance on the chain. Fewer settlements left thanFACILITATOR_GAS_MIN_SETTLEMENTS(default 500), or a balance that cannot be read three times running, readsfacilitatorFunds=lowon/api/gateway-status; the detail is on the operator endpoint.FACILITATOR_GAS_CHECK=offturns the check off. Your own relayer, whenROBINHOOD_RELAYER_KEYis set, is read the same way, as its own entry.