POST /v1/fetch in one call and get back one result per URL: the extracted content when the page could be fetched, an error code when it could not, and what was observed on the way — where redirects landed, what status code the origin returned.
Highlights
- Up to 20 URLs per call — URLs are fetched concurrently, so a batch takes about as long as its slowest page.
- Markdown by default —
formatsresolves to["markdown"]when omitted, returning the page’s main content with navigation, footers and ads removed. - Keyed by the URL you sent — Results arrive in the requested order, and
requested_urlis echoed back byte for byte as the correlation key. Two identical URLs in one request are rejected, because a repeated key is ambiguous. - A failed page is not a failed call — A page that could not be fetched arrives inside the
200withstatus = "error"and anerror.code. Only the request is rejected with a non-200, and then nothing is fetched and nothing is billed. - Per-URL time budget —
timeout_msapplies to one URL, not to the batch. 75 seconds is the maximum and the default; higher values are clamped, not rejected. - One tier —
tierselects the price."pro"is the only value and an omittedtierresolves to it.
Quick Start
Good to Know
Branch onstatus, not on whether markdown is set: a format the page could not produce is unset on an otherwise successful result. Treat an unrecognized error.code as a generic failure — the set grows.
Concepts
Requests, results and formats
Quickstart
Fetch your first page