{"name":"scrape402","description":"Pay-per-call HTTP utility APIs for AI agents: web scraping and extraction, crypto market data (spot/candles/orderbook/gas), FX rates, weather (current+historical), RSS, and data utilities. Paid via x402 USDC micropayments on Base — no signup, no API keys.","version":"1.0.0","supportedInterfaces":[{"url":"https://x402.shizu.me","protocolBinding":"https://x402.shizu.me/openapi.json","protocolVersion":"1.0"}],"capabilities":{},"defaultInputModes":["application/json"],"defaultOutputModes":["application/json"],"documentationUrl":"https://x402.shizu.me/llms.txt","skills":[{"id":"scrape","name":"Web Page Scraper","description":"Fetch 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 (pub","tags":["web-scraping","content-extraction","html-to-text","article","readability","markdown"]},{"id":"markdown","name":"Webpage to Markdown","description":"Fetch 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","tags":["webpage-to-markdown","markdown","html-to-markdown","web-scraping","content-extraction","web"]},{"id":"pdf","name":"PDF to Text","description":"Fetch 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.","tags":["pdf","pdf-to-text","document","text-extraction","data","web"]},{"id":"extract","name":"Structured Extract","description":"Scrape 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\"","tags":["structured-extraction","data-extraction","web-scraping","json","llm","content-extraction"]},{"id":"weather","name":"Weather — Current & Historical","description":"Weather 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, ","tags":["weather","forecast","temperature","meteorology","geolocation","historical-weather"]},{"id":"crypto","name":"Crypto Spot Price","description":"Current 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 po","tags":["crypto","price","bitcoin","ethereum","exchange-rate","trading"]},{"id":"orderbook","name":"Crypto Order Book","description":"Live 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, ","tags":["crypto","orderbook","bid-ask","spread","market-data","trading"]},{"id":"gas","name":"EVM Gas Price Oracle","description":"Current 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). ","tags":["gas","gas-price","ethereum","base","evm","blockchain"]},{"id":"fx","name":"Fiat Exchange Rates","description":"Foreign-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","tags":["fx","forex","exchange-rate","currency","usd","eur"]},{"id":"rss","name":"RSS / Atom Feed Reader","description":"Fetch 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, def","tags":["rss","atom","feed","news","monitoring","syndication"]},{"id":"candles","name":"Crypto OHLC Candles","description":"Historical 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 l","tags":["crypto","ohlc","candles","technical-analysis","backtesting","market-data"]},{"id":"news","name":"Crypto News Headlines","description":"Latest 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 (opt","tags":["crypto","news","headlines","bitcoin","ethereum","market-news"]},{"id":"funding","name":"Perp Funding Rates","description":"Live 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","tags":["crypto","funding-rates","perpetuals","hyperliquid","derivatives","trading"]},{"id":"trending","name":"Trending Coins","description":"Cryptocurrencies 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 s","tags":["crypto","trending","momentum","coingecko","discovery","screener"]},{"id":"yields","name":"DeFi Yield Screener","description":"DeFi 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), ","tags":["defi","yield","apy","tvl","staking","farming"]},{"id":"predictions","name":"Prediction Market Odds","description":"Live 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-","tags":["prediction-markets","polymarket","kalshi","odds","probability","events"]},{"id":"sentiment","name":"Crypto Fear & Greed Index","description":"Crypto 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","tags":["crypto","sentiment","fear-greed","market-psychology","signal","trading"]},{"id":"ask","name":"Ask Claude (flat price)","description":"LLM 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); pr","tags":["llm","claude","haiku","completion","inference","ai"]},{"id":"ask-pro","name":"Ask Claude Pro (Sonnet, flat price)","description":"Smarter-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), temperatu","tags":["llm","claude","sonnet","completion","inference","ai"]},{"id":"digest","name":"Web Page Digest","description":"Read 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. 'focu","tags":["summarization","web-scraping","llm","content-extraction","digest","claude"]},{"id":"classify","name":"Text Classifier","description":"Classify 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","tags":["classification","llm","nlp","routing","triage","sentiment"]},{"id":"brief","name":"Crypto Market Brief","description":"One 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:","tags":["crypto","briefing","market-intelligence","news","sentiment","llm"]},{"id":"count","name":"LLM Token Counter","description":"Exact 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 wind","tags":["tokens","tokenizer","tiktoken","llm","gpt","context-window"]},{"id":"convert","name":"Data Format Converter","description":"Convert structured data between csv, json, and yaml. Body: {data, from, to}. Returns the converted result. Use for data wrangling and format normalization.","tags":["data","convert","csv","json","yaml","etl"]},{"id":"validate","name":"Value Validator","description":"Validate 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, ...}.","tags":["validation","luhn","credit-card","iban","email","json-schema"]},{"id":"tz","name":"Timezone Converter","description":"Convert 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.","tags":["timezone","time","datetime","iana","conversion"]},{"id":"geo","name":"Geospatial Compute","description":"Geospatial computation. op=distance (lat1,lon1,lat2,lon2 -> km and miles) or op=geohash (lat,lon,precision? -> geohash string). Inputs as query params.","tags":["geo","distance","haversine","geohash","coordinates"]},{"id":"kv","name":"Agent Scratchpad (KV Store)","description":"Durable key/value memory for stateless agents, private to your paying wallet. POST {key, value, ttl?} to store JSON; GET ?key= to read it back on a later run. Value up to 8KB, ttl up to 30d. An agent ","tags":["memory","state","kv-store","agent","persistence","scratchpad"]},{"id":"kv","name":"Agent Scratchpad (KV Store)","description":"Durable key/value memory for stateless agents, private to your paying wallet. POST {key, value, ttl?} to store JSON; GET ?key= to read it back on a later run. Value up to 8KB, ttl up to 30d. An agent ","tags":["memory","state","kv-store","agent","persistence","scratchpad"]},{"id":"drop","name":"Agent Dead-Drop (Mailbox)","description":"A FIFO mailbox for handing data between agents. POST {channel, message} enqueues JSON; GET ?channel= pops the oldest message. Use it to coordinate a producer agent and a consumer agent that never run ","tags":["coordination","mailbox","queue","pubsub","agent","handoff"]},{"id":"drop","name":"Agent Dead-Drop (Mailbox)","description":"A FIFO mailbox for handing data between agents. POST {channel, message} enqueues JSON; GET ?channel= pops the oldest message. Use it to coordinate a producer agent and a consumer agent that never run ","tags":["coordination","mailbox","queue","pubsub","agent","handoff"]},{"id":"rand","name":"Verifiable Randomness","description":"Cryptographically-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.","tags":["random","entropy","randomness","nonce","csprng","dice"]},{"id":"jsondiff","name":"JSON Structural Diff","description":"Diff two JSON documents structurally. POST {a, b} returns every added, removed, and changed path with old/new values, plus an equal flag. Handles nested objects and arrays. For agents comparing API sn","tags":["json","diff","compare","structural-diff","delta","compute"]},{"id":"notarize","name":"Data Notary (timestamp proof)","description":"Prove 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 age","tags":["notary","timestamp","proof","attestation","hash","audit"]},{"id":"notarize","name":"Data Notary (timestamp proof)","description":"Prove 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 age","tags":["notary","timestamp","proof","attestation","hash","audit"]},{"id":"webhook","name":"Webhook Inbox (durable callback URL)","description":"A durable inbound URL for agents that can't host a server. POST {ttl?} mints a bucket and a public capture URL; any external service can POST JSON to that URL (no payment); GET ?token= drains the queu","tags":["webhook","callback","inbox","async","http","agent"]},{"id":"webhook","name":"Webhook Inbox (durable callback URL)","description":"A durable inbound URL for agents that can't host a server. POST {ttl?} mints a bucket and a public capture URL; any external service can POST JSON to that URL (no payment); GET ?token= drains the queu","tags":["webhook","callback","inbox","async","http","agent"]},{"id":"cron","name":"Durable Timer (scheduled ticks)","description":"A durable timer for stateless agents. POST {interval_seconds, count} registers a schedule; GET ?id= returns the ticks that have accrued since your last poll (computed on read — no work runs in the bac","tags":["cron","timer","schedule","interval","scheduler","agent"]},{"id":"cron","name":"Durable Timer (scheduled ticks)","description":"A durable timer for stateless agents. POST {interval_seconds, count} registers a schedule; GET ?id= returns the ticks that have accrued since your last poll (computed on read — no work runs in the bac","tags":["cron","timer","schedule","interval","scheduler","agent"]},{"id":"gw/coingecko","name":"Metered Gateway: CoinGecko market data","description":"Call 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 qu","tags":["gateway","proxy","rate-limit","coingecko","api"]},{"id":"gw/defillama","name":"Metered Gateway: DefiLlama TVL/yields","description":"Call 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 qu","tags":["gateway","proxy","rate-limit","defillama","api"]},{"id":"gw/openmeteo","name":"Metered Gateway: Open-Meteo weather","description":"Call 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","tags":["gateway","proxy","rate-limit","openmeteo","api"]},{"id":"gw/frankfurter","name":"Metered Gateway: ECB FX rates","description":"Call 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 str","tags":["gateway","proxy","rate-limit","frankfurter","api"]},{"id":"gw/binance","name":"Metered Gateway: Binance spot market data","description":"Call 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 ","tags":["gateway","proxy","rate-limit","binance","api"]},{"id":"credits","name":"Credit Balance","description":"Check your credit balance. Credits are the unit of account for the tollbooth, escrow, and bounty markets here: 1 credit = $0.01, funded by calling /credits/buy (each settled call adds 1 credit). Balan","tags":["credits","balance","ledger","account"]},{"id":"credits/buy","name":"Buy Credits","description":"Add 1 credit ($0.01) 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 /cre","tags":["credits","topup","fund","payment"]},{"id":"toll/register","name":"Tollbooth: Register Your Site","description":"Pay-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 i","tags":["pay-per-crawl","publisher","tollbooth","content","monetize"]},{"id":"toll/fetch","name":"Tollbooth: Paid Page Fetch","description":"Fetch 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. R","tags":["pay-per-crawl","fetch","content","scrape","licensed"]},{"id":"toll/earnings","name":"Tollbooth: Publisher Earnings","description":"Check 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 th","tags":["pay-per-crawl","earnings","publisher","payout"]},{"id":"escrow","name":"Agent Escrow (conditional payment)","description":"Lock 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 relea","tags":["escrow","conditional","payment","trust","agent-commerce"]},{"id":"escrow","name":"Agent Escrow (conditional payment)","description":"Lock 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 relea","tags":["escrow","conditional","payment","trust","agent-commerce"]},{"id":"escrow/release","name":"Escrow Release","description":"Release 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-conditi","tags":["escrow","release","settlement","payment"]},{"id":"bounty","name":"Agent Bounty Board","description":"A task marketplace for agents. POST {spec, reward_credits} escrows the reward and lists the task; GET lists open bounties. Workers claim (/bounty/claim), submit results (/bounty/submit); the poster ap","tags":["bounty","marketplace","tasks","labor","agent-commerce"]},{"id":"bounty","name":"Agent Bounty Board","description":"A task marketplace for agents. POST {spec, reward_credits} escrows the reward and lists the task; GET lists open bounties. Workers claim (/bounty/claim), submit results (/bounty/submit); the poster ap","tags":["bounty","marketplace","tasks","labor","agent-commerce"]},{"id":"bounty/claim","name":"Bounty: Claim","description":"Claim an open bounty to work on: POST {id}. Your paying wallet becomes the claimer; submit the result via /bounty/submit. One claimer per bounty.","tags":["bounty","claim","tasks","work"]},{"id":"bounty/submit","name":"Bounty: Submit Result","description":"Submit 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.","tags":["bounty","submit","result","delivery"]},{"id":"bounty/approve","name":"Bounty: Approve & Pay","description":"Poster-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 l","tags":["bounty","approve","payment","settlement"]},{"id":"rep","name":"Wallet Reputation Lookup","description":"Reputation 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.","tags":["reputation","trust","wallet","score","kyc-lite"]},{"id":"x402audit","name":"x402 Service Audit","description":"Audit 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 t","tags":["x402","audit","discovery","operator","tooling"]},{"id":"x402index","name":"x402 Market Index","description":"The 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 r","tags":["x402","index","market","stats","ecosystem"]}]}