Skip to content

Depot mdmapprovals

Registers the approval inbox and decision 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]

listMdmApprovals lists two-person approval requests, newest first.

?state= narrows by state (comma-separated).

NameInTypeRequiredDescription
pagequeryintegerNoOne-based page number. Defaults to 1.
pageSizequeryintegerNoRows per page, 1 to 200. Defaults to 50.
statequerystring, one of approved, canceled, executed, expired, overridden, pending, rejectedNoComma-separated set. An unrecognised value is refused.
StatusBodyDescription
200application/json, PagedResultApprovalViewSuccess.
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 ApprovalView
items[].amountCentsinteger or null

int64.

items[].awaitingrequiredarray of ApprovalAwaitingView
items[].awaiting[].memberIdrequiredstring
items[].awaiting[].namerequiredstring
items[].bodyrequiredstring
items[].canDeciderequiredboolean
items[].canRespondrequiredboolean
items[].consentTextrequiredstring
items[].consentVersionrequiredinteger
items[].currencystring or null
items[].dueAtstring (date-time) or null
items[].idrequiredstring
items[].kindrequiredstring
items[].projectIdstring or null
items[].quorumrequiredstring
items[].raisedAtrequiredstring (date-time)
items[].raisedByrequiredApprovalActorView

ApprovalActorView is who raised a request.

items[].raisedBy.kindrequiredstring
items[].raisedBy.labelstring or null
items[].raisedBy.refrequiredstring
items[].resolvedAtstring (date-time) or null
items[].responsesrequiredarray of ApprovalResponseView
items[].responses[].commentstring or null
items[].responses[].decisionrequiredstring
items[].responses[].idrequiredstring
items[].responses[].memberIdrequiredstring
items[].responses[].memberNamerequiredstring
items[].responses[].respondedAtrequiredstring (date-time)
items[].responses[].signatureMethodrequiredstring
items[].responses[].signerNamerequiredstring
items[].routerequiredApprovalRouteView

ApprovalRouteView is who a request is routed to.

items[].route.kindrequiredstring
items[].route.memberIdsrequiredarray of string
items[].route.roleIdstring or null
items[].sourcerequiredstring
items[].sourceErrorstring or null
items[].sourceLabelstring or null
items[].sourceRefstring or null
items[].statusrequiredstring
items[].titlerequiredstring
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/approvals?page=0&pageSize=0&state=approved' \
-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]

getMdmApproval reads one approval request.

NameInTypeRequiredDescription
publicIdpathstringYesA uuid.
StatusBodyDescription
200application/json, ApprovalViewSuccess.
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 context in request.

200 response body

FieldTypeDescription
amountCentsinteger or null

int64.

awaitingrequiredarray of ApprovalAwaitingView
awaiting[].memberIdrequiredstring
awaiting[].namerequiredstring
bodyrequiredstring
canDeciderequiredboolean
canRespondrequiredboolean
consentTextrequiredstring
consentVersionrequiredinteger
currencystring or null
dueAtstring (date-time) or null
idrequiredstring
kindrequiredstring
projectIdstring or null
quorumrequiredstring
raisedAtrequiredstring (date-time)
raisedByrequiredApprovalActorView

ApprovalActorView is who raised a request.

raisedBy.kindrequiredstring
raisedBy.labelstring or null
raisedBy.refrequiredstring
resolvedAtstring (date-time) or null
responsesrequiredarray of ApprovalResponseView
responses[].commentstring or null
responses[].decisionrequiredstring
responses[].idrequiredstring
responses[].memberIdrequiredstring
responses[].memberNamerequiredstring
responses[].respondedAtrequiredstring (date-time)
responses[].signatureMethodrequiredstring
responses[].signerNamerequiredstring
routerequiredApprovalRouteView

ApprovalRouteView is who a request is routed to.

route.kindrequiredstring
route.memberIdsrequiredarray of string
route.roleIdstring or null
sourcerequiredstring
sourceErrorstring or null
sourceLabelstring or null
sourceRefstring or null
statusrequiredstring
titlerequiredstring
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/approvals/<publicId>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POST /api/v1/mdm/approvals/{publicId}/approve

Section titled “POST /api/v1/mdm/approvals/{publicId}/approve”

POSTmdm:approvetenant facehosteditmspremoteIdempotent

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

Source: [object Object]

approveMdmApproval approves another technician’s request and runs it.

NameInTypeRequiredDescription
publicIdpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
notestring or null
rowVersioninteger or null

int64.

StatusBodyDescription
200application/json, ApprovalViewSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsOnly the technician who made this request can cancel it.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsThis request changed since you loaded it. Reload and try again.
500application/problem+json, ProblemDetailsNo client context in request.

200 response body

FieldTypeDescription
amountCentsinteger or null

int64.

awaitingrequiredarray of ApprovalAwaitingView
awaiting[].memberIdrequiredstring
awaiting[].namerequiredstring
bodyrequiredstring
canDeciderequiredboolean
canRespondrequiredboolean
consentTextrequiredstring
consentVersionrequiredinteger
currencystring or null
dueAtstring (date-time) or null
idrequiredstring
kindrequiredstring
projectIdstring or null
quorumrequiredstring
raisedAtrequiredstring (date-time)
raisedByrequiredApprovalActorView

ApprovalActorView is who raised a request.

raisedBy.kindrequiredstring
raisedBy.labelstring or null
raisedBy.refrequiredstring
resolvedAtstring (date-time) or null
responsesrequiredarray of ApprovalResponseView
responses[].commentstring or null
responses[].decisionrequiredstring
responses[].idrequiredstring
responses[].memberIdrequiredstring
responses[].memberNamerequiredstring
responses[].respondedAtrequiredstring (date-time)
responses[].signatureMethodrequiredstring
responses[].signerNamerequiredstring
routerequiredApprovalRouteView

ApprovalRouteView is who a request is routed to.

route.kindrequiredstring
route.memberIdsrequiredarray of string
route.roleIdstring or null
sourcerequiredstring
sourceErrorstring or null
sourceLabelstring or null
sourceRefstring or null
statusrequiredstring
titlerequiredstring
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/approvals/<publicId>/approve' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"note": "string",
"rowVersion": 0
}'

POST /api/v1/mdm/approvals/{publicId}/cancel

Section titled “POST /api/v1/mdm/approvals/{publicId}/cancel”

POSTmdm:wipetenant facehosteditmspremoteIdempotent

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

Source: [object Object]

cancelMdmApproval withdraws your own pending request.

NameInTypeRequiredDescription
publicIdpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
notestring or null
rowVersioninteger or null

int64.

StatusBodyDescription
200application/json, ApprovalViewSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsOnly the technician who made this request can cancel it.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsThis request changed since you loaded it. Reload and try again.
500application/problem+json, ProblemDetailsNo client context in request.

200 response body

FieldTypeDescription
amountCentsinteger or null

int64.

awaitingrequiredarray of ApprovalAwaitingView
awaiting[].memberIdrequiredstring
awaiting[].namerequiredstring
bodyrequiredstring
canDeciderequiredboolean
canRespondrequiredboolean
consentTextrequiredstring
consentVersionrequiredinteger
currencystring or null
dueAtstring (date-time) or null
idrequiredstring
kindrequiredstring
projectIdstring or null
quorumrequiredstring
raisedAtrequiredstring (date-time)
raisedByrequiredApprovalActorView

ApprovalActorView is who raised a request.

raisedBy.kindrequiredstring
raisedBy.labelstring or null
raisedBy.refrequiredstring
resolvedAtstring (date-time) or null
responsesrequiredarray of ApprovalResponseView
responses[].commentstring or null
responses[].decisionrequiredstring
responses[].idrequiredstring
responses[].memberIdrequiredstring
responses[].memberNamerequiredstring
responses[].respondedAtrequiredstring (date-time)
responses[].signatureMethodrequiredstring
responses[].signerNamerequiredstring
routerequiredApprovalRouteView

ApprovalRouteView is who a request is routed to.

route.kindrequiredstring
route.memberIdsrequiredarray of string
route.roleIdstring or null
sourcerequiredstring
sourceErrorstring or null
sourceLabelstring or null
sourceRefstring or null
statusrequiredstring
titlerequiredstring
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/approvals/<publicId>/cancel' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"note": "string",
"rowVersion": 0
}'

POST /api/v1/mdm/approvals/{publicId}/override

Section titled “POST /api/v1/mdm/approvals/{publicId}/override”

POSTmdm:approvetenant facehosteditmspremoteIdempotent

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

Source: [object Object]

overrideMdmApproval lets an owner run a pending request without a second technician.

It needs acknowledgeWarning true and a fresh second factor (428 step-up-required otherwise; prove it at POST /api/v1/auth/step-up). The other owners are notified.

NameInTypeRequiredDescription
publicIdpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
acknowledgeWarningrequiredboolean
notestring or null
rowVersioninteger or null

int64.

StatusBodyDescription
200application/json, ApprovalViewSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsOnly the technician who made this request can cancel it.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsThis request changed since you loaded it. Reload and try again.
500application/problem+json, ProblemDetailsNo client context in request.

200 response body

FieldTypeDescription
amountCentsinteger or null

int64.

awaitingrequiredarray of ApprovalAwaitingView
awaiting[].memberIdrequiredstring
awaiting[].namerequiredstring
bodyrequiredstring
canDeciderequiredboolean
canRespondrequiredboolean
consentTextrequiredstring
consentVersionrequiredinteger
currencystring or null
dueAtstring (date-time) or null
idrequiredstring
kindrequiredstring
projectIdstring or null
quorumrequiredstring
raisedAtrequiredstring (date-time)
raisedByrequiredApprovalActorView

ApprovalActorView is who raised a request.

raisedBy.kindrequiredstring
raisedBy.labelstring or null
raisedBy.refrequiredstring
resolvedAtstring (date-time) or null
responsesrequiredarray of ApprovalResponseView
responses[].commentstring or null
responses[].decisionrequiredstring
responses[].idrequiredstring
responses[].memberIdrequiredstring
responses[].memberNamerequiredstring
responses[].respondedAtrequiredstring (date-time)
responses[].signatureMethodrequiredstring
responses[].signerNamerequiredstring
routerequiredApprovalRouteView

ApprovalRouteView is who a request is routed to.

route.kindrequiredstring
route.memberIdsrequiredarray of string
route.roleIdstring or null
sourcerequiredstring
sourceErrorstring or null
sourceLabelstring or null
sourceRefstring or null
statusrequiredstring
titlerequiredstring
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/approvals/<publicId>/override' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"acknowledgeWarning": false,
"note": "string",
"rowVersion": 0
}'

POST /api/v1/mdm/approvals/{publicId}/reject

Section titled “POST /api/v1/mdm/approvals/{publicId}/reject”

POSTmdm:approvetenant facehosteditmspremoteIdempotent

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

Source: [object Object]

rejectMdmApproval rejects another technician’s request.

NameInTypeRequiredDescription
publicIdpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
notestring or null
rowVersioninteger or null

int64.

StatusBodyDescription
200application/json, ApprovalViewSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsOnly the technician who made this request can cancel it.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsThis request changed since you loaded it. Reload and try again.
500application/problem+json, ProblemDetailsNo client context in request.

200 response body

FieldTypeDescription
amountCentsinteger or null

int64.

awaitingrequiredarray of ApprovalAwaitingView
awaiting[].memberIdrequiredstring
awaiting[].namerequiredstring
bodyrequiredstring
canDeciderequiredboolean
canRespondrequiredboolean
consentTextrequiredstring
consentVersionrequiredinteger
currencystring or null
dueAtstring (date-time) or null
idrequiredstring
kindrequiredstring
projectIdstring or null
quorumrequiredstring
raisedAtrequiredstring (date-time)
raisedByrequiredApprovalActorView

ApprovalActorView is who raised a request.

raisedBy.kindrequiredstring
raisedBy.labelstring or null
raisedBy.refrequiredstring
resolvedAtstring (date-time) or null
responsesrequiredarray of ApprovalResponseView
responses[].commentstring or null
responses[].decisionrequiredstring
responses[].idrequiredstring
responses[].memberIdrequiredstring
responses[].memberNamerequiredstring
responses[].respondedAtrequiredstring (date-time)
responses[].signatureMethodrequiredstring
responses[].signerNamerequiredstring
routerequiredApprovalRouteView

ApprovalRouteView is who a request is routed to.

route.kindrequiredstring
route.memberIdsrequiredarray of string
route.roleIdstring or null
sourcerequiredstring
sourceErrorstring or null
sourceLabelstring or null
sourceRefstring or null
statusrequiredstring
titlerequiredstring
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/approvals/<publicId>/reject' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"note": "string",
"rowVersion": 0
}'

GETmdm:readshared facehosteditmspremoteIdempotent

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

Source: [object Object]

getMdmPracticeSettings reads the practice’s two-person rule for destructive MDM actions.

StatusBodyDescription
200application/json, MdmPracticeSettingsViewSuccess.
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, ProblemDetailsThe request failed.
503application/problem+json, ProblemDetailsPractice settings are not available on this Depot.

200 response body

FieldTypeDescription
apnsStrategyrequiredstring
approvalTtlMinutesrequiredinteger
bulkLockThresholdrequiredinteger
ownerOverrideAllowedrequiredboolean
rowVersionrequiredinteger

int64.

twoPersonActionsrequiredarray of string
twoPersonRulerequiredboolean
unapprovedAppActionrequiredstring
updatedAtrequiredstring (date-time)
updatedByUserIdstring 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/practice/settings' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

PUTmdm:manageshared facehosteditmspremoteIdempotent

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

Source: [object Object]

putMdmPracticeSettings replaces the practice’s two-person rule.

409 when rowVersion is stale.

Required, sent as application/json.

FieldTypeDescription
apnsStrategystring or null
approvalTtlMinutesinteger or null
bulkLockThresholdinteger or null
ownerOverrideAllowedboolean or null
rowVersioninteger or null

int64.

twoPersonActionsrequiredarray of string
twoPersonRuleboolean or null
unapprovedAppActionstring or null
StatusBodyDescription
200application/json, MdmPracticeSettingsViewSuccess.
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, ProblemDetailsPractice settings not found.
409application/problem+json, ProblemDetailsThe practice settings changed since you loaded them. Reload and try again.
500application/problem+json, ProblemDetailsCould not save the practice settings.
503application/problem+json, ProblemDetailsPractice settings are not available on this Depot.

200 response body

FieldTypeDescription
apnsStrategyrequiredstring
approvalTtlMinutesrequiredinteger
bulkLockThresholdrequiredinteger
ownerOverrideAllowedrequiredboolean
rowVersionrequiredinteger

int64.

twoPersonActionsrequiredarray of string
twoPersonRulerequiredboolean
unapprovedAppActionrequiredstring
updatedAtrequiredstring (date-time)
updatedByUserIdstring 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 PUT 'https://depot.example.com/api/v1/mdm/practice/settings' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"apnsStrategy": "string",
"approvalTtlMinutes": 0,
"bulkLockThreshold": 0,
"ownerOverrideAllowed": false,
"rowVersion": 0,
"twoPersonActions": [
"string"
],
"twoPersonRule": false,
"unapprovedAppAction": "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.