Skip to content

Depot mdmapps

Registers the app catalog 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]

listMdmApps lists the catalog across platforms, filtered by platform, source and a search over name, store id and bundle id, with each app’s install count from device reports.

NameInTypeRequiredDescription
pagequeryintegerNoOne-based page number. Defaults to 1.
pageSizequeryintegerNoRows per page, 1 to 200. Defaults to 50.
platformquerystring, one of android, darwin, ios, tvos, windowsNoComma-separated set. An unrecognised value is refused.
qquerystringNoFree-text search term.
sourcequerystring, one of enterprise, managed_play, msi, msix, vpp, windows_storeNoComma-separated set. An unrecognised value is refused.
StatusBodyDescription
200application/json, PagedResultMdmAppViewSuccess.
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 context in request.

200 response body

FieldTypeDescription
itemsrequiredarray of MdmAppView
items[].approvedrequiredboolean
items[].bundleIdstring or null
items[].createdAtrequiredstring (date-time)
items[].iconUrlstring or null
items[].installedCountrequiredinteger
items[].licenseTotalinteger or null
items[].licenseUsedinteger or null
items[].managedConfigSchemarequiredany

Arbitrary JSON.

items[].namerequiredstring
items[].packageSha256string or null
items[].packageUrlstring or null
items[].platformrequiredstring
items[].publicIdrequiredstring
items[].publisherstring or null
items[].rowVersionrequiredinteger

int64.

items[].signerCertificatePemstring or null
items[].softwarePackageRefstring or null
items[].sourcerequiredstring
items[].storeIdrequiredstring
items[].versionstring or null
items[].vppTokenIdstring or null
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/apps?page=0&pageSize=0&platform=android&q=<q>&source=enterprise' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POSTmdm:managetenant facehosteditmspremoteIdempotentNot fully resolved

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

What this page does not know
  • response-status

These are parts of the route the extractor could not read from the source. Everything else on this page came straight from it.

Source: [object Object]

createMdmApp adds a hand-entered app: an Apple in-house (enterprise) app, a Microsoft Store app or an MSI.

Apps and Books apps come from import-vpp and Managed Google Play apps from approve-play.

Required, sent as application/json.

FieldTypeDescription
approvedboolean or null
bundleIdrequiredstring
iconUrlrequiredstring
licenseTotalinteger or null
managedConfigSchemarequiredany

Arbitrary JSON.

namerequiredstring
packageSha256requiredstring
packageUrlrequiredstring
platformrequiredstring
publisherrequiredstring
signerCertificatePemrequiredstring
softwarePackageRefrequiredstring
sourcerequiredstring
storeIdrequiredstring
versionrequiredstring
StatusBodyDescription
200application/json, MdmAppViewSuccess.
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 app in the catalog has that id.
409application/problem+json, ProblemDetailsThe app changed since it was read, or the catalog already has it. Reload and try again.
500application/problem+json, ProblemDetailsNo client context in request.

200 response body

FieldTypeDescription
approvedrequiredboolean
bundleIdstring or null
createdAtrequiredstring (date-time)
iconUrlstring or null
installedCountrequiredinteger
licenseTotalinteger or null
licenseUsedinteger or null
managedConfigSchemarequiredany

Arbitrary JSON.

namerequiredstring
packageSha256string or null
packageUrlstring or null
platformrequiredstring
publicIdrequiredstring
publisherstring or null
rowVersionrequiredinteger

int64.

signerCertificatePemstring or null
softwarePackageRefstring or null
sourcerequiredstring
storeIdrequiredstring
versionstring or null
vppTokenIdstring or null
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/apps' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"approved": false,
"bundleId": "string",
"iconUrl": "string",
"licenseTotal": 0,
"managedConfigSchema": "string",
"name": "string",
"packageSha256": "string",
"packageUrl": "string",
"platform": "string",
"publisher": "string",
"signerCertificatePem": "string",
"softwarePackageRef": "string",
"source": "string",
"storeId": "string",
"version": "string"
}'

GETmdm:readtenant facehosteditmspremoteIdempotentNot fully resolved

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

What this page does not know
  • response-status

These are parts of the route the extractor could not read from the source. Everything else on this page came straight from it.

Source: [object Object]

getMdmApp reads one catalog app.

NameInTypeRequiredDescription
publicIdpathstringYes
StatusBodyDescription
200application/json, MdmAppViewSuccess.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold mdm:read.
404application/problem+json, ProblemDetailsNo app in the catalog has that id.
409application/problem+json, ProblemDetailsThe app changed since it was read, or the catalog already has it. Reload and try again.
500application/problem+json, ProblemDetailsNo client context in request.

200 response body

FieldTypeDescription
approvedrequiredboolean
bundleIdstring or null
createdAtrequiredstring (date-time)
iconUrlstring or null
installedCountrequiredinteger
licenseTotalinteger or null
licenseUsedinteger or null
managedConfigSchemarequiredany

Arbitrary JSON.

namerequiredstring
packageSha256string or null
packageUrlstring or null
platformrequiredstring
publicIdrequiredstring
publisherstring or null
rowVersionrequiredinteger

int64.

signerCertificatePemstring or null
softwarePackageRefstring or null
sourcerequiredstring
storeIdrequiredstring
versionstring or null
vppTokenIdstring or null
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/apps/<publicId>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

PATCHmdm:managetenant facehosteditmspremoteIdempotentNot fully resolved

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

What this page does not know
  • response-status

These are parts of the route the extractor could not read from the source. Everything else on this page came straight from it.

Source: [object Object]

updateMdmApp edits a catalog app under its rowVersion.

Its platform, source and store id never change, and an Apps and Books app’s license counts stay Apple’s.

NameInTypeRequiredDescription
publicIdpathstringYes

Required, sent as application/json.

FieldTypeDescription
approvedboolean or null
bundleIdstring or null
iconUrlstring or null
licenseTotalinteger or null
managedConfigSchemarequiredany

Arbitrary JSON.

namestring or null
packageSha256string or null
packageUrlstring or null
publisherstring or null
rowVersionrequiredinteger

int64.

signerCertificatePemstring or null
softwarePackageRefstring or null
versionstring or null
StatusBodyDescription
200application/json, MdmAppViewSuccess.
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 app in the catalog has that id.
409application/problem+json, ProblemDetailsThe app changed since it was read, or the catalog already has it. Reload and try again.
500application/problem+json, ProblemDetailsNo client context in request.

200 response body

FieldTypeDescription
approvedrequiredboolean
bundleIdstring or null
createdAtrequiredstring (date-time)
iconUrlstring or null
installedCountrequiredinteger
licenseTotalinteger or null
licenseUsedinteger or null
managedConfigSchemarequiredany

Arbitrary JSON.

namerequiredstring
packageSha256string or null
packageUrlstring or null
platformrequiredstring
publicIdrequiredstring
publisherstring or null
rowVersionrequiredinteger

int64.

signerCertificatePemstring or null
softwarePackageRefstring or null
sourcerequiredstring
storeIdrequiredstring
versionstring or null
vppTokenIdstring or null
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/apps/<publicId>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"approved": false,
"bundleId": "string",
"iconUrl": "string",
"licenseTotal": 0,
"managedConfigSchema": "string",
"name": "string",
"packageSha256": "string",
"packageUrl": "string",
"publisher": "string",
"rowVersion": 0,
"signerCertificatePem": "string",
"softwarePackageRef": "string",
"version": "string"
}'

DELETEmdm:managetenant facehosteditmspremoteIdempotent

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

Source: [object Object]

deleteMdmApp removes an app from the catalog.

Profiles that assign it keep the entry until they are edited; translators report it as missing. An Apps and Books app cannot be deleted here, because the next sync brings it back while Apple still holds its licenses.

NameInTypeRequiredDescription
publicIdpathstringYes
StatusBodyDescription
204NoneSuccess, with no body.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold mdm:manage.
404application/problem+json, ProblemDetailsNo app in the catalog has that id.
409application/problem+json, ProblemDetailsThe app changed since it was read, or the catalog already has it. Reload and try again.
500application/problem+json, ProblemDetailsNo client context in request.
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 DELETE 'https://depot.example.com/api/v1/mdm/apps/<publicId>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GETmdm:readtenant facehosteditmspremoteIdempotent

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

Source: [object Object]

listMdmAppLicenses lists the device licenses Apps and Books holds for an app, most recently changed first.

NameInTypeRequiredDescription
publicIdpathstringYes
pagequeryintegerNoOne-based page number. Defaults to 1.
pageSizequeryintegerNoRows per page, 1 to 200. Defaults to 50.
StatusBodyDescription
200application/json, PagedResultMdmVppLicenseViewSuccess.
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.
404application/problem+json, ProblemDetailsNo app in the catalog has that id.
409application/problem+json, ProblemDetailsThe app changed since it was read, or the catalog already has it. Reload and try again.
500application/problem+json, ProblemDetailsNo client context in request.

200 response body

FieldTypeDescription
itemsrequiredarray of MdmVppLicenseView
items[].agentIdrequiredstring
items[].appIdrequiredstring
items[].lastErrorstring or null
items[].serialNumberrequiredstring
items[].staterequiredstring
items[].updatedAtrequiredstring (date-time)
items[].vppEventIdstring or null
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/apps/<publicId>/licenses?page=0&pageSize=0' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POSTmdm:managetenant facehosteditmspremoteIdempotentNot fully resolved

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

What this page does not know
  • response-status

These are parts of the route the extractor could not read from the source. Everything else on this page came straight from it.

Source: [object Object]

approveMdmPlayApp records an app approved in the Managed Google Play page, with its title, developer, icon and managed configuration schema read from Google.

Approving an app already in the catalog refreshes it (200); otherwise it is added (201).

Required, sent as application/json.

FieldTypeDescription
packageNamerequiredstring
StatusBodyDescription
200application/json, MdmAppViewSuccess.
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 app in the catalog has that id.
409application/problem+json, ProblemDetailsConnect Android Enterprise before approving Managed Google Play apps.
500application/problem+json, ProblemDetailsNo client context in request.
503application/problem+json, ProblemDetailsThe public device management address is not configured on this Depot, so Android Enterprise cannot be connected yet.

200 response body

FieldTypeDescription
approvedrequiredboolean
bundleIdstring or null
createdAtrequiredstring (date-time)
iconUrlstring or null
installedCountrequiredinteger
licenseTotalinteger or null
licenseUsedinteger or null
managedConfigSchemarequiredany

Arbitrary JSON.

namerequiredstring
packageSha256string or null
packageUrlstring or null
platformrequiredstring
publicIdrequiredstring
publisherstring or null
rowVersionrequiredinteger

int64.

signerCertificatePemstring or null
softwarePackageRefstring or null
sourcerequiredstring
storeIdrequiredstring
versionstring or null
vppTokenIdstring or null
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/apps/approve-play' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"packageName": "string"
}'

POSTmdm:managetenant facehosteditmspremoteIdempotent

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

Source: [object Object]

importMdmVppApps syncs Apps and Books locations now (one, or every one), writing their apps and license counts into the catalog.

Each location’s outcome, including one another service manages, is on its token.

Required, sent as application/json.

FieldTypeDescription
vppTokenIdstring or null
StatusBodyDescription
200application/json, MdmVppImportResultSuccess.
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 Apps and Books token has that id.
409application/problem+json, ProblemDetailsUpload an Apps and Books content token first.
500application/problem+json, ProblemDetailsNo client context in request.
503application/problem+json, ProblemDetailsApps and Books is not available on this Depot.

200 response body

FieldTypeDescription
failedrequiredinteger
tokensrequiredarray of VppTokenView
tokens[].countryCodestring or null
tokens[].expiresInDaysinteger or null
tokens[].lastSyncAtstring (date-time) or null
tokens[].lastSyncErrorstring or null
tokens[].locationNamestring or null
tokens[].notAfterstring (date-time) or null
tokens[].orgNamestring or null
tokens[].publicIdrequiredstring
tokens[].rowVersionrequiredinteger

int64.

tokens[].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/apps/import-vpp' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"vppTokenId": "string"
}'

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.