{"$defs":{"Auth":{"description":"Agent-friendly authentication: cookie, bearer token, or basic auth.","properties":{"cookies":{"anyOf":[{"items":{"$ref":"#/$defs/Cookie"},"type":"array"},{"type":"null"}],"default":null,"description":"Cookie jar when `type` is cookie; ignored for bearer/basic.","title":"Cookies"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Basic-auth password when `type` is basic.","title":"Password"},"token":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Bearer token when `type` is bearer (Authorization: Bearer …).","title":"Token"},"type":{"description":"Authentication mode: `cookie` (set `cookies`), `bearer` (set `token`), or `basic` (set `username` and `password`).","enum":["cookie","bearer","basic"],"title":"Type","type":"string"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Basic-auth username when `type` is basic.","title":"Username"}},"required":["type"],"title":"Auth","type":"object"},"Cookie":{"properties":{"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional domain scope, e.g. `.example.com`.","title":"Domain"},"name":{"description":"Cookie name.","title":"Name","type":"string"},"path":{"default":"/","description":"Path scope within the domain (default `/`).","title":"Path","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Optional full URL scope for the cookie; alternative to `domain`/`path`.","title":"Url"},"value":{"description":"Cookie value.","title":"Value","type":"string"}},"required":["name","value"],"title":"Cookie","type":"object"},"ScrapeOptions":{"description":"Advanced browser/interaction controls (the `advanced` object).","properties":{"cookies":{"anyOf":[{"items":{"$ref":"#/$defs/Cookie"},"type":"array"},{"type":"null"}],"default":null,"description":"Inject cookies without `auth`; same shape as auth cookies.","title":"Cookies"},"delay_before_return_ms":{"default":0,"description":"Pause after navigation before snapshot (0–60000, default 0); use for short post-load animations.","maximum":60000,"minimum":0,"title":"Delay Before Return Ms","type":"integer"},"headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"description":"Extra HTTP request headers for the navigation (merged with defaults).","title":"Headers"},"include_html":{"default":false,"description":"When true, include raw HTML in the response in addition to the primary `format` field.","title":"Include Html","type":"boolean"},"include_links":{"default":false,"description":"When true, add a `links` array (href/text) alongside the main body.","title":"Include Links","type":"boolean"},"js_code":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"JavaScript executed in the page before extraction; one string or an array run in order. Disables shared-browser cache for this call.","title":"Js Code"},"locale":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Browser locale, e.g. 'en-US'. Sets Accept-Language inside the render.","title":"Locale"},"max_scroll_steps":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Cap scroll iterations when `scan_full_page` is true (1–200); omit for engine default.","title":"Max Scroll Steps"},"scan_full_page":{"default":false,"description":"Scroll the page to trigger lazy-loaded content; combine with `mode=full` or `max_scroll_steps`.","title":"Scan Full Page","type":"boolean"},"sticky_session":{"default":false,"description":"Pin one outbound address for the whole call instead of one per connection. A render already runs under one egress session, so the page load never spreads across exits; accepted for compatibility with callers that set it.","title":"Sticky Session","type":"boolean"},"timezone_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Browser timezone, e.g. 'America/New_York'.","title":"Timezone Id"},"user_agent":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Override the default browser User-Agent for this render only.","title":"User Agent"},"wait_for":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"CSS selector that must appear before capture; pairs with `wait_for_timeout_ms`.","title":"Wait For"},"wait_for_timeout_ms":{"default":10000,"description":"Max milliseconds to wait for `wait_for` (0–120000, default 10000).","maximum":120000,"minimum":0,"title":"Wait For Timeout Ms","type":"integer"}},"title":"ScrapeOptions","type":"object"}},"note":"12 paid x402 resources below. The free endpoint `POST /v1/probe` is omitted (no x402 quote). Full API surface: https://readfetch.com/llms.txt and https://readfetch.com/.well-known/service.json.","payment":{"accepts_fields":{"canonical_on_accepts":{"amount":"Atomic USDC (6 decimals) on the live 402 quote","mimeType":"Usually application/json","payTo":"Payee address on the live 402 quote"},"display_only":{"amount_usd":"Human USD label on the static catalog — not part of the live quote"},"legacy_aliases_on_accepts":{"max_amount_required":"same as amount (static listing only)","mime_type":"same as mimeType (static listing only)","pay_to":"same as payTo (static listing only)"},"rule":"Each unpaid POST returns 402 with the quote to sign. Static accepts[] in this file are templates only — official clients read the live 402."},"asset_contract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","asset_symbol":"USDC","facilitator":"https://api.cdp.coinbase.com/platform/v2/x402","header":"PAYMENT-SIGNATURE","integrations_url":"https://readfetch.com/integrations#clients","integrator_requirement":"Paid routes require a funded Base USDC wallet. Use readfetch-client / @readfetch/client or the MCP signing proxy (@readfetch/mcp-x402-proxy). Direct calls without a signing client will stop at 402.","live_quote_authoritative":"Each unpaid POST returns 402 with the quote to sign. Static accepts[] on resources below are templates; sign accepts[0] from the live response.","network":"eip155:8453","protocol":"x402","status":"live"},"provider":{"base_url":"https://readfetch.com","icon_url":"https://readfetch.com/icon-512.png","llms_txt_url":"https://readfetch.com/llms.txt","logo_url":"https://readfetch.com/icon-512.png","manifest_url":"https://readfetch.com/.well-known/service.json","mcp_manifest_url":"https://readfetch.com/.well-known/mcp.json","mcp_url":"https://readfetch.com/mcp","name":"readfetch.com","skill_url":"https://readfetch.com/SKILL.md"},"resources":[{"accepts":[{"amount":"5000","amount_usd":0.005,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Fetch a public URL and return its main readable content as Markdown or plain text, plus title, author, published date and site name. Strips navigation, ads and boilerplate. No JavaScript rendering by default (cheaper than readfetch_scrape); one Chromium fallback when plain HTTP is blocked. Prefer readfetch_fetch when you need raw status, headers, or non-HTML bytes; readfetch_scrape when the article only appears after JavaScript runs.","extra":{"name":"USD Coin","paymentFlow":"authorization","version":"2"},"maxAmountRequired":"5000","maxTimeoutSeconds":95,"max_amount_required":"5000","max_timeout_seconds":95,"mimeType":"application/json","mime_type":"application/json","network":"eip155:8453","payTo":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","pay_to":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","resource":"https://readfetch.com/v1/text","scheme":"exact"}],"category":"Data","description":"Fetch a public URL and return its main readable content as Markdown or plain text, plus title, author, published date and site name. Strips navigation, ads and boilerplate. No JavaScript rendering by default (cheaper than readfetch_scrape); one Chromium fallback when plain HTTP is blocked. Prefer readfetch_fetch when you need raw status, headers, or non-HTML bytes; readfetch_scrape when the article only appears after JavaScript runs.","extensions":{"bazaar":{"info":{"input":{"body":{"format":"markdown","max_bytes":5000000,"timeout_s":30,"url":"https://example.com"},"bodyType":"json","description":"Article text and metadata, boilerplate stripped. No browser by default; falls back to one when a page blocks plain HTTP.","method":"POST","type":"http"},"output":{"description":"Fetch a public URL and return its main readable content as Markdown or plain text, plus title, author, published date and site name. Strips navigation, ads and boilerplate. No JavaScript rendering by default (cheaper than readfetch_scrape); one Chromium fallback when plain HTTP is blocked. Prefer readfetch_fetch when you need raw status, headers, or non-HTML bytes; readfetch_scrape when the article only appears after JavaScript runs.","example":{"billed":true,"format":"markdown","metadata":{"author":"A. Writer","date":"2026-04-01","sitename":"Example"},"redirected":false,"requested_url":"https://example.com/blog/post","size":48213,"status":"success","status_code":200,"text":"# Post title\n\nBody as Markdown...","title":"Post title","url":"https://example.com/blog/post"},"format":"application/json","type":"json"}},"schema":{"$defs":{},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"properties":{"body":{"properties":{"accept_language":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Accept-Language header, e.g. 'de-DE,de;q=0.9'. Defaults to en-US.","title":"Accept Language"},"format":{"default":"markdown","description":"Output flavour: Markdown keeps headings, lists and tables.","enum":["markdown","text"],"title":"Format","type":"string"},"max_bytes":{"default":5000000,"description":"Abort if the response body exceeds this many bytes.","maximum":20000000,"minimum":1024,"title":"Max Bytes","type":"integer"},"timeout_s":{"default":30,"description":"Total budget for the whole call in seconds: DNS, redirects, the render fallback and any retry share it.","maximum":60,"minimum":1,"title":"Timeout S","type":"number"},"url":{"description":"Public http(s) URL to read.","format":"uri","maxLength":2083,"minLength":1,"title":"Url","type":"string"}},"required":["url"],"title":"TextRequest","type":"object"},"bodyType":{"const":"json"},"method":{"enum":["POST"]},"type":{"const":"http"}},"required":["type","method","body"],"type":"object"},"output":{"properties":{"billed":{"type":"boolean"},"format":{"type":"string"},"metadata":{"properties":{"author":{"type":"string"},"date":{"type":"string"},"sitename":{"type":"string"}},"type":"object"},"redirected":{"type":"boolean"},"requested_url":{"format":"uri","type":"string"},"size":{"type":"integer"},"status":{"type":"string"},"status_code":{"type":"integer"},"text":{"type":"string"},"title":{"type":"string"},"url":{"format":"uri","type":"string"}},"type":"object"}}}},"readfetch":{"llms_txt":"https://readfetch.com/llms.txt","mcp":"https://readfetch.com/mcp","mcp_manifest":"https://readfetch.com/.well-known/mcp.json","openapi":"https://readfetch.com/openapi.json","payment_status":"live","probe":{"free":true,"method":"POST","note":"Free — no wallet, no 402, no x402. Metadata plus optional ~400-character preview for the same URL before paying.","path":"/v1/probe","price_usd":0},"related_endpoints":[{"path":"/v1/probe"},{"path":"/v1/scrape"}],"service_manifest":"https://readfetch.com/.well-known/service.json","skill":"https://readfetch.com/SKILL.md","support":{"claims":{"method":"POST","path":"/v1/claims","url":"https://readfetch.com/v1/claims","when":"paid delivery dispute; needs RECEIPT + EIP-191 signature"},"feedback":{"body":{"category":"integration|docs|site|other","message":"≤500 chars","request_id":"<from X-Request-Id>"},"free":true,"mcp_tool":"readfetch_feedback","method":"POST","path":"/v1/feedback","url":"https://readfetch.com/v1/feedback"},"request_id_header":"X-Request-Id"},"x402_resources":"https://readfetch.com/.well-known/x402-resources.json"}},"input":{"content_type":"application/json","method":"POST","schema":{"properties":{"accept_language":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Accept-Language header, e.g. 'de-DE,de;q=0.9'. Defaults to en-US.","title":"Accept Language"},"format":{"default":"markdown","description":"Output flavour: Markdown keeps headings, lists and tables.","enum":["markdown","text"],"title":"Format","type":"string"},"max_bytes":{"default":5000000,"description":"Abort if the response body exceeds this many bytes.","maximum":20000000,"minimum":1024,"title":"Max Bytes","type":"integer"},"timeout_s":{"default":30,"description":"Total budget for the whole call in seconds: DNS, redirects, the render fallback and any retry share it.","maximum":60,"minimum":1,"title":"Timeout S","type":"number"},"url":{"description":"Public http(s) URL to read.","format":"uri","maxLength":2083,"minLength":1,"title":"Url","type":"string"}},"required":["url"],"title":"TextRequest","type":"object"}},"method":"POST","mimeType":"application/json","mime_type":"application/json","output":{"content_type":"application/json","example":{"billed":true,"format":"markdown","metadata":{"author":"A. Writer","date":"2026-04-01","sitename":"Example"},"redirected":false,"requested_url":"https://example.com/blog/post","size":48213,"status":"success","status_code":200,"text":"# Post title\n\nBody as Markdown...","title":"Post title","url":"https://example.com/blog/post"}},"provider_url":"https://readfetch.com","resource":"https://readfetch.com/v1/text","tags":["x402","ai agents","llm","web reading","readability","article extraction","html to text","html to markdown","web reader","content extraction","metadata","open graph","no javascript"]},{"accepts":[{"amount":"5000","amount_usd":0.005,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Discover a site's crawlable surface without crawling it: parse robots.txt allow/disallow rules, collect URLs from sitemap.xml and sitemap indexes, find RSS, Atom and JSON feeds, and count internal and external links on the homepage. Use the returned URLs to plan readfetch_scrape, readfetch_batch, or readfetch_crawl — not readfetch_map again on each URL. Prefer readfetch_probe on one URL before paying for bodies.","extra":{"name":"USD Coin","paymentFlow":"authorization","version":"2"},"maxAmountRequired":"5000","maxTimeoutSeconds":95,"max_amount_required":"5000","max_timeout_seconds":95,"mimeType":"application/json","mime_type":"application/json","network":"eip155:8453","payTo":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","pay_to":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","resource":"https://readfetch.com/v1/map","scheme":"exact"}],"category":"Search","description":"Discover a site's crawlable surface without crawling it: parse robots.txt allow/disallow rules, collect URLs from sitemap.xml and sitemap indexes, find RSS, Atom and JSON feeds, and count internal and external links on the homepage. Use the returned URLs to plan readfetch_scrape, readfetch_batch, or readfetch_crawl — not readfetch_map again on each URL. Prefer readfetch_probe on one URL before paying for bodies.","extensions":{"bazaar":{"info":{"input":{"body":{"limit":200,"max_bytes":5000000,"timeout_s":60,"url":"https://example.com"},"bodyType":"json","description":"Sitemaps, robots rules, feeds and link counts for a whole site, in one call. Plan a crawl before paying for it.","method":"POST","type":"http"},"output":{"description":"Discover a site's crawlable surface without crawling it: parse robots.txt allow/disallow rules, collect URLs from sitemap.xml and sitemap indexes, find RSS, Atom and JSON feeds, and count internal and external links on the homepage. Use the returned URLs to plan readfetch_scrape, readfetch_batch, or readfetch_crawl — not readfetch_map again on each URL. Prefer readfetch_probe on one URL before paying for bodies.","example":{"billed":true,"feeds":["https://example.com/feed.xml"],"host":"example.com","links":{"external":6,"internal":34},"robots":{"allow":[],"crawl_delay":null,"disallow":["/admin"],"sitemaps":["https://example.com/sitemap.xml"]},"sitemaps":["https://example.com/sitemap.xml"],"status":"success","status_code":200,"total_found":2,"url":"https://example.com","url_count":2,"urls":["https://example.com/","https://example.com/blog/post"]},"format":"application/json","type":"json"}},"schema":{"$defs":{},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"properties":{"body":{"properties":{"limit":{"default":200,"description":"Maximum number of URLs to return (1-1000).","maximum":1000,"minimum":1,"title":"Limit","type":"integer"},"max_bytes":{"default":5000000,"description":"Abort if any single document exceeds this many bytes.","maximum":20000000,"minimum":1024,"title":"Max Bytes","type":"integer"},"timeout_s":{"default":60,"description":"Total budget for the whole call in seconds; every sitemap fetch and the browser fallback share it. 95 s is the edge ceiling (Cloudflare closes at 100 s).","maximum":95,"minimum":1,"title":"Timeout S","type":"number"},"url":{"description":"Public http(s) URL of the site to map.","format":"uri","maxLength":2083,"minLength":1,"title":"Url","type":"string"}},"required":["url"],"title":"MapRequest","type":"object"},"bodyType":{"const":"json"},"method":{"enum":["POST"]},"type":{"const":"http"}},"required":["type","method","body"],"type":"object"},"output":{"properties":{"billed":{"type":"boolean"},"feeds":{"items":{"format":"uri","type":"string"},"type":"array"},"host":{"type":"string"},"links":{"properties":{"external":{"type":"integer"},"internal":{"type":"integer"}},"type":"object"},"robots":{"properties":{"allow":{"items":{},"type":"array"},"crawl_delay":{"type":["string","null"]},"disallow":{"items":{"type":"string"},"type":"array"},"sitemaps":{"items":{"format":"uri","type":"string"},"type":"array"}},"type":"object"},"sitemaps":{"items":{"format":"uri","type":"string"},"type":"array"},"status":{"type":"string"},"status_code":{"type":"integer"},"total_found":{"type":"integer"},"url":{"format":"uri","type":"string"},"url_count":{"type":"integer"},"urls":{"items":{"format":"uri","type":"string"},"type":"array"}},"type":"object"}}}},"readfetch":{"llms_txt":"https://readfetch.com/llms.txt","mcp":"https://readfetch.com/mcp","mcp_manifest":"https://readfetch.com/.well-known/mcp.json","openapi":"https://readfetch.com/openapi.json","payment_status":"live","probe":{"free":true,"method":"POST","note":"Free — no wallet, no 402, no x402. Metadata plus optional ~400-character preview for the same URL before paying.","path":"/v1/probe","price_usd":0},"related_endpoints":[{"path":"/v1/probe"},{"path":"/v1/crawl"},{"path":"/v1/scrape"}],"service_manifest":"https://readfetch.com/.well-known/service.json","skill":"https://readfetch.com/SKILL.md","support":{"claims":{"method":"POST","path":"/v1/claims","url":"https://readfetch.com/v1/claims","when":"paid delivery dispute; needs RECEIPT + EIP-191 signature"},"feedback":{"body":{"category":"integration|docs|site|other","message":"≤500 chars","request_id":"<from X-Request-Id>"},"free":true,"mcp_tool":"readfetch_feedback","method":"POST","path":"/v1/feedback","url":"https://readfetch.com/v1/feedback"},"request_id_header":"X-Request-Id"},"x402_resources":"https://readfetch.com/.well-known/x402-resources.json"}},"input":{"content_type":"application/json","method":"POST","schema":{"properties":{"limit":{"default":200,"description":"Maximum number of URLs to return (1-1000).","maximum":1000,"minimum":1,"title":"Limit","type":"integer"},"max_bytes":{"default":5000000,"description":"Abort if any single document exceeds this many bytes.","maximum":20000000,"minimum":1024,"title":"Max Bytes","type":"integer"},"timeout_s":{"default":60,"description":"Total budget for the whole call in seconds; every sitemap fetch and the browser fallback share it. 95 s is the edge ceiling (Cloudflare closes at 100 s).","maximum":95,"minimum":1,"title":"Timeout S","type":"number"},"url":{"description":"Public http(s) URL of the site to map.","format":"uri","maxLength":2083,"minLength":1,"title":"Url","type":"string"}},"required":["url"],"title":"MapRequest","type":"object"}},"method":"POST","mimeType":"application/json","mime_type":"application/json","output":{"content_type":"application/json","example":{"billed":true,"feeds":["https://example.com/feed.xml"],"host":"example.com","links":{"external":6,"internal":34},"robots":{"allow":[],"crawl_delay":null,"disallow":["/admin"],"sitemaps":["https://example.com/sitemap.xml"]},"sitemaps":["https://example.com/sitemap.xml"],"status":"success","status_code":200,"total_found":2,"url":"https://example.com","url_count":2,"urls":["https://example.com/","https://example.com/blog/post"]}},"provider_url":"https://readfetch.com","resource":"https://readfetch.com/v1/map","tags":["x402","ai agents","site discovery","sitemap","robots.txt","rss","atom","feed discovery","url discovery","site map","crawl planning","link inventory"]},{"accepts":[{"amount":"5000","amount_usd":0.005,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Load a public URL in headless Chromium and return Markdown, plain text, or HTML (`format`, plus status_code, title, billed; optional links via `advanced.include_links`). `mode` sets latency and depth: fast (15 s, minimal render), render (30 s, default, full JS), full (60 s, scroll the page). Put scroll, wait_for, js_code, headers, cookies, and auth in `advanced` (`options` is deprecated, same shape). Prefer readfetch_text when JavaScript is not required; readfetch_fetch for r","extra":{"name":"USD Coin","paymentFlow":"authorization","version":"2"},"maxAmountRequired":"5000","maxTimeoutSeconds":95,"max_amount_required":"5000","max_timeout_seconds":95,"mimeType":"application/json","mime_type":"application/json","network":"eip155:8453","payTo":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","pay_to":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","resource":"https://readfetch.com/v1/scrape","scheme":"exact"}],"category":"Data","description":"Load a public URL in headless Chromium and return Markdown, plain text, or HTML (`format`, plus status_code, title, billed; optional links via `advanced.include_links`). `mode` sets latency and depth: fast (15 s, minimal render), render (30 s, default, full JS), full (60 s, scroll the page). Put scroll, wait_for, js_code, headers, cookies, and auth in `advanced` (`options` is deprecated, same shape). Prefer readfetch_text when JavaScript is not required; readfetch_fetch for raw HTTP/API bytes; readfetch_residential when the site blocks datacentre IPs; readfetch_screenshot for a PNG/JPEG. Bot-check or empty extractions may return `billed: false` with a hint.","extensions":{"bazaar":{"info":{"input":{"body":{"format":"markdown","mode":"render","url":"https://example.com"},"bodyType":"json","description":"Chromium renders the page, runs interactions, and returns Markdown, text or HTML with its links.","method":"POST","type":"http"},"output":{"description":"Load a public URL in headless Chromium and return Markdown, plain text, or HTML (`format`, plus status_code, title, billed; optional links via `advanced.include_links`). `mode` sets latency and depth: fast (15 s, minimal render), render (30 s, default, full JS), full (60 s, scroll the page). Put scroll, wait_for, js_code, headers, cookies, and auth in `advanced` (`options` is deprecated, same shape). Prefer readfetch_text when JavaScript is not required; readfetch_fetch for raw HTTP/API bytes; readfetch_residential when the site blocks datacentre IPs; readfetch_screenshot for a PNG/JPEG. Bot-check or empty extractions may return `billed: false` with a hint.","example":{"billed":true,"markdown":"# Pricing\n\n...","status":"success","status_code":200,"title":"Pricing","url":"https://example.com/pricing"},"format":"application/json","type":"json"}},"schema":{"$defs":{},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"properties":{"body":{"properties":{"advanced":{"anyOf":[{"$ref":"#/$defs/ScrapeOptions"},{"type":"null"}],"default":null,"description":"Browser interactions: scroll, wait_for selector, js_code, headers, cookies, locale, include_links, etc."},"auth":{"anyOf":[{"$ref":"#/$defs/Auth"},{"type":"null"}],"default":null,"description":"Optional cookie, bearer, or basic auth for the page load."},"format":{"default":"markdown","description":"Primary body field returned: markdown (default), plain text, or raw HTML.","enum":["markdown","text","html"],"title":"Format","type":"string"},"mode":{"default":"render","description":"Whole-call budget and render depth: fast (15 s), render (30 s, default), or full (60 s with page scroll).","enum":["fast","render","full"],"title":"Mode","type":"string"},"options":{"anyOf":[{"$ref":"#/$defs/ScrapeOptions"},{"type":"null"}],"default":null,"deprecated":true,"description":"Deprecated — use `advanced` instead (same ScrapeOptions shape). Scheduled for removal in a future API semver bump."},"url":{"description":"Public http(s) URL to load in Chromium.","format":"uri","maxLength":2083,"minLength":1,"title":"Url","type":"string"}},"required":["url"],"title":"ScrapeRequest","type":"object"},"bodyType":{"const":"json"},"method":{"enum":["POST"]},"type":{"const":"http"}},"required":["type","method","body"],"type":"object"},"output":{"properties":{"billed":{"type":"boolean"},"markdown":{"type":"string"},"status":{"type":"string"},"status_code":{"type":"integer"},"title":{"type":"string"},"url":{"format":"uri","type":"string"}},"type":"object"}}}},"readfetch":{"llms_txt":"https://readfetch.com/llms.txt","mcp":"https://readfetch.com/mcp","mcp_manifest":"https://readfetch.com/.well-known/mcp.json","openapi":"https://readfetch.com/openapi.json","payment_status":"live","probe":{"free":true,"method":"POST","note":"Free — no wallet, no 402, no x402. Metadata plus optional ~400-character preview for the same URL before paying.","path":"/v1/probe","price_usd":0},"related_endpoints":[{"path":"/v1/probe"},{"path":"/v1/text"}],"service_manifest":"https://readfetch.com/.well-known/service.json","skill":"https://readfetch.com/SKILL.md","support":{"claims":{"method":"POST","path":"/v1/claims","url":"https://readfetch.com/v1/claims","when":"paid delivery dispute; needs RECEIPT + EIP-191 signature"},"feedback":{"body":{"category":"integration|docs|site|other","message":"≤500 chars","request_id":"<from X-Request-Id>"},"free":true,"mcp_tool":"readfetch_feedback","method":"POST","path":"/v1/feedback","url":"https://readfetch.com/v1/feedback"},"request_id_header":"X-Request-Id"},"x402_resources":"https://readfetch.com/.well-known/x402-resources.json"}},"input":{"content_type":"application/json","method":"POST","schema":{"properties":{"advanced":{"anyOf":[{"$ref":"#/$defs/ScrapeOptions"},{"type":"null"}],"default":null,"description":"Browser interactions: scroll, wait_for selector, js_code, headers, cookies, locale, include_links, etc."},"auth":{"anyOf":[{"$ref":"#/$defs/Auth"},{"type":"null"}],"default":null,"description":"Optional cookie, bearer, or basic auth for the page load."},"format":{"default":"markdown","description":"Primary body field returned: markdown (default), plain text, or raw HTML.","enum":["markdown","text","html"],"title":"Format","type":"string"},"mode":{"default":"render","description":"Whole-call budget and render depth: fast (15 s), render (30 s, default), or full (60 s with page scroll).","enum":["fast","render","full"],"title":"Mode","type":"string"},"options":{"anyOf":[{"$ref":"#/$defs/ScrapeOptions"},{"type":"null"}],"default":null,"deprecated":true,"description":"Deprecated — use `advanced` instead (same ScrapeOptions shape). Scheduled for removal in a future API semver bump."},"url":{"description":"Public http(s) URL to load in Chromium.","format":"uri","maxLength":2083,"minLength":1,"title":"Url","type":"string"}},"required":["url"],"title":"ScrapeRequest","type":"object"}},"method":"POST","mimeType":"application/json","mime_type":"application/json","output":{"content_type":"application/json","example":{"billed":true,"markdown":"# Pricing\n\n...","status":"success","status_code":200,"title":"Pricing","url":"https://example.com/pricing"}},"provider_url":"https://readfetch.com","resource":"https://readfetch.com/v1/scrape","tags":["x402","ai agents","scrape","javascript rendering","browser rendering","markdown","html","spa","web scraping"]},{"accepts":[{"amount":"20000","amount_usd":0.02,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Identical request and response to /v1/scrape, but the render leaves through a residential address instead of the datacentre. For targets that block by IP reputation (DataDome, PerimeterX, Cloudflare, AWS WAF). One attempt, no retries: residential bandwidth is the cost, and four times the scrape price is what it takes to cover it honestly. Prefer readfetch_scrape when datacentre egress works; use readfetch_residential only after readfetch_scrape fails or readfetch_probe report","extra":{"name":"USD Coin","paymentFlow":"authorization","version":"2"},"maxAmountRequired":"20000","maxTimeoutSeconds":95,"max_amount_required":"20000","max_timeout_seconds":95,"mimeType":"application/json","mime_type":"application/json","network":"eip155:8453","payTo":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","pay_to":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","resource":"https://readfetch.com/v1/scrape/residential","scheme":"exact"}],"category":"Data","description":"Identical request and response to /v1/scrape, but the render leaves through a residential address instead of the datacentre. For targets that block by IP reputation (DataDome, PerimeterX, Cloudflare, AWS WAF). One attempt, no retries: residential bandwidth is the cost, and four times the scrape price is what it takes to cover it honestly. Prefer readfetch_scrape when datacentre egress works; use readfetch_residential only after readfetch_scrape fails or readfetch_probe reports a persistent challenge.","extensions":{"bazaar":{"info":{"input":{"body":{"format":"markdown","mode":"render","url":"https://example.com"},"bodyType":"json","description":"Scrape through a residential address pool, for targets that refuse a datacentre address. Same contract as /v1/scrape, one attempt, priced for the bandwidth.","method":"POST","type":"http"},"output":{"description":"Identical request and response to /v1/scrape, but the render leaves through a residential address instead of the datacentre. For targets that block by IP reputation (DataDome, PerimeterX, Cloudflare, AWS WAF). One attempt, no retries: residential bandwidth is the cost, and four times the scrape price is what it takes to cover it honestly. Prefer readfetch_scrape when datacentre egress works; use readfetch_residential only after readfetch_scrape fails or readfetch_probe reports a persistent challenge.","example":{"billed":true,"markdown":"# Pricing\n\n...","status":"success","status_code":200,"title":"Pricing","url":"https://example.com/pricing"},"format":"application/json","type":"json"}},"schema":{"$defs":{},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"properties":{"body":{"properties":{"advanced":{"anyOf":[{"$ref":"#/$defs/ScrapeOptions"},{"type":"null"}],"default":null,"description":"Browser interactions: scroll, wait_for selector, js_code, headers, cookies, locale, include_links, etc."},"auth":{"anyOf":[{"$ref":"#/$defs/Auth"},{"type":"null"}],"default":null,"description":"Optional cookie, bearer, or basic auth for the page load."},"format":{"default":"markdown","description":"Primary body field returned: markdown (default), plain text, or raw HTML.","enum":["markdown","text","html"],"title":"Format","type":"string"},"mode":{"default":"render","description":"Whole-call budget and render depth: fast (15 s), render (30 s, default), or full (60 s with page scroll).","enum":["fast","render","full"],"title":"Mode","type":"string"},"options":{"anyOf":[{"$ref":"#/$defs/ScrapeOptions"},{"type":"null"}],"default":null,"deprecated":true,"description":"Deprecated — use `advanced` instead (same ScrapeOptions shape). Scheduled for removal in a future API semver bump."},"url":{"description":"Public http(s) URL to load in Chromium.","format":"uri","maxLength":2083,"minLength":1,"title":"Url","type":"string"}},"required":["url"],"title":"ScrapeRequest","type":"object"},"bodyType":{"const":"json"},"method":{"enum":["POST"]},"type":{"const":"http"}},"required":["type","method","body"],"type":"object"},"output":{"properties":{"billed":{"type":"boolean"},"markdown":{"type":"string"},"status":{"type":"string"},"status_code":{"type":"integer"},"title":{"type":"string"},"url":{"format":"uri","type":"string"}},"type":"object"}}}},"readfetch":{"llms_txt":"https://readfetch.com/llms.txt","mcp":"https://readfetch.com/mcp","mcp_manifest":"https://readfetch.com/.well-known/mcp.json","openapi":"https://readfetch.com/openapi.json","payment_status":"live","probe":{"free":true,"method":"POST","note":"Free — no wallet, no 402, no x402. Metadata plus optional ~400-character preview for the same URL before paying.","path":"/v1/probe","price_usd":0},"related_endpoints":[{"path":"/v1/probe"}],"service_manifest":"https://readfetch.com/.well-known/service.json","skill":"https://readfetch.com/SKILL.md","support":{"claims":{"method":"POST","path":"/v1/claims","url":"https://readfetch.com/v1/claims","when":"paid delivery dispute; needs RECEIPT + EIP-191 signature"},"feedback":{"body":{"category":"integration|docs|site|other","message":"≤500 chars","request_id":"<from X-Request-Id>"},"free":true,"mcp_tool":"readfetch_feedback","method":"POST","path":"/v1/feedback","url":"https://readfetch.com/v1/feedback"},"request_id_header":"X-Request-Id"},"x402_resources":"https://readfetch.com/.well-known/x402-resources.json"}},"input":{"content_type":"application/json","method":"POST","schema":{"properties":{"advanced":{"anyOf":[{"$ref":"#/$defs/ScrapeOptions"},{"type":"null"}],"default":null,"description":"Browser interactions: scroll, wait_for selector, js_code, headers, cookies, locale, include_links, etc."},"auth":{"anyOf":[{"$ref":"#/$defs/Auth"},{"type":"null"}],"default":null,"description":"Optional cookie, bearer, or basic auth for the page load."},"format":{"default":"markdown","description":"Primary body field returned: markdown (default), plain text, or raw HTML.","enum":["markdown","text","html"],"title":"Format","type":"string"},"mode":{"default":"render","description":"Whole-call budget and render depth: fast (15 s), render (30 s, default), or full (60 s with page scroll).","enum":["fast","render","full"],"title":"Mode","type":"string"},"options":{"anyOf":[{"$ref":"#/$defs/ScrapeOptions"},{"type":"null"}],"default":null,"deprecated":true,"description":"Deprecated — use `advanced` instead (same ScrapeOptions shape). Scheduled for removal in a future API semver bump."},"url":{"description":"Public http(s) URL to load in Chromium.","format":"uri","maxLength":2083,"minLength":1,"title":"Url","type":"string"}},"required":["url"],"title":"ScrapeRequest","type":"object"}},"method":"POST","mimeType":"application/json","mime_type":"application/json","output":{"content_type":"application/json","example":{"billed":true,"markdown":"# Pricing\n\n...","status":"success","status_code":200,"title":"Pricing","url":"https://example.com/pricing"}},"provider_url":"https://readfetch.com","resource":"https://readfetch.com/v1/scrape/residential","tags":["residential proxy","protected sites","anti-bot","scrape","browser rendering"]},{"accepts":[{"amount":"3000","amount_usd":0.003,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Send an HTTP request (GET, POST, PUT, PATCH, DELETE, HEAD) through egress and return status_code, response headers, and body as text or base64 (`binary: true`). `max_bytes` caps the stored body; `follow_redirects` (default true) and `timeout_s` (95 s ceiling) apply to the full redirect chain. Use `json_body` for JSON POST/PUT payloads; use `body` for raw bytes or strings. Prefer readfetch_text for readable HTML articles; readfetch_pdf to extract PDF text (not raw bytes alone)","extra":{"name":"USD Coin","paymentFlow":"authorization","version":"2"},"maxAmountRequired":"3000","maxTimeoutSeconds":95,"max_amount_required":"3000","max_timeout_seconds":95,"mimeType":"application/json","mime_type":"application/json","network":"eip155:8453","payTo":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","pay_to":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","resource":"https://readfetch.com/v1/fetch","scheme":"exact"}],"category":"Infra","description":"Send an HTTP request (GET, POST, PUT, PATCH, DELETE, HEAD) through egress and return status_code, response headers, and body as text or base64 (`binary: true`). `max_bytes` caps the stored body; `follow_redirects` (default true) and `timeout_s` (95 s ceiling) apply to the full redirect chain. Use `json_body` for JSON POST/PUT payloads; use `body` for raw bytes or strings. Prefer readfetch_text for readable HTML articles; readfetch_pdf to extract PDF text (not raw bytes alone). POST/PUT/DELETE can change remote state despite readOnlyHint.","extensions":{"bazaar":{"info":{"input":{"body":{"binary":false,"follow_redirects":true,"max_bytes":10000000,"method":"GET","timeout_s":95,"url":"https://example.com"},"bodyType":"json","description":"Raw HTTP through the same egress. JSON APIs, GraphQL, PDFs, byte ranges - anything that is not a page.","method":"POST","type":"http"},"output":{"description":"Send an HTTP request (GET, POST, PUT, PATCH, DELETE, HEAD) through egress and return status_code, response headers, and body as text or base64 (`binary: true`). `max_bytes` caps the stored body; `follow_redirects` (default true) and `timeout_s` (95 s ceiling) apply to the full redirect chain. Use `json_body` for JSON POST/PUT payloads; use `body` for raw bytes or strings. Prefer readfetch_text for readable HTML articles; readfetch_pdf to extract PDF text (not raw bytes alone). POST/PUT/DELETE can change remote state despite readOnlyHint.","example":{"billed":true,"content_type":"application/json","size":512,"status":"success","status_code":200,"text":"{\"items\": []}","url":"https://api.example.com/items"},"format":"application/json","type":"json"}},"schema":{"$defs":{},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"properties":{"body":{"properties":{"binary":{"default":false,"description":"When true, return body as base64 instead of UTF-8 text.","title":"Binary","type":"boolean"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Raw request body string for POST/PUT/PATCH (mutually exclusive with json_body).","title":"Body"},"follow_redirects":{"default":true,"description":"Follow 3xx redirects (default true).","title":"Follow Redirects","type":"boolean"},"headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"description":"Optional request headers, e.g. Authorization or Accept.","title":"Headers"},"json_body":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"JSON object serialized as the request body (Content-Type application/json).","title":"Json Body"},"max_bytes":{"default":10000000,"description":"Stop reading and truncate once the response body exceeds this size (bytes).","maximum":50000000,"minimum":1024,"title":"Max Bytes","type":"integer"},"method":{"default":"GET","description":"HTTP method (GET default).","enum":["GET","POST","PUT","PATCH","DELETE","HEAD"],"title":"Method","type":"string"},"timeout_s":{"default":95,"description":"Total budget for the whole call in seconds, redirect hops included.","maximum":95,"minimum":1,"title":"Timeout S","type":"number"},"url":{"description":"Request URL (http or https).","format":"uri","maxLength":2083,"minLength":1,"title":"Url","type":"string"}},"required":["url"],"title":"FetchRequest","type":"object"},"bodyType":{"const":"json"},"method":{"enum":["POST"]},"type":{"const":"http"}},"required":["type","method","body"],"type":"object"},"output":{"properties":{"billed":{"type":"boolean"},"content_type":{"type":"string"},"size":{"type":"integer"},"status":{"type":"string"},"status_code":{"type":"integer"},"text":{"type":"string"},"url":{"format":"uri","type":"string"}},"type":"object"}}}},"readfetch":{"llms_txt":"https://readfetch.com/llms.txt","mcp":"https://readfetch.com/mcp","mcp_manifest":"https://readfetch.com/.well-known/mcp.json","openapi":"https://readfetch.com/openapi.json","payment_status":"live","probe":{"free":true,"method":"POST","note":"Free — no wallet, no 402, no x402. Metadata plus optional ~400-character preview for the same URL before paying.","path":"/v1/probe","price_usd":0},"related_endpoints":[{"path":"/v1/probe"},{"path":"/v1/text"}],"service_manifest":"https://readfetch.com/.well-known/service.json","skill":"https://readfetch.com/SKILL.md","support":{"claims":{"method":"POST","path":"/v1/claims","url":"https://readfetch.com/v1/claims","when":"paid delivery dispute; needs RECEIPT + EIP-191 signature"},"feedback":{"body":{"category":"integration|docs|site|other","message":"≤500 chars","request_id":"<from X-Request-Id>"},"free":true,"mcp_tool":"readfetch_feedback","method":"POST","path":"/v1/feedback","url":"https://readfetch.com/v1/feedback"},"request_id_header":"X-Request-Id"},"x402_resources":"https://readfetch.com/.well-known/x402-resources.json"}},"input":{"content_type":"application/json","method":"POST","schema":{"properties":{"binary":{"default":false,"description":"When true, return body as base64 instead of UTF-8 text.","title":"Binary","type":"boolean"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Raw request body string for POST/PUT/PATCH (mutually exclusive with json_body).","title":"Body"},"follow_redirects":{"default":true,"description":"Follow 3xx redirects (default true).","title":"Follow Redirects","type":"boolean"},"headers":{"anyOf":[{"additionalProperties":{"type":"string"},"type":"object"},{"type":"null"}],"default":null,"description":"Optional request headers, e.g. Authorization or Accept.","title":"Headers"},"json_body":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"description":"JSON object serialized as the request body (Content-Type application/json).","title":"Json Body"},"max_bytes":{"default":10000000,"description":"Stop reading and truncate once the response body exceeds this size (bytes).","maximum":50000000,"minimum":1024,"title":"Max Bytes","type":"integer"},"method":{"default":"GET","description":"HTTP method (GET default).","enum":["GET","POST","PUT","PATCH","DELETE","HEAD"],"title":"Method","type":"string"},"timeout_s":{"default":95,"description":"Total budget for the whole call in seconds, redirect hops included.","maximum":95,"minimum":1,"title":"Timeout S","type":"number"},"url":{"description":"Request URL (http or https).","format":"uri","maxLength":2083,"minLength":1,"title":"Url","type":"string"}},"required":["url"],"title":"FetchRequest","type":"object"}},"method":"POST","mimeType":"application/json","mime_type":"application/json","output":{"content_type":"application/json","example":{"billed":true,"content_type":"application/json","size":512,"status":"success","status_code":200,"text":"{\"items\": []}","url":"https://api.example.com/items"}},"provider_url":"https://readfetch.com","resource":"https://readfetch.com/v1/fetch","tags":["http client","raw http","api calls","graphql","proxy"]},{"accepts":[{"amount":"15000","amount_usd":0.0015,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Read a fixed list of public HTML pages in one call—the same article extraction as POST /v1/text for each URL (Markdown or plain text plus title and metadata). One x402 payment covers the batch (minimum 10 pages quoted; URLs deduped, max 50). Returns results in input order: each item has url, status_code, text, billed, and hint when undelivered, plus batch-level delivered, failed, billed_pages, and optional credit for unused pages. Undelivered pages are not billed. Use readfet","extra":{"name":"USD Coin","paymentFlow":"authorization","version":"2"},"maxAmountRequired":"15000","maxTimeoutSeconds":95,"max_amount_required":"15000","max_timeout_seconds":95,"mimeType":"application/json","mime_type":"application/json","network":"eip155:8453","payTo":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","pay_to":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","resource":"https://readfetch.com/v1/batch","scheme":"exact"}],"category":"Data","description":"Read a fixed list of public HTML pages in one call—the same article extraction as POST /v1/text for each URL (Markdown or plain text plus title and metadata). One x402 payment covers the batch (minimum 10 pages quoted; URLs deduped, max 50). Returns results in input order: each item has url, status_code, text, billed, and hint when undelivered, plus batch-level delivered, failed, billed_pages, and optional credit for unused pages. Undelivered pages are not billed. Use readfetch_text for one URL, readfetch_map then readfetch_crawl to discover and walk a site, readfetch_scrape when JavaScript is required. Read-only; 402 without PAYMENT-SIGNATURE like other paid tools.","extensions":{"bazaar":{"info":{"input":{"body":{"format":"markdown","pipeline":"text","timeout_s":95,"urls":["https://example.com"]},"bodyType":"json","description":"Read up to 50 HTML pages in one payment (same /v1/text extraction per URL). Results in input order; undelivered pages are credited, not billed.","method":"POST","type":"http"},"output":{"description":"Read a fixed list of public HTML pages in one call—the same article extraction as POST /v1/text for each URL (Markdown or plain text plus title and metadata). One x402 payment covers the batch (minimum 10 pages quoted; URLs deduped, max 50). Returns results in input order: each item has url, status_code, text, billed, and hint when undelivered, plus batch-level delivered, failed, billed_pages, and optional credit for unused pages. Undelivered pages are not billed. Use readfetch_text for one URL, readfetch_map then readfetch_crawl to discover and walk a site, readfetch_scrape when JavaScript is required. Read-only; 402 without PAYMENT-SIGNATURE like other paid tools.","example":{"billed_pages":1,"credit":"credit-token-when-refund-applies","delivered":1,"failed":1,"results":[{"billed":true,"content_sha256":"...","hint":null,"requested_url":"https://example.com","status_code":200,"text":"...","title":"Example Domain","url":"https://example.com/","used_browser":false},{"billed":false,"content_sha256":null,"hint":"upstream error","requested_url":"https://example.invalid/","status_code":502,"text":"","title":null,"url":"https://example.invalid/","used_browser":false}],"status":"partial"},"format":"application/json","type":"json"}},"schema":{"$defs":{},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"properties":{"body":{"properties":{"accept_language":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Accept-Language header for every item, e.g. 'de-DE,de;q=0.9'. Defaults to en-US when omitted."},"format":{"default":"markdown","description":"Per-item output flavour, same as /v1/text: markdown (default) or plain text.","enum":["markdown","text"],"type":"string"},"pipeline":{"default":"text","description":"text (default) = HTTP-first per URL, same as readfetch_text; use render when probe reported challenge:true or items need JavaScript — bills like scrape per undelivered page, not like plain text.","enum":["text","render"],"type":"string"},"timeout_s":{"default":95,"description":"Total budget for the whole batch in seconds; every item shares it and no item restarts it.","maximum":95,"minimum":1,"type":"number"},"urls":{"description":"URLs to read, deduped before quoting.","items":{"format":"uri","type":"string"},"maxItems":50,"minItems":1,"type":"array"}},"required":["urls"],"type":"object"},"bodyType":{"const":"json"},"method":{"enum":["POST"]},"type":{"const":"http"}},"required":["type","method","body"],"type":"object"},"output":{"properties":{"billed_pages":{"type":"integer"},"credit":{"type":"string"},"delivered":{"type":"integer"},"failed":{"type":"integer"},"results":{"items":{"properties":{"billed":{"type":"boolean"},"content_sha256":{"type":"string"},"hint":{"type":["string","null"]},"requested_url":{"format":"uri","type":"string"},"status_code":{"type":"integer"},"text":{"type":"string"},"title":{"type":"string"},"url":{"format":"uri","type":"string"},"used_browser":{"type":"boolean"}},"type":"object"},"type":"array"},"status":{"type":"string"}},"type":"object"}}}},"readfetch":{"llms_txt":"https://readfetch.com/llms.txt","mcp":"https://readfetch.com/mcp","mcp_manifest":"https://readfetch.com/.well-known/mcp.json","openapi":"https://readfetch.com/openapi.json","payment_status":"live","probe":{"free":true,"method":"POST","note":"Free — no wallet, no 402, no x402. Metadata plus optional ~400-character preview for the same URL before paying.","path":"/v1/probe","price_usd":0},"related_endpoints":[{"path":"/v1/map"},{"path":"/v1/probe"}],"service_manifest":"https://readfetch.com/.well-known/service.json","skill":"https://readfetch.com/SKILL.md","support":{"claims":{"method":"POST","path":"/v1/claims","url":"https://readfetch.com/v1/claims","when":"paid delivery dispute; needs RECEIPT + EIP-191 signature"},"feedback":{"body":{"category":"integration|docs|site|other","message":"≤500 chars","request_id":"<from X-Request-Id>"},"free":true,"mcp_tool":"readfetch_feedback","method":"POST","path":"/v1/feedback","url":"https://readfetch.com/v1/feedback"},"request_id_header":"X-Request-Id"},"x402_resources":"https://readfetch.com/.well-known/x402-resources.json"}},"input":{"content_type":"application/json","method":"POST","schema":{"properties":{"accept_language":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Accept-Language header for every item, e.g. 'de-DE,de;q=0.9'. Defaults to en-US when omitted."},"format":{"default":"markdown","description":"Per-item output flavour, same as /v1/text: markdown (default) or plain text.","enum":["markdown","text"],"type":"string"},"pipeline":{"default":"text","description":"text (default) = HTTP-first per URL, same as readfetch_text; use render when probe reported challenge:true or items need JavaScript — bills like scrape per undelivered page, not like plain text.","enum":["text","render"],"type":"string"},"timeout_s":{"default":95,"description":"Total budget for the whole batch in seconds; every item shares it and no item restarts it.","maximum":95,"minimum":1,"type":"number"},"urls":{"description":"URLs to read, deduped before quoting.","items":{"format":"uri","type":"string"},"maxItems":50,"minItems":1,"type":"array"}},"required":["urls"],"type":"object"}},"method":"POST","mimeType":"application/json","mime_type":"application/json","output":{"content_type":"application/json","example":{"billed_pages":1,"credit":"credit-token-when-refund-applies","delivered":1,"failed":1,"results":[{"billed":true,"content_sha256":"...","hint":null,"requested_url":"https://example.com","status_code":200,"text":"...","title":"Example Domain","url":"https://example.com/","used_browser":false},{"billed":false,"content_sha256":null,"hint":"upstream error","requested_url":"https://example.invalid/","status_code":502,"text":"","title":null,"url":"https://example.invalid/","used_browser":false}],"status":"partial"}},"provider_url":"https://readfetch.com","resource":"https://readfetch.com/v1/batch","tags":["batch","bulk","multiple urls","concurrent","markdown"]},{"accepts":[{"amount":"5000","amount_usd":0.005,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Extract text from a PDF (%PDF- magic, not Content-Type). Send exactly one of `url` (public http(s) link — egress GET, ≤ 20 MB) or `content_base64` (bytes you already have — the whole request body is capped at 1 MiB, base64 expansion included; optional `filename` labels the upload). Returns `pages` (per-page text), one concatenated `markdown` body, `title`, and `metadata`; $0.005 per document, not per page. `max_pages` limits extraction (default 50, max 200); documents over 20","extra":{"name":"USD Coin","paymentFlow":"authorization","version":"2"},"maxAmountRequired":"5000","maxTimeoutSeconds":95,"max_amount_required":"5000","max_timeout_seconds":95,"mimeType":"application/json","mime_type":"application/json","network":"eip155:8453","payTo":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","pay_to":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","resource":"https://readfetch.com/v1/pdf","scheme":"exact"}],"category":"Data","description":"Extract text from a PDF (%PDF- magic, not Content-Type). Send exactly one of `url` (public http(s) link — egress GET, ≤ 20 MB) or `content_base64` (bytes you already have — the whole request body is capped at 1 MiB, base64 expansion included; optional `filename` labels the upload). Returns `pages` (per-page text), one concatenated `markdown` body, `title`, and `metadata`; $0.005 per document, not per page. `max_pages` limits extraction (default 50, max 200); documents over 200 pages or above your cap return 413 and are not billed. Scanned/image-only PDFs may return empty text with `billed: false` and a `hint`. Prefer readfetch_text or readfetch_scrape for HTML articles; readfetch_fetch for raw PDF bytes without extraction; readfetch_batch for many HTML URLs, not PDFs. Read-only server-side; paid x402 like other routes.","extensions":{"bazaar":{"info":{"input":{"body":{"max_pages":50,"url":"https://example.com/paper.pdf"},"bodyType":"json","description":"Documents, not pages: page text plus one Markdown body, priced per document rather than per page.","method":"POST","type":"http"},"output":{"description":"Extract text from a PDF (%PDF- magic, not Content-Type). Send exactly one of `url` (public http(s) link — egress GET, ≤ 20 MB) or `content_base64` (bytes you already have — the whole request body is capped at 1 MiB, base64 expansion included; optional `filename` labels the upload). Returns `pages` (per-page text), one concatenated `markdown` body, `title`, and `metadata`; $0.005 per document, not per page. `max_pages` limits extraction (default 50, max 200); documents over 200 pages or above your cap return 413 and are not billed. Scanned/image-only PDFs may return empty text with `billed: false` and a `hint`. Prefer readfetch_text or readfetch_scrape for HTML articles; readfetch_fetch for raw PDF bytes without extraction; readfetch_batch for many HTML URLs, not PDFs. Read-only server-side; paid x402 like other routes.","example":{"billed":true,"content_sha256":"...","hint":null,"markdown":"# Title\n\n...","metadata":{"author":"...","created":"2026-01-04","producer":"..."},"page_count":12,"pages":[{"page":1,"text":"..."}],"source":"https://example.com/report.pdf","status":"success","title":"Annual Report"},"format":"application/json","type":"json"}},"schema":{"$defs":{},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"properties":{"body":{"anyOf":[{"required":["url"]},{"required":["content_base64"]}],"properties":{"content_base64":{"description":"Base64-encoded PDF bytes. The request body is capped at 1 MiB total — base64 expansion comes out of that, it does not add to it (~0.75 MB of PDF). Mutually exclusive with url; pair with filename when the label matters.","type":"string"},"filename":{"description":"Optional label when using content_base64 (default upload.pdf); ignored for url-only requests.","type":"string"},"max_pages":{"default":50,"description":"Extract at most this many pages. Default 50; raise up to 200 when the document is longer. Over cap → 413, unbilled.","maximum":200,"minimum":1,"type":"number"},"url":{"description":"Public PDF URL; fetched through egress (≤ 20 MB). Mutually exclusive with content_base64.","example":"https://example.com/paper.pdf","format":"uri","type":"string"}},"type":"object"},"bodyType":{"const":"json"},"method":{"enum":["POST"]},"type":{"const":"http"}},"required":["type","method","body"],"type":"object"},"output":{"properties":{"billed":{"type":"boolean"},"content_sha256":{"type":"string"},"hint":{"type":["string","null"]},"markdown":{"type":"string"},"metadata":{"properties":{"author":{"type":"string"},"created":{"type":"string"},"producer":{"type":"string"}},"type":"object"},"page_count":{"type":"integer"},"pages":{"items":{"properties":{"page":{"type":"integer"},"text":{"type":"string"}},"type":"object"},"type":"array"},"source":{"format":"uri","type":"string"},"status":{"type":"string"},"title":{"type":"string"}},"type":"object"}}}},"readfetch":{"llms_txt":"https://readfetch.com/llms.txt","mcp":"https://readfetch.com/mcp","mcp_manifest":"https://readfetch.com/.well-known/mcp.json","openapi":"https://readfetch.com/openapi.json","payment_status":"live","probe":{"free":true,"method":"POST","note":"Free — no wallet, no 402, no x402. Metadata plus optional ~400-character preview for the same URL before paying.","path":"/v1/probe","price_usd":0},"related_endpoints":[{"path":"/v1/probe"},{"path":"/v1/text"}],"service_manifest":"https://readfetch.com/.well-known/service.json","skill":"https://readfetch.com/SKILL.md","support":{"claims":{"method":"POST","path":"/v1/claims","url":"https://readfetch.com/v1/claims","when":"paid delivery dispute; needs RECEIPT + EIP-191 signature"},"feedback":{"body":{"category":"integration|docs|site|other","message":"≤500 chars","request_id":"<from X-Request-Id>"},"free":true,"mcp_tool":"readfetch_feedback","method":"POST","path":"/v1/feedback","url":"https://readfetch.com/v1/feedback"},"request_id_header":"X-Request-Id"},"x402_resources":"https://readfetch.com/.well-known/x402-resources.json"}},"input":{"content_type":"application/json","method":"POST","schema":{"anyOf":[{"required":["url"]},{"required":["content_base64"]}],"properties":{"content_base64":{"description":"Base64-encoded PDF bytes. The request body is capped at 1 MiB total — base64 expansion comes out of that, it does not add to it (~0.75 MB of PDF). Mutually exclusive with url; pair with filename when the label matters.","type":"string"},"filename":{"description":"Optional label when using content_base64 (default upload.pdf); ignored for url-only requests.","type":"string"},"max_pages":{"default":50,"description":"Extract at most this many pages. Default 50; raise up to 200 when the document is longer. Over cap → 413, unbilled.","maximum":200,"minimum":1,"type":"number"},"url":{"description":"Public PDF URL; fetched through egress (≤ 20 MB). Mutually exclusive with content_base64.","example":"https://example.com/paper.pdf","format":"uri","type":"string"}},"type":"object"}},"method":"POST","mimeType":"application/json","mime_type":"application/json","output":{"content_type":"application/json","example":{"billed":true,"content_sha256":"...","hint":null,"markdown":"# Title\n\n...","metadata":{"author":"...","created":"2026-01-04","producer":"..."},"page_count":12,"pages":[{"page":1,"text":"..."}],"source":"https://example.com/report.pdf","status":"success","title":"Annual Report"}},"provider_url":"https://readfetch.com","resource":"https://readfetch.com/v1/pdf","tags":["pdf","document text","page text","markdown","metadata"]},{"accepts":[{"amount":"3000","amount_usd":0.003,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Extract one heading or one CSS selector from a public page instead of the whole document. Returns matched Markdown or text, title, chars, content_sha256, and billed. If the heading is missing, returns HTTP 200 with empty text and `available_headings` so you can retry. `mode`: fast (plain HTTP) or render (default, Chromium when the page blocks HTTP). `max_chars` truncates output (default 8000, max 20000). Prefer readfetch_text for full articles; readfetch_scrape when content n","extra":{"name":"USD Coin","paymentFlow":"authorization","version":"2"},"maxAmountRequired":"3000","maxTimeoutSeconds":95,"max_amount_required":"3000","max_timeout_seconds":95,"mimeType":"application/json","mime_type":"application/json","network":"eip155:8453","payTo":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","pay_to":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","resource":"https://readfetch.com/v1/section","scheme":"exact"}],"category":"Data","description":"Extract one heading or one CSS selector from a public page instead of the whole document. Returns matched Markdown or text, title, chars, content_sha256, and billed. If the heading is missing, returns HTTP 200 with empty text and `available_headings` so you can retry. `mode`: fast (plain HTTP) or render (default, Chromium when the page blocks HTTP). `max_chars` truncates output (default 8000, max 20000). Prefer readfetch_text for full articles; readfetch_scrape when content needs JavaScript.","extensions":{"bazaar":{"info":{"input":{"body":{"format":"markdown","heading":"Introduction","max_chars":8000,"mode":"render","url":"https://example.com"},"bodyType":"json","description":"Read one heading or one selector instead of the whole page - ten to a hundred times fewer tokens.","method":"POST","type":"http"},"output":{"description":"Extract one heading or one CSS selector from a public page instead of the whole document. Returns matched Markdown or text, title, chars, content_sha256, and billed. If the heading is missing, returns HTTP 200 with empty text and `available_headings` so you can retry. `mode`: fast (plain HTTP) or render (default, Chromium when the page blocks HTTP). `max_chars` truncates output (default 8000, max 20000). Prefer readfetch_text for full articles; readfetch_scrape when content needs JavaScript.","example":{"available_headings":["Intro","Authentication","Rate limits"],"billed":true,"chars":1204,"content_sha256":"...","hint":null,"matched":{"kind":"heading","label":"Authentication","level":2},"status":"success","status_code":200,"text":"## Authentication\n\n...","title":"API","url":"https://docs.example.com/api","used_browser":false},"format":"application/json","type":"json"}},"schema":{"$defs":{},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"properties":{"body":{"oneOf":[{"required":["heading"]},{"required":["selector"]}],"properties":{"format":{"default":"markdown","description":"Output flavour for the matched section (markdown default).","enum":["markdown","text"],"type":"string"},"heading":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Heading text to match (case-insensitive, whitespace-normalised). Required unless `selector` is set — send exactly one of `heading` or `selector`, not both.","example":"Introduction"},"max_chars":{"default":8000,"description":"Truncate matched text after this many characters.","maximum":20000,"minimum":100,"type":"number"},"mode":{"default":"render","description":"fast = HTTP-first; render = one browser pass when plain HTTP fails (default).","enum":["fast","render"],"type":"string"},"selector":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"CSS selector; up to 20 matches concatenated. Required unless `heading` is set — use selector when the section has no stable heading text."},"url":{"description":"Public page URL to extract from.","format":"uri","type":"string"}},"required":["url"],"type":"object"},"bodyType":{"const":"json"},"method":{"enum":["POST"]},"type":{"const":"http"}},"required":["type","method","body"],"type":"object"},"output":{"properties":{"available_headings":{"items":{"type":"string"},"type":"array"},"billed":{"type":"boolean"},"chars":{"type":"integer"},"content_sha256":{"type":"string"},"hint":{"type":["string","null"]},"matched":{"properties":{"kind":{"type":"string"},"label":{"type":"string"},"level":{"type":"integer"}},"type":"object"},"status":{"type":"string"},"status_code":{"type":"integer"},"text":{"type":"string"},"title":{"type":"string"},"url":{"format":"uri","type":"string"},"used_browser":{"type":"boolean"}},"type":"object"}}}},"readfetch":{"llms_txt":"https://readfetch.com/llms.txt","mcp":"https://readfetch.com/mcp","mcp_manifest":"https://readfetch.com/.well-known/mcp.json","openapi":"https://readfetch.com/openapi.json","payment_status":"live","probe":{"free":true,"method":"POST","note":"Free — no wallet, no 402, no x402. Metadata plus optional ~400-character preview for the same URL before paying.","path":"/v1/probe","price_usd":0},"related_endpoints":[{"path":"/v1/probe"},{"path":"/v1/scrape"}],"service_manifest":"https://readfetch.com/.well-known/service.json","skill":"https://readfetch.com/SKILL.md","support":{"claims":{"method":"POST","path":"/v1/claims","url":"https://readfetch.com/v1/claims","when":"paid delivery dispute; needs RECEIPT + EIP-191 signature"},"feedback":{"body":{"category":"integration|docs|site|other","message":"≤500 chars","request_id":"<from X-Request-Id>"},"free":true,"mcp_tool":"readfetch_feedback","method":"POST","path":"/v1/feedback","url":"https://readfetch.com/v1/feedback"},"request_id_header":"X-Request-Id"},"x402_resources":"https://readfetch.com/.well-known/x402-resources.json"}},"input":{"content_type":"application/json","method":"POST","schema":{"oneOf":[{"required":["heading"]},{"required":["selector"]}],"properties":{"format":{"default":"markdown","description":"Output flavour for the matched section (markdown default).","enum":["markdown","text"],"type":"string"},"heading":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Heading text to match (case-insensitive, whitespace-normalised). Required unless `selector` is set — send exactly one of `heading` or `selector`, not both.","example":"Introduction"},"max_chars":{"default":8000,"description":"Truncate matched text after this many characters.","maximum":20000,"minimum":100,"type":"number"},"mode":{"default":"render","description":"fast = HTTP-first; render = one browser pass when plain HTTP fails (default).","enum":["fast","render"],"type":"string"},"selector":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"CSS selector; up to 20 matches concatenated. Required unless `heading` is set — use selector when the section has no stable heading text."},"url":{"description":"Public page URL to extract from.","format":"uri","type":"string"}},"required":["url"],"type":"object"}},"method":"POST","mimeType":"application/json","mime_type":"application/json","output":{"content_type":"application/json","example":{"available_headings":["Intro","Authentication","Rate limits"],"billed":true,"chars":1204,"content_sha256":"...","hint":null,"matched":{"kind":"heading","label":"Authentication","level":2},"status":"success","status_code":200,"text":"## Authentication\n\n...","title":"API","url":"https://docs.example.com/api","used_browser":false}},"provider_url":"https://readfetch.com","resource":"https://readfetch.com/v1/section","tags":["section","heading","selector","tokens","docs"]},{"accepts":[{"amount":"3000","amount_usd":0.003,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Stateless change detection on readable page text (same HTTP-first extraction as readfetch_text): fetch the URL, compare to a hash or prior body you store client-side, return changed/unchanged plus optional line diff. First call with no prior fields returns a baseline hash (see hint). `previous_hash` alone detects change without a line diff; add `previous_content` when you need added/removed/diff. A no-change answer is still billable when text was delivered. Prefer readfetch_t","extra":{"name":"USD Coin","paymentFlow":"authorization","version":"2"},"maxAmountRequired":"3000","maxTimeoutSeconds":95,"max_amount_required":"3000","max_timeout_seconds":95,"mimeType":"application/json","mime_type":"application/json","network":"eip155:8453","payTo":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","pay_to":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","resource":"https://readfetch.com/v1/diff","scheme":"exact"}],"category":"Data","description":"Stateless change detection on readable page text (same HTTP-first extraction as readfetch_text): fetch the URL, compare to a hash or prior body you store client-side, return changed/unchanged plus optional line diff. First call with no prior fields returns a baseline hash (see hint). `previous_hash` alone detects change without a line diff; add `previous_content` when you need added/removed/diff. A no-change answer is still billable when text was delivered. Prefer readfetch_text when you need the full article once; readfetch_probe (free) for a short preview and `content_sha256` before spending on text.","extensions":{"bazaar":{"info":{"input":{"body":{"format":"text","timeout_s":30,"url":"https://example.com"},"bodyType":"json","description":"Stateless change detection. Send the hash you hold, get back whether it changed and a bounded diff.","method":"POST","type":"http"},"output":{"description":"Stateless change detection on readable page text (same HTTP-first extraction as readfetch_text): fetch the URL, compare to a hash or prior body you store client-side, return changed/unchanged plus optional line diff. First call with no prior fields returns a baseline hash (see hint). `previous_hash` alone detects change without a line diff; add `previous_content` when you need added/removed/diff. A no-change answer is still billable when text was delivered. Prefer readfetch_text when you need the full article once; readfetch_probe (free) for a short preview and `content_sha256` before spending on text.","example":{"added":["New line"],"billed":true,"changed":true,"diff":"@@ -1 +1 @@\n-Old line\n+New line","hash":"sha256:...","hint":null,"removed":["Old line"],"status":"changed","status_code":200,"url":"https://example.com/pricing"},"format":"application/json","type":"json"}},"schema":{"$defs":{},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"properties":{"body":{"properties":{"format":{"default":"text","description":"Extraction flavour for this fetch and for the hash (default text). Must match how you built `previous_content` if you send it.","enum":["text","markdown"],"type":"string"},"previous_content":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Full prior extracted text (what you stored from readfetch_text/readfetch_diff). Required for `added`/`removed`/`diff` output; hash-only compares do not emit a line diff."},"previous_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`sha256:…` or bare hex from readfetch_diff, readfetch_probe `content_sha256`, or a prior text read. Omit on the first poll to establish a baseline hash in the response."},"timeout_s":{"default":30,"description":"Total budget for the whole call in seconds, both fetches included. 60 s is the ceiling on this route.","maximum":60,"minimum":1,"type":"number"},"url":{"description":"Public http(s) page to re-fetch and compare; must match the extraction used when you saved the hash (same `format`).","format":"uri","type":"string"}},"required":["url"],"type":"object"},"bodyType":{"const":"json"},"method":{"enum":["POST"]},"type":{"const":"http"}},"required":["type","method","body"],"type":"object"},"output":{"properties":{"added":{"items":{"type":"string"},"type":"array"},"billed":{"type":"boolean"},"changed":{"type":"boolean"},"diff":{"type":"string"},"hash":{"type":"string"},"hint":{"type":["string","null"]},"removed":{"items":{"type":"string"},"type":"array"},"status":{"type":"string"},"status_code":{"type":"integer"},"url":{"format":"uri","type":"string"}},"type":"object"}}}},"readfetch":{"llms_txt":"https://readfetch.com/llms.txt","mcp":"https://readfetch.com/mcp","mcp_manifest":"https://readfetch.com/.well-known/mcp.json","openapi":"https://readfetch.com/openapi.json","payment_status":"live","probe":{"free":true,"method":"POST","note":"Free — no wallet, no 402, no x402. Metadata plus optional ~400-character preview for the same URL before paying.","path":"/v1/probe","price_usd":0},"related_endpoints":[{"path":"/v1/probe"},{"path":"/v1/scrape"}],"service_manifest":"https://readfetch.com/.well-known/service.json","skill":"https://readfetch.com/SKILL.md","support":{"claims":{"method":"POST","path":"/v1/claims","url":"https://readfetch.com/v1/claims","when":"paid delivery dispute; needs RECEIPT + EIP-191 signature"},"feedback":{"body":{"category":"integration|docs|site|other","message":"≤500 chars","request_id":"<from X-Request-Id>"},"free":true,"mcp_tool":"readfetch_feedback","method":"POST","path":"/v1/feedback","url":"https://readfetch.com/v1/feedback"},"request_id_header":"X-Request-Id"},"x402_resources":"https://readfetch.com/.well-known/x402-resources.json"}},"input":{"content_type":"application/json","method":"POST","schema":{"properties":{"format":{"default":"text","description":"Extraction flavour for this fetch and for the hash (default text). Must match how you built `previous_content` if you send it.","enum":["text","markdown"],"type":"string"},"previous_content":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Full prior extracted text (what you stored from readfetch_text/readfetch_diff). Required for `added`/`removed`/`diff` output; hash-only compares do not emit a line diff."},"previous_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"`sha256:…` or bare hex from readfetch_diff, readfetch_probe `content_sha256`, or a prior text read. Omit on the first poll to establish a baseline hash in the response."},"timeout_s":{"default":30,"description":"Total budget for the whole call in seconds, both fetches included. 60 s is the ceiling on this route.","maximum":60,"minimum":1,"type":"number"},"url":{"description":"Public http(s) page to re-fetch and compare; must match the extraction used when you saved the hash (same `format`).","format":"uri","type":"string"}},"required":["url"],"type":"object"}},"method":"POST","mimeType":"application/json","mime_type":"application/json","output":{"content_type":"application/json","example":{"added":["New line"],"billed":true,"changed":true,"diff":"@@ -1 +1 @@\n-Old line\n+New line","hash":"sha256:...","hint":null,"removed":["Old line"],"status":"changed","status_code":200,"url":"https://example.com/pricing"}},"provider_url":"https://readfetch.com","resource":"https://readfetch.com/v1/diff","tags":["diff","change detection","hash","monitoring","stateless"]},{"accepts":[{"amount":"3000","amount_usd":0.003,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Screenshot a public URL in headless Chromium (page JavaScript runs; no ad blocker) and return PNG or JPEG in JSON — `image_base64`, `mime`, `width`, `height`, `status_code`, `billed` (not a hosted URL). Scope: viewport only (`full_page: false`), full scrollable page (default), or one element (`selector`). `mode` caps total render time: fast (15 s), render (30 s, default), full (60 s, always full-page regardless of `full_page`). Set `width`/`height` before navigation (default ","extra":{"name":"USD Coin","paymentFlow":"authorization","version":"2"},"maxAmountRequired":"3000","maxTimeoutSeconds":95,"max_amount_required":"3000","max_timeout_seconds":95,"mimeType":"application/json","mime_type":"application/json","network":"eip155:8453","payTo":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","pay_to":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","resource":"https://readfetch.com/v1/screenshot","scheme":"exact"}],"category":"Data","description":"Screenshot a public URL in headless Chromium (page JavaScript runs; no ad blocker) and return PNG or JPEG in JSON — `image_base64`, `mime`, `width`, `height`, `status_code`, `billed` (not a hosted URL). Scope: viewport only (`full_page: false`), full scrollable page (default), or one element (`selector`). `mode` caps total render time: fast (15 s), render (30 s, default), full (60 s, always full-page regardless of `full_page`). Set `width`/`height` before navigation (default 1280×800, max 3840×2160). `delay_ms` (0–30000) waits after navigation, then captures — raise it or use `mode=full` for slow SPAs and lazy media. Prefer readfetch_text or readfetch_scrape for extractable text; readfetch_pdf for PDF files; readfetch_fetch for raw HTTP without rendering. Read-only on the origin (GET + render, no form POST). Bot-check or blank frames may still return pixels with `billed: false` and a `hint`; paid x402 like other routes.","extensions":{"bazaar":{"info":{"input":{"body":{"format":"png","full_page":true,"mode":"render","url":"https://example.com"},"bodyType":"json","description":"PNG or JPEG of a rendered page: viewport, full page, or one element via CSS selector.","method":"POST","type":"http"},"output":{"description":"Screenshot a public URL in headless Chromium (page JavaScript runs; no ad blocker) and return PNG or JPEG in JSON — `image_base64`, `mime`, `width`, `height`, `status_code`, `billed` (not a hosted URL). Scope: viewport only (`full_page: false`), full scrollable page (default), or one element (`selector`). `mode` caps total render time: fast (15 s), render (30 s, default), full (60 s, always full-page regardless of `full_page`). Set `width`/`height` before navigation (default 1280×800, max 3840×2160). `delay_ms` (0–30000) waits after navigation, then captures — raise it or use `mode=full` for slow SPAs and lazy media. Prefer readfetch_text or readfetch_scrape for extractable text; readfetch_pdf for PDF files; readfetch_fetch for raw HTTP without rendering. Read-only on the origin (GET + render, no form POST). Bot-check or blank frames may still return pixels with `billed: false` and a `hint`; paid x402 like other routes.","example":{"billed":true,"content_sha256":"...","format":"png","height":800,"hint":null,"image_base64":"iVBORw0KG...","mime":"image/png","size":48213,"status":"success","status_code":200,"url":"https://example.com","width":1280},"format":"application/json","type":"json"}},"schema":{"$defs":{},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"properties":{"body":{"properties":{"delay_ms":{"description":"Milliseconds to wait after navigation before capture (0–30000); use for SPAs and lazy-loaded content.","maximum":30000,"minimum":0,"type":"number"},"format":{"default":"png","description":"Image encoding for `image_base64` (png default, or jpeg).","enum":["png","jpeg"],"type":"string"},"full_page":{"default":true,"description":"true (default): entire scrollable document; false: viewport only. Ignored when mode=full.","type":"boolean"},"height":{"description":"Viewport height in pixels before navigation (default 800, max 2160).","maximum":2160,"minimum":1,"type":"number"},"mode":{"default":"render","description":"Whole-call budget: fast (15 s), render (30 s, default), or full (60 s; always captures the full scrollable page).","enum":["fast","render","full"],"type":"string"},"selector":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"CSS selector — capture that element's box only. Omit for page/viewport per full_page."},"url":{"description":"Public http(s) URL to render in headless Chromium.","format":"uri","type":"string"},"width":{"description":"Viewport width in pixels before navigation (default 1280, max 3840).","maximum":3840,"minimum":1,"type":"number"}},"required":["url"],"type":"object"},"bodyType":{"const":"json"},"method":{"enum":["POST"]},"type":{"const":"http"}},"required":["type","method","body"],"type":"object"},"output":{"properties":{"billed":{"type":"boolean"},"content_sha256":{"type":"string"},"format":{"type":"string"},"height":{"type":"integer"},"hint":{"type":["string","null"]},"image_base64":{"type":"string"},"mime":{"type":"string"},"size":{"type":"integer"},"status":{"type":"string"},"status_code":{"type":"integer"},"url":{"format":"uri","type":"string"},"width":{"type":"integer"}},"type":"object"}}}},"readfetch":{"llms_txt":"https://readfetch.com/llms.txt","mcp":"https://readfetch.com/mcp","mcp_manifest":"https://readfetch.com/.well-known/mcp.json","openapi":"https://readfetch.com/openapi.json","payment_status":"live","probe":{"free":true,"method":"POST","note":"Free — no wallet, no 402, no x402. Metadata plus optional ~400-character preview for the same URL before paying.","path":"/v1/probe","price_usd":0},"related_endpoints":[{"path":"/v1/probe"},{"path":"/v1/text"}],"service_manifest":"https://readfetch.com/.well-known/service.json","skill":"https://readfetch.com/SKILL.md","support":{"claims":{"method":"POST","path":"/v1/claims","url":"https://readfetch.com/v1/claims","when":"paid delivery dispute; needs RECEIPT + EIP-191 signature"},"feedback":{"body":{"category":"integration|docs|site|other","message":"≤500 chars","request_id":"<from X-Request-Id>"},"free":true,"mcp_tool":"readfetch_feedback","method":"POST","path":"/v1/feedback","url":"https://readfetch.com/v1/feedback"},"request_id_header":"X-Request-Id"},"x402_resources":"https://readfetch.com/.well-known/x402-resources.json"}},"input":{"content_type":"application/json","method":"POST","schema":{"properties":{"delay_ms":{"description":"Milliseconds to wait after navigation before capture (0–30000); use for SPAs and lazy-loaded content.","maximum":30000,"minimum":0,"type":"number"},"format":{"default":"png","description":"Image encoding for `image_base64` (png default, or jpeg).","enum":["png","jpeg"],"type":"string"},"full_page":{"default":true,"description":"true (default): entire scrollable document; false: viewport only. Ignored when mode=full.","type":"boolean"},"height":{"description":"Viewport height in pixels before navigation (default 800, max 2160).","maximum":2160,"minimum":1,"type":"number"},"mode":{"default":"render","description":"Whole-call budget: fast (15 s), render (30 s, default), or full (60 s; always captures the full scrollable page).","enum":["fast","render","full"],"type":"string"},"selector":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"CSS selector — capture that element's box only. Omit for page/viewport per full_page."},"url":{"description":"Public http(s) URL to render in headless Chromium.","format":"uri","type":"string"},"width":{"description":"Viewport width in pixels before navigation (default 1280, max 3840).","maximum":3840,"minimum":1,"type":"number"}},"required":["url"],"type":"object"}},"method":"POST","mimeType":"application/json","mime_type":"application/json","output":{"content_type":"application/json","example":{"billed":true,"content_sha256":"...","format":"png","height":800,"hint":null,"image_base64":"iVBORw0KG...","mime":"image/png","size":48213,"status":"success","status_code":200,"url":"https://example.com","width":1280}},"provider_url":"https://readfetch.com","resource":"https://readfetch.com/v1/screenshot","tags":["screenshot","png","jpeg","full page","element"]},{"accepts":[{"amount":"5000","amount_usd":0.005,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Run a web search without a separate search API subscription. Returns titles, URLs, and snippets only — not full page text; follow with readfetch_text, readfetch_probe, or readfetch_scrape on a chosen result URL. `limit` is 1–20 (default 5). Optional `lang` biases locale (e.g. en, de-DE). Optional `tbs` filters recency: h= past hour, d= day, w= week, m= month, y= year. Use readfetch_map/readfetch_crawl when you already know the site; readfetch_* URL tools when you have the lin","extra":{"name":"USD Coin","paymentFlow":"authorization","version":"2"},"maxAmountRequired":"5000","maxTimeoutSeconds":95,"max_amount_required":"5000","max_timeout_seconds":95,"mimeType":"application/json","mime_type":"application/json","network":"eip155:8453","payTo":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","pay_to":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","resource":"https://readfetch.com/v1/search","scheme":"exact"}],"category":"Search","description":"Run a web search without a separate search API subscription. Returns titles, URLs, and snippets only — not full page text; follow with readfetch_text, readfetch_probe, or readfetch_scrape on a chosen result URL. `limit` is 1–20 (default 5). Optional `lang` biases locale (e.g. en, de-DE). Optional `tbs` filters recency: h= past hour, d= day, w= week, m= month, y= year. Use readfetch_map/readfetch_crawl when you already know the site; readfetch_* URL tools when you have the link.","extensions":{"bazaar":{"info":{"input":{"body":{"limit":5,"query":"example"},"bodyType":"json","description":"Web search without a search subscription, returning titles, URLs and snippets.","method":"POST","type":"http"},"output":{"description":"Run a web search without a separate search API subscription. Returns titles, URLs, and snippets only — not full page text; follow with readfetch_text, readfetch_probe, or readfetch_scrape on a chosen result URL. `limit` is 1–20 (default 5). Optional `lang` biases locale (e.g. en, de-DE). Optional `tbs` filters recency: h= past hour, d= day, w= week, m= month, y= year. Use readfetch_map/readfetch_crawl when you already know the site; readfetch_* URL tools when you have the link.","example":{"billed":true,"hint":null,"query":"rust async runtime","results":[{"position":1,"snippet":"...","title":"Tokio","url":"https://tokio.rs/"}],"status":"success"},"format":"application/json","type":"json"}},"schema":{"$defs":{},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"properties":{"body":{"properties":{"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional language/locale hint, e.g. en or de-DE."},"limit":{"default":5,"description":"Maximum number of results to return (default 5).","maximum":20,"minimum":1,"type":"number"},"query":{"description":"Search query string.","minLength":1,"type":"string"},"tbs":{"anyOf":[{"enum":["h","d","w","m","y"],"type":"string"},{"type":"null"}],"description":"Optional recency filter: h=hour, d=day, w=week, m=month, y=year."}},"required":["query"],"type":"object"},"bodyType":{"const":"json"},"method":{"enum":["POST"]},"type":{"const":"http"}},"required":["type","method","body"],"type":"object"},"output":{"properties":{"billed":{"type":"boolean"},"hint":{"type":["string","null"]},"query":{"type":"string"},"results":{"items":{"properties":{"position":{"type":"integer"},"snippet":{"type":"string"},"title":{"type":"string"},"url":{"format":"uri","type":"string"}},"type":"object"},"type":"array"},"status":{"type":"string"}},"type":"object"}}}},"readfetch":{"llms_txt":"https://readfetch.com/llms.txt","mcp":"https://readfetch.com/mcp","mcp_manifest":"https://readfetch.com/.well-known/mcp.json","openapi":"https://readfetch.com/openapi.json","payment_status":"live","probe":{"free":true,"method":"POST","note":"Free — no wallet, no 402, no x402. Metadata plus optional ~400-character preview for the same URL before paying.","path":"/v1/probe","price_usd":0},"related_endpoints":[{"path":"/v1/map"},{"path":"/v1/probe"}],"service_manifest":"https://readfetch.com/.well-known/service.json","skill":"https://readfetch.com/SKILL.md","support":{"claims":{"method":"POST","path":"/v1/claims","url":"https://readfetch.com/v1/claims","when":"paid delivery dispute; needs RECEIPT + EIP-191 signature"},"feedback":{"body":{"category":"integration|docs|site|other","message":"≤500 chars","request_id":"<from X-Request-Id>"},"free":true,"mcp_tool":"readfetch_feedback","method":"POST","path":"/v1/feedback","url":"https://readfetch.com/v1/feedback"},"request_id_header":"X-Request-Id"},"x402_resources":"https://readfetch.com/.well-known/x402-resources.json"}},"input":{"content_type":"application/json","method":"POST","schema":{"properties":{"lang":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional language/locale hint, e.g. en or de-DE."},"limit":{"default":5,"description":"Maximum number of results to return (default 5).","maximum":20,"minimum":1,"type":"number"},"query":{"description":"Search query string.","minLength":1,"type":"string"},"tbs":{"anyOf":[{"enum":["h","d","w","m","y"],"type":"string"},{"type":"null"}],"description":"Optional recency filter: h=hour, d=day, w=week, m=month, y=year."}},"required":["query"],"type":"object"}},"method":"POST","mimeType":"application/json","mime_type":"application/json","output":{"content_type":"application/json","example":{"billed":true,"hint":null,"query":"rust async runtime","results":[{"position":1,"snippet":"...","title":"Tokio","url":"https://tokio.rs/"}],"status":"success"}},"provider_url":"https://readfetch.com","resource":"https://readfetch.com/v1/search","tags":["search","web search","serp","results","snippets"]},{"accepts":[{"amount":"3000","amount_usd":0.003,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Start a bounded async crawl from one seed URL. Returns job_id, status (queued), pages_quoted, and price_usd — then poll readfetch_crawl_status with that id until status is complete or failed. A complete job includes per-page url and Markdown in the status payload. Cap scope with max_pages (default 20, max 100) and max_depth (default 2, max 3); include/exclude filter paths by prefix (* suffix on include). Prefer readfetch_batch for a fixed URL list; readfetch_map to list URLs ","extra":{"name":"USD Coin","paymentFlow":"authorization","version":"2"},"maxAmountRequired":"3000","maxTimeoutSeconds":95,"max_amount_required":"3000","max_timeout_seconds":95,"mimeType":"application/json","mime_type":"application/json","network":"eip155:8453","payTo":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","pay_to":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","resource":"https://readfetch.com/v1/crawl","scheme":"exact"}],"category":"Search","description":"Start a bounded async crawl from one seed URL. Returns job_id, status (queued), pages_quoted, and price_usd — then poll readfetch_crawl_status with that id until status is complete or failed. A complete job includes per-page url and Markdown in the status payload. Cap scope with max_pages (default 20, max 100) and max_depth (default 2, max 3); include/exclude filter paths by prefix (* suffix on include). Prefer readfetch_batch for a fixed URL list; readfetch_map to list URLs without fetching bodies; readfetch_text for a single page.","extensions":{"bazaar":{"info":{"input":{"body":{"max_depth":2,"max_pages":20,"url":"https://example.com"},"bodyType":"json","description":"Bounded async crawl with a job id, a page cap quoted up front, and per-page Markdown.","method":"POST","type":"http"},"output":{"description":"Start a bounded async crawl from one seed URL. Returns job_id, status (queued), pages_quoted, and price_usd — then poll readfetch_crawl_status with that id until status is complete or failed. A complete job includes per-page url and Markdown in the status payload. Cap scope with max_pages (default 20, max 100) and max_depth (default 2, max 3); include/exclude filter paths by prefix (* suffix on include). Prefer readfetch_batch for a fixed URL list; readfetch_map to list URLs without fetching bodies; readfetch_text for a single page.","example":{"hint":"GET /v1/crawl/{id} for progress","job_id":"job_ab12","pages_quoted":20,"price_usd":"0.06","status":"queued"},"format":"application/json","type":"json"}},"schema":{"$defs":{},"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{"input":{"properties":{"body":{"properties":{"exclude":{"description":"Path prefixes to skip during the crawl.","items":{"type":"string"},"type":"array"},"include":{"description":"Path prefixes to allow; * suffix wildcard.","items":{"type":"string"},"type":"array"},"max_depth":{"default":2,"description":"Link depth from the seed URL (default 2).","maximum":3,"minimum":1,"type":"number"},"max_pages":{"default":20,"description":"Maximum pages to fetch in this job (quoted up front for payment).","maximum":100,"minimum":1,"type":"number"},"url":{"description":"Seed URL; crawl stays on the same registrable domain.","format":"uri","type":"string"}},"required":["url"],"type":"object"},"bodyType":{"const":"json"},"method":{"enum":["POST"]},"type":{"const":"http"}},"required":["type","method","body"],"type":"object"},"output":{"properties":{"hint":{"type":"string"},"job_id":{"type":"string"},"pages_quoted":{"type":"integer"},"price_usd":{"type":"string"},"status":{"type":"string"}},"type":"object"}}}},"readfetch":{"llms_txt":"https://readfetch.com/llms.txt","mcp":"https://readfetch.com/mcp","mcp_manifest":"https://readfetch.com/.well-known/mcp.json","openapi":"https://readfetch.com/openapi.json","payment_status":"live","probe":{"free":true,"method":"POST","note":"Free — no wallet, no 402, no x402. Metadata plus optional ~400-character preview for the same URL before paying.","path":"/v1/probe","price_usd":0},"related_endpoints":[{"path":"/v1/map"},{"path":"/v1/probe"}],"service_manifest":"https://readfetch.com/.well-known/service.json","skill":"https://readfetch.com/SKILL.md","support":{"claims":{"method":"POST","path":"/v1/claims","url":"https://readfetch.com/v1/claims","when":"paid delivery dispute; needs RECEIPT + EIP-191 signature"},"feedback":{"body":{"category":"integration|docs|site|other","message":"≤500 chars","request_id":"<from X-Request-Id>"},"free":true,"mcp_tool":"readfetch_feedback","method":"POST","path":"/v1/feedback","url":"https://readfetch.com/v1/feedback"},"request_id_header":"X-Request-Id"},"x402_resources":"https://readfetch.com/.well-known/x402-resources.json"}},"input":{"content_type":"application/json","method":"POST","schema":{"properties":{"exclude":{"description":"Path prefixes to skip during the crawl.","items":{"type":"string"},"type":"array"},"include":{"description":"Path prefixes to allow; * suffix wildcard.","items":{"type":"string"},"type":"array"},"max_depth":{"default":2,"description":"Link depth from the seed URL (default 2).","maximum":3,"minimum":1,"type":"number"},"max_pages":{"default":20,"description":"Maximum pages to fetch in this job (quoted up front for payment).","maximum":100,"minimum":1,"type":"number"},"url":{"description":"Seed URL; crawl stays on the same registrable domain.","format":"uri","type":"string"}},"required":["url"],"type":"object"}},"method":"POST","mimeType":"application/json","mime_type":"application/json","output":{"content_type":"application/json","example":{"hint":"GET /v1/crawl/{id} for progress","job_id":"job_ab12","pages_quoted":20,"price_usd":"0.06","status":"queued"}},"provider_url":"https://readfetch.com","resource":"https://readfetch.com/v1/crawl","tags":["crawl","site","async","job","markdown"]}],"schema_version":"1.0","schema_version_note":"Format version of this x402-resources document — not API semver (see service.json `version` / `version_semver`) and not the site build counter.","signing":{"accepts_example":{"amount":"5000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Fetch a public URL and return its main readable content as Markdown or plain text, plus title, author, published date and site name. Strips navigation, ads and boilerplate. No JavaScript rendering by default (cheaper than readfetch_scrape); one Chromium fallback when plain HTTP is blocked. Prefer readfetch_fetch when you need raw status, headers, or non-HTML bytes; readfetch_scrape when the article only appears after JavaScript runs.","extra":{"name":"USD Coin","paymentFlow":"authorization","version":"2"},"maxAmountRequired":"5000","maxTimeoutSeconds":95,"mimeType":"application/json","network":"eip155:8453","payTo":"0x26C2308aDC8fe5FFE6d4183588DD2DD22ed86071","resource":"https://readfetch.com/v1/text","scheme":"exact"},"integrations_url":"https://readfetch.com/integrations#clients","integrator_requirement":"Paid routes require a funded Base USDC wallet. Use readfetch-client / @readfetch/client or the MCP signing proxy (@readfetch/mcp-x402-proxy). Direct calls without a signing client will stop at 402.","note":"accepts_example shows POST /v1/text catalogue shape. Each unpaid POST returns a live 402 — use readfetch-client, @readfetch/client, or @readfetch/mcp-x402-proxy."}}