List incident link pairs

GET/v1/api/sites/{site_id}/incidents/{incident_id}/link-pairs

Recorded source-to-target pairs; total counts pairs, target_count distinct targets.

Scope
alerts:read
Token
API key or OAuth access token
Role
Any workspace member
MCP tool
list_incident_link_pairs
What scopes, tokens and roles mean →
Request
curl "https://api.crawle.io/v1/api/sites/11111111-1111-1111-1111-111111111111/incidents/1/link-pairs?limit=10" \
  -H "Authorization: Bearer $CRAWLE_API_KEY"
const response = await fetch("https://api.crawle.io/v1/api/sites/11111111-1111-1111-1111-111111111111/incidents/1/link-pairs?limit=10", {
  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/incidents/1/link-pairs?limit=10",
    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
{
  "limit": 1,
  "membership_basis": "pair_episode",
  "membership_state": "confirmed",
  "membership_unit": "link_pair",
  "offset": 1,
  "page": 1,
  "pair_count": 1,
  "pairs": [
    {
      "close_reason": "example",
      "closed_at": "2026-01-01T09:00:00Z",
      "episode_id": 1,
      "first_http_status_code": 1,
      "http_description": "example",
      "last_http_status_code": 1,
      "opened_at": "2026-01-01T09:00:00Z",
      "source_url": "https://example.com/",
      "source_url_id": 1,
      "target_url": "https://example.com/",
      "target_url_id": 1
    }
  ],
  "per_page": 1,
  "target_count": 1,
  "total": 1,
  "unavailable_reason": "missing_pair_evidence",
  "view": "current"
}

Example generated from the API contract.

Parameters

site_idpath · string (uuid)required
incident_idpath · integerrequired
at least 1
viewquery · enum
one of "current", "historical" · default "current"
limitquery · integer
1–200 · default 50
offsetquery · integer
0–100000 · default 0
target_url_idquery · integer or null
at least 1

Pages with limit and offset.

Response 200

Errors

  • 401

    When
    Missing, invalid, or expired token.
  • 403

    When
    The token has none of the accepted scopes (alerts:read).
  • 422

    When
    The request did not match the schema. detail lists each problem.
  • 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.