Documentation
Everything Rialto does, in order
One wallet on Robinhood Chain pays for x402 endpoints in USDG and funds private Venice inference. Below: install, fund, run, connect an agent, read the chain without installing anything, and the limits that keep the wallet safe.
1. Install and create the wallet
Node 20 or newer. The command creates a private key in your home folder, prints the address, and tells you what to send to it.
npx https://rialto.casa/downloads/rialto-kit-0.9.0.tgz initTo keep the command short afterwards, install it once globally:
npm install -g https://rialto.casa/downloads/rialto-kit-0.9.0.tgz2. Fund it
Send USDG (contract 0x5fc5360D0400a0Fd4f2af552ADD042D716F1d168) and a few cents of ETH to the printed address on Robinhood Chain, chain id 4663. Bridges such as relay.link and across.to deliver USDG there from Base, Arbitrum or Ethereum in seconds. Then:
rialto fund 10The command quotes Relay (Across as fallback), approves and deposits USDG, waits for USDC on Base at the same address, then signs a gasless USDC authorization that Venice settles into a prepaid balance. Venice needs at least 5 USD per top-up, so the bridged amount is raised when fees would push it under.
3. Run
rialto chat "What is NVDA trading at on Robinhood Chain?" --webrialto agent "Compare AAPL, TSLA and NVDA on Robinhood Chain and name the deepest pool" -b 0.25rialto pay https://api.naven.network/x402-test/ping --max 0.01Commands
rialto init [--venice-key <key>]Create the wallet (or show it) and print funding instructions. Optional API key mode for Venice.rialto statusETH and USDG on Robinhood Chain, Venice credit, chain status.rialto fund <usdg>USDG to USDC on Base (Relay, Across fallback), then Venice top-up. Raises the amount so at least 5 USD land after fees.rialto chat "<prompt>" [--web] [-m <model>]Ask a Venice model, paid from the wallet's credit.rialto agent "<goal>" -b <usd> [-s <steps>] [--web]Budgeted reference agent with chain tools and x402 payments.rialto pay <url> [--dry-run] [--max <usdg>] [-X POST -d <body>]Fetch a URL and pay the 402 in USDG on Robinhood Chain.rialto stocks price <ticker>USD price of a tokenized stock (AAPL, TSLA, NVDA or any official Robinhood Token).rialto stocks find <ticker>Discover official stock token contracts by ticker.rialto stocks pools [-n 10]Top pools on Robinhood Chain by 24h volume.rialto wallet <address>Read-only report on any Robinhood Chain wallet.rialto burn <amount> --yesSend Rialto from the wallet to the dead address. Irreversible. 10,000 buys 24 h of Pro.rialto flywheelTreasury revenue from x402, Rialto bought back and burned, balances.rialto check <token>Token check: identity, supply, age, holders, concentration, liquidity, flags. Same as the explorer.rialto transfers [-n 120]USDG transfers in the last N blocks: count, volume, largest, latest.rialto trades [token]Recent trades for RIALTO (default), AAPL, TSLA, NVDA, a ticker or a pool.rialto tokenRialto price, FDV, liquidity, 24h volume, volume since launch across every pool.rialto burnsEvery burn of the Rialto token, from the chain, with the running total.rialto holders [-n 10]Holder count, top holders, concentration, and the block the figures are current to.rialto watch [-w <address>] [-e 15] [--json]Follow the chain live in the terminal: blocks, USDG flow, Rialto trades, burns, a wallet's balances and its rank (read once a minute).rialto watch --only trade,burn --webhook <url> [--discord]Keep only some event types and POST each one as JSON to a webhook; --discord wraps the text line as {content} for a Discord channel.rialto watch --only trade --min-usd 500 --format slack --webhook <url>Drop trades under a USD size; webhook formats: raw (the event), discord ({content}), slack ({text}).rialto export <what> [--csv] [-o file]The ledger as a file: holders, leaderboard, burns or history. JSON by default, CSV for a spreadsheet.rialto compare <a> <b>Two wallets side by side on the ledger: rank, balance, tier, wallet number, first day, days held, received, sent, burned, never sold, day one.rialto historyGrowth day by day since launch (holders, burned, transfers, wallets ever) and who holds how much by tier.rialto vitalsMeasured chain vitals: blocks per second, average block time, fee of one token transfer in ETH and USD.rialto rank [address]Where a wallet stands: rank among holders, wallet number since launch, days held, never sold, day one, share text (default: this wallet).rialto leaderboard [-n 25]Top holders with rank, first day and diamond-hands flag; diamond hands, day-one wallets still holding, exited, median.rialto badge [address] -o badge.svgBadge of a wallet: URL, Markdown snippet for a README, the SVG file (default: this wallet).rialto share [address] --openShare text of a wallet (rank, wallet number, never sold, day one) and the X post link; --open opens it.rialto send <to> <usdg>Transfer USDG from the Rialto wallet. Irreversible.rialto quote <usdg>Bridge quote, no transaction.rialto bridge <usdg>Bridge only, no Venice top-up.rialto topup <usd>Top up Venice from USDC already on Base.rialto venice balance | ledger | models | search "<q>"Venice account, history, models, private web search.rialto mcpStart the MCP server on stdio.rialto skillPrint the SKILL.md for coding agents.rialto config [key] [value]Read or write configuration.
Configuration
Stored in ~/.rialto/config.json (mode 600). Environment variables win over the file.
| Key | Env | Meaning |
|---|---|---|
| privateKey | RIALTO_PRIVATE_KEY | The wallet. Generated by init, stored with mode 600. |
| veniceApiKey | VENICE_API_KEY | Use an API key instead of the wallet ledger. |
| defaultModel | RIALTO_MODEL | Venice model id. Default zai-org-glm-5-2. |
| agentBudgetUsd | RIALTO_AGENT_BUDGET_USD | Hard cap per agent run. Default 1. |
| maxPaymentUsdg | RIALTO_MAX_PAYMENT_USDG | Hard cap per x402 payment. Default 1. |
| payAllowlist | · | Hostnames the payer may pay. Empty means any HTTPS host. |
| · | RIALTO_RPC_ROBINHOOD | Override the Robinhood Chain RPC. Public fallbacks are built in. |
MCP
Local server over stdio, with every tool and the wallet. Claude Desktop, Claude Code, Cursor, Hermes, OpenClaw:
{ "mcpServers": { "rialto": { "command": "npx", "args": ["-y", "https://rialto.casa/downloads/rialto-kit-0.9.0.tgz", "mcp"] } } }Hosted, read-only, no install (Streamable HTTP, stateless): chain status, balances, wallet reports, stock prices, pools.
https://rialto.casa/mcpTools: rialto_wallet, rialto_access, rialto_access_sign, hood_usdg_transfers, hood_recent_trades, hood_token_check, hood_chain_status, hood_balances, hood_wallet_report, hood_stock_price, hood_stock_find, hood_top_pools, hood_send_usdg, x402_pay, venice_chat, venice_web_search, venice_models, venice_balance, venice_transactions, rialto_quote_bridge, rialto_fund_venice, rialto_agent.
Hosted API
Index at /api, full description at /openapi.json (OpenAPI 3.1), one-page brief for agents at /llms.txt, dependency health at /status.
curl https://rialto.casa/api/chaincurl https://rialto.casa/api/stocks/NVDAcurl "https://rialto.casa/api/stocks?q=TSLA"curl https://rialto.casa/api/wallet/0xb9A67f59bcfd3b45fe1ca2c55A55C19B2b35B58fcurl "https://rialto.casa/api/pools?limit=10"curl https://rialto.casa/api/check/0xe0fb5d77c627ba9c7950fc0d62d1d96603e7b7c6Responses are JSON with ok and data. Prices come from GeckoTerminal (30 requests per minute); chain reads use a pool of public RPCs with a short cache.
Live feeds and playground
Three feeds read straight from the chain and GeckoTerminal, on the live page, the API and the MCP (hood_pulse, hood_usdg_transfers, hood_recent_trades):
curl https://rialto.casa/api/live/pulsecurl "https://rialto.casa/api/live/transfers?blocks=150&limit=25"curl "https://rialto.casa/api/live/trades?token=NVDA"curl https://rialto.casa/api/token/burnscurl "https://rialto.casa/api/token/holders?top=10"curl "https://rialto.casa/api/token/ohlcv?hours=48"curl https://rialto.casa/api/token/wallet/0x987e58beD5028b28cFe5E8c709b8533D6F908ebEcurl "https://rialto.casa/api/token/leaderboard?limit=25"The token ledger endpoints read the chain directly: burns are Transfer events to the dead address, holders come from replaying every transfer of the contract, candles come from GeckoTerminal. MCP tools: rialto_burns, rialto_holders, rialto_price_history, rialto_rank, rialto_leaderboard. Any wallet gets a badge at /badge/{address}.svg: rank, balance, never sold, day one.
The playground proxies one Venice chat request per signed SIGN-IN-WITH-X header. Any client can use it: sign a SIWE message for api.venice.ai (chainId 8453, uri = the chat completions URL, 5 minute expiry, fresh nonce) and POST it:
curl -X POST -H "content-type: application/json" -d '{"siwx":"<base64 header>","messages":[{"role":"user","content":"hi"}],"live":true}' https://rialto.casa/api/chatThe server forwards the header once and keeps nothing. Venice bills the signing wallet. A wallet without credit gets a 402 with funding instructions.
Pay per call (x402) and the flywheel
Rialto is also an x402 seller on Robinhood Chain. Four endpoints answer 402 with a PAYMENT-REQUIRED challenge in USDG; any x402 v2 client (the kit included) signs an EIP-3009 authorization, the Naven facilitator settles it on chain, and the answer comes back with a PAYMENT-RESPONSE receipt. No account, no tier, no rate limit on this lane.
rialto pay https://rialto.casa/x402/check/0xe0fb5d77c627ba9c7950fc0d62d1d96603e7b7c6 --max 0.05rialto pay https://rialto.casa/x402/portfolio/0x000000000000000000000000000000000000dEaD --max 0.05rialto pay https://rialto.casa/x402/pulse --max 0.05rialto pay https://rialto.casa/x402/batch -X POST -d '{"calls":[{"tool":"hood_chain_status"},{"tool":"hood_stock_price","args":{"symbol":"NVDA"}}]}' --max 0.1curl -i https://rialto.casa/x402/pulsePrices: check 0.02 USDG, portfolio 0.01, pulse 0.005, batch 0.05. Every USDG received lands in the treasury, which buys Rialto back and sends it to the dead address. Revenue, buybacks and burns are read from the chain at /api/flywheel and shown on the home page.
Two more ways to pay on that lane. Sign in (the kit does it automatically on rialto.casa; otherwise send x-rialto-auth) and the 402 is priced for your tier: Holder 50% off, Pro 75% off. Or pay in Rialto: the 402 body carries payInRialto.amount; burn that many Rialto (a transfer to the dead address), then retry with header x-rialto-burn: <tx hash>. rialto pay <url> --burn does both steps. A burn pays for one call and must be less than 30 minutes old.
Burn to unlock: every 10,000 Rialto a wallet sends to the dead address buys it 24 hours of Pro tier (up to 30 days per burn), read from the logs when the wallet signs in. rialto burn 10000 --yes.
Holder tiers
The hosted API and MCP apply a tier from the Rialto token balance of the wallet that signs in. Free without signing: 30 requests per minute per IP. Holder, 300,000 Rialto: 120 per minute plus hood_portfolio and GET /api/portfolio/{address}. Pro, 1,000,000 Rialto: 600 per minute plus hood_batch and POST /api/batch (20 calls in one request).
Sign a 24 hour token with the kit, or with a browser wallet on the explorer. The message is plain text; nothing moves and no gas is spent.
rialto access signcurl -H "x-rialto-auth: $TOKEN" https://rialto.casa/api/accesscurl -H "x-rialto-auth: $TOKEN" https://rialto.casa/api/portfolio/0x000000000000000000000000000000000000dEaDcurl -X POST -H "x-rialto-auth: $TOKEN" -H "content-type: application/json" -d '{"calls":[{"tool":"hood_chain_status"},{"tool":"hood_stock_price","args":{"symbol":"NVDA"}}]}' https://rialto.casa/api/batchcurl https://rialto.casa/api/access/0x000000000000000000000000000000000000dEaDThe token also works as ?auth= on the MCP URL for clients that cannot set headers. Every response carries x-rialto-tier, x-ratelimit-limit and x-ratelimit-remaining. Over the limit: HTTP 429 with retry-after.
Security and limits
- The private key is generated locally, stored with mode 600, and never uploaded. Back it up.
- Payments are signed authorizations, not transactions: no gas for x402 or Venice top-ups. Bridging spends a little ETH on Robinhood Chain.
- maxPaymentUsdg caps one x402 payment, payAllowlist restricts hosts, agentBudgetUsd caps one agent run. All enforced before any signature is produced.
- hood_send_usdg and rialto_fund_venice move real funds. An agent should confirm with you before calling them.
- Not audited. Keep small balances in the agent wallet.
Facts the code relies on
- USDG on Robinhood Chain: 6 decimals, EIP-712 domain "Global Dollar" version "1", supports EIP-3009 transferWithAuthorization and EIP-2612 permit.
- Venice x402: prepaid USD ledger per wallet, top-up in USDC on Base or Solana, minimum 5 USD, header SIGN-IN-WITH-X.
- Relay and Across both bridge USDG (4663) to USDC (8453) in about 2 seconds for roughly 0.1 percent.