migration.failed
An import into a Repull Migrate workspace stopped with an error. The connection is kept.
When it fires
When an import run ends in an error — most often the old system rejecting the credentials, or its API rate limit. data.error says what happened. Fix the cause (usually the property manager reconnecting on a new migrate session with X-Workspace-Id) and run it again with POST /v1/migrations/{workspaceId}/import.
Payload
Every delivery uses the same outer envelope (event, eventId, apiVersion, timestamp, data). Dedupe on eventId — it stays stable across retries and replays, while the X-Repull-Delivery-Id header changes on every attempt.
{
"event": "migration.failed",
"eventId": "3f1c9a2e-8b7d-4c6a-9e0f-1a2b3c4d5e6f",
"apiVersion": "2026-04",
"timestamp": "2026-05-01T12:34:56.000Z",
"data": {
"workspaceId": "1204",
"provider": "guesty",
"connectionId": "812",
"status": "failed",
"startedAt": "2026-09-24T18:02:11.000Z",
"finishedAt": "2026-09-24T18:02:14.000Z",
"entities": [
"listings",
"reservations"
],
"error": "Guesty rejected the credentials (401). Reconnect the source and run the import again."
}
}Verifying signatures
Every delivery includes a timestamped X-Repull-Signature header of the form t=<unix_ts>,v1=<hex>, where v1 is HMAC-SHA256(signing_secret, `${t}.${raw_body}`). Verify it before processing — see Verify Signatures for full Node.js and Python examples.
Use the raw body
Related
Tip: Acknowledge with a 2xx status within 10 seconds. Failed deliveries are retried up to 5 times with exponential backoff.Webhook reliability →