cURL
curl --request GET \
--url https://api.brightdata.com/dca/log/{job_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.brightdata.com/dca/log/{job_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.brightdata.com/dca/log/{job_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.brightdata.com/dca/log/{job_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 => [
"Authorization: Bearer <token>"
],
]);
$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.brightdata.com/dca/log/{job_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.brightdata.com/dca/log/{job_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.brightdata.com/dca/log/{job_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "j_ma13y9ay1piehrso8r",
"status": "done",
"collector": "c_m9im5n7v82p2y35la",
"template": "t_m9jty150kxgwtzcgi.3",
"inputs": 1,
"dup_inputs": 0,
"lines": 60,
"fails": 0,
"pages": 1,
"pages_left": 0,
"success": 1,
"navigations": 2,
"created": "2025-04-28T13:22:16.857Z",
"started": "2025-04-28T13:22:17.502Z",
"finished": "2025-04-28T13:23:28.961Z",
"trigger": "user@example.com",
"success_rate": 1,
"job_time": 71459,
"queue_time": 645
}Manage jobs
Get job metadata
GET /dca/log/ returns metadata for a Bright Data Scraper Studio job: status, input counts, output line counts, failures and run timestamps.
GET
/
dca
/
log
/
{job_id}
cURL
curl --request GET \
--url https://api.brightdata.com/dca/log/{job_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.brightdata.com/dca/log/{job_id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.brightdata.com/dca/log/{job_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.brightdata.com/dca/log/{job_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 => [
"Authorization: Bearer <token>"
],
]);
$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.brightdata.com/dca/log/{job_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.brightdata.com/dca/log/{job_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.brightdata.com/dca/log/{job_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "j_ma13y9ay1piehrso8r",
"status": "done",
"collector": "c_m9im5n7v82p2y35la",
"template": "t_m9jty150kxgwtzcgi.3",
"inputs": 1,
"dup_inputs": 0,
"lines": 60,
"fails": 0,
"pages": 1,
"pages_left": 0,
"success": 1,
"navigations": 2,
"created": "2025-04-28T13:22:16.857Z",
"started": "2025-04-28T13:22:17.502Z",
"finished": "2025-04-28T13:23:28.961Z",
"trigger": "user@example.com",
"success_rate": 1,
"job_time": 71459,
"queue_time": 645
}Retrieve metadata for a triggered Bright Data Scraper Studio job: status, input counts, success and failure counts, page counts and run timestamps. Use this endpoint when you need observability into a job, for example to track how many inputs succeeded, how many failed or how long the job took.
This endpoint returns metadata only. To download the actual scraped data, use Receive batch data.
Common
Request
Thejob_id is the collection_id returned by POST /dca/trigger.
curl "https://api.brightdata.com/dca/log/$JOB_ID" \
-H "Authorization: Bearer $BRIGHT_DATA_API_TOKEN"
response = requests.get(
f"https://api.brightdata.com/dca/log/{job_id}",
headers={"Authorization": f"Bearer {API_TOKEN}"},
)
metadata = response.json()
const response = await fetch(
`https://api.brightdata.com/dca/log/${jobId}`,
{ headers: { Authorization: `Bearer ${process.env.BRIGHT_DATA_API_TOKEN}` } }
);
const metadata = await response.json();
Response
{
"id": "j_ma13y9ay1piehrso8r",
"status": "done",
"collector": "c_m9im5n7v82p2y35la",
"template": "t_m9jty150kxgwtzcgi.3",
"inputs": 1,
"dup_inputs": 0,
"lines": 60,
"fails": 0,
"pages": 1,
"pages_left": 0,
"success": 1,
"navigations": 2,
"created": "2025-04-28T13:22:16.857Z",
"started": "2025-04-28T13:22:17.502Z",
"finished": "2025-04-28T13:23:28.961Z",
"trigger": "user@example.com",
"success_rate": 1,
"job_time": 71459,
"queue_time": 645
}
status values: building, running, done, failed, cancelled.
When to use this endpoint
- Track job progress for a dashboard or monitor
- Read the success rate directly from
success_rate - Identify which jobs deduplicated inputs (
dup_inputs > 0) - Read job duration directly from
job_time(milliseconds), and queue wait fromqueue_time
Errors
| Status | Cause | Fix |
|---|---|---|
401 Unauthorized | Token missing, malformed or revoked | Re-copy from Account Settings → API Tokens |
404 Not Found | Job ID does not exist or has expired | Confirm the ID matches a recent collection_id from /dca/trigger |
5xx | Transient Bright Data API error | Retry with exponential backoff, for example 1s, 2s, 4s |
Related
- Trigger async batch collection: the endpoint that creates the job
- Receive batch data: download the dataset itself, not metadata
- Get errors for a job: per-input error details for debugging
Authorizations
Use your Bright Data API Key as a Bearer token in the Authorization header.
How to authenticate:
- Obtain your API Key from the Bright Data account settings at https://brightdata.com/cp/setting/users
- Include the API Key in the Authorization header of your requests
- Format:
Authorization: Bearer YOUR_API_KEY
Example:
Authorization: Bearer b5648e1096c6442f60a6c4bbbe73f8d2234d3d8324554bd6a7ec8f3f251f07df
Learn how to get your Bright Data API key: https://docs.brightdata.com/api-reference/authentication
Path Parameters
The ID of the job to retrieve.
Response
200 - application/json
OK
Was this page helpful?