Skip to main content
Released: September 4, 2026 Fetch turns a URL into LLM-ready Markdown. Send up to 20 URLs to 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 defaultformats resolves 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_url is 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 200 with status = "error" and an error.code. Only the request is rejected with a non-200, and then nothing is fetched and nothing is billed.
  • Per-URL time budgettimeout_ms applies to one URL, not to the batch. 75 seconds is the maximum and the default; higher values are clamped, not rejected.
  • One tiertier selects the price. "pro" is the only value and an omitted tier resolves to it.

Quick Start

Good to Know

Branch on status, 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