32 APIs. One endpoint. Pay per call.
No subscriptions, no API keys, no signups.
Your agent pays and gets data back — instantly, on-chain.
The x402 protocol adds a native micropayment layer to HTTP. No wallet popups — payment happens at the SDK level, invisible to the end user.
POST to /v1/call with { api, inputs }. No API key needed in the header.
Server responds with HTTP 402 and a payment payload: amount, recipient address, network, token.
The x402 SDK signs the payment with your wallet and submits the USDC transfer on Base — typically under 2 seconds.
Payment verified on-chain. Gateway calls the upstream provider and returns normalized JSON. Done.
Extends standard HTTP with a 402 Payment Required negotiation cycle. Works with any HTTP client that supports the x402 spec.
No rate limits tied to accounts. No OAuth flows. Agents pay for exactly what they consume — nothing else.
POST /v1/estimate (free)GET /v1/apis (free)GET /v1/schema/:api (free)Two things: a funded wallet on Base and an x402-compatible HTTP client. That's it.
npm i @x402/fetch / pip install x402All successful responses follow a consistent envelope regardless of the API called.
success: true/falseapi — name of the API calledcharged_usdc — exact amount chargeddata — normalized payload (varies per API)error — present only on failureupstream — provider used (informational)Top up a prepaid balance with USDC via x402 — then make hundreds of API calls using a simple Bearer token. No wallet signing per request, no gas fees, instant responses.
sk_... Bearer tokenAuthorization: Bearer sk_...Valid amounts: $1, $2, $5, $10, $20, $50 USDC. Pay via x402 on Base Mainnet.
POST /v1/topup — protected by x402{ "amount_usd": 1 }"token": "sk_..." to recharge existing tokenGET /v1/user/balance — check current balanceGET /v1/user/transactions — full call historyGET /v1/user/recover/challenge — get recovery challengePOST /v1/user/recover — recover token with wallet signatureFrom Claude Desktop or Claude Code — no terminal needed.
topup_balance — load $1–$50 USDC, get tokenget_balance — check available balancerecover_token — recover lost token via wallet signatureInstall the rwagenthub-mcp package and Claude gets access to all 32 APIs as native tools — no code, no HTTP calls, just conversation.
Create a dedicated wallet with a few USDC on Base Mainnet. Coinbase Wallet →
Edit claude_desktop_config.json — no install needed, npx handles it.
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json
On first launch, npx downloads the package automatically. You'll see 35 tools in the tools menu — including topup_balance, get_balance and recover_token.
Skip per-call gas fees. Just say: topup_balance with amount_usd: 1 — Claude signs the payment and stores your token automatically. Check your balance anytime with get_balance.
Create a dedicated wallet with a few USDC on Base Mainnet. Coinbase Wallet →
~/.claude.jsonAdd the server under the top-level mcpServers key — available globally in every project.
~/.claude.json%USERPROFILE%\.claude.json
Run /mcp to confirm the server is connected. You'll see 35 tools — including topup_balance, get_balance and recover_token.
Say topup_balance with amount_usd: 1 to load $1 USDC and get a token for gasless calls. Say get_balance to check your balance anytime. If you lose the token, say recover_token.
rwagenthub-sdk is a JS wrapper that handles wallet setup, x402 payments and error handling for you. Install it, pass your private key, call any of the 32 APIs — done.
npm install rwagenthub-sdk
import { AgentHub } from "rwagenthub-sdk" const hub = new AgentHub({ privateKey: process.env.WALLET_PRIVATE_KEY }) // Call any API — payment happens automatically const quote = await hub.call("stock_quote", { symbol: "NVDA" }) console.log(quote.price) // 134.20 console.log(quote.change_pct) // 1.8 const weather = await hub.call("weather_forecast", { location: "Tokyo" }) const flights = await hub.call("flight_search", { from: "JFK", to: "LAX", date: "2026-06-01" })
No manual signing. No 402 handling. The SDK detects the payment request and pays with your wallet automatically before returning the result.
hub.call() returns the data field — no envelope to unwrap. On any error it throws with a clear message.
hub.estimate(api) returns the price before you pay. hub.listApis() and hub.schema(api) never charge anything.
Use the SDK when you're building a Node/TS app and want to call APIs in code. Use MCP when you want Claude to call them for you via chat — no code needed.
Install the rwagenthub skill on ClawHub and your OpenClaw agent gets access to all 32 APIs via natural language — on any messaging platform.
clawhub install rwagenthub npm install -g rwagenthub-sdk
openclaw config set env.MCP_WALLET_PRIVATE_KEY "0xYOUR_PRIVATE_KEY" # Add USDC on Base Mainnet to that wallet # Min recommended: $1 (covers 100+ calls)
→ "Search flights from EZE to JFK for April 20" → "What's the price of Bitcoin right now?" → "Find hotels in Rome for next weekend" → "Run this Python script: print(1+1)"
Telegram, WhatsApp, Discord, SMS — wherever your OpenClaw agent runs, the skill is available. No extra setup per channel.
OpenClaw matches your message to the right API automatically. Just describe what you need — the skill handles routing, payment, and response formatting.
The SDK signs payments locally using EIP-3009 — only the signed authorization is sent to the network. Your private key is never transmitted.
Use Skill when you chat with an AI assistant (Telegram/WhatsApp). Use MCP for Claude Desktop/Code. Use SDK when building a Node.js app.
The x402 client handles payment automatically — your code just sees a regular HTTP response.
# List all available APIs — no payment needed curl https://agents-production-73c1.up.railway.app/v1/apis # Response: { "apis": [ { "name": "flight_search", "price_usd": 0.01 }, { "name": "hotel_search", "price_usd": 0.06 }, { "name": "web_search", "price_usd": 0.02 }, { "name": "crypto_price", "price_usd": 0.01 }, { "name": "code_exec", "price_usd": 0.05 } // ... 28 more ] } # Inspect schema for any API curl https://agents-production-73c1.up.railway.app/v1/schema/hotel_search # Response: { "name": "hotel_search", "price_usd": 0.06, "inputs": { "city_code": { "type": "string", "required": true }, "check_in": { "type": "string", "required": false }, "check_out": { "type": "string", "required": false } } }
# Check price before calling — no payment needed curl -X POST https://agents-production-73c1.up.railway.app/v1/estimate \ -H "Content-Type: application/json" \ -d '{"api":"flight_search"}' # Response: { "success": true, "api": "flight_search", "price_usd": 0.01 }
# npm install rwagenthub-sdk import { AgentHub } from "rwagenthub-sdk" const hub = new AgentHub({ privateKey: process.env.WALLET_PRIVATE_KEY }) // Call any API — payment handled automatically const flights = await hub.call("flight_search", { from: "JFK", to: "LAX", date: "2026-04-15" }) console.log(flights.flights) // Check price before calling (free) const { price_usd } = await hub.estimate("flight_search") // List all 32 APIs with prices (free) const { apis } = await hub.listApis() // Get JSON Schema for any API (free) const schema = await hub.schema("weather_forecast")
import { createWalletClient, http } from "viem" import { privateKeyToAccount } from "viem/accounts" import { base } from "viem/chains" import { withPaymentInterceptor } from "@x402/fetch" const account = privateKeyToAccount(process.env.PRIVATE_KEY) const wallet = createWalletClient({ account, chain: base, transport: http() }) const pay = withPaymentInterceptor(fetch, wallet) const res = await pay("https://agents-production-73c1.up.railway.app/v1/call", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ api: "flight_search", inputs: { from: "JFK", to: "LAX", date: "2026-04-15" } }) }) const { data } = await res.json() console.log(data.flights)
# pip install x402 eth-account from x402 import x402_requests from eth_account import Account import os account = Account.from_key(os.environ["PRIVATE_KEY"]) session = x402_requests.Session(account) response = session.post( "https://agents-production-73c1.up.railway.app/v1/call", json={ "api": "web_search", "inputs": { "query": "latest AI news" } } ) for r in response.json()["data"]["results"]: print(r["title"], r["url"])
// Success { "success": true, "data": { /* API result */ } } // Unknown API (400) { "success": false, "error": "unknown_api", "api": "bad_name" } // Upstream error (500) { "success": false, "error": "internal_error" }
const gatewayTool = { name: "gateway_call", description: "Call any tool from the AgentHub gateway. Available: flight_search, hotel_search, web_search, weather_forecast, crypto_price, stock_quote, geocode, ip_reputation, alchemy_portfolio, url_scrape, email_send, code_exec, and 22 more.", parameters: { type: "object", properties: { api: { type: "string", description: "API name from /v1/apis" }, inputs: { type: "object", description: "API-specific inputs" } }, required: ["api", "inputs"] }, execute: async ({ api, inputs }) => { const res = await pay("https://agents-production-73c1.up.railway.app/v1/call", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ api, inputs }) }) return res.json() } } // The agent pays for each call automatically — no manual auth required
All APIs called via POST /v1/call with body { "api": "<name>", "inputs": { ... } }. Required params marked in purple.
Search one-way flights. Returns top 10 itineraries with airline, price, stops, duration and baggage conditions.
Real-time status for a specific flight. Returns actual vs scheduled times, delay in minutes, gate and terminal.
Full seat map for a flight offer. Use the offer_id returned by flight_search. Returns cabin layout and seat availability.
Search airports by name, city or IATA code. Returns IATA, city, country and timezone. Ideal for input validation and autocomplete in agent flows.
Hotels by city and dates. Returns available properties with name, room type, nightly rate and cancellation policy.
Tours, experiences and activities by GPS coordinates. Returns bookable experiences with pricing, duration and ratings.
Live flight tracking via OpenSky Network. Returns active flights in a bounding box with callsign, origin country, altitude, speed and heading.
Google web or news search. Returns organic results with title, URL, snippet and publication date.
Semantic search optimized for LLMs. Returns clean summaries from source pages inline — no extra scraping step. Ideal for RAG pipelines.
Local businesses and points of interest. Returns name, address, rating, phone, hours and lat/lng coordinates.
Google image search. Returns image URLs, thumbnails, source domain and dimensions. Supports safe search.
Google Shopping results. Returns product listings with price, store name, rating, reviews count and direct purchase link.
Fetches any public URL and returns clean Markdown text ready for LLM consumption. Strips ads, nav and boilerplate. Essential for RAG pipelines.
Deep web scraping via Firecrawl. Returns clean Markdown from JS-rendered pages including SPAs and dynamic content. More thorough than url_extract.
Extract structured JSON from any URL using a schema prompt. Define what fields you want and get back clean structured data. Powered by Firecrawl.
Deep web research: searches the web and scrapes full page content from top results. Returns search results with complete article text. Best for research tasks.
Real-time crypto prices. Supports BTC, ETH, SOL and 20+ symbols. Returns price, 24h change %, market cap and volume.
Current conditions + 15-day daily forecast via Visual Crossing. Returns temperature, precipitation, wind, sunrise/sunset and condition description.
Real-time and historical forex rates for 160+ currencies via ECB data. Convert any amount between currency pairs.
Full DeFi market overview in one call: total TVL, top protocols, top chains by TVL, DEX volume 24h and protocol fees 24h. Powered by DeFiLlama.
Best yield farming pools from DeFiLlama. Filter by stablecoin-only, no IL risk, chain, minimum TVL and minimum APY. Returns APY, base vs reward breakdown and pool ID.
Forward and reverse geocoding via Nominatim/OpenStreetMap. Convert addresses to coordinates and vice versa. Returns lat/lng, bounding box, city, country and place type.
IP address threat intelligence. Returns abuse confidence score, ISP, country, usage type and report count. Useful for fraud detection and bot filtering.
On-chain token balances for any wallet address. Returns ERC-20 and native token holdings with balance, decimals and contract address. Supports Ethereum and Base.
On-chain transaction history for any wallet. Returns sent/received transfers with asset, value, counterparty and block timestamp. Supports ETH, ERC-20 and ERC-721.
Real-time stock quote via Finnhub. Returns price, change, % change, high/low, open and previous close.
Company profile from Finnhub. Returns name, exchange, industry, country, market cap, IPO date, website and logo.
Search for stock symbols by company name or ticker. Returns symbol, name, type and exchange. Useful for lookup before quoting.
Latest financial news via Finnhub. Query by company symbol or by category: general, forex, crypto, merger. Returns headline, summary, source and URL.
Upcoming and past earnings announcements. Filter by symbol or date range. Returns EPS estimate/actual, revenue estimate/actual and report time.
Send transactional email. Supports HTML and plain text body. Returns Resend message ID on success. Requires verified sender domain.
Execute code in an isolated cloud sandbox. Returns stdout, stderr and last expression result. Supports Python, JavaScript, R and Bash. Max 120s timeout.
Base URL: https://agents-production-73c1.up.railway.app
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /health |
none | Health check. Returns { status: "ok", timestamp, version } |
| GET | /v1/apis |
none | List all available APIs with parameters and prices. Free to call. |
| GET | /v1/schema |
none | Full input schema for every API — types, required fields, defaults, examples. Free. |
| GET | /v1/schema/:api |
none | Schema for a single API. Returns inputs, description, example and price_usd. Free. |
| POST | /v1/estimate |
none | Return cost for a call without executing it. Body: { "api": "flight_search" }. Free. |
| POST | /v1/call |
⚡ x402 | Execute any API call. Body: { "api": "<name>", "inputs": { ... } }. Requires USDC via x402. |
All error responses include { success: false, error: "message" }. Handle these in your agent loop.
data field.error.upstream.