Skip to content

Depot statuspagesettings

Registers the status-page settings and the subscriber roster on the TENANT 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.

GETstatuspage:managetenant facehosteditmspremoteIdempotent

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

Source: [object Object]

getStatusPageSettings answers the settings screen.

A TENANT WITH NO ROW ANSWERS 200 AND AN EMPTY, DISABLED PAGE, not 404. There being no row is the ordinary state of a client that has never opened this screen, and a 404 would make the console render an error over what is really a blank form.

StatusBodyDescription
200application/json, StatusPageViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold statuspage:manage.
500application/problem+json, ProblemDetailsNo client store in request context.
503application/problem+json, ProblemDetailsThe status page is not available on this Depot.

200 response body

FieldTypeDescription
createdAtstring (date-time)
enabledrequiredboolean
pageTitlerequiredstring
slugrequiredstring
updatedAtstring (date-time)
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/status-page' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

PUTstatuspage:managetenant facehosteditmspremoteIdempotent

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

Source: [object Object]

putStatusPageSettings writes the settings.

The slug is normalised before it is validated, because the unique index is over lower(“Slug”) and a value that only differs in case is the same page to the database. incident.NormalizeSlug is the one place that transformation lives, so the anonymous resolver and this writer cannot disagree about what a slug is.

Required, sent as application/json.

FieldTypeDescription
enabledboolean or null
generaterequiredboolean
pageTitlestring or null
slugstring or null
StatusBodyDescription
200application/json, StatusPageViewSuccess.
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 statuspage:manage.
404application/problem+json, ProblemDetailsThis client no longer exists.
409application/problem+json, ProblemDetailsThat status page address is already taken.
429application/problem+json, ProblemDetailsToo many status page addresses have been tried. Please wait a moment and try again.
500application/problem+json, ProblemDetailsNo client store in request context.
503application/problem+json, ProblemDetailsThe status page is not available on this Depot.

200 response body

FieldTypeDescription
createdAtstring (date-time)
enabledrequiredboolean
pageTitlerequiredstring
slugrequiredstring
updatedAtstring (date-time)
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/status-page' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"enabled": false,
"generate": false,
"pageTitle": "string",
"slug": "string"
}'

GETincident:readtenant facehosteditmspremoteIdempotent

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

Source: [object Object]

listStatusSubscribers pages the roster, searched and sorted.

The console reached NONE of this before: the endpoint has taken state and channel since it was written and the screen sent neither, so an operator looking for one address in a roster of thousands had the pager and nothing else. The search term is the point of this handler now.

NameInTypeRequiredDescription
channelquerystringNo
dirquerystring, one of asc, descNoSort direction.
pagequeryintegerNoOne-based page number. Defaults to 1.
pageSizequeryintegerNoRows per page, 1 to 200. Defaults to 50.
qquerystringNoFree-text search term.
sortquerystring, one of channel, created, stateNoSort key.
StatusBodyDescription
200application/json, PagedResultStatusSubscriberViewSuccess.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold incident:read.
500application/problem+json, ProblemDetailsNo client store in request context.

200 response body

FieldTypeDescription
itemsrequiredarray of StatusSubscriberView
items[].channelrequiredstring
items[].confirmedAtstring (date-time) or null
items[].createdAtrequiredstring (date-time)
items[].emailstring
items[].publicIdrequiredstring
items[].staterequiredstring, one of confirmed, pending, unsubscribed
items[].unsubscribedAtstring (date-time) 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/status-subscribers?channel=<channel>&dir=asc&page=0&pageSize=0&q=<q>&sort=channel' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

DELETE /api/v1/status-subscribers/{subscriberId}

Section titled “DELETE /api/v1/status-subscribers/{subscriberId}”

DELETEstatuspage:managetenant facehosteditmspremoteIdempotent

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

Source: [object Object]

deleteStatusSubscriber removes a subscription outright.

A HARD DELETE ON PURPOSE, and the only one in this subsystem that is not configuration. Unsubscribing is the ordinary path and keeps the row, so the only reason to reach this route is that somebody has asked to be forgotten, and a tombstone would not honour that. The delivery rows recording what was already sent survive it by design: they carry no address.

NameInTypeRequiredDescription
subscriberIdpathstringYesA uuid.
StatusBodyDescription
204NoneSuccess, with no body.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold statuspage:manage.
404application/problem+json, ProblemDetailsNo resource matches that id.
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 DELETE 'https://depot.example.com/api/v1/status-subscribers/<subscriberId>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

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.