Read a website crawl
curl --request GET \
--url https://www.ntanduy.com/api/v1/web/crawls/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.ntanduy.com/api/v1/web/crawls/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.ntanduy.com/api/v1/web/crawls/{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://www.ntanduy.com/api/v1/web/crawls/{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://www.ntanduy.com/api/v1/web/crawls/{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://www.ntanduy.com/api/v1/web/crawls/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ntanduy.com/api/v1/web/crawls/{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{
"success": true,
"data": {
"id": "a24abf21-8c7f-49c4-91d2-43c31e71fca2",
"status": "completed",
"total": 1,
"completed": 1,
"documents": [
{
"url": "https://example.com/",
"title": "Example Domain",
"description": null,
"content": "# Example Domain",
"contentFormat": "markdown",
"contentTruncated": false,
"httpStatus": 200
}
],
"nextOffset": null,
"expiresAt": "2026-10-14T12:00:00Z"
}
}Web data
Read a website crawl
Read a website crawl with a normalized response contract.
GET
/
api
/
v1
/
web
/
crawls
/
{id}
Read a website crawl
curl --request GET \
--url https://www.ntanduy.com/api/v1/web/crawls/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.ntanduy.com/api/v1/web/crawls/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.ntanduy.com/api/v1/web/crawls/{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://www.ntanduy.com/api/v1/web/crawls/{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://www.ntanduy.com/api/v1/web/crawls/{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://www.ntanduy.com/api/v1/web/crawls/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.ntanduy.com/api/v1/web/crawls/{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{
"success": true,
"data": {
"id": "a24abf21-8c7f-49c4-91d2-43c31e71fca2",
"status": "completed",
"total": 1,
"completed": 1,
"documents": [
{
"url": "https://example.com/",
"title": "Example Domain",
"description": null,
"content": "# Example Domain",
"contentFormat": "markdown",
"contentTruncated": false,
"httpStatus": 200
}
],
"nextOffset": null,
"expiresAt": "2026-10-14T12:00:00Z"
}
}Requires
web:crawl through a scoped Pirehub API key or OAuth token.
See Web data for request limits, response fields, crawl lifecycle
and error handling. See Authentication
for credential headers and quota rules.Authorizations
pirehubOAuthpirehubApiKeybearerApiKey
OAuth 2.0 Authorization Code with PKCE, issued by Pirehub's Clerk authorization server. Request only the scopes required by the operation.
Path Parameters
Query Parameters
Use the previous nextOffset; poll the same offset when no new documents are available.
Required range:
0 <= x <= 10000