List site migration projects

GET/v1/api/sites/{site_id}/migrations/projects

List the migration projects whose source is this site, newest first.

Scope
sites:read
Token
API key or OAuth access token
Role
Any workspace member
MCP tool
list_migration_projects · 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/projects?limit=10" \
  -H "Authorization: Bearer $CRAWLE_API_KEY"
const response = await fetch("https://api.crawle.io/v1/api/sites/11111111-1111-1111-1111-111111111111/migrations/projects?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/migrations/projects?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
[
  {
    "avg_path_similarity": 1.5,
    "client_id": "example",
    "committed": true,
    "completed_at": "2026-01-01T09:00:00Z",
    "confidence": 1.5,
    "confirmed_at": "2026-01-01T09:00:00Z",
    "crawler_candidate_id": 1,
    "created_at": "2026-01-01T09:00:00Z",
    "details": {},
    "effect_results": {},
    "evidence_status": "current",
    "grace_days": 1,
    "grace_ends_at": "2026-01-01T09:00:00Z",
    "grace_started_at": "2026-01-01T09:00:00Z",
    "id": "example",
    "migration_type": "example",
    "redirect_count": 1,
    "redirect_coverage": 1.5,
    "redirect_url_denominator": 1,
    "rejected_at": "2026-01-01T09:00:00Z",
    "replayed": false,
    "source_domain": "example.com",
    "source_website_id": "example",
    "status": "example",
    "target_domain": "example.com",
    "target_verified": true,
    "target_website_id": "example",
    "updated_at": "2026-01-01T09:00:00Z"
  }
]

Example generated from the API contract.

Parameters

site_idpath · string (uuid)required
include_completedquery · boolean
default false
limitquery · integer
1–200 · default 50
offsetquery · integer
0–100000 · default 0

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 (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.