Get queue status
curl --request GET \
--url https://api.reader.dev/v1/queue/status \
--header 'x-api-key: <api-key>'import requests
url = "https://api.reader.dev/v1/queue/status"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.reader.dev/v1/queue/status', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.reader.dev/v1/queue/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.reader.dev/v1/queue/status"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.reader.dev/v1/queue/status")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reader.dev/v1/queue/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"activeJobs": 123,
"waitingJobs": 123,
"maxConcurrency": 123
}
}Account
Queue status
Returns the workspace’s concurrency state: active browser slots in use, waiting jobs, and the plan’s max concurrency.
GET
/
v1
/
queue
/
status
Get queue status
curl --request GET \
--url https://api.reader.dev/v1/queue/status \
--header 'x-api-key: <api-key>'import requests
url = "https://api.reader.dev/v1/queue/status"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.reader.dev/v1/queue/status', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.reader.dev/v1/queue/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.reader.dev/v1/queue/status"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.reader.dev/v1/queue/status")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reader.dev/v1/queue/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"activeJobs": 123,
"waitingJobs": 123,
"maxConcurrency": 123
}
}Check how many browser slots your workspace is currently using, how many jobs are waiting, and your plan’s concurrency limit.
Use this to monitor your queue before submitting large batch jobs, or to build dashboards that show real-time scraping activity.
When all your browser slots are in use, new sync scrape requests return
curl https://api.reader.dev/v1/queue/status \
-H "x-api-key: $READER_KEY"
Concurrency limits
Each plan has a maximum number of concurrent browser slots:| Plan | Concurrent browsers |
|---|---|
| Free | 2 |
| Pro | 10 |
| Business | 50 |
| Enterprise | 200 |
429 with a Retry-After header. Async jobs (batch, crawl) queue and wait for a slot to open.
Per-request concurrency cap
PassmaxConcurrency in your /v1/read request to limit how many browser slots a single batch or crawl job uses. This prevents one large job from consuming all your slots.
curl -X POST https://api.reader.dev/v1/read \
-H "x-api-key: $READER_KEY" \
-d '{
"urls": ["url1", "url2", "...100 more..."],
"maxConcurrency": 5
}'

