# Backfill Fetch — web pages as markdown, paid per fetch Backfill Fetch turns a web page into clean markdown for agents and scripts. POST a URL; the service fetches it (a plain fetch first, with escalation to a rendered fetch when the plain one returns a bot wall or a JavaScript shell) and returns the readable content as markdown. Fetched pages are cached for seven days. Endpoints: - POST /v1/fetch — JSON body { "url": "...", "mode": "auto"|"plain"|"render", "include_html": false }. Response JSON: { url, status ("ok"|"blocked"|"error"), markdown, cached, fetched_at, charged }. - POST /v1/extract — Backfill Extract: JSON body { "url": "...", "schema": { ... a JSON Schema object ... }, "mode": "auto"|"plain"|"render" }. The page is fetched the same way and its data is returned as JSON matching the schema. Response JSON: { url, status, data, cached, fetched_at, charged }. Pricing (x402 protocol v2, USDC on Base, no account or API key): - Plain fetches are free within a per-source daily allowance (50 per day). - A cached page costs $0.005 (the first 10 cache hits per source per day are free). - A fresh rendered fetch costs $0.05. - A fresh structured extraction costs $0.15. A repeated extraction of the same page with the same schema (a cached result) costs $0.05. Extraction has no free allowance. - Payment is verified before the fetch and settled only after content has been extracted and is ready to serve. A failed fetch is never charged. Payment flow: send the request without a payment header and read the 402 response — it carries the payment requirements (also in the PAYMENT-REQUIRED header). Pay with an x402 client and resend with the PAYMENT-SIGNATURE header; the payment is verified, the page is fetched, and the payment is settled only when the content is delivered, with a PAYMENT-RESPONSE header. Machine-readable API description: /openapi.json x402 discovery document: /.well-known/x402 MCP endpoint: POST /mcp (JSON-RPC 2.0) exposes two tools: fetch_page (the fetch endpoint, same pricing) and extract_data (the extract endpoint). A call that would require payment returns an error directing the caller to the HTTP endpoint — payment is never attempted over MCP. Human page: https://backfill.top/