From 3f9ca3d9f5f9782e0a2f312bf22ef20388d23e6b Mon Sep 17 00:00:00 2001 From: Jihong Zuo <198350521+shiongzuo@users.noreply.github.com> Date: Sun, 15 Jun 2025 19:12:27 +0800 Subject: [PATCH 01/17] Create migration-job-progress-api-reference.md --- .../migration-job-progress-api-reference.md | 154 ++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 docs/apis/migration-job-progress-api-reference.md diff --git a/docs/apis/migration-job-progress-api-reference.md b/docs/apis/migration-job-progress-api-reference.md new file mode 100644 index 0000000000..d383c401cd --- /dev/null +++ b/docs/apis/migration-job-progress-api-reference.md @@ -0,0 +1,154 @@ +--- +title: "SharePoint Migration Job Progress API" +description: "This article explains how to retrieve migration job status with GetMigrationJobProgress API." +ms.date: 06/15/2025 +ms.author: jihongzuo +author: shiongzuo +manager: dapodean +audience: ISV +ms.subservice: migration-tool +ms.topic: article +ms.localizationpriority: high +ms.collection: + - SPMigration + - m365-collaboration +--- +# SharePoint GetMigrationJobProgress API + +After submitting a migration job—whether an import job or an Asynchronous Metadata Read (AMR) job—you can use the GetMigrationJobProgress API to track its progress. The API is available via both SDK and REST interfaces. + +It returns a sequence of job status events, including: JobQueued, JobStart, JobProgress, JobError, and JobEnd. + +# Permissions +Use application-based authentication when submitting a migration job. Ensure the application is granted with Sites.Read.All permission or higher. + +# GetMigrationJobProgress Method (SDK) +## Syntax +```csharp +public ClientResult Site.GetMigrationJobProgress( +Guid jobId, +String nextToken +) +``` + +## Parameters +| Name | Type | Required | Description | +| :--------- | :------- | :------- | :----------------------------------------------------- | +| jobId | Guid | Yes | Unique identifier of the migration job | +| nextToken | String | Yes | Token for paging position. Use "0" for initial request | + +For a completed job, requests using nextToken are idempotent—repeating the same request will consistently return the same result. + +## Return Values +| Name | Type | Description | +| :--------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------ | +| Logs | IList | Returns a collection of job status events when new progress is available, or an empty collection if there are no updates. | +| NextToken | String | Returns an updated string value when new progress is available, or the same value as the nextToken parameter if there are no updates. | + +## Example +```csharp +ClientResult result = context.Site.GetMigrationJobProgress(jobId, nextToken ?? "0"); +context.ExecuteQuery(); +IList logs = result.Value.Logs; +string newNextToken = result.Value.NextToken; +``` + +# GetMigrationJobProgress REST API +## HTTP Request +```rest +GET https://{site_url}/_api/site/GetMigrationJobProgress(jobId='{jobId}',nextToken=0) +``` + +## URI Parameters +| Name | Type | Required | Description | +| :--------- | :------- | :------- | :----------------------------------------------------- | +| jobId | Guid | Yes | Unique identifier of the migration job | +| nextToken | String | Yes | Token for paging position. Use "0" for initial request | + +## Request Headers +| Header | Required | +| :------------------------------------- | :------- | +| Authorization: Bearer {token} | Yes | +| Accept: application/json;odata=verbose | Yes | + +## Response +A JSON object when HTTP status code is 200. + +An empty JSON object when HTTP status code is other than 200. + +## Error Handling +| Status Code | Meaning | Action | +| :---------- | :------------- | :---------------------------------------------------------------------- | +| 403 | Unauthorized | Ensure the app/user has at least Sites.Read.All permission. | +| 429 | Too Many Requests | Parse Retry-After header and retry after the specified delay. | +| 500 | Internal Server Error | Parse error responses to identify internal errors. Do Not Retry. | +| 503 | Service Unavailable | Parse Retry-After header and retry after the specified delay. | + +| Internal Error Code | Meaning | +| :------------------ | :---------------------------------------------- | +| -2147213145 | Job not found | +| -2147213146 | Job status expired (valid for less than 5 days) | + +## Example +### Request Sample +```rest +GET https://contoso.sharepoint.com/_api/site/GetMigrationJobProgress(jobId=' 3e280efa-78a3-4ba1-bac6-e447aa538ca5', nextToken=0) +``` + +### Successful Response Sample +Status code: 200 +Response body: +```rest +{ + "d": { + "GetMigrationJobProgress": { + "Logs": { + "__metadata": { + "type": "Collection(Edm.String)" + }, + "results": [ + "{\"MigrationType\":\"None\",\"MigrationDirection\":\"Import\",\"SiteId\":\"48f1898f-77d9-4a1b-bddc-1f49bb6dc134\",\"DbId\":\"de6b85cd-726e-4b13-ae04-629798fddbf3\",\"TotalRetryCount\":\"0\",\"JobId\":\"3e280efa-78a3-4ba1-bac6-e447aa538ca5\",\"Time\":\"05/20/2025 09:18:48.132\",\"CorrelationId\":\"91884a0c-5ee8-4e1f-a23f-e4f7ec170182\",\"Event\":\"JobQueued\"}", + "{\"MigrationType\":\"None\",\"MigrationDirection\":\"Import\",\"SiteId\":\"48f1898f-77d9-4a1b-bddc-1f49bb6dc134\",\"WebId\":\"7206fc09-e4af-48b3-8730-ed7321396d7a\",\"DbId\":\"de6b85cd-726e-4b13-ae04-629798fddbf3\",\"FarmId\":\"f77d7b6c-ef43-4609-8fce-0e93142ce8a0\",\"ServerId\":\"44af885c-393b-4236-9417-bae7a9edc44e\",\"SubscriptionId\":\"82abb045-250e-4186-ba83-b9295930f272\",\"TotalRetryCount\":\"0\",\"JobId\":\"3e280efa-78a3-4ba1-bac6-e447aa538ca5\",\"Time\":\"05/20/2025 09:20:51.129\",\"CorrelationId\":\"7d3e7a8e-4445-4ce0-adb1-078e78cbf686\",\"Event\":\"JobStart\"}", + "{\"MigrationType\":\"None\",\"MigrationDirection\":\"Import\",\"TotalRetryCount\":\"0\",\"ObjectType\":\"ListItem\",\"Url\":\"\",\"Id\":\"cb471d5f-593f-4a63-b59e-8eae3e35b08a\",\"SourceListItemIntId\":\"3\",\"TargetListItemIntId\":\"3\",\"ErrorCode\":\"-2147286782\",\"ErrorType\":\"Microsoft.SharePoint.SPException\",\"Message\":\"Attempted to use an object that has ceased to exist. (Exception from HRESULT: 0x80030102 (STG_E_REVERTED)) \",\"JobId\":\"3e280efa-78a3-4ba1-bac6-e447aa538ca5\",\"Time\":\"05/20/2025 09:20:55.490\",\"CorrelationId\":\"7d3e7a8e-4445-4ce0-adb1-078e78cbf686\",\"Event\":\"JobError\"}", + "{\"MigrationType\":\"None\",\"MigrationDirection\":\"Import\",\"TotalRetryCount\":\"0\",\"FilesCreated\":\"0\",\"BytesProcessed\":\"0\",\"ObjectsProcessed\":\"4\",\"TotalExpectedSPObjects\":\"15\",\"TotalErrors\":\"3\",\"TotalWarnings\":\"0\",\"WaitTimeOnSqlThrottlingMilliseconds\":\"0\",\"TotalDurationInMs\":\"0\",\"CpuDurationInMs\":\"0\",\"SqlDurationInMs\":\"0\",\"SqlQueryCount\":\"0\",\"IsShallowCopy\":\"False\",\"CreatedOrUpdatedFileStatsBySize\":\"{}\",\"ObjectsStatsByType\":\"{\\\"SPUser\\\":{\\\"Count\\\":1,\\\"TotalTime\\\":124,\\\"AccumulatedVersions\\\":0,\\\"ObjectsWithVersions\\\":0},\\\"SPFolder\\\":{\\\"Count\\\":1,\\\"TotalTime\\\":153,\\\"AccumulatedVersions\\\":0,\\\"ObjectsWithVersions\\\":0},\\\"SPDocumentLibrary\\\":{\\\"Count\\\":1,\\\"TotalTime\\\":404,\\\"AccumulatedVersions\\\":0,\\\"ObjectsWithVersions\\\":0},\\\"SPFile\\\":{\\\"Count\\\":1,\\\"TotalTime\\\":0,\\\"AccumulatedVersions\\\":0,\\\"ObjectsWithVersions\\\":0},\\\"SPListItem\\\":{\\\"Count\\\":1,\\\"TotalTime\\\":1880,\\\"AccumulatedVersions\\\":0,\\\"ObjectsWithVersions\\\":0}}\",\"TotalExpectedBytes\":\"0\",\"FilesCreatedIrrespectiveOfVersions\":\"0\",\"BytesProcessedOnlyCurrentVersion\":\"0\",\"JobId\":\"3e280efa-78a3-4ba1-bac6-e447aa538ca5\",\"Time\":\"05/20/2025 09:20:57.380\",\"CorrelationId\":\"7d3e7a8e-4445-4ce0-adb1-078e78cbf686\",\"Event\":\"JobEnd\"}" + ] + }, + "NextToken": "1764", + "__metadata": { + "type": "SP.MigrationJobProgress" + } + } + } +} +``` + +### Error Response Sample +Status code: 500 +Response body: +```rest +{ + "error": { + "code": "-2147213145, Microsoft.SharePoint.SPException", + "innererror": { + "message": "Job not found", + "stacktrace": "STACK_TRACE" + }, + "message": { + "lang": "en-US", + "value": "Job not found" + } + } +} +``` + +# Best Practice +Begin with nextToken=0, store the returned token, and poll at certain intervals. This method is well-suited for long-running jobs and helps ensure no updates are missed. + +Since migration jobs typically take several minutes or more, polling every minute is advised—while adhering to the [guideline](/docs/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online.md) to avoid throttling. + +# See Also +[SharePoint Import Migration API](/docs/apis/migration-api-overview.md) + +[Migration events](/docs/apis/migration-events.md) + +[Avoid getting throttled or blocked in SharePoint Online](/docs/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online.md) From 0519ed88aa71f8ebe4ec8037237afe0578cd0d26 Mon Sep 17 00:00:00 2001 From: Jihong Zuo <198350521+shiongzuo@users.noreply.github.com> Date: Mon, 23 Jun 2025 16:27:10 +0800 Subject: [PATCH 02/17] Update migration-job-progress-api-reference.md --- .../migration-job-progress-api-reference.md | 41 ++++++++----------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/docs/apis/migration-job-progress-api-reference.md b/docs/apis/migration-job-progress-api-reference.md index d383c401cd..be88037f0d 100644 --- a/docs/apis/migration-job-progress-api-reference.md +++ b/docs/apis/migration-job-progress-api-reference.md @@ -19,11 +19,11 @@ After submitting a migration job—whether an import job or an Asynchronous Meta It returns a sequence of job status events, including: JobQueued, JobStart, JobProgress, JobError, and JobEnd. -# Permissions +## Permissions Use application-based authentication when submitting a migration job. Ensure the application is granted with Sites.Read.All permission or higher. -# GetMigrationJobProgress Method (SDK) -## Syntax +## GetMigrationJobProgress Method (SDK) +### Syntax ```csharp public ClientResult Site.GetMigrationJobProgress( Guid jobId, @@ -31,7 +31,7 @@ String nextToken ) ``` -## Parameters +### Method Parameters | Name | Type | Required | Description | | :--------- | :------- | :------- | :----------------------------------------------------- | | jobId | Guid | Yes | Unique identifier of the migration job | @@ -39,13 +39,13 @@ String nextToken For a completed job, requests using nextToken are idempotent—repeating the same request will consistently return the same result. -## Return Values +### Return Values | Name | Type | Description | | :--------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------ | | Logs | IList | Returns a collection of job status events when new progress is available, or an empty collection if there are no updates. | | NextToken | String | Returns an updated string value when new progress is available, or the same value as the nextToken parameter if there are no updates. | -## Example +### Method Usage Example ```csharp ClientResult result = context.Site.GetMigrationJobProgress(jobId, nextToken ?? "0"); context.ExecuteQuery(); @@ -53,30 +53,30 @@ IList logs = result.Value.Logs; string newNextToken = result.Value.NextToken; ``` -# GetMigrationJobProgress REST API -## HTTP Request +## GetMigrationJobProgress REST API +### HTTP Request ```rest GET https://{site_url}/_api/site/GetMigrationJobProgress(jobId='{jobId}',nextToken=0) ``` -## URI Parameters +### URI Parameters | Name | Type | Required | Description | | :--------- | :------- | :------- | :----------------------------------------------------- | | jobId | Guid | Yes | Unique identifier of the migration job | | nextToken | String | Yes | Token for paging position. Use "0" for initial request | -## Request Headers +### Request Headers | Header | Required | | :------------------------------------- | :------- | | Authorization: Bearer {token} | Yes | | Accept: application/json;odata=verbose | Yes | -## Response +### Response A JSON object when HTTP status code is 200. An empty JSON object when HTTP status code is other than 200. -## Error Handling +### Error Handling | Status Code | Meaning | Action | | :---------- | :------------- | :---------------------------------------------------------------------- | | 403 | Unauthorized | Ensure the app/user has at least Sites.Read.All permission. | @@ -89,13 +89,13 @@ An empty JSON object when HTTP status code is other than 200. | -2147213145 | Job not found | | -2147213146 | Job status expired (valid for less than 5 days) | -## Example -### Request Sample +### API Usage Example +#### Request Sample ```rest GET https://contoso.sharepoint.com/_api/site/GetMigrationJobProgress(jobId=' 3e280efa-78a3-4ba1-bac6-e447aa538ca5', nextToken=0) ``` -### Successful Response Sample +#### Successful Response Sample Status code: 200 Response body: ```rest @@ -122,7 +122,7 @@ Response body: } ``` -### Error Response Sample +#### Error Response Sample Status code: 500 Response body: ```rest @@ -141,14 +141,7 @@ Response body: } ``` -# Best Practice +## Best Practice Begin with nextToken=0, store the returned token, and poll at certain intervals. This method is well-suited for long-running jobs and helps ensure no updates are missed. Since migration jobs typically take several minutes or more, polling every minute is advised—while adhering to the [guideline](/docs/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online.md) to avoid throttling. - -# See Also -[SharePoint Import Migration API](/docs/apis/migration-api-overview.md) - -[Migration events](/docs/apis/migration-events.md) - -[Avoid getting throttled or blocked in SharePoint Online](/docs/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online.md) From 5b2d4d3caf80f4ec79820c23140bf1f10ba99aa8 Mon Sep 17 00:00:00 2001 From: Jihong Zuo <198350521+shiongzuo@users.noreply.github.com> Date: Mon, 23 Jun 2025 17:54:26 +0800 Subject: [PATCH 03/17] Update migration-job-progress-api-reference.md Revised broken links --- docs/apis/migration-job-progress-api-reference.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/apis/migration-job-progress-api-reference.md b/docs/apis/migration-job-progress-api-reference.md index be88037f0d..edf953a693 100644 --- a/docs/apis/migration-job-progress-api-reference.md +++ b/docs/apis/migration-job-progress-api-reference.md @@ -144,4 +144,9 @@ Response body: ## Best Practice Begin with nextToken=0, store the returned token, and poll at certain intervals. This method is well-suited for long-running jobs and helps ensure no updates are missed. -Since migration jobs typically take several minutes or more, polling every minute is advised—while adhering to the [guideline](/docs/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online.md) to avoid throttling. +Since migration jobs typically take several minutes or more, polling every minute is advised—while adhering to the [guideline](https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online) to avoid throttling. + +## See Also +[SharePoint Migration API](https://learn.microsoft.com/en-us/sharepoint/dev/apis/migration-api-overview) + +[Migration Events](https://learn.microsoft.com/en-us/sharepoint/dev/apis/migration-events) From 043845b79a5710e92747ecf8444a02936c477558 Mon Sep 17 00:00:00 2001 From: Jihong Zuo <198350521+shiongzuo@users.noreply.github.com> Date: Mon, 23 Jun 2025 18:10:14 +0800 Subject: [PATCH 04/17] Update migration-job-progress-api-reference.md Replace with relative links --- docs/apis/migration-job-progress-api-reference.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/apis/migration-job-progress-api-reference.md b/docs/apis/migration-job-progress-api-reference.md index edf953a693..e4f7a5d1cc 100644 --- a/docs/apis/migration-job-progress-api-reference.md +++ b/docs/apis/migration-job-progress-api-reference.md @@ -144,9 +144,9 @@ Response body: ## Best Practice Begin with nextToken=0, store the returned token, and poll at certain intervals. This method is well-suited for long-running jobs and helps ensure no updates are missed. -Since migration jobs typically take several minutes or more, polling every minute is advised—while adhering to the [guideline](https://learn.microsoft.com/en-us/sharepoint/dev/general-development/how-to-avoid-getting-throttled-or-blocked-in-sharepoint-online) to avoid throttling. +Since migration jobs typically take several minutes or more, polling every minute is advised—while adhering to the [guideline](https://aka.ms/spo429) to avoid throttling. ## See Also -[SharePoint Migration API](https://learn.microsoft.com/en-us/sharepoint/dev/apis/migration-api-overview) +[SharePoint Migration API](migration-api-overview.md) -[Migration Events](https://learn.microsoft.com/en-us/sharepoint/dev/apis/migration-events) +[Migration Events](migration-events.md) From 91c9f8b0823a9682d7149ed813d613ae8a85bc01 Mon Sep 17 00:00:00 2001 From: Andrew Connell Date: Wed, 2 Jul 2025 10:06:31 -0400 Subject: [PATCH 05/17] fix markdown issues, grammar, typos ## markdown in accordance with msdocs guidelines, applied the following changes: - always have empty lines between headings, paragraphs, and fenced code blocks - fenced code language fixes: - no such language **rest**... changed to `http` or `json` where applicable - used inline formatting where applicable --- .../migration-job-progress-api-reference.md | 47 +++++++++++++------ 1 file changed, 33 insertions(+), 14 deletions(-) diff --git a/docs/apis/migration-job-progress-api-reference.md b/docs/apis/migration-job-progress-api-reference.md index e4f7a5d1cc..d6f6eff66e 100644 --- a/docs/apis/migration-job-progress-api-reference.md +++ b/docs/apis/migration-job-progress-api-reference.md @@ -20,18 +20,22 @@ After submitting a migration job—whether an import job or an Asynchronous Meta It returns a sequence of job status events, including: JobQueued, JobStart, JobProgress, JobError, and JobEnd. ## Permissions -Use application-based authentication when submitting a migration job. Ensure the application is granted with Sites.Read.All permission or higher. + +Use application-based authentication when submitting a migration job. Ensure the application is granted the Sites.Read.All permission or higher. ## GetMigrationJobProgress Method (SDK) + ### Syntax + ```csharp public ClientResult Site.GetMigrationJobProgress( -Guid jobId, -String nextToken + Guid jobId, + String nextToken ) ``` ### Method Parameters + | Name | Type | Required | Description | | :--------- | :------- | :------- | :----------------------------------------------------- | | jobId | Guid | Yes | Unique identifier of the migration job | @@ -40,12 +44,14 @@ String nextToken For a completed job, requests using nextToken are idempotent—repeating the same request will consistently return the same result. ### Return Values + | Name | Type | Description | | :--------- | :------- | :------------------------------------------------------------------------------------------------------------------------------------ | | Logs | IList | Returns a collection of job status events when new progress is available, or an empty collection if there are no updates. | | NextToken | String | Returns an updated string value when new progress is available, or the same value as the nextToken parameter if there are no updates. | ### Method Usage Example + ```csharp ClientResult result = context.Site.GetMigrationJobProgress(jobId, nextToken ?? "0"); context.ExecuteQuery(); @@ -54,32 +60,38 @@ string newNextToken = result.Value.NextToken; ``` ## GetMigrationJobProgress REST API + ### HTTP Request -```rest + +```http GET https://{site_url}/_api/site/GetMigrationJobProgress(jobId='{jobId}',nextToken=0) ``` ### URI Parameters + | Name | Type | Required | Description | | :--------- | :------- | :------- | :----------------------------------------------------- | | jobId | Guid | Yes | Unique identifier of the migration job | | nextToken | String | Yes | Token for paging position. Use "0" for initial request | ### Request Headers + | Header | Required | | :------------------------------------- | :------- | | Authorization: Bearer {token} | Yes | | Accept: application/json;odata=verbose | Yes | ### Response -A JSON object when HTTP status code is 200. -An empty JSON object when HTTP status code is other than 200. +A JSON object when the HTTP status code is 200. + +An empty JSON object when the HTTP status code is other than 200. ### Error Handling + | Status Code | Meaning | Action | | :---------- | :------------- | :---------------------------------------------------------------------- | -| 403 | Unauthorized | Ensure the app/user has at least Sites.Read.All permission. | +| 403 | Unauthorized | Ensure the app/user has at least Sites.Read.All permissions. | | 429 | Too Many Requests | Parse Retry-After header and retry after the specified delay. | | 500 | Internal Server Error | Parse error responses to identify internal errors. Do Not Retry. | | 503 | Service Unavailable | Parse Retry-After header and retry after the specified delay. | @@ -90,15 +102,19 @@ An empty JSON object when HTTP status code is other than 200. | -2147213146 | Job status expired (valid for less than 5 days) | ### API Usage Example + #### Request Sample -```rest + +```http GET https://contoso.sharepoint.com/_api/site/GetMigrationJobProgress(jobId=' 3e280efa-78a3-4ba1-bac6-e447aa538ca5', nextToken=0) ``` #### Successful Response Sample + Status code: 200 Response body: -```rest + +```json { "d": { "GetMigrationJobProgress": { @@ -123,9 +139,11 @@ Response body: ``` #### Error Response Sample + Status code: 500 Response body: -```rest + +```json { "error": { "code": "-2147213145, Microsoft.SharePoint.SPException", @@ -142,11 +160,12 @@ Response body: ``` ## Best Practice -Begin with nextToken=0, store the returned token, and poll at certain intervals. This method is well-suited for long-running jobs and helps ensure no updates are missed. -Since migration jobs typically take several minutes or more, polling every minute is advised—while adhering to the [guideline](https://aka.ms/spo429) to avoid throttling. +Begin with `nextToken=0`, store the returned token, and poll at certain intervals. This method is well-suited for long-running jobs and helps ensure no updates are missed. + +Since migration jobs typically take several minutes or more, polling every minute is advised, while adhering to the [guideline](https://aka.ms/spo429) to avoid throttling. ## See Also -[SharePoint Migration API](migration-api-overview.md) -[Migration Events](migration-events.md) +- [SharePoint Migration API](migration-api-overview.md) +- [Migration Events](migration-events.md) From 73c35a4ac6d0c29fdfc93d6256528bc8e48a5965 Mon Sep 17 00:00:00 2001 From: Jihong Zuo <198350521+shiongzuo@users.noreply.github.com> Date: Tue, 8 Jul 2025 18:48:58 +0800 Subject: [PATCH 06/17] Add notice on GetMigrationJobProgress API --- docs/apis/migration-api-overview.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/apis/migration-api-overview.md b/docs/apis/migration-api-overview.md index 775b768fc9..fce8247211 100644 --- a/docs/apis/migration-api-overview.md +++ b/docs/apis/migration-api-overview.md @@ -47,6 +47,10 @@ Start a migration job with three steps. Check the guidance in each of the steps ### Provision the destination containers and the queue +> [!IMPORTANT] +> Use [GetMigrationJobProgress API](migration-job-progress-api-reference.md) to retrieve migration job status. +> Provisioning Azure Queues for migration job status tracking is no longer required. Deprecation is planned for the second half of 2026. Until then, Azure Queues will remain available for status retrieval. + Use the `ProvisionMigrationContainers` method to provision the containers. Check [Use Azure Blob Storage Containers and Azure Queues with Migration API](migration-azure.md) for details. You can also use your own containers and queues if needed. ### Prepare the content @@ -65,7 +69,10 @@ Check [Manifest files](migration-manifest.md) to see the detailed requirements. The `CreateMigrationJob` method creates a migration job, which is queued up for processing. Migration API manages the queue and returns status and logs. Use the `CreateMigrationEncrypted` method to migrate encrypted contents. Check [SharePoint Migration API Reference](migration-api-reference.md) for details. -Upon creation of a new migration job, Migration API returns the Job ID. Track the status of the import with the `GetMigrationJobStatus` method if needed, with the Azure Queue supplied. +> [!IMPORTANT] +> Use GetMigrationJobProgress API to track migration job status. + +Upon creation of a new migration job, Migration API returns the Job ID. Track the status of the import with [GetMigrationJobProgress API](migration-job-progress-api-reference.md). Migration API generates logs in the manifest container. Check the log entries for migration results. From 0026a53c638939dc73301770f563801e7d806cd6 Mon Sep 17 00:00:00 2001 From: Jihong Zuo <198350521+shiongzuo@users.noreply.github.com> Date: Wed, 9 Jul 2025 20:29:15 +0800 Subject: [PATCH 07/17] Add notice on GetMigrationJobProgress API in Migration API Reference --- docs/apis/migration-api-reference.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/apis/migration-api-reference.md b/docs/apis/migration-api-reference.md index 25d87245b1..b93ffbab91 100644 --- a/docs/apis/migration-api-reference.md +++ b/docs/apis/migration-api-reference.md @@ -172,6 +172,9 @@ See Return value in `CreateMigrationJob` method. ## GetMigrationJobStatus method +> [!IMPORTANT] +> Use [GetMigrationJobProgress API](migration-job-progress-api-reference.md) to retrieve migration job status. Deprecation of GetMigrationJobStatus API is planned for the second half of 2026. Until then, it will remain available for status retrieval. + Retrieves the processing status for a designated migration job. Migration API removes completed migration jobs from the timer job queue. Check the notification queue and/or log outputs for import results. From 0db192b0c77327f71657a1183b9bacefda8d8276 Mon Sep 17 00:00:00 2001 From: Andrew Connell Date: Wed, 16 Jul 2025 06:04:51 -0400 Subject: [PATCH 08/17] update doc date --- docs/apis/migration-api-overview.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/apis/migration-api-overview.md b/docs/apis/migration-api-overview.md index fce8247211..3798a42d09 100644 --- a/docs/apis/migration-api-overview.md +++ b/docs/apis/migration-api-overview.md @@ -1,7 +1,7 @@ --- title: "SharePoint Import Migration API" description: "This article provides overview information on how to use the SharePoint Migration API." -ms.date: 07/03/2024 +ms.date: 07/16/2025 ms.author: ranren author: underreview manager: dapodean From 03168ca7a5964e8a5c6b13ced737d2274328c612 Mon Sep 17 00:00:00 2001 From: Andrew Connell Date: Wed, 16 Jul 2025 06:05:06 -0400 Subject: [PATCH 09/17] update doc date --- docs/apis/migration-api-reference.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/apis/migration-api-reference.md b/docs/apis/migration-api-reference.md index b93ffbab91..0db09f4002 100644 --- a/docs/apis/migration-api-reference.md +++ b/docs/apis/migration-api-reference.md @@ -1,7 +1,7 @@ --- title: "SharePoint Migration API Reference Guide" description: "This article provides in-depth information on how to use the SharePoint Migration API." -ms.date: 04/28/2024 +ms.date: 07/16/2025 ms.author: ranren author: underreview manager: dapodean From ca19c4c4a272b259cc52cd76beb52081cd19e9f7 Mon Sep 17 00:00:00 2001 From: Jihong Zuo <198350521+shiongzuo@users.noreply.github.com> Date: Tue, 22 Jul 2025 16:51:20 +0800 Subject: [PATCH 10/17] Add notice of GetMigrationJobProgress to AMR API overview --- docs/apis/export-amr-api.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/apis/export-amr-api.md b/docs/apis/export-amr-api.md index 82a13e7191..0655201a18 100644 --- a/docs/apis/export-amr-api.md +++ b/docs/apis/export-amr-api.md @@ -33,6 +33,10 @@ Export metadata from SharePoint in three steps: ### Provision the destination containers and the queue +> [!IMPORTANT] +> Use [GetMigrationJobProgress API](migration-job-progress-api-reference.md) to retrieve migration job status. +> Provisioning Azure Queues for migration job status tracking is no longer required. Deprecation of Azure Queues is planned for the second half of 2026. Until then, Azure Queues will remain available for status retrieval. + Use `ProvisionMigrationContainers` method to provision the containers. Check [Use Azure Blob Storage Containers and Azure Queues with Migration API](migration-azure.md) for details. You can also use your own containers and queues if needed. ### Use `CreateSPAsyncReadJob` method to start the export @@ -47,6 +51,10 @@ Check [AMR API Reference](amr-api-reference.md) for details. ### Checking status +> [!IMPORTANT] +> Use [GetMigrationJobProgress API](migration-job-progress-api-reference.md) to retrieve migration job status. +> Provisioning Azure Queues for migration job status tracking is no longer required. Deprecation of Azure Queues is planned for the second half of 2026. Until then, Azure Queues will remain available for status retrieval. + Check Azure Queue supplied for export status. Monitor events as listed in [Events](migration-events.md) for details. AMR API exports metadata in the manifest container supplied, under folder named by `JobID`. Check [Manifest files](migration-manifest.md) for the format and validation of the metadata. From 87e1a08590d9bc75d031bf2a3824d4ec13359298 Mon Sep 17 00:00:00 2001 From: Andrew Connell Date: Wed, 23 Jul 2025 04:28:05 -0400 Subject: [PATCH 11/17] markdown formatting & grammar fixes --- docs/apis/export-amr-api.md | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/docs/apis/export-amr-api.md b/docs/apis/export-amr-api.md index 0655201a18..fe7248b8fb 100644 --- a/docs/apis/export-amr-api.md +++ b/docs/apis/export-amr-api.md @@ -1,7 +1,7 @@ --- title: "SharePoint Asynchronous Metadata Read (AMR) API Introduction" -description: This document is an overview on how to read metadata from SharePoint, targeted to SharePoint migration tool developers. -ms.date: 04/18/2024 +description: Overview how to read metadata from SharePoint, targeted to SharePoint migration tool developers. +ms.date: 07/23/2025 ms.author: ranren author: underreview manager: dapodean @@ -15,9 +15,9 @@ ms.collection: --- # SharePoint Asynchronous Metadata Read (AMR) API Introduction -The SharePoint Asynchronous Metadata Read (AMR) API asynchronously exports metadata from SharePoint and OneDrive. +The SharePoint Asynchronous Metadata Read (AMR) API enables the asynchronous export of metadata from SharePoint and OneDrive. -Use AMR API to export metadata from SharePoint, for incremental migration, and post-migration validation. +Use AMR API to export metadata from SharePoint for incremental migration and post-migration validation. AMR is designed exclusively for import scenarios. It exhibits poor scalability when handling requests for metadata, permissions, or versions. We can't provide performance assurances for AMR usage in data export scenarios, such as cross-tenant migrations. @@ -34,7 +34,8 @@ Export metadata from SharePoint in three steps: ### Provision the destination containers and the queue > [!IMPORTANT] -> Use [GetMigrationJobProgress API](migration-job-progress-api-reference.md) to retrieve migration job status. +> Use [GetMigrationJobProgress API](migration-job-progress-api-reference.md) to retrieve migration job status. +> > Provisioning Azure Queues for migration job status tracking is no longer required. Deprecation of Azure Queues is planned for the second half of 2026. Until then, Azure Queues will remain available for status retrieval. Use `ProvisionMigrationContainers` method to provision the containers. Check [Use Azure Blob Storage Containers and Azure Queues with Migration API](migration-azure.md) for details. You can also use your own containers and queues if needed. @@ -52,14 +53,15 @@ Check [AMR API Reference](amr-api-reference.md) for details. ### Checking status > [!IMPORTANT] -> Use [GetMigrationJobProgress API](migration-job-progress-api-reference.md) to retrieve migration job status. +> Use [GetMigrationJobProgress API](migration-job-progress-api-reference.md) to retrieve migration job status. +> > Provisioning Azure Queues for migration job status tracking is no longer required. Deprecation of Azure Queues is planned for the second half of 2026. Until then, Azure Queues will remain available for status retrieval. Check Azure Queue supplied for export status. Monitor events as listed in [Events](migration-events.md) for details. -AMR API exports metadata in the manifest container supplied, under folder named by `JobID`. Check [Manifest files](migration-manifest.md) for the format and validation of the metadata. +AMR API exports metadata in the manifest container supplied, under a folder named by `JobID`. Check [Manifest files](migration-manifest.md) for the format and validation of the metadata. -AMR API splits manifest package larger than 25 MB into multiple manifest files per request. +AMR API splits manifest packages larger than 25 MB into multiple manifest files per request. ## Best practice @@ -67,7 +69,7 @@ AMR API is powerful. Ensure good performance to achieve the scale for large migr ### Export security and permissions on top level if possible -Exporting security with `IncludeSecurity` consumes more resources and slows down the export. It's faster to export these metadata at upper-level folder first, then export the children without them. +Exporting security with `IncludeSecurity` consumes more resources and slows down the export. It's faster to export this metadata at the upper-level folder first, then export the children without them. ### Metadata export on a single item @@ -98,9 +100,9 @@ AMR API processes jobs through a queue mechanism with preconfigured workload man ### Lab-tested performance baseline -We tested the performance in lab setting. AMR API exported about 400 items per second for every 250-K objects, in the average case. The peak performance reached 700 items per second. +We tested the performance in a lab setting. AMR API exported about 400 items per second for every 250-K objects, in the average case. The peak performance reached 700 items per second. -There are multiple factors that affect the real-life performance. These factors include: +Multiple factors affect real-life performance. These factors include: - The number of items that are being exported - The way AMR API is implemented @@ -116,6 +118,6 @@ To ensure good user experiences for all Microsoft 365 customers, SharePoint uses ### Tenant-to-Tenant migrations -AMR isn't intended for scenario where contents from a SharePoint tenant are moved to another. This type of migration requires the use of many resource-heavy read options. The long processing time of these read options slows down the overall migration significantly. +AMR isn't intended for scenarios where contents from a SharePoint tenant are moved to another. This type of migration requires the use of many resource-heavy read options. The long processing time of these read options slows down the overall migration significantly. Microsoft provides no performance guarantee in this scenario. Use Graph or CSOM as needed. From d738210619a6c60e2f1dacf08282594bcd0616b0 Mon Sep 17 00:00:00 2001 From: Andrew Connell Date: Wed, 23 Jul 2025 04:30:28 -0400 Subject: [PATCH 12/17] markdown formatting & grammar fixes WRT markdown, for blockquotes, new ilnes shoudl be seperated by an empty line --- docs/apis/migration-api-overview.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/docs/apis/migration-api-overview.md b/docs/apis/migration-api-overview.md index 3798a42d09..30bdc4039e 100644 --- a/docs/apis/migration-api-overview.md +++ b/docs/apis/migration-api-overview.md @@ -1,6 +1,6 @@ --- title: "SharePoint Import Migration API" -description: "This article provides overview information on how to use the SharePoint Migration API." +description: "This article provides an overview of how to use the SharePoint Migration API." ms.date: 07/16/2025 ms.author: ranren author: underreview @@ -15,7 +15,7 @@ ms.collection: --- # SharePoint Migration API Introduction -The SharePoint Migration API imports contents into SharePoint at scale. It processes content and manifest packages as jobs in a queue. The API provides process status and logs, making it easy to monitor the progress of each migration job. +The SharePoint Migration API imports content into SharePoint at scale. It processes content and manifest packages as jobs in a queue. The API provides process status and logs, making it easy to monitor the progress of each migration job. Use Migration API to migrate content from file shares, SharePoint Server, and other cloud-based services. @@ -23,11 +23,11 @@ Use Migration API to migrate content from file shares, SharePoint Server, and ot ### December 2024 -We applied quota on *Share with Me* items per user. Check [Quota](migration-api-shared.md#Best practice) for more detail. +We applied quota on *Share with Me* items per user. Check [Quota](migration-api-shared.md#Best practice) for more details. ### November 2024 -We enabled logging all file-level events during migration such as file deleting to support auditing. +We enabled logging all file-level events during migration, such as file deletion, to support auditing. ### July 2024 @@ -48,7 +48,8 @@ Start a migration job with three steps. Check the guidance in each of the steps ### Provision the destination containers and the queue > [!IMPORTANT] -> Use [GetMigrationJobProgress API](migration-job-progress-api-reference.md) to retrieve migration job status. +> Use [GetMigrationJobProgress API](migration-job-progress-api-reference.md) to retrieve migration job status. +> > Provisioning Azure Queues for migration job status tracking is no longer required. Deprecation is planned for the second half of 2026. Until then, Azure Queues will remain available for status retrieval. Use the `ProvisionMigrationContainers` method to provision the containers. Check [Use Azure Blob Storage Containers and Azure Queues with Migration API](migration-azure.md) for details. You can also use your own containers and queues if needed. @@ -84,7 +85,7 @@ Migration generates workload to the SharePoint backend differently from end user Don't use user mode in your migration solution. Running migration in user mode triggers increased throttling, resulting in poor performance. -To learn more on how to register an app ID and how to implement app-based authentication, check [How to register an app ID](/azure/active-directory/develop/active-directory-v2-registration-portal) and [Microsoft Graph Auth guidance](/graph/auth). +To learn more about how to register an app ID and how to implement app-based authentication, check [How to register an app ID](/azure/active-directory/develop/active-directory-v2-registration-portal) and [Microsoft Graph Auth guidance](/graph/auth). ### Microsoft Entra ID Permissions @@ -93,17 +94,17 @@ Permissions and consent in the Azure Active Directory v1.0 endpoint](/azure/acti For SharePoint and OneDrive migration scenarios, follow the Microsoft Entra ID permission specification. -For migration tools that rely on end-user signed in and presence, use Delegated permission. +For migration tools that rely on end-user sign-in and presence, use Delegated permission. For service-based migration tools that run without a signed-in user present, such as applications that run as background services, use Application permission. ### App IDs -You can choose to share a single App ID to cover multiple migration solutions created or create individual App ID for each of the products. Make sure to register App IDs. Sharing App IDs doesn't affect performance or throttling. +You can choose to share a single App ID to cover multiple migration solutions created or create an individual App ID for each of the products. Make sure to register App IDs. Sharing App IDs doesn't affect performance or throttling. ### Keep destination SharePoint Site unactivated -To avoid migration issues, deactivate the target site for users until the migration completion. The source could remain active, allowing read and write to keep productivity. Switch users to the new SharePoint destination sites after migration completion. +To avoid migration issues, deactivate the target site for users until migration completion. The source could remain active, allowing read and write access to keep productivity. Switch users to the new SharePoint destination sites after migration completion. ## Performance From abb90712772ff9082377f262f08c3652849d3c4f Mon Sep 17 00:00:00 2001 From: Jihong Zuo <198350521+shiongzuo@users.noreply.github.com> Date: Thu, 31 Jul 2025 21:34:29 +0800 Subject: [PATCH 13/17] Add Azure Queue deprecation notice in migration-azure.md --- docs/apis/migration-azure.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/apis/migration-azure.md b/docs/apis/migration-azure.md index 3dddc87b86..f0cd4a72b4 100644 --- a/docs/apis/migration-azure.md +++ b/docs/apis/migration-azure.md @@ -98,6 +98,11 @@ You can also provide your own Azure Blob Storage Containers. Provide the URI wit ## Azure Queues +> [!IMPORTANT] +> Use [GetMigrationJobProgress API](migration-job-progress-api-reference.md) to retrieve migration job status. +> +> Provisioning Azure Queues for migration job status tracking is no longer required. Deprecation is planned for the second half of 2026. Until then, Azure Queues will remain available for status retrieval. + SharePoint-provided Azure Queues have no extra cost to the customer. Provision the queue with `ProvisionMigrationQueue` method, without the need to manually set up in Azure admin console. Migration API provisions Azure Queues in the same datacenter of the SharePoint instance. From 5913ec3a3c4e6a509ff3b9cefb8f4fec53e45391 Mon Sep 17 00:00:00 2001 From: Jihong Zuo <198350521+shiongzuo@users.noreply.github.com> Date: Wed, 20 Aug 2025 17:55:06 +0800 Subject: [PATCH 14/17] Update migration-events.md Add notice on deprecation of JobLogFileCreate event and remove reference of Azure Queue. --- docs/apis/migration-events.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/apis/migration-events.md b/docs/apis/migration-events.md index dcd8c2209c..959a9fff23 100644 --- a/docs/apis/migration-events.md +++ b/docs/apis/migration-events.md @@ -1,6 +1,6 @@ --- -title: "Migration events in Azure Queue" -description: "This article provides in-depth information on how to use Azure Queue events in migration." +title: "Migration events" +description: "This article provides detailed information on migration job events." ms.date: 04/18/2024 ms.author: ranren author: underreview @@ -13,9 +13,9 @@ ms.collection: - SPMigration - m365-collaboration --- -# Migration events in Azure Queue +# Migration events -This document lists all types of events Migration API and AMR API written to the Azure Queue. Use these events to get status updates on migration jobs. +This document outlines all types of migration job events. These events provide detailed insights into the status and progress of migration jobs. ## JobQueued @@ -46,6 +46,9 @@ CorrelationId:d5d97e9f-702c-0000-ceb9-354fefa5e9f6 ## JobLogFileCreate +> [!IMPORTANT] +> JobLogFileCreate event is deprecated. + ```log JobId:071f9aad-36e6-4bef-9f09-40b5c7498ecdTime:09/29/2020 19:56:29053 FileName:Import-071f9aad-36e6-4bef-9f09-40b5c7498ecd-1.log @@ -187,7 +190,7 @@ Time:09/29/2020 19:56:29.053 CorrelationId:22ca20ec-23de-468b-add3-4e52e90d3a68 ``` -### JobCancelled +## JobCancelled ```log JobId:071f9aad-36e6-4bef-9f09-40b5c7498ecd From e778fded96c714dd652e0718fdff67716e787139 Mon Sep 17 00:00:00 2001 From: Jihong Zuo <198350521+shiongzuo@users.noreply.github.com> Date: Thu, 27 Nov 2025 19:02:06 +0800 Subject: [PATCH 15/17] Create migration-entra-id-access.md Create a new document on enabling Entra ID-based access. --- docs/apis/migration-entra-id-access.md | 108 +++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 docs/apis/migration-entra-id-access.md diff --git a/docs/apis/migration-entra-id-access.md b/docs/apis/migration-entra-id-access.md new file mode 100644 index 0000000000..edffee675a --- /dev/null +++ b/docs/apis/migration-entra-id-access.md @@ -0,0 +1,108 @@ +--- +title: "Entra ID-Based Access to Blob Storage for Migration" +description: "This article explains how to enable Entra ID-Based authentication to access customer-managed Azure blob containers for migration." +ms.date: 11/27/2025 +ms.author: jihongzuo +author: shiongzuo +manager: dapodean +audience: ISV +ms.subservice: migration-tool +ms.topic: article +ms.localizationpriority: high +ms.collection: + - SPMigration + - m365-collaboration +--- + +# Entra ID-Based Access to Blob Storage for Migration + +Prior to migration, customers must store manifest files and content in intermediary Azure Blob containers, which are accessed by import jobs. + +By default, customers can use SharePoint-provided containers at no cost, with migration jobs accessing them via SAS tokens. + +For organizations with stricter security or compliance needs, Entra ID-based access may be preferred. In such cases, customers can provision containers within their own Azure subscriptions and configure Entra ID-based authentication. + +This document outlines the steps to enable Entra ID-based authentication for the migration API. + +## Configure permissions for Entra ID-based access + +To enable Entra ID-based access to customer-managed containers, follow these steps: + +- Create roles for accessing content containers +- Create roles for accessing manifest containers +- Assign the roles to Office 365 SharePoint Online service principal + +### Create roles for accessing content containers + +Migration jobs require **read** permission to access containers that store content and the blobs inside. + +You can either: +- Use the built-in [Storage Blob Data Reader role](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#storage-blob-data-reader) for role assignment. +- Or [create a custom role](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles#steps-to-create-a-custom-role) for more granular permission control. + +When creating a custom role, ensure the following permissions are set on content containers: + +- Actions: Microsoft.Storage/storageAccounts/blobServices/containers/read +- DataActions: Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read + +An example below demonstrates a custom role configured with these permissions. + +### Create roles for accessing manifest containers + +Migration jobs require both **read** and **write** permissions to access containers that store manifest files and the blobs inside. + +You can either: + +- Use the built-in [Storage Blob Data Contributor role](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#storage-blob-data-contributor) for role assignment. +- Or create a custom role for more granular permission control. + +When creating a custom role, ensure the following permissions are included: + +- Actions + - Microsoft.Storage/storageAccounts/blobServices/containers/read + - Microsoft.Storage/storageAccounts/blobServices/containers/write +- DataActions + - Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read + - Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write + +An example below demonstrates a custom role configured with these permissions. + +### Assign roles to Office 365 SharePoint Online + +To grant access to both content and manifest containers, assign roles to Office 365 SharePoint Online service principal (Application ID: 00000003-0000-0ff1-ce00-000000000000). + +In the Azure portal, navigate to each container (content and manifest), open the Access Control (IAM) page, and [add the appropriate role assignments](https://learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments-portal). + +## Use customer-managed Azure blob storage + +To use customer-managed Azure Blob storage for migration, follow these best practices: + +1. Create a dedicated storage account + +Provision a separate Azure storage account specifically for migration. Once migration is complete, we recommend deleting the storage account to reduce data retention and cost. + +2. Use encrypted migration jobs + +When working with customer-managed storage, it’s strongly recommended to use CreateMigrationJobEncrypted to ensure data security. + +3. Enable public network access + +Ensure public network access is enabled on the storage account. OneDrive and SharePoint services connect via the public network during migration. + +4. Choose an authentication method + +OneDrive and SharePoint support both SAS tokens and Entra ID-based authentication. + +- If using SAS tokens, ensure the token remains valid throughout the migration job. +- For medium-sized jobs (e.g., ~250 files and <300GB), set the token expiration between 12 to 48 hours. + +## FAQ + +1. Will migration be affected if customer-managed keys are enabled for account encryption? + +No. Migration supports customer-managed keys. You can [enable them on the storage account](https://learn.microsoft.com/en-us/azure/storage/common/customer-managed-keys-overview). + +2. What is the data retention policy for content stored in a customer-managed storage account? + +Data retention is managed by the customer. Each migration job uses its own manifest and content container. Once the job completes, you can delete the associated containers to minimize data retention. + From 97d429b7d0318d42832bbaf6e0429e9ee4f65690 Mon Sep 17 00:00:00 2001 From: Jihong Zuo <198350521+shiongzuo@users.noreply.github.com> Date: Mon, 15 Dec 2025 16:25:02 +0800 Subject: [PATCH 16/17] Add Entra-ID access section to toc.yml --- docs/toc.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/toc.yml b/docs/toc.yml index b823fdfd18..051a8cdfbb 100644 --- a/docs/toc.yml +++ b/docs/toc.yml @@ -2321,6 +2321,8 @@ href: apis/amr-api-reference.md - name: Azure container and queue href: apis/migration-azure.md + - name: Entra-ID access to Azure containers + href: apis/migration-entra-id-access.md - name: Migration Job Progress API href: apis/migration-job-progress-api-reference.md - name: Migration Content Package From 15478ba93c2d118080121035da58d0163a495cbe Mon Sep 17 00:00:00 2001 From: Jihong Zuo <198350521+shiongzuo@users.noreply.github.com> Date: Fri, 6 Feb 2026 17:38:05 +0800 Subject: [PATCH 17/17] Fix hyperlinks in the document by removing local language part --- docs/apis/migration-entra-id-access.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/apis/migration-entra-id-access.md b/docs/apis/migration-entra-id-access.md index edffee675a..42ae08f54a 100644 --- a/docs/apis/migration-entra-id-access.md +++ b/docs/apis/migration-entra-id-access.md @@ -37,8 +37,8 @@ To enable Entra ID-based access to customer-managed containers, follow these ste Migration jobs require **read** permission to access containers that store content and the blobs inside. You can either: -- Use the built-in [Storage Blob Data Reader role](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#storage-blob-data-reader) for role assignment. -- Or [create a custom role](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles#steps-to-create-a-custom-role) for more granular permission control. +- Use the built-in [Storage Blob Data Reader role](https://learn.microsoft.com/azure/role-based-access-control/built-in-roles#storage-blob-data-reader) for role assignment. +- Or [create a custom role](https://learn.microsoft.com/azure/role-based-access-control/custom-roles#steps-to-create-a-custom-role) for more granular permission control. When creating a custom role, ensure the following permissions are set on content containers: @@ -53,7 +53,7 @@ Migration jobs require both **read** and **write** permissions to access contain You can either: -- Use the built-in [Storage Blob Data Contributor role](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#storage-blob-data-contributor) for role assignment. +- Use the built-in [Storage Blob Data Contributor role](https://learn.microsoft.com/azure/role-based-access-control/built-in-roles#storage-blob-data-contributor) for role assignment. - Or create a custom role for more granular permission control. When creating a custom role, ensure the following permissions are included: @@ -71,7 +71,7 @@ An example below demonstrates a custom role configured with these permissions. To grant access to both content and manifest containers, assign roles to Office 365 SharePoint Online service principal (Application ID: 00000003-0000-0ff1-ce00-000000000000). -In the Azure portal, navigate to each container (content and manifest), open the Access Control (IAM) page, and [add the appropriate role assignments](https://learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments-portal). +In the Azure portal, navigate to each container (content and manifest), open the Access Control (IAM) page, and [add the appropriate role assignments](https://learn.microsoft.com/azure/role-based-access-control/role-assignments-portal). ## Use customer-managed Azure blob storage @@ -100,7 +100,7 @@ OneDrive and SharePoint support both SAS tokens and Entra ID-based authenticatio 1. Will migration be affected if customer-managed keys are enabled for account encryption? -No. Migration supports customer-managed keys. You can [enable them on the storage account](https://learn.microsoft.com/en-us/azure/storage/common/customer-managed-keys-overview). +No. Migration supports customer-managed keys. You can [enable them on the storage account](https://learn.microsoft.com/azure/storage/common/customer-managed-keys-overview). 2. What is the data retention policy for content stored in a customer-managed storage account?