curl --request GET \
--url https://api.scrapebento.com/v1/public/statusimport requests
url = "https://api.scrapebento.com/v1/public/status"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.scrapebento.com/v1/public/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.scrapebento.com/v1/public/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.scrapebento.com/v1/public/status"
req, _ := http.NewRequest("GET", url, nil)
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.scrapebento.com/v1/public/status")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scrapebento.com/v1/public/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": {
"windowDays": 123,
"generatedAt": "2023-11-07T05:31:56Z",
"minSampleForRate": 123,
"externalRequests": 123,
"internalRequests": 123,
"endpoints": [
{
"kind": "url",
"stability": "ga",
"slo": {
"minSuccessRate": 123,
"minRequests": 123,
"windowDays": 123,
"promise": "<string>"
},
"gateVerdict": "met",
"externalRequests": 123,
"internalRequests": 123,
"externalSuccessRate": 123,
"internalSuccessRate": 123,
"p50DurationSec": 123,
"p95DurationSec": 123
}
],
"measurementCaveat": "<string>",
"gateCaveat": "<string>"
}
}{
"error": {
"code": "rate_limited",
"message": "too many requests"
}
}Per-endpoint reliability for the last 14 days
Unauthenticated. Terminal job outcomes per scrape kind over a trailing
fourteen-day window — the window each tier’s SLO (slo.windowDays) is
stated over — alongside each endpoint’s published stability tier.
Recomputed at most once a minute. While a recomputation runs, the
previous snapshot is served; generatedAt says when it was taken.
Numbers are split by caller, and the split is the point. Almost all traffic today comes from a handful of first-party organizations, so a single blended rate would describe their workload rather than this service — a rate that improves because that caller started scraping easier sites looks identical to one that improves because the scraper got better.
externalSuccessRate is withheld, and reported as null, below
minSampleForRate requests. “100% over three requests” is not a
reliability claim, and printing it as one would make this page least
trustworthy exactly where it matters most. The request count is still
reported, so an absent rate reads as “not enough traffic” rather than
as something being hidden.
The mix-independent measurement is the versioned reliability corpus in the repository, which runs the same URLs every night.
curl --request GET \
--url https://api.scrapebento.com/v1/public/statusimport requests
url = "https://api.scrapebento.com/v1/public/status"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.scrapebento.com/v1/public/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.scrapebento.com/v1/public/status",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.scrapebento.com/v1/public/status"
req, _ := http.NewRequest("GET", url, nil)
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.scrapebento.com/v1/public/status")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.scrapebento.com/v1/public/status")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"data": {
"windowDays": 123,
"generatedAt": "2023-11-07T05:31:56Z",
"minSampleForRate": 123,
"externalRequests": 123,
"internalRequests": 123,
"endpoints": [
{
"kind": "url",
"stability": "ga",
"slo": {
"minSuccessRate": 123,
"minRequests": 123,
"windowDays": 123,
"promise": "<string>"
},
"gateVerdict": "met",
"externalRequests": 123,
"internalRequests": 123,
"externalSuccessRate": 123,
"internalSuccessRate": 123,
"p50DurationSec": 123,
"p95DurationSec": 123
}
],
"measurementCaveat": "<string>",
"gateCaveat": "<string>"
}
}{
"error": {
"code": "rate_limited",
"message": "too many requests"
}
}Response
Reliability for the trailing window.
Show child attributes
Show child attributes