POST /v1/scrape
The single endpoint that powers Web Unlocker. Send a URL plus options; receive the page content and any extracted data.
POST https://api.omniscrape.io/v1/scrape
Headers
| Header | Required | Value |
|---|---|---|
X-API-Key | Yes | Your API key |
Content-Type | Yes | application/json |
Minimal request
curl -X POST https://api.omniscrape.io/v1/scrape \
-H "X-API-Key: $OMNISCRAPE_KEY" \
-H "Content-Type: application/json" \
-d '{ "url": "https://example.com" }'
Only url is required. Everything else has a sensible default — see Parameters.
Full-featured request
{
"url": "https://example.com/listings",
"mode": "js_rendering",
"css_selectors": {
"titles": "h2.card-title",
"prices": ".card-price"
},
"proxy": "residential:us",
"js_wait_selector": ".card-title",
"session_id": "crawl-batch-42",
"enable_solver": true,
"timeout": 60,
"custom_headers": { "Accept-Language": "en-US" }
}
Response
{
"success": true,
"data": {
"content": "<html>...</html>",
"css_extracted": { "...": "..." },
"status_code": 200,
"final_url": "https://example.com/listings"
},
"metadata": {
"method_used": "js_rendering",
"elapsed_time": 5.2,
"solver_used": true,
"challenge_solved": true
},
"billing": { "charged": 0.0035, "balance_after": 49.9, "cost_per_request": 0.0035 }
}
See the Response reference for every field, and Errors for failure cases.
Synchronous vs async
POST /v1/scrape is synchronous: the connection stays open until the page is fetched and returns the result directly. For large batches or very slow targets, use the async jobs API so you don't hold connections open.