POST /batch/submit. Use the Batches overview for runnable SDK examples, or Large crawls for discovery from a site.
URL records and formats
itemId and meta are returned with each page. Duplicate URLs are deduplicated; rejected URLs appear in invalid_urls (up to 100 entries), each with a reason such as Must be a public http:// or https:// URL. Keep the request body within 24 MiB and use public HTTP(S) URLs.
Set at least one output in formats to true: markdown, html, screenshot, images, bytes, parse, product, highlights, or json. Combine outputs in one request. Every page uses the same options as Scrape Anything, with urls replacing the single url.
Per-page options
Use up to 20 request tags. Configure
webhook: {"url":"https://app.example.com/hooks/context","retry":{}} for signed completion events; do not send webhookUrl at the same time. The response then includes webhook_secret, which is returned only there. Save it immediately in server-side secret storage, associated with the batch id, and use it to verify incoming deliveries.
policies lists access policy IDs to apply to every page. A URL must pass every policy; blocked URLs are listed in invalid_urls and never run.
Credits follow Scrape Anything pricing for each page. The selected outputs reserve the maximum page cost at submission; unused extraction credits and unattempted pages are refunded at settlement. OCR is charged separately for recovered pages. A partial result is successful when at least one requested output succeeds.
Idempotency
Send anIdempotency-Key header, up to 200 characters, unique within your organization. Retrying the same key and body returns the original batch; a different body returns 409. Keep the key and payload together when retrying an uncertain submission.
Recover selected pages
Read result records, select failed URLs, and submit them as a new batch with a new idempotency key. UsemaxAgeMs: 0 for a fresh price list, or remove it when recent cached pages are acceptable. Check limits and errors before increasing concurrency.