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 default — formats 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 budget — timeout_ms applies to one URL, not to the batch. 75 seconds is the maximum and the default; higher values are clamped, not rejected.
  • One tier — tier 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