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/bulk
curl -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

FieldDefaultDescription
urls—A JSON array, or a string with one URL per line. Lines that aren't URLs are skipped and reported.
modepngpng, jpeg, pdf or markdown.
full_page
device
—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.