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

# List data migration history

> List every item your migrations copied, and whether each can be rolled back

This endpoint returns one row per item that a migration copied, shared or moved, newest first: an assistant, and separately its knowledgebase, its tools, its automation flows and its copied voice. It is the **Migration History** table of the Data Migration page of your administration panel. Each row says whether [Roll back data migration](https://docs.autocalls.ai/api-reference/white-label/rollback-data-migration.md) can undo it, and what that would do.

The list has the rows whose source and destination users are both users of your platform, deleted users included. It also has the rows of migrations made before [List data migrations](https://docs.autocalls.ai/api-reference/white-label/list-data-migrations.md) existed, with `run_id` set to `null`.

> [!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 rows of your platform. Rows of the owner's own account can be rolled back only by the owner and by team members with **Allow impersonate owner**: for anyone else, `can_rollback` is `false`.

### Query Parameters

**run\_id** `integer`

Only the rows of one 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).

**type** `string`

Only one type, by its label: `Assistant`, `Phone (Grant)`, `Phone (Transfer)`, `Knowledgebase`, `Tool`, `Widget`, `Dashboard`, `Automate Flow` or `Voice`. You can also send `assistant`, `phone_number` (both kinds of phone rows), `knowledgebase`, `tool`, `custom_widget`, `custom_dashboard`, `automate_flow` or `voice`.

**status** `string`

Only one status: `pending`, `in_progress`, `completed`, `failed` or `rolled_back`. Rows are `completed`, or `rolled_back` after a rollback.

**user\_id** `integer`

Only the rows where this user is the source or the destination.

**search** `string`

Only the rows whose source or destination user's name contains this text, up to 100 characters.

**per\_page** `integer` (default: 15)

Rows per page, from 1 to 100.

**page** `integer` (default: 1)

The page number.

Unknown fields are refused.

### Response

**data** `object[]`

The rows of this page, newest first

**row properties**

**id** `integer`

The row's ID, for [Roll back data migration](https://docs.autocalls.ai/api-reference/white-label/rollback-data-migration.md)

**run\_id** `integer | null`

The migration that made it, or `null` for migrations made before migrations had an ID

**type** `string`

`Assistant`, `Phone (Grant)` (a shared number), `Phone (Transfer)` (a number that changed owner), `Knowledgebase`, `Tool`, `Widget`, `Dashboard`, `Automate Flow` or `Voice`

**source\_user** `object`

`id` and `name` of the user it was copied from

**destination\_user** `object`

`id` and `name` of the user it was copied to

**source\_entity\_id** `integer`

The ID of the original item. `0` for dashboards and automation flows, which have `slug` and `flow_id`

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

The ID of the copy. For a shared number, the ID of the access given to the destination user; for a number that changed owner, the number's own ID. `0` for dashboards and automation flows

**slug** `string | null`

For a dashboard, the slug of the original dashboard, otherwise `null`

**flow\_id** `string | null`

For an automation flow, the original flow's ID, otherwise `null`

**destination\_flow\_id** `string | null`

For an automation flow, the copy's ID, otherwise `null`

**status** `string`

`completed`, or `rolled_back` after a rollback

**created\_at** `string`

When the item was copied, in ISO 8601

**can\_rollback** `boolean`

Whether [Roll back data migration](https://docs.autocalls.ai/api-reference/white-label/rollback-data-migration.md) can undo this row now

**rollback\_blocked\_reason** `string | null`

Why it cannot, with the same text the rollback would return, or `null`

**rollback\_effect** `string`

What a rollback of this row does

**current\_page** `integer`

The current page. The response also has `last_page`, `per_page`, `total`, `from`, `to`, `first_page_url`, `last_page_url`, `next_page_url`, `prev_page_url`, `path` and `links`, as in [List data migrations](https://docs.autocalls.ai/api-reference/white-label/list-data-migrations.md)

```json 200 Response theme={null}
{
  "current_page": 1,
  "data": [
    {
      "id": 816,
      "run_id": 55,
      "type": "Phone (Grant)",
      "source_user": { "id": 12, "name": "Jane Cooper" },
      "destination_user": { "id": 34, "name": "John Smith" },
      "source_entity_id": 7,
      "destination_entity_id": 44,
      "slug": null,
      "flow_id": null,
      "destination_flow_id": null,
      "status": "completed",
      "created_at": "2026-11-03T10:15:20+00:00",
      "can_rollback": true,
      "rollback_blocked_reason": null,
      "rollback_effect": "Ends the destination user's access to the number, unassigns it from the destination user's assistants and campaigns, and removes the destination user's WhatsApp sender on that number."
    },
    {
      "id": 815,
      "run_id": 55,
      "type": "Assistant",
      "source_user": { "id": 12, "name": "Jane Cooper" },
      "destination_user": { "id": 34, "name": "John Smith" },
      "source_entity_id": 101,
      "destination_entity_id": 9001,
      "slug": null,
      "flow_id": null,
      "destination_flow_id": null,
      "status": "completed",
      "created_at": "2026-11-03T10:15:19+00:00",
      "can_rollback": false,
      "rollback_blocked_reason": "Cannot rollback: This assistant is attached to campaign(s): campaign #212. Please remove the assistant from these campaigns first, then try again.",
      "rollback_effect": "Deletes the copied assistant the way the Assistants page does, with its calls, greeting audio and tool and language links. Its knowledgebase, tools, automations and copied voice stay; each has its own history row."
    },
    {
      "id": 814,
      "run_id": 55,
      "type": "Automate Flow",
      "source_user": { "id": 12, "name": "Jane Cooper" },
      "destination_user": { "id": 34, "name": "John Smith" },
      "source_entity_id": 0,
      "destination_entity_id": 0,
      "slug": null,
      "flow_id": "Ab3xK9pQ2mZ7",
      "destination_flow_id": "Zt5nV1cX8bL3",
      "status": "completed",
      "created_at": "2026-11-03T10:15:18+00:00",
      "can_rollback": true,
      "rollback_blocked_reason": null,
      "rollback_effect": "Deletes the copied automation and clears the webhook or tool endpoint that used it. Other assistants or tools copied in the same migration may still point at it."
    }
  ],
  "first_page_url": "https://app.autocalls.ai/api/white-label/data-migration/history?page=1",
  "from": 1,
  "last_page": 2,
  "last_page_url": "https://app.autocalls.ai/api/white-label/data-migration/history?page=2",
  "links": [
    { "url": null, "label": "&laquo; Previous", "active": false },
    { "url": "https://app.autocalls.ai/api/white-label/data-migration/history?page=1", "label": "1", "active": true },
    { "url": "https://app.autocalls.ai/api/white-label/data-migration/history?page=2", "label": "2", "active": false },
    { "url": "https://app.autocalls.ai/api/white-label/data-migration/history?page=2", "label": "Next &raquo;", "active": false }
  ],
  "next_page_url": "https://app.autocalls.ai/api/white-label/data-migration/history?page=2",
  "path": "https://app.autocalls.ai/api/white-label/data-migration/history",
  "per_page": 3,
  "prev_page_url": null,
  "to": 3,
  "total": 5
}
```

```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 422 Invalid Type theme={null}
{
  "message": "The selected type is invalid.",
  "errors": {
    "type": ["The selected type is invalid."]
  }
}
```

```json 422 Unsupported Field theme={null}
{
  "message": "The sort field is not supported.",
  "errors": {
    "sort": ["The sort field is not supported."]
  }
}
```

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

### Example: The rows of one migration

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

### Example: The assistants copied to or from one user

```bash theme={null}
curl -X GET "https://app.autocalls.ai/api/white-label/data-migration/history?user_id=34&type=Assistant" \
  -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.