migrationUsers
Migration Users. Individual users in a migration batch and their status. The migrationUsers entity set lives under /exchange/v1.0/migrationUsers in the Migration & jobs category.
| Fact | Value |
|---|---|
| Path | /exchange/v1.0/migrationUsers |
| Category | Migration & jobs |
| Tier | Tier 6, Mailbox jobs |
| Read role | MailboxJobs.Read.All (Community) |
| Write role | MailboxJobs.ReadWrite.All (Pro) |
| Backing cmdlets | Get-MigrationUser, Set-MigrationUser, Remove-MigrationUser, Get-MigrationUserStatistics, Start-MigrationUser, Stop-MigrationUser |
Routes
Section titled “Routes”| Method | Path | Synopsis | Role | Plan |
|---|---|---|---|---|
| GET | /exchange/v1.0/migrationUsers |
List migrationUsers entries. | MailboxJobs.Read |
Community |
| GET | /exchange/v1.0/migrationUsers/{key} |
Get a single migrationUsers entry by Identity. | MailboxJobs.Read |
Community |
| POST | /exchange/v1.0/migrationUsers/{key}/start |
POST /migrationUsers/{key}/start - resume a stopped or queued migration user via Start-MigrationUser. The migration service restarts the data copy for this user within its batch. 204 on success; pass ?dryRun=true to preview (-WhatIf) without changing state. | MailboxJobs.ReadWrite |
Pro |
| GET | /exchange/v1.0/migrationUsers/{key}/statistics |
Get-MigrationUserStatistics - per-user migration progress + diagnostics. | MailboxJobs.Read |
Community |
| POST | /exchange/v1.0/migrationUsers/{key}/stop |
POST /migrationUsers/{key}/stop - stop an in-progress migration user via Stop-MigrationUser. Halts the data copy; the user can be resumed later with POST /migrationUsers/{key}/start. 204 on success; pass ?dryRun=true to preview (-WhatIf) without changing state. | MailboxJobs.ReadWrite |
Pro |
GET /exchange/v1.0/migrationUsers
Section titled “GET /exchange/v1.0/migrationUsers”List migrationUsers entries.
Backing cmdlet: Get-MigrationUser. Role: MailboxJobs.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
batchId |
query | string | Limit results to users in the named migration batch (Get-MigrationUser -BatchId). | |
status |
query | string | Filter users by detailed status (Get-MigrationUser -Status). One of: Completed, CompletedWithWarnings, Completing, CompletionFailed, CompletionSynced, Corrupted, Failed, IncrementalFailed, IncrementalStopped, IncrementalSynced, IncrementalSyncing, Provisioning, ProvisionUpdating, Queued, Removing, Starting, Stopped, Stopping, Synced, Syncing, Validating. | |
statusSummary |
query | string | Filter users by coarse-grained roll-up status (Get-MigrationUser -StatusSummary). One of: Active, Completed, Failed, Stopped, Synced. | |
all |
query | bool (switch) | Return all results instead of the EXO default of 1000. Maps -ResultSize Unlimited on Get-MigrationUser; prevents silent truncation in large tenants. | |
emailAddress |
query | string | ||
mailboxGuid |
query | string |
List migrationUsers
Section titled “List migrationUsers”Stub auto-generated example for the migrationUsers collection. Backing cmdlet: Get-MigrationUser. Live-verify with ?$top=3&$select=Id,Name and replace the synthetic body before promoting to Tier 1.
GET /exchange/v1.0/migrationUsers?$top=3 HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#migrationUsers", "value": []}Notes: Illustrative example derived from the cmdlet documentation, not a live capture: field names are real, values are placeholders.
Related: GET /exchange/v1.0/migrationUsers/{key}
GET /exchange/v1.0/migrationUsers/{key}
Section titled “GET /exchange/v1.0/migrationUsers/{key}”Get a single migrationUsers entry by Identity.
Backing cmdlet: Get-MigrationUser. Role: MailboxJobs.Read (Community).
Get a single migrationUsers entry
Section titled “Get a single migrationUsers entry”Stub auto-generated example for GET /migrationUsers/{key}. Backing cmdlet: Get-MigrationUser with -Identity {key}. Returns the full entity body; 404 if the identity doesn’t resolve.
GET /exchange/v1.0/migrationUsers/{key} HTTP/1.1Authorization: Bearer {token}HTTP/1.1 200 OK
{ "@odata.context": "http://localhost:5043/exchange/v1.0/$metadata#migrationUsers/$entity"}Notes: Illustrative example derived from the cmdlet documentation, not a live capture: field names are real, values are placeholders.
Related: GET /exchange/v1.0/migrationUsers
POST /exchange/v1.0/migrationUsers/{key}/start
Section titled “POST /exchange/v1.0/migrationUsers/{key}/start”POST /migrationUsers/{key}/start - resume a stopped or queued migration user via Start-MigrationUser. The migration service restarts the data copy for this user within its batch. 204 on success; pass ?dryRun=true to preview (-WhatIf) without changing state.
Backing cmdlet: Start-MigrationUser. Role: MailboxJobs.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
dryRun |
query | bool (switch) |
Start (resume) a migration user
Section titled “Start (resume) a migration user”Sub-resource of the migration user at GET /migrationUsers/{key} - bound action that resumes a stopped or queued migration user via Start-MigrationUser. The migration service restarts the data copy for this user within its batch. Returns 204. Pass ?dryRun=true to preview (-WhatIf).
POST /exchange/v1.0/migrationUsers/{key}/start HTTP/1.1Authorization: Bearer {token}HTTP/1.1 204 No ContentNotes: Route + auth + cmdlet wiring live-verified 2026-05-29 (token carries the newly-minted MailboxJobs.ReadWrite.All; Start-MigrationUser executes and returns a clean 404 for a non-existent migration user). No active migration batches existed on the tenant to exercise a full 204.
Related: GET /exchange/v1.0/migrationUsers/{key}, POST /exchange/v1.0/migrationUsers/{key}/stop
GET /exchange/v1.0/migrationUsers/{key}/statistics
Section titled “GET /exchange/v1.0/migrationUsers/{key}/statistics”Get-MigrationUserStatistics - per-user migration progress + diagnostics.
Backing cmdlet: Get-MigrationUserStatistics. Role: MailboxJobs.Read (Community).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
includeReport |
query | bool (switch) | Return additional troubleshooting detail in the Report field (Get-MigrationUserStatistics -IncludeReport). | |
includeSkippedItems |
query | bool (switch) | Include skipped items for the user in the statistics (Get-MigrationUserStatistics -IncludeSkippedItems). |
POST /exchange/v1.0/migrationUsers/{key}/stop
Section titled “POST /exchange/v1.0/migrationUsers/{key}/stop”POST /migrationUsers/{key}/stop - stop an in-progress migration user via Stop-MigrationUser. Halts the data copy; the user can be resumed later with POST /migrationUsers/{key}/start. 204 on success; pass ?dryRun=true to preview (-WhatIf) without changing state.
Backing cmdlet: Stop-MigrationUser. Role: MailboxJobs.ReadWrite (Pro).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
dryRun |
query | bool (switch) |
Stop an in-progress migration user
Section titled “Stop an in-progress migration user”Sub-resource of the migration user at GET /migrationUsers/{key} - bound action that stops an in-progress migration user via Stop-MigrationUser. Halts the data copy; the user can be resumed later with POST /migrationUsers/{key}/start. Returns 204. Pass ?dryRun=true to preview (-WhatIf).
POST /exchange/v1.0/migrationUsers/{key}/stop HTTP/1.1Authorization: Bearer {token}HTTP/1.1 204 No ContentNotes: Route + auth + cmdlet wiring live-verified 2026-05-29 (MailboxJobs.ReadWrite.All accepted; Stop-MigrationUser loads + executes). No active migration batches existed on the tenant to exercise a full 204.
Related: GET /exchange/v1.0/migrationUsers/{key}, POST /exchange/v1.0/migrationUsers/{key}/start
?dryRun=true previews of any write stay on Community.

