Skip to content
Back to scrape402

Card snapshot

x402.shizu.me · 2026-08-08 03:04:31 UTC · 6f56849a749cc6151b2f44fd714970eb0bd811422ea965574e3408b88f80fb94

This is a frozen copy of the agent's agent-card.json as we observed it at the timestamp above. We capture a new snapshot every time the card's content hash changes. Useful for: forensic drift analysis, verifying downstream callers see the right version, reproducing routing decisions made historically.

{
  "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 \u2014 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 \u2014 Current & Historical",
      "description": "Weather for any coordinate. Current (default): temperature (C), relative humidity (%), wind speed, weather code \u2014 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 \u2014 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 \u2014 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) \u2014 for technical analysis and backtesting. Query: pair; granularity (1m, 5m, 15m, 1h, 6h, 1d \u2014 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 \u2014 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": "pmscan",
      "name": "Live Prediction-Market Surface",
      "description": "The 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) \u2014 0=resolved, ",
      "tags": [
        "prediction-markets",
        "polymarket",
        "trading",
        "signals",
        "probability",
        "live"
      ]
    },
    {
      "id": "llama/yields",
      "name": "DeFi Yield Pools (filtered)",
      "description": "Every 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",
      "tags": [
        "defi",
        "yields",
        "apy",
        "tvl",
        "defillama",
        "pools"
      ]
    },
    {
      "id": "llama/protocols",
      "name": "DeFi Protocol TVL (filtered)",
      "description": "Every 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). Ea",
      "tags": [
        "defi",
        "tvl",
        "protocols",
        "defillama",
        "lending",
        "dex"
      ]
    },
    {
      "id": "llama/chains",
      "name": "DeFi TVL by Chain",
      "description": "Total DeFi TVL for every chain DefiLlama tracks, ranked. Query: limit (1-500). Each: name, tvl_usd, token.",
      "tags": [
        "defi",
        "tvl",
        "chains",
        "defillama",
        "l1",
        "l2"
      ]
    },
    {
      "id": "llama/stablecoins",
      "name": "Stablecoin Circulating Supply",
      "description": "Every tracked stablecoin with circulating supply (USD), peg type, peg mechanism, and current price. Ranked by circulating. Query: limit (1-200).",
      "tags": [
        "defi",
        "stablecoins",
        "defillama",
        "usdc",
        "usdt",
        "peg"
      ]
    },
    {
      "id": "llama/prices",
      "name": "Token Prices (DefiLlama)",
      "description": "Current token prices from DefiLlama. Query: coins \u2014 a comma list of coin ids like coingecko:bitcoin or <chain>:<address> (up to 50). Each: price, symbol, timestamp, confidence. Prices move \u2014 poll it.",
      "tags": [
        "defi",
        "prices",
        "tokens",
        "defillama",
        "spot",
        "oracle"
      ]
    },
    {
      "id": "llama/tvl",
      "name": "Protocol TVL (live single number)",
      "description": "Current total TVL for named protocols, one number each \u2014 the cheap poll (avoids the 10MB per-protocol history blob). Query: protocol \u2014 comma list of DefiLlama slugs (up to 20), e.g. aave,uniswap-v3. n",
      "tags": [
        "defi",
        "tvl",
        "defillama",
        "protocols",
        "live",
        "poll"
      ]
    },
    {
      "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 \u2014 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 \u2014 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": "v1/chat/completions",
      "name": "OpenAI-Compatible LLM Gateway",
      "description": "Drop-in OpenAI Chat Completions \u2014 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 ",
      "tags": [
        "llm",
        "gateway",
        "openai-compatible",
        "chat-completions",
        "inference",
        "claude"
      ]
    },
    {
      "id": "v1/embeddings",
      "name": "OpenAI-Compatible Embeddings",
      "description": "Drop-in OpenAI embeddings endpoint \u2014 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 ",
      "tags": [
        "embeddings",
        "openai-compatible",
        "vectors",
        "rag",
        "semantic-search",
        "llm"
      ]
    },
    {
      "id": "digest",
      "name": "Web Page Digest",
      "description": "Read any public web page and get a clean LLM summary in ONE call \u2014 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} \u2014 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 \u2014 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": "rand/commit",
      "name": "Commit-Reveal Randomness (fairness beacon)",
      "description": "Randomness that is provably fixed before anyone acts on it. POST {reveal_after?: seconds} returns an id and a sha256 commitment to a secret 32-byte value; share them with counterparties, then after re",
      "tags": [
        "random",
        "entropy",
        "commit-reveal",
        "fairness",
        "beacon",
        "lottery"
      ]
    },
    {
      "id": "rand/commit",
      "name": "Commit-Reveal Randomness (fairness beacon)",
      "description": "Randomness that is provably fixed before anyone acts on it. POST {reveal_after?: seconds} returns an id and a sha256 commitment to a secret 32-byte value; share them with counterparties, then after re",
      "tags": [
        "random",
        "entropy",
        "commit-reveal",
        "fairness",
        "beacon",
        "lottery"
      ]
    },
    {
      "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 \u2014 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 \u2014 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.001, funded by calling /credits/buy ($0.010 per settled call, +10 credits).",
      "tags": [
        "credits",
        "balance",
        "ledger",
        "account"
      ]
    },
    {
      "id": "credits/buy",
      "name": "Buy Credits",
      "description": "Add 10 credits ($0.001 each) to your wallet's balance per settled call \u2014 loop it to fund any amount. Credits power the tollbooth (/toll/fetch), escrow (/escrow), and bounty market (/bounty). Balance: ",
      "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?} \u2014 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?} \u2014 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": "escrow/cancel",
      "name": "Escrow Cancel (buyer refund)",
      "description": "Buyer 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 o",
      "tags": [
        "escrow",
        "cancel",
        "refund",
        "buyer",
        "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, GET ?id=X reads one task (any state) incl. its full spec. Workers claim (/bou",
      "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, GET ?id=X reads one task (any state) incl. its full spec. Workers claim (/bou",
      "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 and the response returns the full task spec; submit the result via /bounty/submit. One claimer per bounty.",
      "tags": [
        "bounty",
        "claim",
        "tasks",
        "work"
      ]
    },
    {
      "id": "bounty/cancel",
      "name": "Bounty: Cancel (poster refund)",
      "description": "Poster 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 ",
      "tags": [
        "bounty",
        "cancel",
        "refund",
        "poster"
      ]
    },
    {
      "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\u2192claim\u2192submit\u2192approve 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 \u2014 the same signal we r",
      "tags": [
        "x402",
        "index",
        "market",
        "stats",
        "ecosystem"
      ]
    },
    {
      "id": "session/open",
      "name": "Open a Prepaid Session",
      "description": "Mint 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",
      "tags": [
        "session",
        "prepaid",
        "credits",
        "high-frequency",
        "metering",
        "loop"
      ]
    },
    {
      "id": "search",
      "name": "Web Search",
      "description": "Live 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 \u2014 search is a poll",
      "tags": [
        "search",
        "web",
        "google",
        "serp",
        "research",
        "agent"
      ]
    },
    {
      "id": "render",
      "name": "JS-Rendered Page to Markdown",
      "description": "Fetch a JavaScript-rendered page through a real browser and return clean markdown (or html) \u2014 content from SPA/JS-heavy sites that a plain fetch can't see. Query: url (required), format (markdown|html",
      "tags": [
        "scrape",
        "render",
        "javascript",
        "spa",
        "markdown",
        "crawl"
      ]
    },
    {
      "id": "sandbox",
      "name": "Code Sandbox",
      "description": "Run code in an isolated cloud sandbox and get its output \u2014 agents can't self-host this. POST {code, language?}. language: python (default), javascript, bash, r, java. Returns stdout, stderr, results, ",
      "tags": [
        "sandbox",
        "code",
        "execute",
        "python",
        "interpreter",
        "compute"
      ]
    }
  ]
}