Batches

GEThttps://scrapely.15.204.158.166.sslip.io/api/v1/batches
List batches
Parameters
limitintegerquery
= 20
Code samples
cURL
curl -X GET "https://scrapely.15.204.158.166.sslip.io/api/v1/batches?limit="
TypeScript
const res = await fetch('https://scrapely.15.204.158.166.sslip.io/api/v1/batches?limit=', {
  method: 'GET',
});
const data = await res.json();
Python
import requests

res = requests.request(
    "GET",
    "https://scrapely.15.204.158.166.sslip.io/api/v1/batches?limit=",
)
data = res.json()
Go
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://scrapely.15.204.158.166.sslip.io/api/v1/batches?limit=", nil)
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://scrapely.15.204.158.166.sslip.io/api/v1/batches?limit=');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Ruby
require 'net/http'
require 'uri'

uri = URI('https://scrapely.15.204.158.166.sslip.io/api/v1/batches?limit=')
req = Net::HTTP::Get.new(uri)
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(req)
end
puts res.body
Java
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://scrapely.15.204.158.166.sslip.io/api/v1/batches?limit="))
    .GET()
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Responses
200 Newest first.
Example
{
  "object": {},
  "data": [
    {
      "id": "batch_9a8b7c6d5e4f3a2b",
      "object": {},
      "status": "queued",
      "total": 0,
      "counts": {
        "queued": 0,
        "running": 0,
        "finished": 0,
        "failed": 0,
        "cancelled": 0
      },
      "progress": 0,
      "options": {
        "render": false,
        "premium": false,
        "ultra_premium": false,
        "country_code": "us",
        "device_type": "desktop",
        "session_number": 0,
        "keep_headers": false,
        "output_format": "html",
        "autoparse": false,
        "wait_for_selector": "string"
      },
      "callback_url": "string",
      "credits_reserved": 0,
      "credits_charged": 0,
      "created_at": "2024-01-01T00:00:00Z",
      "status_url": "string",
      "jobs": [
        {
          "id": null,
          "url": null,
          "status": null,
          "status_code": null,
          "credits": null
        }
      ]
    }
  ],
  "has_more": true
}
Schema
object
dataBatch[]
Show child parameters
idstring
object
statusstring
queued | running | completed
totalinteger
countsobject
Show child parameters
queuedinteger
runninginteger
finishedinteger
failedinteger
cancelledinteger
progressnumber
optionsobject
Options shared by sync scrapes, jobs and batches.
Show child parameters
renderboolean
Load the page in a headless browser and execute its JavaScript before returning the DOM. Cost: 10 credits.
= false
premiumboolean
Route through the residential proxy pool. Use for sites that block datacenter IPs. Cost: 10 credits (25 with render).
= false
ultra_premiumboolean
Our hardest-target pipeline: premium residential IPs, browser fingerprinting and CAPTCHA handling. Includes rendering. Cannot be combined with premium. Cost: 30 credits.
= false
country_codestring
Geotarget the request from this country (lowercase ISO 3166-1 alpha-2, e.g. us, de, jp).
us | ca | mx | br | ar | cl | co | pe | gb | ie | fr | de | nl | be | lu | ch | at | es | pt | it | gr | se | no | dk | fi | is | pl | cz | sk | hu | ro | bg | hr | si | ee | lv | lt | ua | tr | il | ae | sa | eg | za | ng | ke | ma | in | pk | bd
device_typestring
Send a desktop or mobile user agent and viewport.
desktop | mobile = desktop
session_numberinteger
Reuse the same proxy IP across requests that share this number (sticky session, ~15 minutes idle timeout).
keep_headersboolean
Forward the headers you send us (Cookie, Accept-Language, User-Agent, …) to the target instead of ours. Your API key, Host and proxy headers are never forwarded. Sync endpoint only.
= false
output_formatstring
Return the page as raw HTML, cleaned Markdown, plain text, or JSON (title, meta, links, text).
html | json | markdown | text = html
autoparseboolean
For supported domains, return structured JSON parsed from the page instead of HTML.
= false
wait_for_selectorstring
With render=true: wait until this CSS selector appears before capturing the page.
callback_urlstring
credits_reservedinteger
credits_chargedinteger
created_atstring
status_urlstring
jobsobject[]
With include_jobs=true.
Show child parameters
idstring
urlstring
statusstring
queued | running | finished | failed | cancelled
status_codeinteger
creditsinteger
has_moreboolean
401 UNAUTHORIZED: missing, unknown or revoked key.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
429 RATE_LIMITED or CONCURRENCY_LIMIT. Honour Retry-After.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
500 INTERNAL: our fault, not charged. Quote X-Request-Id.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
POSThttps://scrapely.15.204.158.166.sslip.io/api/v1/batches
Create a batch

Up to 10,000 URLs with shared options, fanned out to one job each. All-or-nothing on credits: the whole batch is reserved, or the request is a 402. Each job is refunded individually if it fails. callback_url fires once per job.

Parameters
Idempotency-Keystringheader
Any unique string up to 255 printable characters (a UUID is ideal). Retrying with the same key returns the original response with Idempotent-Replayed: true and charges nothing. A retry while the first is in flight is a 409; the same key with a different body is a 422. Remembered for 24 hours. Also accepted as the idempotency_key parameter.
Request body application/json
renderboolean
Load the page in a headless browser and execute its JavaScript before returning the DOM. Cost: 10 credits.
= false
premiumboolean
Route through the residential proxy pool. Use for sites that block datacenter IPs. Cost: 10 credits (25 with render).
= false
ultra_premiumboolean
Our hardest-target pipeline: premium residential IPs, browser fingerprinting and CAPTCHA handling. Includes rendering. Cannot be combined with premium. Cost: 30 credits.
= false
country_codestring
Geotarget the request from this country (lowercase ISO 3166-1 alpha-2, e.g. us, de, jp).
us | ca | mx | br | ar | cl | co | pe | gb | ie | fr | de | nl | be | lu | ch | at | es | pt | it | gr | se | no | dk | fi | is | pl | cz | sk | hu | ro | bg | hr | si | ee | lv | lt | ua | tr | il | ae | sa | eg | za | ng | ke | ma | in | pk | bd
device_typestring
Send a desktop or mobile user agent and viewport.
desktop | mobile = desktop
session_numberinteger
Reuse the same proxy IP across requests that share this number (sticky session, ~15 minutes idle timeout).
keep_headersboolean
Forward the headers you send us (Cookie, Accept-Language, User-Agent, …) to the target instead of ours. Your API key, Host and proxy headers are never forwarded. Sync endpoint only.
= false
output_formatstring
Return the page as raw HTML, cleaned Markdown, plain text, or JSON (title, meta, links, text).
html | json | markdown | text = html
autoparseboolean
For supported domains, return structured JSON parsed from the page instead of HTML.
= false
wait_for_selectorstring
With render=true: wait until this CSS selector appears before capturing the page.
urlsstring[]required
Absolute http(s) URLs. A newline-separated string is also accepted.
callback_urlstring
HTTPS URL to POST each finished job to.
{
  "render": false,
  "premium": false,
  "ultra_premium": false,
  "country_code": "us",
  "device_type": "desktop",
  "session_number": 0,
  "keep_headers": false,
  "output_format": "html",
  "autoparse": false,
  "wait_for_selector": "string",
  "urls": [
    "string"
  ],
  "callback_url": "string"
}
Code samples
cURL
curl -X POST "https://scrapely.15.204.158.166.sslip.io/api/v1/batches" \
  -H "Idempotency-Key: <value>" \
  -H "Content-Type: application/json" \
  -d '{"render":false,"premium":false,"ultra_premium":false,"country_code":"us","device_type":"desktop","session_number":0,"keep_headers":false,"output_format":"html","autoparse":false,"wait_for_selector":"string","urls":["string"],"callback_url":"string"}'
TypeScript
const res = await fetch('https://scrapely.15.204.158.166.sslip.io/api/v1/batches', {
  method: 'POST',
  headers: {
    'Idempotency-Key': '<value>',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({"render":false,"premium":false,"ultra_premium":false,"country_code":"us","device_type":"desktop","session_number":0,"keep_headers":false,"output_format":"html","autoparse":false,"wait_for_selector":"string","urls":["string"],"callback_url":"string"}),
});
const data = await res.json();
Python
import requests

res = requests.request(
    "POST",
    "https://scrapely.15.204.158.166.sslip.io/api/v1/batches",
    headers={
    "Idempotency-Key": "<value>",
    "Content-Type": "application/json",
    },
    json={"render": False, "premium": False, "ultra_premium": False, "country_code": "us", "device_type": "desktop", "session_number": 0, "keep_headers": False, "output_format": "html", "autoparse": False, "wait_for_selector": "string", "urls": ["string"], "callback_url": "string"},
)
data = res.json()
Go
package main

import (
	"fmt"
	"io"
	"net/http"
	"strings"
)

func main() {
	req, _ := http.NewRequest("POST", "https://scrapely.15.204.158.166.sslip.io/api/v1/batches", strings.NewReader(`{"render":false,"premium":false,"ultra_premium":false,"country_code":"us","device_type":"desktop","session_number":0,"keep_headers":false,"output_format":"html","autoparse":false,"wait_for_selector":"string","urls":["string"],"callback_url":"string"}`))
	req.Header.Set("Idempotency-Key", "<value>")
	req.Header.Set("Content-Type", "application/json")
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://scrapely.15.204.158.166.sslip.io/api/v1/batches');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Idempotency-Key: <value>', 'Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"render":false,"premium":false,"ultra_premium":false,"country_code":"us","device_type":"desktop","session_number":0,"keep_headers":false,"output_format":"html","autoparse":false,"wait_for_selector":"string","urls":["string"],"callback_url":"string"}');
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Ruby
require 'net/http'
require 'uri'

uri = URI('https://scrapely.15.204.158.166.sslip.io/api/v1/batches')
req = Net::HTTP::Post.new(uri)
req['Idempotency-Key'] = '<value>'
req['Content-Type'] = 'application/json'
req.body = '{"render":false,"premium":false,"ultra_premium":false,"country_code":"us","device_type":"desktop","session_number":0,"keep_headers":false,"output_format":"html","autoparse":false,"wait_for_selector":"string","urls":["string"],"callback_url":"string"}'
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(req)
end
puts res.body
Java
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://scrapely.15.204.158.166.sslip.io/api/v1/batches"))
    .header("Idempotency-Key", "<value>")
    .header("Content-Type", "application/json")
    .method("POST", BodyPublishers.ofString("{\"render\":false,\"premium\":false,\"ultra_premium\":false,\"country_code\":\"us\",\"device_type\":\"desktop\",\"session_number\":0,\"keep_headers\":false,\"output_format\":\"html\",\"autoparse\":false,\"wait_for_selector\":\"string\",\"urls\":[\"string\"],\"callback_url\":\"string\"}"))
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Responses
202 Queued.
Example
{
  "id": "batch_9a8b7c6d5e4f3a2b",
  "object": {},
  "status": "queued",
  "total": 0,
  "counts": {
    "queued": 0,
    "running": 0,
    "finished": 0,
    "failed": 0,
    "cancelled": 0
  },
  "progress": 0,
  "options": {
    "render": false,
    "premium": false,
    "ultra_premium": false,
    "country_code": "us",
    "device_type": "desktop",
    "session_number": 0,
    "keep_headers": false,
    "output_format": "html",
    "autoparse": false,
    "wait_for_selector": "string"
  },
  "callback_url": "string",
  "credits_reserved": 0,
  "credits_charged": 0,
  "created_at": "2024-01-01T00:00:00Z",
  "status_url": "string",
  "jobs": [
    {
      "id": "string",
      "url": "string",
      "status": "queued",
      "status_code": null,
      "credits": 0
    }
  ],
  "job_ids": [
    "string"
  ]
}
Schema
idstring
object
statusstring
queued | running | completed
totalinteger
countsobject
Show child parameters
queuedinteger
runninginteger
finishedinteger
failedinteger
cancelledinteger
progressnumber
optionsobject
Options shared by sync scrapes, jobs and batches.
Show child parameters
renderboolean
Load the page in a headless browser and execute its JavaScript before returning the DOM. Cost: 10 credits.
= false
premiumboolean
Route through the residential proxy pool. Use for sites that block datacenter IPs. Cost: 10 credits (25 with render).
= false
ultra_premiumboolean
Our hardest-target pipeline: premium residential IPs, browser fingerprinting and CAPTCHA handling. Includes rendering. Cannot be combined with premium. Cost: 30 credits.
= false
country_codestring
Geotarget the request from this country (lowercase ISO 3166-1 alpha-2, e.g. us, de, jp).
us | ca | mx | br | ar | cl | co | pe | gb | ie | fr | de | nl | be | lu | ch | at | es | pt | it | gr | se | no | dk | fi | is | pl | cz | sk | hu | ro | bg | hr | si | ee | lv | lt | ua | tr | il | ae | sa | eg | za | ng | ke | ma | in | pk | bd
device_typestring
Send a desktop or mobile user agent and viewport.
desktop | mobile = desktop
session_numberinteger
Reuse the same proxy IP across requests that share this number (sticky session, ~15 minutes idle timeout).
keep_headersboolean
Forward the headers you send us (Cookie, Accept-Language, User-Agent, …) to the target instead of ours. Your API key, Host and proxy headers are never forwarded. Sync endpoint only.
= false
output_formatstring
Return the page as raw HTML, cleaned Markdown, plain text, or JSON (title, meta, links, text).
html | json | markdown | text = html
autoparseboolean
For supported domains, return structured JSON parsed from the page instead of HTML.
= false
wait_for_selectorstring
With render=true: wait until this CSS selector appears before capturing the page.
callback_urlstring
credits_reservedinteger
credits_chargedinteger
created_atstring
status_urlstring
jobsobject[]
With include_jobs=true.
Show child parameters
idstring
urlstring
statusstring
queued | running | finished | failed | cancelled
status_codeinteger
creditsinteger
job_idsstring[]
400 MISSING_PARAM or INVALID_PARAM; param names the culprit.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
401 UNAUTHORIZED: missing, unknown or revoked key.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
402 INSUFFICIENT_CREDITS: nothing was charged.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
409 CONFLICT: idempotent request in flight, or the job is already running/done.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
422 INVALID_PARAM with param: idempotency_key: the key was used for a different request.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
429 RATE_LIMITED or CONCURRENCY_LIMIT. Honour Retry-After.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
500 INTERNAL: our fault, not charged. Quote X-Request-Id.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
GEThttps://scrapely.15.204.158.166.sslip.io/api/v1/batches/{id}
Get a batch

Aggregate status. include_jobs=true adds a compact per-job list.

Parameters
idstringpathrequired
The batch id.
include_jobsbooleanquery
= false
Code samples
cURL
curl -X GET "https://scrapely.15.204.158.166.sslip.io/api/v1/batches/{id}?include_jobs="
TypeScript
const res = await fetch('https://scrapely.15.204.158.166.sslip.io/api/v1/batches/{id}?include_jobs=', {
  method: 'GET',
});
const data = await res.json();
Python
import requests

res = requests.request(
    "GET",
    "https://scrapely.15.204.158.166.sslip.io/api/v1/batches/{id}?include_jobs=",
)
data = res.json()
Go
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, _ := http.NewRequest("GET", "https://scrapely.15.204.158.166.sslip.io/api/v1/batches/{id}?include_jobs=", nil)
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)
	fmt.Println(string(body))
}
PHP
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://scrapely.15.204.158.166.sslip.io/api/v1/batches/{id}?include_jobs=');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
Ruby
require 'net/http'
require 'uri'

uri = URI('https://scrapely.15.204.158.166.sslip.io/api/v1/batches/{id}?include_jobs=')
req = Net::HTTP::Get.new(uri)
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(req)
end
puts res.body
Java
import java.net.URI;
import java.net.http.*;
import java.net.http.HttpRequest.BodyPublishers;

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://scrapely.15.204.158.166.sslip.io/api/v1/batches/{id}?include_jobs="))
    .GET()
    .build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
Responses
200 The batch.
Example
{
  "id": "batch_9a8b7c6d5e4f3a2b",
  "object": {},
  "status": "queued",
  "total": 0,
  "counts": {
    "queued": 0,
    "running": 0,
    "finished": 0,
    "failed": 0,
    "cancelled": 0
  },
  "progress": 0,
  "options": {
    "render": false,
    "premium": false,
    "ultra_premium": false,
    "country_code": "us",
    "device_type": "desktop",
    "session_number": 0,
    "keep_headers": false,
    "output_format": "html",
    "autoparse": false,
    "wait_for_selector": "string"
  },
  "callback_url": "string",
  "credits_reserved": 0,
  "credits_charged": 0,
  "created_at": "2024-01-01T00:00:00Z",
  "status_url": "string",
  "jobs": [
    {
      "id": "string",
      "url": "string",
      "status": "queued",
      "status_code": 0,
      "credits": 0
    }
  ]
}
Schema
idstring
object
statusstring
queued | running | completed
totalinteger
countsobject
Show child parameters
queuedinteger
runninginteger
finishedinteger
failedinteger
cancelledinteger
progressnumber
optionsobject
Options shared by sync scrapes, jobs and batches.
Show child parameters
renderboolean
Load the page in a headless browser and execute its JavaScript before returning the DOM. Cost: 10 credits.
= false
premiumboolean
Route through the residential proxy pool. Use for sites that block datacenter IPs. Cost: 10 credits (25 with render).
= false
ultra_premiumboolean
Our hardest-target pipeline: premium residential IPs, browser fingerprinting and CAPTCHA handling. Includes rendering. Cannot be combined with premium. Cost: 30 credits.
= false
country_codestring
Geotarget the request from this country (lowercase ISO 3166-1 alpha-2, e.g. us, de, jp).
us | ca | mx | br | ar | cl | co | pe | gb | ie | fr | de | nl | be | lu | ch | at | es | pt | it | gr | se | no | dk | fi | is | pl | cz | sk | hu | ro | bg | hr | si | ee | lv | lt | ua | tr | il | ae | sa | eg | za | ng | ke | ma | in | pk | bd
device_typestring
Send a desktop or mobile user agent and viewport.
desktop | mobile = desktop
session_numberinteger
Reuse the same proxy IP across requests that share this number (sticky session, ~15 minutes idle timeout).
keep_headersboolean
Forward the headers you send us (Cookie, Accept-Language, User-Agent, …) to the target instead of ours. Your API key, Host and proxy headers are never forwarded. Sync endpoint only.
= false
output_formatstring
Return the page as raw HTML, cleaned Markdown, plain text, or JSON (title, meta, links, text).
html | json | markdown | text = html
autoparseboolean
For supported domains, return structured JSON parsed from the page instead of HTML.
= false
wait_for_selectorstring
With render=true: wait until this CSS selector appears before capturing the page.
callback_urlstring
credits_reservedinteger
credits_chargedinteger
created_atstring
status_urlstring
jobsobject[]
With include_jobs=true.
Show child parameters
idstring
urlstring
statusstring
queued | running | finished | failed | cancelled
status_codeinteger
creditsinteger
401 UNAUTHORIZED: missing, unknown or revoked key.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
404 NOT_FOUND.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
429 RATE_LIMITED or CONCURRENCY_LIMIT. Honour Retry-After.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
500 INTERNAL: our fault, not charged. Quote X-Request-Id.
Example
{
  "error": {
    "code": "MISSING_PARAM",
    "message": "string",
    "param": "string",
    "docs": "/docs/errors#insufficient_credits"
  }
}
Schema
errorobjectrequired
Show child parameters
codestringrequired
Stable, machine-readable. Branch on this, never on message.
MISSING_PARAM | INVALID_PARAM | UNAUTHORIZED | DEMO_READ_ONLY | INSUFFICIENT_CREDITS | NOT_FOUND | CONFLICT | CONCURRENCY_LIMIT | RATE_LIMITED | TARGET_FAILED | UNAVAILABLE | NOT_IMPLEMENTED | INTERNAL
messagestringrequired
Human-readable; may change.
paramstring
The parameter at fault, when there is one.
docsstring
Link to this code on /docs/errors.
Updated