> ## Documentation Index
> Fetch the complete documentation index at: https://docs.autocalls.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Get data migration

> Follow a migration and read what it copied

This endpoint returns one migration of your platform, with its progress and its results. A migration started with [Start data migration](https://docs.autocalls.ai/api-reference/white-label/start-data-migration.md) runs in the background: poll this endpoint until its status is no longer `queued` or `running`. Migrations started from the Data Migration page of your administration panel or through the AI connector are here too.

> [!NOTE]
>
> This endpoint is available to the **account owner** (with an active plan) and to team members with **Platform Admin**. Other users receive a 403 Forbidden error. Every administrator sees all the migrations of your platform, whoever started them. A migration of another platform returns 404.

### Statuses

| Status | Meaning |
| - | - |
| `queued` | Waiting to start. Your platform runs one migration at a time |
| `running` | Copying. `results` grows after each item, and `counts`, `succeeded` and `failed` stay `null` until the end |
| `completed` | Everything was copied. `warnings` may still list what to finish by hand, for example automation flows to publish |
| `completed_with_issues` | Some items failed, or did not start because the migration reached its 10 minutes. `results` and `not_started` say which |
| `failed` | The migration stopped. `error` says why. What was copied before it stopped is in `results` |

A migration that fails when it starts, for example because the selection changed while it was queued, copies nothing. Start a new migration for the items in `not_started`, or for those that failed.

### Undoing what it copied

Each result has `log_ids`: the rows that [List data migration history](https://docs.autocalls.ai/api-reference/white-label/list-data-migration-history.md) shows for that item, the item itself and what came with it, such as an assistant's knowledgebase and tools. [Roll back data migration](https://docs.autocalls.ai/api-reference/white-label/rollback-data-migration.md) undoes one row at a time. You can also list the rows of a migration with `run_id`.

### Path Parameters

**id** `integer` *required*

The ID of the migration, from [Start data migration](https://docs.autocalls.ai/api-reference/white-label/start-data-migration.md) or [List data migrations](https://docs.autocalls.ai/api-reference/white-label/list-data-migrations.md).

### Response

**data** `object`

The migration

**data properties**

**id** `integer`

The migration's ID

**status** `string`

`queued`, `running`, `completed`, `completed_with_issues` or `failed`, as described above

**channel** `string`

Where it was started: `api`, `mcp` (the AI connector) or `panel` (the Data Migration page)

**error** `string | null`

Why a `failed` migration stopped, otherwise `null`

**initiated\_by** `object`

The administrator who started it: `id` and `name`

**source\_user** `object`

`id` and `name` of the user it copies from

**destination\_user** `object`

`id` and `name` of the user it copies to

**counts** `object | null`

The items it handled, by type: `assistants`, `phone_numbers`, `knowledgebases`, `tools`, `widgets`, `dashboards`, `voices` and `flows`. Only the items you selected count: what an assistant brings with it is part of the assistant. `null` until the migration ends

**succeeded** `integer | null`

How many of these items were copied. `null` until the migration ends

**failed** `integer | null`

How many of these items failed. `null` until the migration ends

**results** `object[]`

One result per item, in the order they ran

**result properties**

**type** `string`

`assistant`, `phone_number`, `knowledgebase`, `tool`, `widget`, `dashboard`, `voice` or `flow`. A `reconciliation` result is a copied tool pointed at its copied automation flow at the end; it is not counted

**source\_id** `integer | null`

The item's ID. Dashboards have `slug` instead, and automation flows `flow_id`

**destination\_id** `integer | null`

The copy's ID. For a shared phone number, the ID of the access given to the destination user: the number keeps its ID. Dashboards have `destination_slug` instead, and automation flows `destination_flow_id`. `null` when the item failed

**success** `boolean`

Whether the item was copied

**warnings** `string[]`

The item's warnings, with those of what came with it

**log\_ids** `integer[]`

The history rows of this item, for [Roll back data migration](https://docs.autocalls.ai/api-reference/white-label/rollback-data-migration.md)

**warnings** `string[]`

Every warning of the migration, without duplicates. After 200, the last one says how many more there are. For a migration started from the Data Migration page, one note says that its warnings are shown there

**not\_started** `object[]`

The items that did not start: `type`, with `source_id`, `slug` or `flow_id`

**created\_at** `string`

When it was started, in ISO 8601

**started\_at** `string | null`

When it began running, in ISO 8601

**finished\_at** `string | null`

When it ended, in ISO 8601

```json 200 Completed theme={null}
{
  "data": {
    "id": 55,
    "status": "completed",
    "channel": "api",
    "error": null,
    "initiated_by": { "id": 5, "name": "Alex Morgan" },
    "source_user": { "id": 12, "name": "Jane Cooper" },
    "destination_user": { "id": 34, "name": "John Smith" },
    "counts": {
      "assistants": 1,
      "phone_numbers": 1,
      "knowledgebases": 0,
      "tools": 0,
      "widgets": 0,
      "dashboards": 0,
      "voices": 0,
      "flows": 0
    },
    "succeeded": 2,
    "failed": 0,
    "results": [
      {
        "type": "assistant",
        "source_id": 101,
        "destination_id": 9001,
        "success": true,
        "warnings": [
          "postcall automate flow: The copied automation is an unpublished draft — after reviewing its connections, open it on the Automate page and publish it to make it live."
        ],
        "log_ids": [812, 813, 814, 815]
      },
      {
        "type": "phone_number",
        "source_id": 7,
        "destination_id": 44,
        "success": true,
        "warnings": [],
        "log_ids": [816]
      }
    ],
    "warnings": [
      "postcall automate flow: The copied automation is an unpublished draft — after reviewing its connections, open it on the Automate page and publish it to make it live."
    ],
    "not_started": [],
    "created_at": "2026-11-03T10:15:00+00:00",
    "started_at": "2026-11-03T10:15:02+00:00",
    "finished_at": "2026-11-03T10:15:21+00:00"
  }
}
```

```json 200 Running theme={null}
{
  "data": {
    "id": 56,
    "status": "running",
    "channel": "api",
    "error": null,
    "initiated_by": { "id": 5, "name": "Alex Morgan" },
    "source_user": { "id": 12, "name": "Jane Cooper" },
    "destination_user": { "id": 34, "name": "John Smith" },
    "counts": null,
    "succeeded": null,
    "failed": null,
    "results": [
      {
        "type": "assistant",
        "source_id": 101,
        "destination_id": 9002,
        "success": true,
        "warnings": [],
        "log_ids": [820, 821]
      }
    ],
    "warnings": [],
    "not_started": [],
    "created_at": "2026-11-03T11:02:00+00:00",
    "started_at": "2026-11-03T11:02:01+00:00",
    "finished_at": null
  }
}
```

```json 200 Completed With Issues theme={null}
{
  "data": {
    "id": 57,
    "status": "completed_with_issues",
    "channel": "mcp",
    "error": null,
    "initiated_by": { "id": 5, "name": "Alex Morgan" },
    "source_user": { "id": 12, "name": "Jane Cooper" },
    "destination_user": { "id": 34, "name": "John Smith" },
    "counts": {
      "assistants": 0,
      "phone_numbers": 0,
      "knowledgebases": 0,
      "tools": 0,
      "widgets": 1,
      "dashboards": 1,
      "voices": 0,
      "flows": 1
    },
    "succeeded": 2,
    "failed": 1,
    "results": [
      {
        "type": "widget",
        "source_id": 41,
        "destination_id": 77,
        "success": true,
        "warnings": [
          "Widget #41 references an assistant that was not migrated. The widget will show data for ALL assistants instead of a specific one. Evaluation columns may not work correctly."
        ],
        "log_ids": [830]
      },
      {
        "type": "dashboard",
        "slug": "sales",
        "destination_slug": "sales-2",
        "success": true,
        "warnings": [],
        "log_ids": [831]
      },
      {
        "type": "flow",
        "flow_id": "Qw8eR4tY6uI1",
        "destination_flow_id": null,
        "success": false,
        "warnings": ["Failed to clone automate flow"],
        "log_ids": []
      }
    ],
    "warnings": [
      "Widget #41 references an assistant that was not migrated. The widget will show data for ALL assistants instead of a specific one. Evaluation columns may not work correctly.",
      "Failed to clone automate flow"
    ],
    "not_started": [],
    "created_at": "2026-11-03T12:00:00+00:00",
    "started_at": "2026-11-03T12:00:01+00:00",
    "finished_at": "2026-11-03T12:00:40+00:00"
  }
}
```

```json 200 Failed theme={null}
{
  "data": {
    "id": 58,
    "status": "failed",
    "channel": "api",
    "error": "Destination user has reached their assistants limit (5/5).",
    "initiated_by": { "id": 5, "name": "Alex Morgan" },
    "source_user": { "id": 12, "name": "Jane Cooper" },
    "destination_user": { "id": 34, "name": "John Smith" },
    "counts": null,
    "succeeded": null,
    "failed": null,
    "results": [],
    "warnings": [],
    "not_started": [],
    "created_at": "2026-11-03T13:00:00+00:00",
    "started_at": "2026-11-03T13:00:01+00:00",
    "finished_at": "2026-11-03T13:00:01+00:00"
  }
}
```

```json 401 Unauthenticated theme={null}
{
  "message": "Unauthenticated."
}
```

```json 403 Not Administrator theme={null}
{
  "message": "You are not an administrator."
}
```

```json 403 No Data Migration Access theme={null}
{
  "message": "You do not have access to data migration."
}
```

```json 404 Migration Not Found theme={null}
{
  "message": "Migration not found."
}
```

```json 429 Too Many Requests theme={null}
{
  "message": "Too Many Attempts."
}
```

### Rate limit

The data migration endpoints count toward the limit of 60 requests per minute for each account that the administration endpoints share. Above it they return `429`, and the `Retry-After` response header tells you how many seconds to wait. Polling every few seconds stays well within it.

### Example

```bash theme={null}
curl -X GET https://app.autocalls.ai/api/white-label/data-migration/runs/55 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.