Skip to content

Depot handler

Registers the whole route set at base.

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

GETNo permission neededpublic facehosteditmspremoteIdempotentNot fully resolved

What this page does not know
  • response

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]

Serve page

StatusBodyDescription
200NoneSuccess. The body shape was not resolved; see x-outpost-unresolved.
404text/plain, stringThe request was refused.
Terminal window
# This operation is public. It takes no credentials.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/status'

GETNo permission neededpublic facehosteditmspremoteIdempotentNot fully resolved

What this page does not know
  • response

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]

Serve summary

StatusBodyDescription
200NoneSuccess. The body shape was not resolved; see x-outpost-unresolved.
404text/plain, stringThe request was refused.
Terminal window
# This operation is public. It takes no credentials.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/status.json'

GETNo permission neededpublic facehosteditmspremoteIdempotentNot fully resolved

What this page does not know
  • response

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]

Serve app JS

StatusBodyDescription
200NoneSuccess. The body shape was not resolved; see x-outpost-unresolved.
Terminal window
# This operation is public. It takes no credentials.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/status/app.js'

GETNo permission neededpublic facehosteditmspremoteIdempotentToken in the pathNot fully resolved

What this page does not know
  • response

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]

serveConfirm completes a double opt-in.

SINGLE USE IS THE STORE’S JOB, in the UPDATE’s own predicate: it matches on the hash and NULLs it in the same write, so a replayed link matches nothing. A read here followed by a write would be a race two clicks apart, and worse, would let a spent link be told apart from an unknown one by timing.

NameInTypeRequiredDescription
tokenpathstringYes
StatusBodyDescription
200NoneSuccess. The body shape was not resolved; see x-outpost-unresolved.
404text/plain, stringThe request was refused.
Terminal window
# This operation is public. It takes no credentials.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/status/confirm/<token>'

GETNo permission neededpublic facehosteditmspremoteIdempotentNot fully resolved

What this page does not know
  • response

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]

Serve feed

StatusBodyDescription
200NoneSuccess. The body shape was not resolved; see x-outpost-unresolved.
404text/plain, stringThe request was refused.
Terminal window
# This operation is public. It takes no credentials.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/status/feed.xml'

GETNo permission neededpublic facehosteditmspremoteIdempotentdownloadNot fully resolved

What this page does not know
  • response

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]

serveFile streams one published incident file.

NameInTypeRequiredDescription
fileIdpathstringYes
StatusBodyDescription
200application/octet-stream, string (binary)Success. The body shape was not resolved; see x-outpost-unresolved.
404text/plain, stringThe request was refused.
Terminal window
# This operation is public. It takes no credentials.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/status/files/<fileId>'

GETNo permission neededpublic facehosteditmspremoteIdempotentdownloadNot fully resolved

What this page does not know
  • response

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]

serveLogo streams the tenant’s own logo.

“Cache-Control: public” is the same reasoning branding.go’s download half states: the image is deliberately shown to strangers, and the only thing that varies it is which page it is on, which is part of every cache key there is. The stored content type is echoed because it was checked against a closed allowlist at upload, and it is served inline because being rendered in an &lt;img> is the file’s entire purpose - both safe here for exactly the reason they are unsafe for an incident file, which was uploaded rather than chosen from three raster formats.

StatusBodyDescription
200application/octet-stream, string (binary)Success. The body shape was not resolved; see x-outpost-unresolved.
404text/plain, stringThe request was refused.
Terminal window
# This operation is public. It takes no credentials.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/status/logo'

GETNo permission neededpublic facehosteditmspremoteIdempotentToken in the pathNot fully resolved

What this page does not know
  • response

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]

servePreferencesForm shows the checkboxes.

NameInTypeRequiredDescription
tokenpathstringYes
StatusBodyDescription
200NoneSuccess. The body shape was not resolved; see x-outpost-unresolved.
404text/plain, stringThe request was refused.
Terminal window
# This operation is public. It takes no credentials.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/status/preferences/<token>'

POSTNo permission neededpublic facehosteditmspremoteToken in the pathNot fully resolved

What this page does not know
  • response

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]

servePreferences replaces the whole set.

REPLACE AND NOT MERGE. The form posts every box that is ticked, so an absent id means “unticked” and a merge would make it impossible to ever remove one. An empty set clears the preferences back to the schema’s default, which is subscribed to everything - not subscribed to nothing, which is what an unsubscribe is for and is a different button.

NameInTypeRequiredDescription
tokenpathstringYes

Required, sent as application/json.

FieldTypeDescription
channelrequiredstring
componentIdsrequiredarray of string
emailrequiredstring
slackWebhookUrlrequiredstring
StatusBodyDescription
200NoneSuccess. The body shape was not resolved; see x-outpost-unresolved.
400application/problem+json, ProblemDetailsThe request body is not acceptable.
404text/plain, stringThe request was refused.
Terminal window
# This operation is public. It takes no credentials.
curl -X POST 'https://depot.example.com/status/preferences/<token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--data '{
"channel": "string",
"componentIds": [
"string"
],
"email": "string",
"slackWebhookUrl": "string"
}'

GETNo permission neededpublic facehosteditmspremoteIdempotentNot fully resolved

What this page does not know
  • response

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]

Serve style CSS

StatusBodyDescription
200NoneSuccess. The body shape was not resolved; see x-outpost-unresolved.
Terminal window
# This operation is public. It takes no credentials.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/status/style.css'

POSTNo permission neededpublic facehosteditmspremote

Source: [object Object]

Serve subscribe

Required, sent as application/json.

FieldTypeDescription
channelrequiredstring
componentIdsrequiredarray of string
emailrequiredstring
slackWebhookUrlrequiredstring
StatusBodyDescription
202NoneAccepted.
400application/problem+json, ProblemDetailsThe request body is not acceptable.
Terminal window
# This operation is public. It takes no credentials.
curl -X POST 'https://depot.example.com/status/subscribe' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
--data '{
"channel": "string",
"componentIds": [
"string"
],
"email": "string",
"slackWebhookUrl": "string"
}'

GETNo permission neededpublic facehosteditmspremoteIdempotentToken in the pathNot fully resolved

What this page does not know
  • response

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]

serveUnsubscribeForm shows the button.

A GET NEVER UNSUBSCRIBES ANYBODY; see decision 5 in handler.go’s header.

NameInTypeRequiredDescription
tokenpathstringYes
StatusBodyDescription
200NoneSuccess. The body shape was not resolved; see x-outpost-unresolved.
404text/plain, stringThe request was refused.
Terminal window
# This operation is public. It takes no credentials.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/status/unsubscribe/<token>'

POSTNo permission neededpublic facehosteditmspremoteToken in the pathNot fully resolved

What this page does not know
  • response

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]

serveUnsubscribe performs it.

IDEMPOTENT AND THE TOKEN IS NEVER CONSUMED. Every unsubscribe link ever mailed stays valid, because a link that stopped working is how somebody who wanted to leave quietly becomes a spam complaint instead. The store COALESCEs the timestamp, so a second click a year later cannot rewrite when they actually left - which is the evidence for “we stopped mailing them when they asked”.

This is also the RFC 8058 one-click endpoint: Gmail and Yahoo POST “List-Unsubscribe=One-Click” here from their own infrastructure. The body is read under a cap and discarded, which is what makes both callers work through one handler.

NameInTypeRequiredDescription
tokenpathstringYes
StatusBodyDescription
200NoneSuccess. The body shape was not resolved; see x-outpost-unresolved.
404text/plain, stringThe request was refused.
Terminal window
# This operation is public. It takes no credentials.
curl -X POST 'https://depot.example.com/status/unsubscribe/<token>'

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.