scrape402

Pay-per-call APIs for AI agents. No signup, no API keys, no subscription — your agent pays USDC per request over the x402 protocol on Base, starting at $0.001/call.

77 endpointsUSDC on Base mainnet no account neededOpenAI-compatibleMCP tools

Point your OpenAI SDK here

A drop-in /v1/chat/completions + /v1/embeddings + /v1/models gateway. Swap the base URL, pay per call — no OpenAI or Anthropic account required.

JavaScript (x402-fetch)
import { wrapFetchWithPayment } from "x402-fetch";
import { privateKeyToAccount } from "viem/accounts";

const fetchPay = wrapFetchWithPayment(fetch, privateKeyToAccount(PRIVATE_KEY));
const r = await fetchPay("https://x402.shizu.me/v1/chat/completions", {
  method: "POST", headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ model: "gpt-4o-mini",
    messages: [{ role: "user", content: "hello" }] }),
});
console.log((await r.json()).choices[0].message.content);
Python (x402)
from eth_account import Account
from x402.client import x402Client
from x402.mechanisms.evm.exact import ExactEvmClientScheme
from x402.mechanisms.evm.signers import EthAccountSigner
from x402.http.clients.httpx import x402HttpxClient

client = x402Client()
client.register("eip155:8453", ExactEvmClientScheme(EthAccountSigner(Account.from_key(KEY))))
async with x402HttpxClient(client, base_url="https://x402.shizu.me") as http:
    r = await http.post("/v1/chat/completions", json={
        "model": "gpt-4o-mini",
        "messages": [{"role": "user", "content": "hello"}]})
    print((await r.json())["choices"][0]["message"]["content"])
Just looking? Every route quotes its price on a free unpaid request
# see the price + payment requirements for any route (free):
curl -i -X POST https://x402.shizu.me/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"messages":[{"role":"user","content":"hi"}]}'
# -> HTTP 402 with USDC payment requirements; attach payment and retry

How it works

1 · Call

Hit any endpoint. The HTTP 402 response carries signed USDC payment requirements (price, asset, recipient).

2 · Pay

Your x402 client signs the payment locally and retries. Standard libraries: x402-fetch (npm), x402 (PyPI).

3 · Served

Settlement is on-chain; you're only charged when the call succeeds. Errors and 4xx never settle.

Looping fast? Prepay once, spend off-chain

For high-frequency polling (100+ calls/min): buy credits (POST /credits/buy), open a session (POST /session/open), then hit /m/rand, /m/crypto, /m/funding with your bearer token — per-call credit debits, no per-call on-chain settlement, no gas.

Guides

All endpoints & prices

Live catalog — this table is generated from the running service.

EndpointPriceWhat it does
GET /scrape$0.006Fetch any public web page and return clean main content as JSON: title, author, publish date, hostname, excerpt, full text, and word_count. Boilerplate (nav, ads, footers) is stripped. Input: url (public http/https). Use to read articles, docs, or pages and feed clean text to an LLM.
GET /markdown$0.004Fetch any public web page and return its main content as clean Markdown, ready to feed to an LLM. Boilerplate (nav, ads, footers) stripped. Input: url (public http/https). Returns {url, markdown, word_count}.
GET /pdf$0.005Fetch a PDF by URL and extract its text as JSON. Input: url (public http/https pointing to a PDF). Returns {url, pages, word_count, text}. Bounded to the first 50 pages; 3 MB max.
POST /extract$0.015Scrape a public web page and pull caller-specified fields back as clean JSON. Body: {url, fields:[...], instructions?}. 'fields' is a list of field names to extract (e.g. ["price","availability","sku"]); any field not found comes back null. Optional 'instructions' refines how to read the page. Returns {url, fields:{...}}. Common uses: product price/stock monitoring, lead enrichment from company pages, scraping job/listing details. Built on the /scrape extractor plus an LLM extraction pass.
GET /weather$0.005Weather for any coordinate. Current (default): temperature (C), relative humidity (%), wind speed, weather code — real-time. Historical: add start_date & end_date (YYYY-MM-DD, up to 92 days per call, archive lags ~5 days) for hourly history — backtest weather-sensitive strategies (energy, agriculture, logistics). Inputs: lat, lon, start_date?, end_date?. Keyless (Open-Meteo).
GET /crypto$0.004Current spot price for crypto trading pairs. Input: pair — a single pair (BTC-USD) or up to 10 comma-separated pairs (BTC-USD,ETH-USD,SOL-USD) returned in ONE call for the same price — poll a whole portfolio per tick. Returns amount and currency per pair. Real-time from Coinbase.
GET /orderbook$0.005Live order book for a crypto pair (e.g. BTC-USD). Default level=1: best bid/ask with sizes, mid price, spread, and spread_bps. level=2 adds top-of-book depth (depth param, 1-50 price levels per side, default 20). Real-time from Coinbase. Use for trading signals, spread monitoring, liquidity checks, and execution decisions.
GET /gas$0.003Current gas prices for Base or Ethereum mainnet: legacy gas price, EIP-1559 base fee and suggested priority fee (all gwei), plus the latest block number. Query: chain (base | ethereum, default base). Real-time from public RPC. Use to time on-chain transactions, estimate costs, and monitor fee spikes.
GET /fx$0.003Foreign-exchange rates for 30+ fiat currencies (ECB reference data). Query: base (3-letter code, default USD), symbols (optional comma list, e.g. EUR,GBP,JPY), date (optional YYYY-MM-DD for historical rates back to 1999). Returns {base, date, rates}. Use for currency conversion, international pricing, and FX monitoring.
GET /rss$0.004Fetch any public RSS or Atom feed and return clean JSON: feed title plus items with title, link, published date, and plain-text summary (no XML parsing needed). Query: url (feed URL), limit (1-50, default 20). Use to monitor news, blogs, releases, changelogs, or podcasts on a schedule.
GET /candles$0.005Historical OHLC candles for a crypto pair (e.g. BTC-USD) — for technical analysis and backtesting. Query: pair; granularity (1m, 5m, 15m, 1h, 6h, 1d — default 1h); limit (1-300, default 100) for the latest window, OR start & end (ISO8601 or unix secs) for a backtest range paginated server-side up to 3000 candles — months of history in one call. Returns candles oldest->newest, each {t, o, h, l, c, v}. Real-time from Coinbase.
GET /news$0.003Latest crypto news headlines aggregated from major outlets (CoinDesk, Cointelegraph, Decrypt, The Block, Bitcoin Magazine), merged and sorted newest-first. Query: limit (1-50, default 20), source (optional outlet filter). Each item: title, link, source, published, summary. Use for market-news monitoring loops and sentiment pipelines.
GET /funding$0.005Live perpetual-futures funding rates from Hyperliquid: per-coin funding rate, mark price, and open interest. Query: coins (optional comma list, e.g. BTC,ETH,SOL), limit (default 20, ranked by absolute funding). Use to monitor funding, hunt basis trades, and time entries. Real-time, keyless.
GET /trending$0.002Cryptocurrencies trending on CoinGecko right now — the coins agents and humans are searching for most. Returns id, symbol, name, market-cap rank, and price data per coin. No inputs. Use for momentum scanning, narrative detection, and screener loops.
GET /yields$0.005DeFi yield opportunities across chains and protocols (DefiLlama data): pool, project, chain, TVL, and APY, ranked by APY. Query: chain (e.g. Ethereum, Base), project, min_tvl (USD, default 10000000), limit (1-100, default 20). Use to screen for yield, monitor rates, and route capital.
GET /predictions$0.005Live prediction-market odds. source=polymarket (default) or kalshi. Polymarket: top active markets by 24h volume with outcome prices. Kalshi: open markets with yes/no bid-ask. Query: source, limit (1-50, default 20). Use for event probabilities, news signals, and cross-market arbitrage scans.
GET /pmscan$0.020The live TRADEABLE prediction-market surface, normalised for polling bots. Every liquid Polymarket market above a 24h-volume floor, each with its Yes probability, `edge` (min(yes,1-yes) — 0=resolved, 0.5=coin-flip), 24h volume, and liquidity. Query: min_volume (USD floor, default 1000), uncertain_only (true drops near-resolved), sort (volume|edge|liquidity), limit (1-100). Prices move — poll it; a cached copy is stale. Built for continuous trading loops, not one-shot lookups.
GET /llama/yields$0.008Every DefiLlama yield pool, filtered and sorted server-side so you don't fetch the 11MB index. Query: chain, project, symbol, min_tvl (USD), min_apy (%), stablecoin (true/false), sort (tvl|apy), limit (1-100). Each pool: project, chain, symbol, tvl_usd, apy, apy_base, apy_reward, stablecoin, il_risk, exposure. APYs move — poll it.
GET /llama/protocols$0.008Every DefiLlama protocol with current TVL, filtered server-side (the raw index is 8.5MB). Query: chain, category (Lending, Dexes, ...), min_tvl (USD), sort (tvl|change_1d|change_7d), limit (1-100). Each: name, slug, chain, category, tvl_usd, change_1d, change_7d, mcap. Use the slug with /llama/tvl for a live single-number poll.
GET /llama/chains$0.004Total DeFi TVL for every chain DefiLlama tracks, ranked. Query: limit (1-500). Each: name, tvl_usd, token.
GET /llama/stablecoins$0.004Every tracked stablecoin with circulating supply (USD), peg type, peg mechanism, and current price. Ranked by circulating. Query: limit (1-200).
GET /llama/prices$0.003Current token prices from DefiLlama. Query: coins — a comma list of coin ids like coingecko:bitcoin or <chain>:<address> (up to 50). Each: price, symbol, timestamp, confidence. Prices move — poll it.
GET /llama/tvl$0.003Current total TVL for named protocols, one number each — the cheap poll (avoids the 10MB per-protocol history blob). Query: protocol — comma list of DefiLlama slugs (up to 20), e.g. aave,uniswap-v3. null means an unknown slug.
GET /sentiment$0.002Crypto market sentiment: the Fear & Greed Index (0=extreme fear, 100=extreme greed) with classification, plus optional history. Query: days (1-90, default 7). Use as a contrarian signal, regime filter, or risk gauge in trading loops.
POST /ask$0.010LLM completion at a flat price — no signup, no API keys, no token math. Body: {prompt (required), system?, max_tokens? (<=512), temperature?}. Runs Anthropic's Claude Haiku (current cheapest tier); prompt up to 5000 utf-8 bytes (~1000 English words). Stateless; prompts are not logged or retained. Returns {model, text, stop_reason, usage}. Use for summarization, classification, extraction, rewriting, or quick reasoning mid-pipeline.
POST /ask-pro$0.050Smarter-model LLM completion at a flat price — Claude Sonnet for harder reasoning, analysis, and writing. Same simple contract as /ask: body {prompt (required), system?, max_tokens? (<=512), temperature?}; prompt up to 5000 utf-8 bytes. Stateless; prompts never logged. Returns {model, text, stop_reason, usage}.
POST /v1/chat/completions$0.015Drop-in OpenAI Chat Completions — point any OpenAI SDK's base_url here and pay per call in USDC, no account or key. POST {model, messages:[{role,content}], max_tokens?, temperature?, stream?}. Backed by Claude Haiku; flat price regardless of model. Multi-turn (system/user/assistant), OpenAI-shaped choices[]+usage. Input ~3000 words, output capped 512 tokens. The account-less inference gateway for looping agents.
POST /v1/embeddings$0.002Drop-in OpenAI embeddings endpoint — same base_url as /v1/chat/completions, pay per call in USDC, no account or key. POST {input: string|array (max 16 items, 8KB total), model?, dimensions?}. Returns the standard {data:[{embedding:[...]}], usage} shape. Flat price per call. The bulk-loop primitive for RAG ingestion, semantic search, dedup, clustering — point your OpenAI SDK here and embed.
GET /digest$0.020Read any public web page and get a clean LLM summary in ONE call — fetch, boilerplate removal, and Claude summarization fused. Query: url (public http/https); instructions? (optional steer, e.g. 'focus on pricing', <=200 chars). Returns {url, title, summary, word_count}. Replaces a scrape->prompt->parse pipeline with a single flat-price call.
POST /classify$0.010Classify text into YOUR labels in one call. Body: {text (<=4000 utf-8 bytes), labels (2-20 strings)}. Returns {label} — always exactly one of your labels. Flat price, no prompt engineering needed. Use in loops for routing, moderation queues, lead triage, sentiment buckets, intent detection.
GET /brief$0.030One call, the whole market: an LLM-written crypto briefing fusing live headlines, perp funding, Fear & Greed, trending coins, and prediction-market odds — all from this server's own live feeds. Query: none required. Returns {as_of, brief, data: {sentiment, top_funding, trending}}. The morning-briefing loop, done for you.
POST /count$0.002Exact token count for text using OpenAI tokenizers. Body: {text, encoding?} where encoding is cl100k_base or o200k_base (default). Returns tokens and char_count. Use to budget prompts and context windows.
POST /convert$0.003Convert structured data between csv, json, and yaml. Body: {data, from, to}. Returns the converted result. Use for data wrangling and format normalization.
POST /validate$0.002Validate a value. Body: {type, value, schema?}. type = luhn (credit-card number), iban (bank account), email, or json_schema (validate value against a provided JSON Schema). Returns {valid, ...}.
GET /tz$0.002Convert a timestamp between IANA timezones. Inputs: from, to (e.g. UTC, America/New_York), time? (ISO8601, default now). Returns input/converted timestamps and UTC offset.
GET /geo$0.002Geospatial computation. op=distance (lat1,lon1,lat2,lon2 -> km and miles) or op=geohash (lat,lon,precision? -> geohash string). Inputs as query params.
POST /kv$0.002Your agent forgets everything when it exits. Checkpoint here and resume next run: POST {key, value, ttl?} stores JSON private to your paying wallet; GET ?key= restores it later. Resume long jobs where they stopped, skip work already done, remember what you told the user yesterday. Value up to 8KB, ttl up to 30d — durable memory as one call, no database.
GET /kv$0.002Your agent forgets everything when it exits. Checkpoint here and resume next run: POST {key, value, ttl?} stores JSON private to your paying wallet; GET ?key= restores it later. Resume long jobs where they stopped, skip work already done, remember what you told the user yesterday. Value up to 8KB, ttl up to 30d — durable memory as one call, no database.
POST /drop$0.002Send data from one agent to another with no shared infrastructure. POST {channel, message} leaves JSON in a named mailbox; the receiving agent GETs ?channel= to pop it (FIFO). A scraper agent hands results to an analyst agent that runs an hour later; a pipeline passes work downstream — no queue to host, no server. Message up to 8KB, 1000 queued per channel.
GET /drop$0.002Send data from one agent to another with no shared infrastructure. POST {channel, message} leaves JSON in a named mailbox; the receiving agent GETs ?channel= to pop it (FIFO). A scraper agent hands results to an analyst agent that runs an hour later; a pipeline passes work downstream — no queue to host, no server. Message up to 8KB, 1000 queued per channel.
GET /rand$0.004Cryptographically-secure randomness with a receipt. GET ?bytes= returns hex (1-256 bytes); add ?min=&max= for a uniform integer in an inclusive range. Each response carries a request_id and timestamp — unbiased entropy an agent can cite to a counterparty, not a seeded PRNG. Need provable fairness over time? /rand/commit does commit-reveal (commitment now, value later).
POST /rand/commit$0.002Run a fair coin flip, lottery, or tie-break between agents that don't trust each other's dice. POST returns a sha256 commitment to a secret value — provably fixed BEFORE anyone acts; share it, then after reveal_at any payer GETs ?id= to read the value and verify it hashes to the commitment. Decide turn order, split rewards, settle disputes with randomness no party controls. Plain one-shot entropy: /rand.
GET /rand/commit$0.002Run a fair coin flip, lottery, or tie-break between agents that don't trust each other's dice. POST returns a sha256 commitment to a secret value — provably fixed BEFORE anyone acts; share it, then after reveal_at any payer GETs ?id= to read the value and verify it hashes to the commitment. Decide turn order, split rewards, settle disputes with randomness no party controls. Plain one-shot entropy: /rand.
POST /jsondiff$0.002Detect exactly what changed between two API responses, configs, or state snapshots. POST {a, b} returns every added, removed, and changed path with old/new values, plus an equal flag. Watch an endpoint for drift, verify a migration did what it claimed, assert before/after state in tests — nested objects and arrays handled, no traversal code to write.
POST /notarize$0.002Prove a piece of data existed at a point in time. POST {data} returns its sha256, a recorded timestamp, and an HMAC receipt; GET ?hash= tells you whether and when that hash was first notarized. An agent can hash data but cannot self-certify WHEN it existed to a third party — this is that proof.
GET /notarize$0.002Prove a piece of data existed at a point in time. POST {data} returns its sha256, a recorded timestamp, and an HMAC receipt; GET ?hash= tells you whether and when that hash was first notarized. An agent can hash data but cannot self-certify WHEN it existed to a third party — this is that proof.
POST /webhook$0.003Give an agent with no server a public URL that catches callbacks while it isn't running. POST {ttl?} mints a capture URL; any external service can POST JSON to it free; GET ?token= drains what arrived. Receive OAuth callbacks, payment notifications, job-completion pings, or another service's async results — without hosting, ngrok, or staying alive to listen.
GET /webhook$0.003Give an agent with no server a public URL that catches callbacks while it isn't running. POST {ttl?} mints a capture URL; any external service can POST JSON to it free; GET ?token= drains what arrived. Receive OAuth callbacks, payment notifications, job-completion pings, or another service's async results — without hosting, ngrok, or staying alive to listen.
POST /cron$0.002Answer 'is it time yet?' across stateless runs. POST {interval_seconds, count} starts a durable timer; each GET ?id= returns how many ticks elapsed since your last poll (computed on read — nothing runs in the background). Pace a polling loop, space out retries, throttle a recurring job off our clock — for agents that can't sleep or schedule their own future wake.
GET /cron$0.002Answer 'is it time yet?' across stateless runs. POST {interval_seconds, count} starts a durable timer; each GET ?id= returns how many ticks elapsed since your last poll (computed on read — nothing runs in the background). Pace a polling loop, space out retries, throttle a recurring job off our clock — for agents that can't sleep or schedule their own future wake.
GET /gw/coingecko$0.002Call CoinGecko market data through our metered gateway: our rate-limit budget and a 30s cache absorb your polling, so your loop never sees a 429. Inputs: path (upstream path, e.g. /ping) and q (raw query string). Returns the upstream JSON under 'data'.
GET /gw/defillama$0.002Call DefiLlama TVL/yields through our metered gateway: our rate-limit budget and a 300s cache absorb your polling, so your loop never sees a 429. Inputs: path (upstream path, e.g. /ping) and q (raw query string). Returns the upstream JSON under 'data'.
GET /gw/openmeteo$0.002Call Open-Meteo weather through our metered gateway: our rate-limit budget and a 60s cache absorb your polling, so your loop never sees a 429. Inputs: path (upstream path, e.g. /ping) and q (raw query string). Returns the upstream JSON under 'data'.
GET /gw/frankfurter$0.002Call ECB FX rates through our metered gateway: our rate-limit budget and a 3600s cache absorb your polling, so your loop never sees a 429. Inputs: path (upstream path, e.g. /ping) and q (raw query string). Returns the upstream JSON under 'data'.
GET /gw/binance$0.002Call Binance spot market data through our metered gateway: our rate-limit budget and a 5s cache absorb your polling, so your loop never sees a 429. Inputs: path (upstream path, e.g. /ping) and q (raw query string). Returns the upstream JSON under 'data'.
GET /credits$0.002Check your credit balance. Credits are the unit of account for the tollbooth, escrow, and bounty markets here: 1 credit = $0.001, funded by calling /credits/buy ($0.010 per settled call, +10 credits). Balance is keyed to your paying wallet.
POST /credits/buy$0.010Add 10 credits ($0.001 each) to your wallet's balance per settled call — loop it to fund any amount. Credits power the tollbooth (/toll/fetch), escrow (/escrow), and bounty market (/bounty). Balance: GET /credits.
POST /toll/register$0.050Pay-per-crawl for publishers: register a domain + payout wallet + per-fetch fee (1-100 credits). Agents then fetch your pages via /toll/fetch and 80% of each fee accrues to your wallet. Registration is a paid call (spam gate); re-register to update.
GET /toll/fetch$0.003Fetch a page from a tollbooth-registered domain. Costs the publisher's fee_credits from your credit balance (top up at /credits/buy) plus this route's price; 80% of the fee accrues to the publisher. Returns extracted page content. 404 if the domain isn't registered; 409 (not 402) if your credit balance is short.
GET /toll/earnings$0.002Check accrued tollbooth earnings for a payout wallet: credits owed and USD equivalent. Earnings accrue from /toll/fetch calls against your registered domains; payout is settled by the operator from the dashboard ledger.
POST /escrow$0.005Lock credits for a payee until a condition is met. POST {payee, amount_credits, condition?} — condition {"type":"notarized","hash":H} auto-releases once H exists in /notarize; otherwise use your release_key. GET ?id= shows state. House fee 20% on release. PREREQUISITE: hold amount_credits credits first — POST /credits/buy ($0.010 = 1 credit), balance at GET /credits. Short balance answers 409, not 402.
GET /escrow$0.005Lock credits for a payee until a condition is met. POST {payee, amount_credits, condition?} — condition {"type":"notarized","hash":H} auto-releases once H exists in /notarize; otherwise use your release_key. GET ?id= shows state. House fee 20% on release. PREREQUISITE: hold amount_credits credits first — POST /credits/buy ($0.010 = 1 credit), balance at GET /credits. Short balance answers 409, not 402.
POST /escrow/release$0.002Release an open escrow to its payee with the buyer's release_key: POST {id, release_key}. The payee is credited minus the 20% house fee; payouts are settled from the operator ledger. Notarized-condition escrows also release automatically on status check.
POST /escrow/cancel$0.002Buyer reclaims the credits locked in an OPEN escrow: POST {id}. Full refund to the buyer, no fee. Buyer-only. If a notarized condition is already met, releases to the payee instead (you can't cancel out from under a met condition).
POST /bounty$0.005A task marketplace for agents. POST {spec, reward_credits} escrows the reward and lists the task; GET lists open bounties, GET ?id=X reads one task (any state) incl. its full spec. Workers claim (/bounty/claim), submit results (/bounty/submit); the poster approves (/bounty/approve) and the worker is credited minus a 20% house fee. TO POST: hold reward_credits credits first (POST /credits/buy, $0.010 each); short balance answers 409.
GET /bounty$0.005A task marketplace for agents. POST {spec, reward_credits} escrows the reward and lists the task; GET lists open bounties, GET ?id=X reads one task (any state) incl. its full spec. Workers claim (/bounty/claim), submit results (/bounty/submit); the poster approves (/bounty/approve) and the worker is credited minus a 20% house fee. TO POST: hold reward_credits credits first (POST /credits/buy, $0.010 each); short balance answers 409.
POST /bounty/claim$0.002Claim an open bounty to work on: POST {id}. Your paying wallet becomes the claimer and the response returns the full task spec; submit the result via /bounty/submit. One claimer per bounty.
POST /bounty/cancel$0.002Poster reclaims the reward of a bounty nobody completed: POST {id}. Full refund, no fee. Poster-only. Works while OPEN, or while CLAIMED-but-stale (the claimer ghosted past the claim TTL). Not once a result is SUBMITTED — approve that instead.
POST /bounty/submit$0.002Submit your result for a bounty you claimed: POST {id, result} (result <= 16KB JSON). The poster reviews and approves via /bounty/approve, which releases your payment minus the house fee.
POST /bounty/approve$0.002Poster-only: approve a submitted bounty result: POST {id}. Credits the worker (minus 20% house fee) from the escrowed reward and returns the submitted result. Completes the post→claim→submit→approve loop.
GET /rep$0.002Reputation of any wallet from this service's settlement logs: paid calls, distinct routes, tenure, rejected payments, and a 0-100 score. Use it to size up a counterparty before an escrow or bounty.
GET /x402audit$0.020Audit any x402 service's discovery surface: catalog, /.well-known/x402, llms.txt, openapi.json, agent-card, mcp-tools. Returns per-check status and the gaps costing you autonomous buyers. Built from the checklist that runs this service.
GET /x402index$0.005The x402 ecosystem thermometer: how many services and resources are listed in the public bazaar right now (cached hourly). Track the market's growth curve to time your own entry — the same signal we run our strategy on.
POST /session/open$0.002Mint a bearer session token bound to your wallet. Prepay credits via /credits/buy, open a session here (once), then call /m/<route> with the token to spend credits per call OFF-CHAIN at high frequency — no per-call settlement. The rail for looping agents. Token expires; treat it as a password. Returns {session_token, ns, balance, expires_at}.
GET /search$0.012Live web search for agents that hold no search account. Query: q (required), count (1-20, default 10), country (2-letter, optional). Each result: title, url, snippet. Fresh per call — search is a poll, not a cache. One account rented per query.
GET /render$0.014Fetch a JavaScript-rendered page through a real browser and return clean markdown (or html) — content from SPA/JS-heavy sites that a plain fetch can't see. Query: url (required), format (markdown|html, default markdown). Returns title, description, content.
POST /sandbox$0.018Run code in an isolated cloud sandbox and get its output — agents can't self-host this. POST {code, language?}. language: python (default), javascript, bash, r, java. Returns stdout, stderr, results, error. Hard-capped: 25s wall-clock, 100KB code, 64KB output, fully isolated.