Get redirect chain count
GET
/v1/api/sites/{site_id}/redirect-chains/countCount a site's redirect chains, as the Issues page counts them.
min_redirects 2 (the default) is a chain; 0 or 1 also counts single redirects. total is null while the availability is partial or unknown; confirmed_total is what was counted.
- Scope
issues:read- Token
- API key or OAuth access token
- Role
- Any workspace member
- MCP tool
get_redirect_chain_count- What scopes, tokens and roles mean →
Request
cURL
curl "https://api.crawle.io/v1/api/sites/11111111-1111-1111-1111-111111111111/redirect-chains/count" \ -H "Authorization: Bearer $CRAWLE_API_KEY"
JavaScript
const response = await fetch("https://api.crawle.io/v1/api/sites/11111111-1111-1111-1111-111111111111/redirect-chains/count", {
headers: {
Authorization: `Bearer ${process.env.CRAWLE_API_KEY}`,
},
});
const data = await response.json();Python
import os
import requests
response = requests.request(
"GET",
"https://api.crawle.io/v1/api/sites/11111111-1111-1111-1111-111111111111/redirect-chains/count",
headers={
"Authorization": f"Bearer {os.environ['CRAWLE_API_KEY']}",
},
)
data = response.json()$CRAWLE_API_KEY- is an API key from Settings › API keys.
Response 200JSON
{
"availability": {
"awaiting_first_observation": 1,
"known": 1,
"not_applicable": 1,
"observed_at": "example",
"policy_generation": 1,
"reasons": [
"example"
],
"state": "known",
"substrate": "raw",
"total": 1,
"unknown": 1
},
"confirmed_total": 1,
"issue_type": "example",
"title": "Example",
"total": 1,
"website_id": 1
}Example generated from the API contract.
Parameters
site_idpath · string (uuid)requiredmin_redirectsquery · integer- 0–100 · default 2
min_hopsquery · integer or null- 1–100
max_hopsquery · integer or null- 1–100
chain_statusquery · string or null- up to 40 characters
response_status_classquery · string or null- up to 10 characters
cross_domainquery · boolean or nulldirectoryquery · string or null- up to 768 characters
segment_idquery · integer or null- at least 1
searchquery · string or null- up to 500 characters
Response 200
availabilityPublicObservationAvailabilityrequiredawaiting_first_observationinteger or nullknowninteger or nullnot_applicableinteger or nullobserved_atstring or nullpolicy_generationinteger or nullreasonsarray of stringstateenumrequired- known: every page in scope was observed. partial: some were not, so total is null. unknown: the scope could not be determined. not_applicable and awaiting_first_observation: there is nothing to observe yet.one of "known", "partial", "unknown", "not_applicable", "awaiting_first_observation"
substrateenum or null- Which kind of observation the availability is about.one of "raw", "content", "restrictions", "graph"
totalinteger or null- Pages in scope.
unknowninteger or nullconfirmed_totalinteger or nullrequired- Chains found among the pages observed so far; a lower bound when partial.
issue_typestringrequiredtitlestringrequiredtotalinteger or nullrequired- Chains counted, or null while the availability is partial or unknown: a count over pages that were not all observed is not a total. confirmed_total is what was counted.
website_idintegerrequired
Errors
401
- When
- Missing, invalid, or expired token.
403
- When
- The token has none of the accepted scopes (
issues:read).
409
- When
- Conflict with the current state.
detailsays why.
422
- When
- The request did not match the schema.
detaillists each problem.
502
- When
- The site's crawler answered outside the contract (
crawler_response_invalid).
503
- When
- Temporarily unavailable.
detailsays whether a retry is safe.
429
- When
- Rate limited. Wait for
Retry-Afterseconds.
Generated from the API contract at 7e7039b0b, synced October 30, 2026.