Skip to main content
POST

How it differs from /scrape

/scrape is synchronous: one URL, one response, content in the body. /batch is asynchronous: it returns 202 with a job_id immediately and fans out the work to the queue. There is no batch result in the 202 — you must poll. Use /batch when you already have a list of URLs. Use /crawl when you only have a seed and want the crawler to discover the links.

Limits

Up to 50 URLs per request. An empty list or more than 50 URLs is rejected with 422 before any job is created — you are never billed for a rejected batch. The rate limit of this endpoint scales with your plan (free 10/min, starter 60/min, growth 120/min, scale 300/min). It is the only endpoint that does.

Cost

1 credit per URL whose scrape_status is success. Blocked, failed, or SSRF-rejected URLs in the batch are not billed, so the final credits_used can be lower than the number of URLs you sent.

Polling the result

cURL
Each item in results carries its own url, scrape_status and credits_used. See GET /jobs/{job_id} for the full status contract.

Authorizations

X-API-Key
string
header
required

Body

application/json
urls
string<uri>[]
required
Required string length: 1 - 2083
formats
enum<string>[]
Available options:
markdown,
json,
raw

Response

Lote enfileirado. Usar GET /jobs/{job_id} para polling.

Resposta 202 de POST /batch: só o identificador para polling.

job_id
string
required

Identificador do job. Consultar em GET /jobs/{job_id}.