Get site migration candidate

GET/v1/api/sites/{site_id}/migrations/candidates/{candidate_id}

Get one migration candidate of the site.

Scope
sites:read
Token
API key or OAuth access token
Role
Any workspace member
MCP tool
get_migration_candidate · preview: MCP write tools are in preview
What scopes, tokens and roles mean →
Request
curl "https://api.crawle.io/v1/api/sites/11111111-1111-1111-1111-111111111111/migrations/candidates/1" \
  -H "Authorization: Bearer $CRAWLE_API_KEY"
const response = await fetch("https://api.crawle.io/v1/api/sites/11111111-1111-1111-1111-111111111111/migrations/candidates/1", {
  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/migrations/candidates/1",
    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
{
  "avg_path_similarity": 1.5,
  "central_project_id": "example",
  "central_project_status": "example",
  "central_site_id": "example",
  "confidence": 1.5,
  "confirm_blocked_reason": "example",
  "confirmable": true,
  "details": {},
  "first_detected_at": "example",
  "homepage_redirect_count": 1,
  "id": 1,
  "last_detected_at": "example",
  "migration_type": "example",
  "permanent_redirect_count": 1,
  "redirect_count": 1,
  "redirect_coverage": 1.5,
  "samples": [
    {
      "first_seen_at": "example",
      "id": 1,
      "is_homepage_target": true,
      "last_seen_at": "example",
      "path_similarity": 1.5,
      "redirect_count": 1,
      "source_url": "https://example.com/",
      "status_code": 1,
      "target_url": "https://example.com/"
    }
  ],
  "source_domain": "example.com",
  "status": "example",
  "target_domain": "example.com",
  "target_site_id": "example",
  "target_verified": false,
  "temporary_redirect_count": 1,
  "website_id": 1
}

Example generated from the API contract.

Parameters

site_idpath · string (uuid)required
candidate_idpath · integerrequired

Response 200

avg_path_similaritynumberrequired
central_site_idstringrequired
confidencenumberrequired
first_detected_atstringrequired
homepage_redirect_countintegerrequired
idintegerrequired
last_detected_atstringrequired
migration_typestringrequired
permanent_redirect_countintegerrequired
redirect_countintegerrequired
redirect_coveragenumberrequired
source_domainstringrequired
statusstringrequired
target_domainstringrequired
temporary_redirect_countintegerrequired
website_idintegerrequired
central_project_idstring or null
central_project_statusstring or null
confirm_blocked_reasonstring or null
Why confirmable is false, in words a customer can read; null when confirmable.
confirmableboolean
Whether the candidate can be confirmed as a migration now. A new confirmation needs at least one permanent (301 or 308) redirect to the target; an already confirmed project stays confirmable for its retry.default true
detailsobject or null
samplesarray of MigrationCandidateMapping
first_seen_atstringrequired
idintegerrequired
is_homepage_targetbooleanrequired
last_seen_atstringrequired
path_similaritynumberrequired
redirect_countintegerrequired
source_urlstringrequired
status_codeintegerrequired
target_urlstringrequired
target_site_idstring or null
target_verifiedboolean
default false

Errors

  • 401

    When
    Missing, invalid, or expired token.
  • 403

    When
    The token has none of the accepted scopes (sites: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.