- readfetch
- faq
Questions
The things builders ask first
Payment, delivery, walls, timeouts and the one place a credit comes from. Every answer here is checkable against /docs or a response body.
Paying
No account, no key, one header.
Do I need an account or an API key?
No. There is no signup, no key to paste and no dashboard. The first call answers 402 with a quote, you sign that quote with a wallet, and the retry runs. The payment is the credential — a wallet is involved only when a call is actually paid for.
What does one paid call look like?
Three steps, identical on every endpoint:
- Call it unpaid. You get
402with anaccepts[]entry quotingamount,payTo,asset,networkandresource— in the body and in a base64PAYMENT-REQUIREDheader. - Sign an EIP-3009
TransferWithAuthorizationfor exactly that amount and resend the same call withPAYMENT-SIGNATURE. - A delivered response carries
PAYMENT-RESPONSEwith the settlement transaction and a signedRECEIPT.
The settlement happens after the handler, so a call that fails to deliver never settles. /docs has the exact shapes.
What counts as delivered — and what do I get charged for?
You are charged when content comes back: billed: true on a 200. Nothing settles when the call delivers nothing — a bot wall, an empty extraction, a binary body where text was asked for, an origin error with no content, or a map that found zero URLs. Those all return billed: false with a hint that names the next call to try.
A timeout or an upstream failure is a 502 or 504 and also settles nothing.
Is there a free tier?
No. There is no free daily allowance on this instance: every published endpoint except /v1/probe answers 402 first and is charged on delivery.
/v1/probe is free and is the intended try-before-you-buy: status, content type, size, title, language and whether a bot wall is waiting, with no page body. It is rate limited per IP, and over the limit you get a 429 with Retry-After.
Can I get a refund if the content is wrong?
Not a refund — the rail cannot reverse an exact transfer, so anyone promising one is lying to you. What exists is POST /v1/claims: when the defect is provable from our own record, you get a single-use credit for that call.
empty and truncated are decided automatically. wrong_content goes to a human. The credit is bound to the payer address, expires after 30 days and is presented on the retry as X-CREDIT. Claims are capped per address per day; a rejection never consumes the receipt. /docs has the request body and the signature rule.
Reading pages
Walls, scripts, budgets and lists.
A site blocks bots. What do I call?
/v1/probe first, and it is free: if it reports challenge: true, a wall will answer the cheap path, so go to /v1/scrape — a real browser render. If the target refuses datacentre addresses outright, /v1/scrape/residential takes the same request through a residential exit for four times the scrape price, with one attempt and no retries.
The same shortcut applies inside a call: billed: false with a wall hint is the cheap path telling you a render is needed, and it cost nothing.
Do pages that need JavaScript work?
Yes, through /v1/scrape: Chromium loads the page, optionally waits for a selector, runs your JavaScript, scrolls if you ask, and returns Markdown, text or HTML.
/v1/text and /v1/map do not start a browser unless the origin blocks plain HTTP; the response's used_browser field says which path served the call. If the text comes back empty or navigation-only, the page builds its content in the browser — that is the scrape signal.
A call timed out. Was I charged?
No. A budget that runs out returns 504 upstream request timed out and settles nothing, and a walk that expires mid-page returns status: "partial" with the delivered part.
timeout_s is a whole-call budget that starts at the first DNS lookup: DNS, connect, every redirect, every retry and every render share it. Retry once with a longer budget; if it repeats, /v1/probe tells you what the origin answers before you pay again.
How is a batch of URLs priced?
Per delivered page, not per call. /v1/batch takes a list with a minimum and a maximum, and the 402 quotes the total for the whole list before any work starts — the quote is the ceiling, not an estimate.
Results come back in input order and each one carries its own billed flag. Pages that did not deliver are not charged and appear as credit in the response. /v1/batch has the fields; /v1/crawl is the same idea for a whole site, priced per page with a cap quoted up front.
Wiring it up
MCP, schemas, limits.
Can I use it from an MCP client?
Yes. POST https://readfetch.com/mcp is a streamable-HTTP MCP server with one tool per endpoint, named readfetch_<endpoint>. tools/list is generated from the same catalog as the REST surface, so a price or field cannot drift between them.
An unpaid tool call comes back as isError with the quote in structuredContent; the retry carries PAYMENT-SIGNATURE on the MCP request itself. The static tool list is at /.well-known/mcp.json.
Is there an OpenAPI spec?
Yes: https://readfetch.com/openapi.json, OpenAPI 3.1, one operation per published endpoint with its real request schema. Prices and x402 records live next to it in /.well-known/x402-resources.json, and the manifest with the payment block is /.well-known/service.json.
What are the rate limits?
Only /v1/probe publishes one: 30 requests a minute and 2 a second per IP. Over any limit the answer is 429 with Retry-After, and nothing settles.
Everything else is bounded by the call itself — a request body over 1 MiB is refused before any work, and each call has its own budget, so a slow target consumes only that call's time.