Docs › Robinhood Chain

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 with PAYMENT_SETTLE_FALLBACK=true. A fallback is used once its /supported lists exact on eip155: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 own WALLET_ADDRESS in USDG on eip155: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 through EVM_RPC_4663 when 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 after ROBINHOOD_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=USDG quotes 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_URL secret says it should be there.
  • SCAN_NETWORK=robinhood node scripts/revenue-scan.js reports 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 than FACILITATOR_GAS_MIN_SETTLEMENTS (default 500), or a balance that cannot be read three times running, reads facilitatorFunds=low on /api/gateway-status; the detail is on the operator endpoint. FACILITATOR_GAS_CHECK=off turns the check off. Your own relayer, when ROBINHOOD_RELAYER_KEY is set, is read the same way, as its own entry.