Get job status and results
curl --request GET \
--url https://api.reader.dev/v1/jobs/{id} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.reader.dev/v1/jobs/{id}"
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/jobs/{id}', 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/jobs/{id}",
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/jobs/{id}"
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/jobs/{id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reader.dev/v1/jobs/{id}")
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": {
"id": "<string>",
"completed": 123,
"total": 123,
"creditsUsed": 123,
"error": "<string>",
"results": [
{
"url": "<string>",
"markdown": "<string>",
"html": "<string>",
"screenshot": "<string>",
"statusCode": 123,
"credits": 123,
"metadata": {},
"error": "<string>"
}
],
"startedAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z"
},
"pagination": {
"total": 1234,
"skip": 0,
"limit": 20,
"hasMore": true,
"next": "https://api.reader.dev/v1/jobs/abc?skip=20&limit=20"
}
}{
"success": false,
"error": {
"code": "unauthenticated",
"message": "Missing or invalid API key",
"docsUrl": "https://reader.dev/docs/home/concepts/errors#unauthenticated"
}
}{
"success": false,
"error": {
"code": "not_found",
"message": "Job not found",
"docsUrl": "https://reader.dev/docs/home/concepts/errors#not-found"
}
}Jobs
Get a job
GET
/
v1
/
jobs
/
{id}
Get job status and results
curl --request GET \
--url https://api.reader.dev/v1/jobs/{id} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.reader.dev/v1/jobs/{id}"
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/jobs/{id}', 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/jobs/{id}",
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/jobs/{id}"
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/jobs/{id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reader.dev/v1/jobs/{id}")
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": {
"id": "<string>",
"completed": 123,
"total": 123,
"creditsUsed": 123,
"error": "<string>",
"results": [
{
"url": "<string>",
"markdown": "<string>",
"html": "<string>",
"screenshot": "<string>",
"statusCode": 123,
"credits": 123,
"metadata": {},
"error": "<string>"
}
],
"startedAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"createdAt": "2023-11-07T05:31:56Z"
},
"pagination": {
"total": 1234,
"skip": 0,
"limit": 20,
"hasMore": true,
"next": "https://api.reader.dev/v1/jobs/abc?skip=20&limit=20"
}
}{
"success": false,
"error": {
"code": "unauthenticated",
"message": "Missing or invalid API key",
"docsUrl": "https://reader.dev/docs/home/concepts/errors#unauthenticated"
}
}{
"success": false,
"error": {
"code": "not_found",
"message": "Job not found",
"docsUrl": "https://reader.dev/docs/home/concepts/errors#not-found"
}
}Returns the current state of a job and a page of its results. Results are paginated with
skip and limit query parameters (default limit 20, max 100).
Use the pagination.next URL from the response to fetch subsequent pages. The SDK clients do this automatically via waitForJob() and getAllJobResults().
See Async jobs for the full lifecycle and result shape.Authorizations
Path Parameters
⌘I

