Skip to main content
POST
Scrape, batch, or crawl
POST /v1/read is the unified content-extraction endpoint. It auto-detects the operation from the body:
  • Single url - synchronous scrape, returned immediately in the response
  • Multiple urls - async batch job
  • url + maxDepth or maxPages - async crawl job (discover + scrape)
  • url + maxDepth or maxPages + scrape: false - async discover job (URLs only, no content)
See The read primitive for a narrative overview.

Proxy mode

Set proxyMode to "standard" (1 credit, fast, default) or "premium" (3 credits, residential proxies, bypasses bot walls). The response metadata tells you which mode ran. See Proxy modes.

Concurrency

Set maxConcurrency to limit how many browser slots a batch or crawl job uses. Prevents one large job from consuming all your plan’s concurrent browser slots. Capped to your plan’s limit. Check your current usage with Queue status.

Extract

Add the extract parameter to pull structured data from the page alongside markdown. Provide a JSON Schema, a shorthand schema, a natural language prompt, or both.
The response includes an extracted field with the structured data and extraction metadata. Adds 2 credits to the scrape cost. Only supported for single-URL scrapes (not batch or crawl). See Extract for details.

Idempotency

Pass an x-idempotency-key header to deduplicate retried POSTs. Reader caches the original response for 24 hours and returns it verbatim on any subsequent request with the same key.

Discover mode

Set scrape to false on a crawl request to discover URLs without extracting content. Results contain URL, title, and description only. Costs 1 credit per discover job regardless of how many URLs are found.
See Scrape, crawl, and discover for usage patterns.

Authorizations

x-api-key
string
header
required

Body

application/json
url
string<uri>
Example:

"https://example.com"

urls
string<uri>[]
Required array length: 1 - 1000 elements
formats
enum<string>[]

Content formats to include in the response.

Available options:
markdown,
html,
screenshot
Example:
onlyMainContent
boolean

Strip navigation, footers, and boilerplate. Default: true.

includeTags
string[]
excludeTags
string[]
waitForSelector
string
timeoutMs
integer
Required range: 1000 <= x <= 120000
proxyMode
enum<string>

Proxy mode for the scrape. standard uses datacenter proxies (default, 1 credit); premium uses residential proxies for better bot bypass (3 credits).

Available options:
standard,
premium
Example:

"standard"

batchConcurrency
integer
Required range: 1 <= x <= 20
maxConcurrency
integer

Max concurrent browser slots for this request. Capped to your plan's limit.

Required range: x >= 1
maxDepth
integer

Crawl depth (when crawling). Omit for single-URL scrape.

Required range: 1 <= x <= 10
maxPages
integer

Maximum pages to discover during crawl.

Required range: 1 <= x <= 10000
scrape
boolean

When false, crawl discovers URLs without scraping their content (discover mode). Only applies when maxDepth or maxPages is set. Default: true.

cache
boolean

Reuse cached content within TTL. Default: true.

webhook
object

Response

Sync scrape completed

success
enum<boolean>
required
Available options:
true
data
object
required