Skip to content

Depot patches

Registers the patch routes on mux.

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

GETpatch:readtenant facehosteditmspremoteIdempotent

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

Source: [object Object]

List endpoint patches

NameInTypeRequiredDescription
agentIDpathstringYesA uuid.
agentIdquerystringNo
dirquerystring, one of asc, descNoSort direction.
featureOnlyquerystringNo
kbIdquerystringNo
pagequeryintegerNoOne-based page number. Defaults to 1.
pageSizequeryintegerNoRows per page, 1 to 200. Defaults to 50.
qquerystringNoFree-text search term.
severityquerystringNo
sortquerystring, one of firstSeen, lastSeen, severity, state, titleNoSort key.
statequerystringNo
StatusBodyDescription
200application/json, PagedResultEndpointPatchViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold patch:read.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsNo client store in request context.

200 response body

FieldTypeDescription
itemsrequiredarray of EndpointPatchView
items[].agentIdrequiredstring
items[].approvedAtstring (date-time) or null
items[].approvedBystring
items[].approvedByRulerequiredboolean
items[].attemptCountrequiredinteger
items[].availableVersionstring
items[].categoriesrequiredarray of string
items[].downloadBytesrequiredinteger

int64.

items[].errorMessagestring
items[].firstSeenrequiredstring (date-time)
items[].heldboolean
items[].hostnamerequiredstring
items[].hresultinteger or null
items[].installedAtstring (date-time) or null
items[].installedVersionstring
items[].isFeatureUpdaterequiredboolean
items[].isOptionalrequiredboolean
items[].kbIdsrequiredarray of string
items[].lastSeenrequiredstring (date-time)
items[].packageManagerstring
items[].packageNamestring
items[].publicIdrequiredstring
items[].rebootRequiredboolean or null
items[].severityrequiredstring
items[].staterequiredstring
items[].titlerequiredstring
items[].updateIdrequiredstring
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/endpoints/<agentID>/patches?agentId=<agentId>&dir=asc&featureOnly=<featureOnly>&kbId=<kbId>&page=0&pageSize=0' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POST /api/v1/endpoints/{agentID}/patches/apply

Section titled “POST /api/v1/endpoints/{agentID}/patches/apply”

POSTpatch:approvetenant facehosteditmspremote

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

Source: [object Object]

dispatchPatchCommand is the scan-now and apply-now buttons.

scanOnly IS NOT AN OVERRIDE OF POLICY. It is the per-command form of the same distinction the two policy keys make, and it is bounded by them: the endpoint will not install on a machine whose patch.install_enabled is false, and will not scan one whose patch.scan_enabled is false, whichever button was pressed. A technician’s button is a request, not an escalation.

NameInTypeRequiredDescription
agentIDpathstringYesA uuid.
StatusBodyDescription
202application/json, CommandAcceptedAccepted.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold patch:approve.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsNo client context in request.
502application/problem+json, ProblemDetailsCould not dispatch command to agent.
503application/problem+json, ProblemDetailsThis Depot has no agent connection service, so nothing can be dispatched.

202 response body

FieldTypeDescription
commandIdrequiredstring
deliveredrequiredboolean
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/endpoints/<agentID>/patches/apply' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GET /api/v1/endpoints/{agentID}/patches/history

Section titled “GET /api/v1/endpoints/{agentID}/patches/history”

GETpatch:readtenant facehosteditmspremoteIdempotent

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

Source: [object Object]

List endpoint patch history

NameInTypeRequiredDescription
agentIDpathstringYesA uuid.
pagequeryintegerNoOne-based page number. Defaults to 1.
pageSizequeryintegerNoRows per page, 1 to 200. Defaults to 50.
StatusBodyDescription
200application/json, PagedResultEndpointPatchEventViewSuccess.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold patch:read.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsNo client store in request context.

200 response body

FieldTypeDescription
itemsrequiredarray of EndpointPatchEventView
items[].actorIdstring
items[].detailstring
items[].kindrequiredstring
items[].occurredAtrequiredstring (date-time)
items[].runIdstring
items[].statestring
items[].updateIdstring
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/endpoints/<agentID>/patches/history?page=0&pageSize=0' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POST /api/v1/endpoints/{agentID}/patches/scan

Section titled “POST /api/v1/endpoints/{agentID}/patches/scan”

POSTpatch:readtenant facehosteditmspremote

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

Source: [object Object]

dispatchPatchCommand is the scan-now and apply-now buttons.

scanOnly IS NOT AN OVERRIDE OF POLICY. It is the per-command form of the same distinction the two policy keys make, and it is bounded by them: the endpoint will not install on a machine whose patch.install_enabled is false, and will not scan one whose patch.scan_enabled is false, whichever button was pressed. A technician’s button is a request, not an escalation.

NameInTypeRequiredDescription
agentIDpathstringYesA uuid.
StatusBodyDescription
202application/json, CommandAcceptedAccepted.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold patch:read.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsNo client context in request.
502application/problem+json, ProblemDetailsCould not dispatch command to agent.
503application/problem+json, ProblemDetailsThis Depot has no agent connection service, so nothing can be dispatched.

202 response body

FieldTypeDescription
commandIdrequiredstring
deliveredrequiredboolean
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/endpoints/<agentID>/patches/scan' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GETpatch:readtenant facehosteditmspremoteIdempotent

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

Source: [object Object]

List patches

NameInTypeRequiredDescription
agentIdquerystringNo
dirquerystring, one of asc, descNoSort direction.
featureOnlyquerystringNo
kbIdquerystringNo
pagequeryintegerNoOne-based page number. Defaults to 1.
pageSizequeryintegerNoRows per page, 1 to 200. Defaults to 50.
qquerystringNoFree-text search term.
severityquerystringNo
sortquerystring, one of firstSeen, lastSeen, severity, state, titleNoSort key.
statequerystringNo
StatusBodyDescription
200application/json, PagedResultEndpointPatchViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold patch:read.
500application/problem+json, ProblemDetailsNo client store in request context.

200 response body

FieldTypeDescription
itemsrequiredarray of EndpointPatchView
items[].agentIdrequiredstring
items[].approvedAtstring (date-time) or null
items[].approvedBystring
items[].approvedByRulerequiredboolean
items[].attemptCountrequiredinteger
items[].availableVersionstring
items[].categoriesrequiredarray of string
items[].downloadBytesrequiredinteger

int64.

items[].errorMessagestring
items[].firstSeenrequiredstring (date-time)
items[].heldboolean
items[].hostnamerequiredstring
items[].hresultinteger or null
items[].installedAtstring (date-time) or null
items[].installedVersionstring
items[].isFeatureUpdaterequiredboolean
items[].isOptionalrequiredboolean
items[].kbIdsrequiredarray of string
items[].lastSeenrequiredstring (date-time)
items[].packageManagerstring
items[].packageNamestring
items[].publicIdrequiredstring
items[].rebootRequiredboolean or null
items[].severityrequiredstring
items[].staterequiredstring
items[].titlerequiredstring
items[].updateIdrequiredstring
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/patches?agentId=<agentId>&dir=asc&featureOnly=<featureOnly>&kbId=<kbId>&page=0&pageSize=0' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POSTpatch:approvetenant facehosteditmspremote

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

Source: [object Object]

decidePatches is both write routes: approve and decline take the same body and differ only in the state they write and the word in the response.

EVERY MOVED ROW GETS A HISTORY EVENT. The row itself records the decision and the decider, and it is overwritten by the next one; “who approved this KB in August and what did they say” is a question asked after the fact, and only the append-only history can answer it.

Required, sent as application/json.

FieldTypeDescription
agentIdsrequiredarray of string
kbIdsrequiredarray of string
noterequiredstring
updateIdsrequiredarray of string
StatusBodyDescription
200application/json, objectSuccess.
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 patch:approve.
500application/problem+json, ProblemDetailsNo client store in request context.
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/patches/approve' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"agentIds": [
"string"
],
"kbIds": [
"string"
],
"note": "string",
"updateIds": [
"string"
]
}'

GETpatch:readtenant facehosteditmspremoteIdempotent

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

Source: [object Object]

Get patch compliance

StatusBodyDescription
200application/json, PatchComplianceViewSuccess.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold patch:read.
500application/problem+json, ProblemDetailsNo client store in request context.

200 response body

FieldTypeDescription
endpointsCompliantrequiredinteger
endpointsNeverScannedrequiredinteger
endpointsPendingRebootrequiredinteger
endpointsTotalrequiredinteger
generatedAtrequiredstring (date-time)
missingCriticalrequiredinteger
missingImportantrequiredinteger
missingOtherrequiredinteger
oldestMissingAtstring (date-time) 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/patches/compliance' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POSTpatch:approvetenant facehosteditmspremote

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

Source: [object Object]

decidePatches is both write routes: approve and decline take the same body and differ only in the state they write and the word in the response.

EVERY MOVED ROW GETS A HISTORY EVENT. The row itself records the decision and the decider, and it is overwritten by the next one; “who approved this KB in August and what did they say” is a question asked after the fact, and only the append-only history can answer it.

Required, sent as application/json.

FieldTypeDescription
agentIdsrequiredarray of string
kbIdsrequiredarray of string
noterequiredstring
updateIdsrequiredarray of string
StatusBodyDescription
200application/json, objectSuccess.
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 patch:approve.
500application/problem+json, ProblemDetailsNo client store in request context.
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/patches/decline' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"agentIds": [
"string"
],
"kbIds": [
"string"
],
"note": "string",
"updateIds": [
"string"
]
}'

GETpatch:readtenant facehosteditmspremoteIdempotent

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

Source: [object Object]

List patch holds

StatusBodyDescription
200application/json, objectSuccess.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold patch:read.
500application/problem+json, ProblemDetailsNo client store in request context.
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/patches/holds' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POSTpatch:approvetenant facehosteditmspremote

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

Source: [object Object]

Hold patch packages

Required, sent as application/json.

FieldTypeDescription
noterequiredstring
updateIdsrequiredarray of string
StatusBodyDescription
200application/json, objectSuccess.
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 patch:approve.
500application/problem+json, ProblemDetailsNo client store in request context.
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/patches/holds' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"note": "string",
"updateIds": [
"string"
]
}'

POSTpatch:approvetenant facehosteditmspremote

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

Source: [object Object]

Release patch holds

Required, sent as application/json.

FieldTypeDescription
noterequiredstring
updateIdsrequiredarray of string
StatusBodyDescription
200application/json, objectSuccess.
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 patch:approve.
500application/problem+json, ProblemDetailsNo client store in request context.
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/patches/holds/release' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"note": "string",
"updateIds": [
"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.