Migrate a site
A migration starts a background task from a completed snapshot. The API supports internal migrations to another site in the account and external migrations with destination credentials.
1. Choose a source snapshot
Use List site snapshots and select a snapshot with status: succeeded. Confirm that the destination and the selected content scope are correct before starting.
2. Start the migration
Call Start a site backup migration. The request uses a migration wrapper. Set migration.type to internal or external, then provide the connection fields required by that type.
For a safer first pass, make the scope explicit:
{
"migration": {
"type": "internal",
"destination_url": "https://destination.example.com",
"scope": {
"include_files": true,
"include_database": true
}
}
}
The response returns a task ID. Use Show a task to monitor site-level progress and step-level details.
External destinations
External migrations require the documented FTP connection and database credentials. Keep credentials server-side, redact them from logs, and use a secret manager. Do not retry an external migration blindly after a timeout; inspect the task state first.
Failure recovery
409 indicates a conflicting operation, while 422 generally indicates a missing connection, unsupported method, invalid scope, or plan restriction. Read the structured error details, correct the request, and only start a new migration after confirming the existing task’s terminal state.