Data · Documents and structure
POST/v1/section
Read one heading or one selector instead of the whole page - ten to a hundred times fewer tokens.
- $0.003
- headings
- selector
What it does
One paragraph, no pitch.
One heading or one selector instead of the whole page. A heading that is not found returns 200, an empty body and the list of headings that do exist.
Price
Quoted by the 402 before anything runs.
- $0.003per call
- whole-call budget
- billedonly when content is delivered
- no keythe payment is the credential
x402 settlement is live on eip155:8453: sign a USDC transfer and retry with PAYMENT-SIGNATURE.
When to call it
Cheapest endpoint that answers the question, first.
Call it when the sentence above is the whole job. Its neighbours solve the same URL with a different trade-off — a browser instead of plain HTTP, a site instead of one page, one section instead of a document. /choose walks the decision in thirteen routes, cheapest first, browser last.
Not sure the page is worth paying for at all? /v1/probe is free and returns the status, content type, size, title, language and whether a bot wall is waiting — no body.
Request fields
JSON body. Send this to https://readfetch.com/v1/section.
| Field | Type | Default | What it does |
|---|---|---|---|
url required | string | — | |
egress | string | — | Egress pool to leave through: `direct` (the default route, no proxy) or any pool the operator configured, e.g. `residential` (the home exit) or `local`. Omit to route by host rules. |
heading | string | — | Case-insensitive, whitespace-normalised. |
selector | string | — | CSS selector; up to 20 matches concatenated. |
mode | string | render | |
format | string | markdown | |
max_chars | number | 8000 |
Make the call
Unpaid, this answers 402 with the quote. Sign accepts[0] and resend with PAYMENT-SIGNATURE.
curl -s https://readfetch.com/v1/section -H 'content-type: application/json' -d '{"url":"https://example.com"}'
{
"url": "https://example.com"
}
Response
Fields shown are the ones a caller branches on.
{
"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
}
Limits
Requests are JSON, 1 MiB maximum. Redirects are re-validated at every hop and capped at 5; the final URL is reported. is the whole-call budget — DNS, connect, redirects, retries and any render share it, and no step starts a fresh clock.
Failures come back as {"error": "…", "hint": "…"} with a status to branch on: 402 for the quote, 429 with Retry-After, 502 and 504 for the upstream. /docs lists the shapes.
Billing
Settled after the work, only when something was delivered.
$0.003 per delivered call. A response with billed: false settles nothing and names the next call to try.
billed: false means nothing settled: a bot wall, an empty extraction, an unsupported type or a transport failure. The hint on that response names the next call to try.
Every settlement carries a signed RECEIPT bound to the transaction. If a paid call delivered nothing, a claim issues a single-use credit for it — the rail cannot refund.