# Tollkit > Pay-per-call tools for AI agents: read, screenshot or summarize any web page, PDF to text, web search, SEC filings and company due diligence, US weather (by address), US airport delays, address geocoding, IP lookup, exchange rates, wallet balances, token prices and token safety checks on Base, Ethereum and Solana, product prices, and signed proof of what a page said. Paid per call in USDC with the x402 protocol, on Base or Solana. No account, no API key, no signup. Failed calls are never charged. ## Start here 1. **MCP (Claude, Cursor, any MCP client):** add `https://api.tollkit.dev/mcp` as a remote MCP server. Every tool below is there. A paid tool called without `payment` returns the price quote; pay it with your x402 wallet and call again with `payment` set. No wallet yet? The cheap tools (read, screenshot, PDF, weather, airport delays, geocoding, FX, IP, wallet/token/transaction lookups, SEC company) give 3 free calls a day through MCP. 2. **HTTP:** POST the JSON body to a tool's URL below. You get HTTP 402 with the price; pay with any x402 client (for example `@x402/fetch`) and the same request returns the answer. 3. **Try before paying:** `GET https://extract.tollkit.dev/preview` returns a real sample, free. Prices are live at `GET https://extract.tollkit.dev/health`. ## Tools ### Web pages and documents - [POST https://web.tollkit.dev/read](https://web.tollkit.dev/read): `{"url"}` → the page's visible text from a real browser (JavaScript pages work). $0.002. - [POST https://web.tollkit.dev/screenshot](https://web.tollkit.dev/screenshot): `{"url"}` → a 1280x800 JPEG of the page and its SHA-256. $0.003. - [POST https://web.tollkit.dev/summarize](https://web.tollkit.dev/summarize): `{"text", "max_words"?}` → a short summary. $0.005. - [POST https://web.tollkit.dev/search](https://web.tollkit.dev/search): `{"query": "…", "num": 5, "country": "us"}` → Google's top results (title, URL, snippet, date), plus the answer box when there is one. $0.003. - [POST https://web.tollkit.dev/search/read](https://web.tollkit.dev/search/read): `{"query": "…", "num": 3}` → the top results AND the full text of the top 1-3 pages, read in a real browser. One call, one payment. $0.005. - [POST https://web.tollkit.dev/web/brief](https://web.tollkit.dev/web/brief): `{"url": "https://…", "max_words": 80}` → the page read in a real browser and summarized, with title and final URL. One call instead of read + summarize. $0.007. - [POST https://web.tollkit.dev/pdf](https://web.tollkit.dev/pdf): `{"url": "https://…/report.pdf"}` → text of each page, title, author, page count. Text-layer PDFs up to 25 MB; scans are refused free. $0.005. ### Public data - [POST https://data.tollkit.dev/sec/company](https://data.tollkit.dev/sec/company): `{"ticker": "AAPL", "form": "10-K", "limit": 5}` → company profile and its latest SEC filings with links, from EDGAR. $0.002. - [POST https://data.tollkit.dev/sec/financials](https://data.tollkit.dev/sec/financials): `{"ticker": "NVDA"}` → revenue, profit, EPS, assets, cash and more for the last 4 fiscal years and latest quarter, as filed with the SEC. $0.004. - [POST https://data.tollkit.dev/ip](https://data.tollkit.dev/ip): `{"ip": "8.8.8.8"}` → country, region, city and approximate coordinates. IP Geolocation by DB-IP (CC BY 4.0). $0.002. - [POST https://data.tollkit.dev/weather](https://data.tollkit.dev/weather): `{"lat": 38.98, "lon": -76.49}` or `{"address": "1600 Pennsylvania Ave NW, Washington, DC"}` → 7-day National Weather Service forecast and active alerts. US only. $0.002. - [POST https://data.tollkit.dev/fx](https://data.tollkit.dev/fx): `{"from": "USD", "to": "EUR", "amount": 100}` → ECB reference rate and converted amount (rates are free at ecb.europa.eu; for information only). $0.002. - [POST https://data.tollkit.dev/data/company](https://data.tollkit.dev/data/company): `{"ticker": "AAPL"}` → profile, recent filings with links, and key financials (last two years + latest quarter) in one call. Unknown company: free. $0.006. - [POST https://data.tollkit.dev/data/diligence](https://data.tollkit.dev/data/diligence): `{"ticker": "NVDA"}` → profile, growth and margin ratios, key financials, key filings, and AI summaries of the latest 8-K material events. One call instead of ten. $0.03. - [POST https://data.tollkit.dev/airport/status](https://data.tollkit.dev/airport/status): `{"airport": "JFK"}` → normal / delays / stopped_or_closed, with each FAA ground stop, ground delay, arrival/departure delay and closure. Leave `airport` out to list every US airport with delays. $0.003. - [POST https://data.tollkit.dev/geocode](https://data.tollkit.dev/geocode): `{"address": "1600 Pennsylvania Ave NW, Washington, DC 20500"}` → lat/lon, standardized address, ZIP, county + FIPS, state, census tract. US street addresses only. $0.002. - [POST https://data.tollkit.dev/market/seller](https://data.tollkit.dev/market/seller): `{"host": "stableenrich.dev"}` → rank, revenue estimate, paying wallets, every endpoint's numbers, categories, competitors, unusual-number labels and on-chain notes. $0.02. - [POST https://data.tollkit.dev/market/best](https://data.tollkit.dev/market/best): `{"task": "web search"}` → the best-supported x402 endpoints for the task, ranked by real repeat buyers, with prices and cautions. $0.01. - [POST https://data.tollkit.dev/market/dataset](https://data.tollkit.dev/market/dataset): `{}` → every active x402 seller with rank, calls, revenue estimate, paying wallets, categories and labels, plus category totals (weekly). $0.10. ### On-chain (Base, Ethereum, Solana) - [POST https://chain.tollkit.dev/chain/balance](https://chain.tollkit.dev/chain/balance): `{"address": "0x…", "chain": "base", "tokens": ["0x…"]}` → native ETH, USDC (and USDT on Ethereum) and any listed ERC-20 balances, live from the chain. `"chain": "solana"` with a base58 address: SOL, USDC, USDT and any listed SPL mints. $0.002. - [POST https://chain.tollkit.dev/chain/token](https://chain.tollkit.dev/chain/token): `{"token": "0x…", "chain": "base"}` → name, symbol, decimals and total supply of an ERC-20, live from the chain. On Solana, an SPL mint, with its mint and freeze authority. $0.002. - [POST https://chain.tollkit.dev/chain/tx](https://chain.tollkit.dev/chain/tx): `{"hash": "0x…", "chain": "base"}` → status, block time, from/to, value, fee and decoded ERC-20 transfers. On Solana, a base58 signature → status, signers, fee, programs, SOL and token balance changes. Not found is free. $0.002. - [POST https://chain.tollkit.dev/chain/price](https://chain.tollkit.dev/chain/price): `{"token": "0x…", "chain": "base"}` → USD price from the token's deepest Uniswap v3 pool, with the pool, its depth and a thin-liquidity flag. `"chain": "solana"` prices an SPL mint (or "SOL") from Orca Whirlpools. No pool: free. $0.001. - [POST https://chain.tollkit.dev/chain/check](https://chain.tollkit.dev/chain/check): `{"token": "…", "chain": "solana"}` → name, supply, USD price, pool depth and warnings (no pool, thin liquidity, active mint/freeze authority; on EVM the owner, upgradeable proxy, and mint/pause/blacklist/fee functions) in one call. $0.004. - [POST https://chain.tollkit.dev/chain/portfolio](https://chain.tollkit.dev/chain/portfolio): `{"address": "…", "chain": "solana", "tokens": ["…"]}` → each holding priced from on-chain pools, USD values, total, and liquidity warnings. $0.005. - [POST https://chain.tollkit.dev/chain/pretrade](https://chain.tollkit.dev/chain/pretrade): `{"token": "…", "chain": "solana", "wallet": "…", "amount_usd": 500}` → price, pool depth, chain warnings, trade size vs pool (rough price impact), your current holding, and recent web results, in one call. $0.01. ### Product data - [POST https://extract.tollkit.dev/extract](https://extract.tollkit.dev/extract): `{"url"}` → product price, stock, brand, SKU, images as schema.org JSON. $0.01. - [POST https://extract.tollkit.dev/extract/batch](https://extract.tollkit.dev/extract/batch): `{"urls": [...]}` → the same for up to 5 product pages, one payment. $0.04. ### Proof - [POST https://attest.tollkit.dev/attest](https://attest.tollkit.dev/attest): `{"url"}` → signed, timestamped proof of what a page said, with a screenshot. $0.05. Verify any attestation free at https://attest.tollkit.dev/attest/verify. ## How payment works There is nothing to register for. Payment happens in the request itself: call an endpoint without payment and you get back HTTP 402 with the exact amount, asset and recipient, once for each network you can pay on (pick one entry in `accepts`). On Base, sign an EIP-3009 `transferWithAuthorization` with your own wallet. On Solana, build and partially sign the USDC transfer the x402 `exact` SVM scheme describes, with the facilitator's `extra.feePayer` as fee payer (you pay no SOL for fees). Base64-encode the x402 payload and retry with it in the `PAYMENT-SIGNATURE` header (x402 v2; the v1 name `X-PAYMENT` is not read). The settlement comes back in `PAYMENT-RESPONSE`, and every paid JSON answer carries `receipt`: request_id, fetched_at, tool, price_usdc, charged, network and payment_tx, for cost tracking. Retrying safely: send an `Idempotency-Key` header (8-128 visible ASCII characters; a random UUID). If the same key, path and body come again within 10 minutes of a paid answer, you get that answer back with no payment asked and nothing charged (header `Idempotent-Replayed: true`, `receipt.replayed: true`). Only successful paid answers are kept, so a failed call retries normally. Network: base (eip155:8453), USDC. Settlement address: 0xBbfCE2D320dE6aB328Ba93A771c531ebFC9cE704. Network: solana (solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp), USDC. Settlement address: HBasGEGD1szEkNCWckRoZg2vZGhzt7yLSixLgSHi3gYf. Facilitator: https://api.cdp.coinbase.com/platform/v2/x402. ## Product data in detail (Tollkit) Give it a product page URL, get back structured schema.org/Product JSON. $0.01 USDC per call. A call that fails to extract is not charged. ## For MCP clients - [MCP endpoint](https://api.tollkit.dev/mcp): Streamable HTTP, stateless. Tools: `get_product_details` (paid, $0.01), `compare_products` (paid, $0.04, up to 5 URLs in one payment), `try_it_free` (free, real sample output) and `get_service_info` (free). Also `attest_page` (paid, $0.05, signed proof of what a page said) and `verify_attestation` (free, checks one — including attestations we did not issue). MCP has no 402 status code, so a paid tool called without the `payment` argument RETURNS the payment requirements as its result; sign them and call again with `payment` set. ## What this promises Every line here is a branch in the code with a test behind it, not a slogan. They are also the things a generic "read any page" service cannot promise, which is the reason to pick this one for product pages. - **No substitution.** A URL that redirects to what looks like a DIFFERENT page — a discontinued item bouncing to its category listing — is refused, free, rather than answered with another product's price. Pass `allow_redirect: true` to opt out. Nothing else about the response would tell you this happened, which is why it is refused instead of flagged. - **Failures are free.** Every failure path returns >= 400, and x402 settles nothing above 400. - **Cache is disclosed.** A re-served answer says `cached: true`, carries `cache_age_seconds`, and reports the RENDER's `fetchedAt`, not the time of your call. - **Images are copied, never invented.** Up to 5 absolute URLs taken verbatim from the page. - **Nulls, not guesses.** A field the page does not state comes back null. - **Merchant data first.** schema.org JSON-LD and ProductGroup published by the store are read before anything is inferred from the page text, so `sku`, `gtin` and real variant lists come from the source. - **You can tell which is which.** Every response carries `provenance`: `declared` lists the fields whose values match what the merchant published, `inferred` lists the ones a model read off the page. A price the store publishes and a price a model saw are not the same fact, and you should not have to guess which one you got. ## For HTTP clients - [POST /extract](https://extract.tollkit.dev/extract): `{"url": "https://..."}` → product JSON. $0.01. - [POST /extract/batch](https://extract.tollkit.dev/extract/batch): `{"urls": ["https://...", "https://..."]}` → one entry per URL. $0.04 flat for up to 5, one payment and one round trip instead of five. Partial batches are charged in full; a batch where nothing succeeds is free. ## Weigh Station (free checks for any x402 seller) Weigh Station, for any x402 seller (also installable as an agent skill: `npx skills add https://tollkit.dev`): - [GET /check?url=…](https://extract.tollkit.dev/check?url=https://extract.tollkit.dev/extract): **free**. Check ANY x402 endpoint before paying: the live price, who gets paid, the network, and whether that matches its Coinbase Bazaar listing. Nothing is paid; facts and signals only. - [GET /find?q=…](https://extract.tollkit.dev/find?q=product%20price%20lookup): **free**. Search Coinbase's x402 index for a task and check each result live. No paid placement; Tollkit's own services get no special ranking. - **For sellers: monitoring, $5 per endpoint per 30 days.** Your endpoint re-checked every 15 minutes, with a signed webhook when it goes down, recovers, changes price, or starts quoting a different pay_to wallet. `POST https://extract.tollkit.dev/weigh/prepare` with `{"url", "webhookUrl"}` (free) returns a message to sign with your pay_to wallet; POST it with `signature` to `https://extract.tollkit.dev/weigh/subscribe` (x402, $5; a bad signature is not charged). Public record: `GET /weigh/status?url=…`. Paying for monitoring never changes what /check or /find report, or how results rank. - [GET /preview](https://extract.tollkit.dev/preview): **free**. A real extraction of a fixed sample page, in the exact shape the paid route returns. Judge the output before spending anything. - [GET /health](https://extract.tollkit.dev/health): **free**. Liveness, uptime, the advertised prices and these guarantees, machine-readable. Each product line has its own hostname (https://web.tollkit.dev, https://chain.tollkit.dev, https://data.tollkit.dev); every path also answers on this one. ## Attestation (separate origin) Signed, timestamped proof of what a page contained at a moment in time — the rendered text, a screenshot, the serving IP and the TLS certificate, hashed and signed. Same deployment, its own hostname. - [POST https://attest.tollkit.dev/attest](https://attest.tollkit.dev/attest): `{"url": "https://..."}` → a signed attestation. $0.05. - [POST https://attest.tollkit.dev/attest/verify](https://attest.tollkit.dev/attest/verify): **free, forever**. Re-hash an attestation and check its signature. No account. Stateless — it holds no database, so it keeps working whoever runs it. - [GET https://attest.tollkit.dev/attest/signer](https://attest.tollkit.dev/attest/signer): **free**. The address attestations are signed by. Pin it: an attestation naming a different signer was not issued here. ## Optional - [GET /](https://extract.tollkit.dev/): free JSON catalog of every endpoint and its price. - [GET /.well-known/x402](https://extract.tollkit.dev/.well-known/x402): machine-readable manifest (draft-hawkins-x402-dns-discovery). - [x402 protocol](https://x402.org): how the payment scheme works. ## Contact - hello@tollkit.dev