Scrape one page synchronously or enqueue with async=1
POST
bearerAuthheader
AuthorizationBearer <sc_live_<43 characters>>Organization API key created at /app/api. Scopes: scrape, crawl, search, research. The secret is shown once.
async?"1"Value in
"1"Idempotency-Key?stringReplays the original job instead of creating a second one when the same key and body are retried.
Match
^[A-Za-z0-9._~-]{1,128}$Length
length <= 128application/json- body
url*stringFormat
uriLength
length <= 8192method?stringDefault
"GET"Value in
"GET""POST"headers?Default
{}body?stringLength
length <= 65536cookies?Default
{}waitFor?stringLength
1 <= length <= 512waitMs?integerRange
0 <= value <= 10000Default
0actions?array<|||||||>Items
items <= 10Default
[]screenshot?booleanDefault
falsescreenshotFullPage?booleanDefault
falsescreenshotSelector?stringLength
1 <= length <= 512pdf?booleanDefault
falsejsonSchema?cacheTtlSeconds?integerRange
0 <= value <= 3600Default
0sessionId?stringMatch
^sess_[a-f0-9]{32}$maxCustomerCostUsd?numberOptional ceiling in USD on what this request may charge the organization balance. When omitted and billing is enabled, the server reserves exactly the required ceiling: success-page fee × requested pages + maxCostUsd × (1 + upstream markup) — today US$0.005 per page and a 50% markup (GET /api/v1/pricing). The reservation settles down to the measured charge; a value below the required ceiling is rejected.
Range
0 <= value <= 100formats?array<>Items
1 <= items <= 3Default
[ "html", "markdown"]maxTier?||||Default
"auto"proxy?stringDefault
"auto"Value in
"auto""none""residential"country?stringMatch
^[a-zA-Z]{2}$timeoutMs?integerRange
1000 <= value <= 180000Default
120000maxCostUsd?numberRange
0 <= value <= 10Default
0.02selectors?Default
{}requiredSelectors?array<>Items
items <= 30Default
[]containsText?array<>Items
items <= 30Default
[]webhook?Scrape result
application/json- response
id*stringurl*stringFormat
urifinalUrl*stringFormat
uristatus*stringValue in
"success""challenge""empty""validation_failed""error"httpStatus?integer|nulltierUsed?integer|nullhtmlSource?|Value in
"response""dom"nulltitle?stringhtml?stringmarkdown?stringjson?structuredJson?unknownjsonLd?array<unknown>screenshotBase64?stringpdfBase64?stringcacheHit?booleancacheRevalidated?booleanetag?stringcacheControl?stringengine?stringValue in
"http""impit""lightpanda""chromium""patchright""2captcha""scrapingbee""scrappa"stage?stringValue in
"http_direct""js_direct""residential""captcha""managed"verification?stringValue in
"passed""not_requested""failed"attempts*array<>durationMs?integerbytes?integerlinks?array<>upstreamCostUsd?number|nullpricingStatus?stringValue in
"known""estimated""unknown"customerChargeUsd*numberartifacts?error?curl -X POST 'https://sparkcrawl.com/api/v1/scrape' \ -H 'Content-Type: application/json' \ -d '{ "url": "http://example.com"}'Example Response
{ "id": "string", "url": "http://example.com", "finalUrl": "http://example.com", "status": "success", "httpStatus": 0, "tierUsed": 0, "htmlSource": "response", "title": "string", "html": "string", "markdown": "string", "json": {}, "structuredJson": null, "jsonLd": [ null ], "screenshotBase64": "string", "pdfBase64": "string", "cacheHit": true, "cacheRevalidated": true, "etag": "string", "cacheControl": "string", "engine": "http", "stage": "http_direct", "verification": "passed", "attempts": [ { "id": "string", "tier": 0, "provider": "string", "proxy": "string", "status": "string", "stage": "string", "engine": "string", "durationMs": 0, "bytes": 0, "upstreamCostUsd": 0, "pricingStatus": "string" } ], "durationMs": 0, "bytes": 0, "links": [ "http://example.com" ], "upstreamCostUsd": 0, "pricingStatus": "known", "customerChargeUsd": 0, "artifacts": { "html": "string", "screenshot": "string", "pdf": "string", "json": "string" }, "error": { "code": "string", "message": "string" }}