Skip to content

Depot mdmmigrations

Registers the migration routes.

This page is generated from the Depot route table. Every operation carries the permission it needs and the anchor an agent can link to.

GETmdm:readtenant facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

listMdmMigrations lists migration batches, newest first, with each one’s device counts by state.

NameInTypeRequiredDescription
pagequeryintegerNoOne-based page number. Defaults to 1.
pageSizequeryintegerNoRows per page, 1 to 200. Defaults to 50.
StatusBodyDescription
200application/json, PagedResultMdmMigrationViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold mdm:read.
500application/problem+json, ProblemDetailsNo client store in request context.

200 response body

FieldTypeDescription
itemsrequiredarray of MdmMigrationView
items[].abmTokenIdstring or null
items[].adeProfileIdstring or null
items[].completedAtstring (date-time) or null
items[].createdByUserIdstring or null
items[].deadlineAtstring (date-time) or null
items[].devicesarray of MdmMigrationDeviceView
items[].devices[].agentIdstring or null
items[].devices[].reasonCodestring or null
items[].devices[].serialNumberrequiredstring
items[].devices[].staterequiredstring
items[].devices[].updatedAtrequiredstring (date-time)
items[].methodrequiredstring
items[].namerequiredstring
items[].progressrequiredobject
items[].publicIdrequiredstring
items[].rowVersionrequiredinteger

int64.

items[].sourceMdmrequiredstring
items[].startedAtstring (date-time) or null
items[].staterequiredstring
pagerequiredinteger
pageSizerequiredinteger
totalrequiredinteger
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/mdm/migrations?page=0&pageSize=0' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POSTmdm:managetenant facehosteditmspremote

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

createMdmMigration creates a draft migration batch from a list of serial numbers.

ABM-coordinated batches name the Apple Business Manager token.

Required, sent as application/json.

FieldTypeDescription
abmTokenIdrequiredstring
adeProfileIdrequiredstring
deadlineAtstring (date-time) or null
methodrequiredstring
namerequiredstring
serialsrequiredarray of string
sourceMdmrequiredstring
StatusBodyDescription
201application/json, MdmMigrationViewCreated.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold mdm:manage.
404application/problem+json, ProblemDetailsNo resource matches.
409application/problem+json, ProblemDetailsThe migration could not be saved.
500application/problem+json, ProblemDetailsNo client store in request context.

201 response body

FieldTypeDescription
abmTokenIdstring or null
adeProfileIdstring or null
completedAtstring (date-time) or null
createdByUserIdstring or null
deadlineAtstring (date-time) or null
devicesarray of MdmMigrationDeviceView
devices[].agentIdstring or null
devices[].reasonCodestring or null
devices[].serialNumberrequiredstring
devices[].staterequiredstring
devices[].updatedAtrequiredstring (date-time)
methodrequiredstring
namerequiredstring
progressrequiredobject
publicIdrequiredstring
rowVersionrequiredinteger

int64.

sourceMdmrequiredstring
startedAtstring (date-time) or null
staterequiredstring
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/mdm/migrations' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"abmTokenId": "string",
"adeProfileId": "string",
"deadlineAt": "2026-01-01T00:00:00Z",
"method": "string",
"name": "string",
"serials": [
"string"
],
"sourceMdm": "string"
}'

GETmdm:readtenant facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

getMdmMigration returns one migration with every device’s progress.

NameInTypeRequiredDescription
publicIdpathstringYesA uuid.
StatusBodyDescription
200application/json, MdmMigrationViewSuccess.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold mdm:read.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsNo client store in request context.

200 response body

FieldTypeDescription
abmTokenIdstring or null
adeProfileIdstring or null
completedAtstring (date-time) or null
createdByUserIdstring or null
deadlineAtstring (date-time) or null
devicesarray of MdmMigrationDeviceView
devices[].agentIdstring or null
devices[].reasonCodestring or null
devices[].serialNumberrequiredstring
devices[].staterequiredstring
devices[].updatedAtrequiredstring (date-time)
methodrequiredstring
namerequiredstring
progressrequiredobject
publicIdrequiredstring
rowVersionrequiredinteger

int64.

sourceMdmrequiredstring
startedAtstring (date-time) or null
staterequiredstring
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/mdm/migrations/<publicId>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

PATCHmdm:managetenant facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

updateMdmMigration edits a draft, adds serials to it, skips or retries devices, or cancels the migration (state “canceled”).

NameInTypeRequiredDescription
publicIdpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
abmTokenIdstring or null
addSerialsrequiredarray of string
adeProfileIdstring or null
deadlineAtstring (date-time) or null
namestring or null
retrySerialsrequiredarray of string
rowVersionrequiredinteger

int64.

skipSerialsrequiredarray of string
statestring or null
StatusBodyDescription
200application/json, MdmMigrationViewSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold mdm:manage.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsThe migration changed since it was read. Reload and try again.
500application/problem+json, ProblemDetailsNo client store in request context.

200 response body

FieldTypeDescription
abmTokenIdstring or null
adeProfileIdstring or null
completedAtstring (date-time) or null
createdByUserIdstring or null
deadlineAtstring (date-time) or null
devicesarray of MdmMigrationDeviceView
devices[].agentIdstring or null
devices[].reasonCodestring or null
devices[].serialNumberrequiredstring
devices[].staterequiredstring
devices[].updatedAtrequiredstring (date-time)
methodrequiredstring
namerequiredstring
progressrequiredobject
publicIdrequiredstring
rowVersionrequiredinteger

int64.

sourceMdmrequiredstring
startedAtstring (date-time) or null
staterequiredstring
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X PATCH 'https://depot.example.com/api/v1/mdm/migrations/<publicId>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"abmTokenId": "string",
"addSerials": [
"string"
],
"adeProfileId": "string",
"deadlineAt": "2026-01-01T00:00:00Z",
"name": "string",
"retrySerials": [
"string"
],
"rowVersion": 0,
"skipSerials": [
"string"
],
"state": "string"
}'

POST /api/v1/mdm/migrations/{publicId}/start

Section titled “POST /api/v1/mdm/migrations/{publicId}/start”

POSTmdm:managetenant facehosteditmspremoteIdempotent

From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.

Source: [object Object]

startMdmMigration starts a draft migration.

An ABM-coordinated batch is scheduled until Apple Business Manager accepts the reassignment; a re-enrollment batch is in progress at once.

NameInTypeRequiredDescription
publicIdpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
rowVersionrequiredinteger

int64.

StatusBodyDescription
200application/json, MdmMigrationViewSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold mdm:manage.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsThe migration changed since it was read. Reload and try again.
500application/problem+json, ProblemDetailsNo client store in request context.

200 response body

FieldTypeDescription
abmTokenIdstring or null
adeProfileIdstring or null
completedAtstring (date-time) or null
createdByUserIdstring or null
deadlineAtstring (date-time) or null
devicesarray of MdmMigrationDeviceView
devices[].agentIdstring or null
devices[].reasonCodestring or null
devices[].serialNumberrequiredstring
devices[].staterequiredstring
devices[].updatedAtrequiredstring (date-time)
methodrequiredstring
namerequiredstring
progressrequiredobject
publicIdrequiredstring
rowVersionrequiredinteger

int64.

sourceMdmrequiredstring
startedAtstring (date-time) or null
staterequiredstring
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X POST 'https://depot.example.com/api/v1/mdm/migrations/<publicId>/start' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"rowVersion": 0
}'

Content is licensed CC BY 4.0. Code samples are MIT. Outpost and the Outpost mark are trademarks of Outpost Business Solutions, PBC and are not covered by either license.