Get redirect chain

GET/v1/api/sites/{site_id}/redirect-chains/{chain_key}

Read one redirect chain with its hops, from the list that showed it.

snapshot and the filters must be those of that list; a chain that is not in the snapshot is a 404.

Scope
issues:read
Token
API key or OAuth access token
Role
Any workspace member
MCP tool
get_redirect_chain
What scopes, tokens and roles mean →
Request
curl "https://api.crawle.io/v1/api/sites/11111111-1111-1111-1111-111111111111/redirect-chains/example?snapshot=example" \
  -H "Authorization: Bearer $CRAWLE_API_KEY"
const response = await fetch("https://api.crawle.io/v1/api/sites/11111111-1111-1111-1111-111111111111/redirect-chains/example?snapshot=example", {
  headers: {
    Authorization: `Bearer ${process.env.CRAWLE_API_KEY}`,
  },
});
const data = await response.json();
import os

import requests

response = requests.request(
    "GET",
    "https://api.crawle.io/v1/api/sites/11111111-1111-1111-1111-111111111111/redirect-chains/example?snapshot=example",
    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
{
  "chain_key": "example",
  "chain_status": "resolved",
  "crawled_at": "example",
  "cross_domain": true,
  "final_url": "https://example.com/",
  "hop_count": 1,
  "hops": [
    {
      "is_redirect_step": true,
      "location": "example",
      "status_code": 1,
      "unique_internal_source_count": 1,
      "url": "https://example.com/"
    }
  ],
  "inlinks_evaluated_at": "example",
  "last_known_url": "https://example.com/",
  "redirect_count": 1,
  "redirect_transition_count": 1,
  "site_id": 1,
  "start_url": "https://example.com/",
  "terminal_status_code": 1,
  "unavailable_reason": "example",
  "unique_internal_entry_source_count": 1,
  "unique_internal_inlink_count": 1,
  "url_id": 1
}

Example generated from the API contract.

Parameters

site_idpath · string (uuid)required
chain_keypath · stringrequired
1–128 characters
snapshotquery · stringrequired
1–4096 characters
min_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 null
directoryquery · 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

chain_keystringrequired
Identity of the chain within the snapshot it was listed in; opaque.
start_urlstringrequired
chain_statusenum or null
resolved: the chain ends at a final page. loop: it revisits a URL. break: a hop is missing or failed. truncated: it was cut at the crawler's hop limit. unavailable: the chain could not be read; see unavailable_reason.one of "resolved", "loop", "break", "truncated", "unavailable"
crawled_atstring or null
cross_domainboolean or null
final_urlstring or null
hop_countinteger or null
hopsarray of PublicRedirectHop
is_redirect_stepboolean or null
locationstring or null
status_codeinteger or null
unique_internal_source_countinteger or null
urlstringrequired
inlinks_evaluated_atstring or null
last_known_urlstring or null
redirect_countinteger or null
redirect_transition_countinteger or null
site_idinteger or null
terminal_status_codeinteger or null
unavailable_reasonstring or null
unique_internal_entry_source_countinteger or null
unique_internal_inlink_countinteger or null
url_idinteger or null

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. detail says why.
  • 422

    When
    The request did not match the schema. detail lists each problem.
  • 502

    When
    The site's crawler answered outside the contract (crawler_response_invalid).
  • 503

    When
    Temporarily unavailable. detail says whether a retry is safe.
  • 429

    When
    Rate limited. Wait for Retry-After seconds.

All errors and what to do →

Generated from the API contract at 7e7039b0b, synced October 30, 2026.