cURL
curl --request GET \
--url https://api.brightdata.com/datasets/v3/progress/{snapshot_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.brightdata.com/datasets/v3/progress/{snapshot_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/datasets/v3/progress/{snapshot_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/datasets/v3/progress/{snapshot_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/datasets/v3/progress/{snapshot_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/datasets/v3/progress/{snapshot_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.brightdata.com/datasets/v3/progress/{snapshot_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{
"snapshot_id": "s_m4x7enmven8djfqak",
"dataset_id": "ds_123456789",
"status": "running"
}{
"error": "User authentication is required"
}{
"error": "Snapshot not found"
}Management APIs
Monitor progress
Use Bright Data Web Scraper API management endpoints to monitor Progress. GET /datasets/v3/progress/ returns snapshot or job status as JSON.
GET
/
datasets
/
v3
/
progress
/
{snapshot_id}
cURL
curl --request GET \
--url https://api.brightdata.com/datasets/v3/progress/{snapshot_id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.brightdata.com/datasets/v3/progress/{snapshot_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/datasets/v3/progress/{snapshot_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/datasets/v3/progress/{snapshot_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/datasets/v3/progress/{snapshot_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/datasets/v3/progress/{snapshot_id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.brightdata.com/datasets/v3/progress/{snapshot_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{
"snapshot_id": "s_m4x7enmven8djfqak",
"dataset_id": "ds_123456789",
"status": "running"
}{
"error": "User authentication is required"
}{
"error": "Snapshot not found"
}- Asynchronous Usage: Trigger a data collection job via the async endpoint (
/trigger), receive asnapshot_id, and poll the Monitor Progress API until the status is ready, then download the results. - Synchronous Usage: If a sync request (
/scrape) exceeds the 1-minute timeout, receive asnapshot_idto poll the Monitor Progress API and download the results once they are ready.
If the request takes too long, we recommend sending an Asynchronous request.
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 YOUR_API_KEY
Learn how to get your Bright Data API key: https://docs.brightdata.com/api-reference/authentication
Path Parameters
The ID that was returned when the collection was triggered
Example:
"s_m4x7enmven8djfqak"
Response
Running
When status is failed, error_message is one of:
- Something went wrong. Bright Data is looking into it.
- Account is suspended
- Account is new, please activate it in account settings. URL
- No data found in discovery
- Snapshot is empty
- Failed to deliver snapshot
- Failed to download response
- Failed to trigger collector
- Internal Server Error
- Input validation failed: DETAILS
Was this page helpful?