402 Payment Required, signs a tiny USDC payment locally, retries, and gets the data. Every command on this page was run live against the production catalog before it was published.
Or just hand it to your agent
Don’t want to follow steps yourself? Paste this into your agent (Claude Code, Cursor, or any capable agent). It reads Otto’s machine docs, sets up a fresh throwaway wallet, and does everything up to the first paid call — the only thing you do by hand is send the USDC.Hand this to your agent
What you need
- Node.js 20 or later. This guide was verified end-to-end on v22.
- A wallet with a few dollars of USDC on Base. Cheap intelligence reads cost $0.001 each, so even $1 goes a long way. Buy USDC on any exchange and withdraw it on the Base network (native USDC, contract
0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913). - That wallet’s private key, exported as an environment variable. It signs payment authorizations locally — it is never sent to Otto.
No ETH needed. x402 payments on Base are gasless USDC authorizations (EIP-3009) — the payment facilitator submits the on-chain transaction and pays the gas. Your wallet only needs USDC. Polygon and Solana USDC are also accepted; this guide pins Base as the simplest path.
Setup
Copy-paste, in a terminal:0x + 64 hex characters — never commit it anywhere):
otto.mjs:
otto.mjs
First paid call
- Your request hit the paywall and got a
402describing the price ($0.001 USDC) and where to pay. - The client signed a USDC transfer authorization with your key — locally.
- It retried the request with the signed payment attached.
- Otto’s facilitator settled it on Base and returned the data plus a settlement transaction hash you can check yourself on Basescan.
What else your wallet now buys
That one funded wallet is now a key to Otto’s whole x402 catalog — market and token intelligence, KOL sentiment, token security scans, yield discovery, onchain analytics, web and domain intelligence, real-world data (FX, weather), AI research, image and video generation, and trade-execution services. The live endpoint list with current prices is always at:- Interactive explorer: x402.ottoai.services
- Machine-readable, for your agent: x402.ottoai.services/llm.txt
- JSON catalog: x402.ottoai.services/otto-x402-catalog.json
- Full reference with parameters and sample responses: x402 Storefront
Troubleshooting
The three failures new users actually hit — each reproduced live while writing this page:
Two smaller gotchas: save the script as
.mjs (plain .js without "type": "module" in package.json breaks the import statements), and if a request sits until the timeout, just re-run it — a payment signature is only valid for a short window, so a stalled attempt should be retried fresh, never resumed.
Still stuck? Getting help lists the support channels.
