Bulk
Render up to 500 URLs in the background and get them as one ZIP. 1 credit per successful URL; failures are refunded.
POST
/v1/bulkcurl -X POST https://shotlane.dev/v1/bulk -H "X-API-Key: $SHOTLANE_API_KEY" -H "Content-Type: application/json" \
-d '{"urls":["https://example.com","https://stripe.com"],"mode":"png","webhook_url":"https://you.example/hooks/shotlane"}'
Fields
| Field | Default | Description |
|---|---|---|
urls | — | A JSON array, or a string with one URL per line. Lines that aren't URLs are skipped and reported. |
mode | png | png, jpeg, pdf or markdown. |
full_pagedevice | — | As on /v1/screenshot. |
options | — | Any render option applied to every URL, e.g. {"device": "iphone", "hide_cookie_banners": true, "wait_for_selector": "main"}. |
requests | — | Instead of urls: a list of {"url", …overrides, "external_identifier"}, each with its own options on top of options. |
external_identifier | — | Your ID for the job, echoed in its status and webhook. |
webhook_url | — | https URL that receives a signed bulk.finished event when the job ends (webhooks). |
{"requests": [{"url": "https://example.com", "external_identifier": "row-1"},
{"url": "https://stripe.com/pricing", "full_page": true, "external_identifier": "row-2"}],
"options": {"device": "iphone", "hide_cookie_banners": true}, "mode": "png"}
Status and results
GET /v1/bulk/{id} returns the status and, once finished, per-URL results and a zip_url (GET /v1/bulk/{id}/zip). GET /v1/bulk lists your recent jobs. Jobs are kept for 24 hours. One bulk or crawl job runs per account at a time.
No code needed: paste a list of URLs on the bulk page when you're logged in.