Registers the tenant-face documentation routes on apiMux, beside MountKnowledge.
This page is generated from the Depot route table. Every operation carries the permission it needs and the anchor an agent can link to.
GET /api/v1/docs/articles
Section titled “GET /api/v1/docs/articles”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
listDocArticles pages ONE rung at a time.
Not a merged list, deliberately. Paging across two libraries with LIMIT and OFFSET produces a pager that skips rows: each rung offsets independently, so page two of the merge is not the rows after page one of it. The console has a scope chip and this answers it, which is the honest shape rather than a convincing wrong one.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
includeSuggested | query | string | No | |
label | query | string | No | |
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
q | query | string | No | Free-text search term. |
relatedId | query | string | No | |
relatedKind | query | string | No | |
reviewBy | query | string | No | |
scope | query | string | No | |
status | query | string | No | |
template | query | string | No | |
updatedBy | query | string | No | |
visibility | query | string | No |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, PagedResultDocArticleView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocArticleView | |
items[].authorUserId | string | |
items[].bodyrequired | string | |
items[].bodyFormatrequired | string | |
items[].createdAtrequired | string (date-time) | |
items[].grantrequired | string | |
items[].isTemplaterequired | boolean | |
items[].labelsrequired | array of string | |
items[].linkCountrequired | integer | |
items[].publicIdrequired | string | |
items[].publishedAt | string (date-time) or null | |
items[].restrictedrequired | boolean | |
items[].reviewByOn | string (date-time) or null | |
items[].reviewEveryDays | integer | |
items[].scoperequired | string | |
items[].slugrequired | string | |
items[].sourceRef | string | |
items[].sourceSystem | string | |
items[].statusrequired | string | |
items[].summary | string | |
items[].tagsrequired | array of string | |
items[].titlerequired | string | |
items[].updatedAtrequired | string (date-time) | |
items[].verifiedAt | string (date-time) or null | |
items[].verifiedByName | string | |
items[].viewCountrequired | integer | int64. |
items[].visibilityrequired | string | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/articles?includeSuggested=<includeSuggested>&label=<label>&page=0&pageSize=0&q=<q>&relatedId=<relatedId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/articles?includeSuggested=<includeSuggested>&label=<label>&page=0&pageSize=0&q=<q>&relatedId=<relatedId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/articles"params = { "includeSuggested": "<includeSuggested>", "label": "<label>", "page": "0", "pageSize": "0", "q": "<q>", "relatedId": "<relatedId>",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/articles?includeSuggested=<includeSuggested>&label=<label>&page=0&pageSize=0&q=<q>&relatedId=<relatedId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/articles");url.searchParams.set("includeSuggested", "<includeSuggested>");url.searchParams.set("label", "<label>");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");url.searchParams.set("q", "<q>");url.searchParams.set("relatedId", "<relatedId>");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/articles?includeSuggested=<includeSuggested>&label=<label>&page=0&pageSize=0&q=<q>&relatedId=<relatedId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/articles
Section titled “POST /api/v1/docs/articles”POSTdocs:writeshared facehosteditmspremote
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Create doc article
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
authorUserId | string or null | |
body | string or null | |
bodyFormat | string or null | |
isTemplate | boolean or null | |
labelsrequired | array of string | |
reviewByOn | string or null | |
reviewEveryDays | integer or null | |
scope | string or null | |
slug | string or null | |
status | string or null | |
summary | string or null | |
tagsrequired | array of string | |
title | string or null | |
visibility | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
201 | application/json, DocArticleView | Created. |
400 | application/problem+json, ProblemDetails | The request body is not valid JSON. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
201 response body
| Field | Type | Description |
|---|---|---|
authorUserId | string | |
bodyrequired | string | |
bodyFormatrequired | string | |
createdAtrequired | string (date-time) | |
grantrequired | string | |
isTemplaterequired | boolean | |
labelsrequired | array of string | |
linkCountrequired | integer | |
publicIdrequired | string | |
publishedAt | string (date-time) or null | |
restrictedrequired | boolean | |
reviewByOn | string (date-time) or null | |
reviewEveryDays | integer | |
scoperequired | string | |
slugrequired | string | |
sourceRef | string | |
sourceSystem | string | |
statusrequired | string | |
summary | string | |
tagsrequired | array of string | |
titlerequired | string | |
updatedAtrequired | string (date-time) | |
verifiedAt | string (date-time) or null | |
verifiedByName | string | |
viewCountrequired | integer | int64. |
visibilityrequired | string |
Request samples
Section titled “Request samples”# Sign in first. outpost_console is a session cookie, so send it with every request.curl -X POST 'https://depot.example.com/api/v1/docs/articles' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "authorUserId": "string", "body": "string", "bodyFormat": "string", "isTemplate": false, "labels": [ "string" ], "reviewByOn": "string", "reviewEveryDays": 0, "scope": "string", "slug": "string", "status": "string", "summary": "string", "tags": [ "string" ], "title": "string", "visibility": "string"}'# Sign in first. outpost_console is a session cookie, so send it with every request.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "authorUserId": "string", "body": "string", "bodyFormat": "string", "isTemplate": false, "labels": [ "string" ], "reviewByOn": "string", "reviewEveryDays": 0, "scope": "string", "slug": "string", "status": "string", "summary": "string", "tags": [ "string" ], "title": "string", "visibility": "string"}'@
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/articles' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# Sign in first. outpost_console is a session cookie, so send it with every request.
import requests
url = "https://depot.example.com/api/v1/docs/articles"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "authorUserId": "string", "body": "string", "bodyFormat": "string", "isTemplate": False, "labels": [ "string", ], "reviewByOn": "string", "reviewEveryDays": 0, "scope": "string", "slug": "string", "status": "string", "summary": "string", "tags": [ "string", ], "title": "string", "visibility": "string",}
response = requests.post(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// Sign in first. outpost_console is a session cookie, so send it with every request.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "authorUserId": "string", "body": "string", "bodyFormat": "string", "isTemplate": false, "labels": [ "string" ], "reviewByOn": "string", "reviewEveryDays": 0, "scope": "string", "slug": "string", "status": "string", "summary": "string", "tags": [ "string" ], "title": "string", "visibility": "string"}`)
req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/articles", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// Sign in first. outpost_console is a session cookie, so send it with every request.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/articles";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "authorUserId": "string", "body": "string", "bodyFormat": "string", "isTemplate": false, "labels": [ "string" ], "reviewByOn": "string", "reviewEveryDays": 0, "scope": "string", "slug": "string", "status": "string", "summary": "string", "tags": [ "string" ], "title": "string", "visibility": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// Sign in first. outpost_console is a session cookie, so send it with every request.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "authorUserId": "string", "body": "string", "bodyFormat": "string", "isTemplate": false, "labels": [ "string" ], "reviewByOn": "string", "reviewEveryDays": 0, "scope": "string", "slug": "string", "status": "string", "summary": "string", "tags": [ "string" ], "title": "string", "visibility": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/articles");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/articles/{articleId}
Section titled “GET /api/v1/docs/articles/{articleId}”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Get doc article
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
articleId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocArticleView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
authorUserId | string | |
bodyrequired | string | |
bodyFormatrequired | string | |
createdAtrequired | string (date-time) | |
grantrequired | string | |
isTemplaterequired | boolean | |
labelsrequired | array of string | |
linkCountrequired | integer | |
publicIdrequired | string | |
publishedAt | string (date-time) or null | |
restrictedrequired | boolean | |
reviewByOn | string (date-time) or null | |
reviewEveryDays | integer | |
scoperequired | string | |
slugrequired | string | |
sourceRef | string | |
sourceSystem | string | |
statusrequired | string | |
summary | string | |
tagsrequired | array of string | |
titlerequired | string | |
updatedAtrequired | string (date-time) | |
verifiedAt | string (date-time) or null | |
verifiedByName | string | |
viewCountrequired | integer | int64. |
visibilityrequired | string |
Request samples
Section titled “Request samples”# 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/docs/articles/<articleId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/articles/<articleId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/articles/<articleId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/articles/<articleId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/articles/<articleId>";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/articles/<articleId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());PATCH /api/v1/docs/articles/{articleId}
Section titled “PATCH /api/v1/docs/articles/{articleId}”PATCHdocs:writeshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Patch doc article
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
articleId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
authorUserId | string or null | |
body | string or null | |
bodyFormat | string or null | |
isTemplate | boolean or null | |
labelsrequired | array of string | |
reviewByOn | string or null | |
reviewEveryDays | integer or null | |
scope | string or null | |
slug | string or null | |
status | string or null | |
summary | string or null | |
tagsrequired | array of string | |
title | string or null | |
visibility | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocArticleView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | That documentation library cannot be written to. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
authorUserId | string | |
bodyrequired | string | |
bodyFormatrequired | string | |
createdAtrequired | string (date-time) | |
grantrequired | string | |
isTemplaterequired | boolean | |
labelsrequired | array of string | |
linkCountrequired | integer | |
publicIdrequired | string | |
publishedAt | string (date-time) or null | |
restrictedrequired | boolean | |
reviewByOn | string (date-time) or null | |
reviewEveryDays | integer | |
scoperequired | string | |
slugrequired | string | |
sourceRef | string | |
sourceSystem | string | |
statusrequired | string | |
summary | string | |
tagsrequired | array of string | |
titlerequired | string | |
updatedAtrequired | string (date-time) | |
verifiedAt | string (date-time) or null | |
verifiedByName | string | |
viewCountrequired | integer | int64. |
visibilityrequired | string |
Request samples
Section titled “Request samples”# 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/docs/articles/<articleId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "authorUserId": "string", "body": "string", "bodyFormat": "string", "isTemplate": false, "labels": [ "string" ], "reviewByOn": "string", "reviewEveryDays": 0, "scope": "string", "slug": "string", "status": "string", "summary": "string", "tags": [ "string" ], "title": "string", "visibility": "string"}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "authorUserId": "string", "body": "string", "bodyFormat": "string", "isTemplate": false, "labels": [ "string" ], "reviewByOn": "string", "reviewEveryDays": 0, "scope": "string", "slug": "string", "status": "string", "summary": "string", "tags": [ "string" ], "title": "string", "visibility": "string"}'@
$response = Invoke-RestMethod ` -Method Patch ` -Uri 'https://depot.example.com/api/v1/docs/articles/<articleId>' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/articles/<articleId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "authorUserId": "string", "body": "string", "bodyFormat": "string", "isTemplate": False, "labels": [ "string", ], "reviewByOn": "string", "reviewEveryDays": 0, "scope": "string", "slug": "string", "status": "string", "summary": "string", "tags": [ "string", ], "title": "string", "visibility": "string",}
response = requests.patch(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "authorUserId": "string", "body": "string", "bodyFormat": "string", "isTemplate": false, "labels": [ "string" ], "reviewByOn": "string", "reviewEveryDays": 0, "scope": "string", "slug": "string", "status": "string", "summary": "string", "tags": [ "string" ], "title": "string", "visibility": "string"}`)
req, err := http.NewRequest(http.MethodPatch, "https://depot.example.com/api/v1/docs/articles/<articleId>", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/articles/<articleId>";
const response = await fetch(url, { method: "PATCH", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "authorUserId": "string", "body": "string", "bodyFormat": "string", "isTemplate": false, "labels": [ "string" ], "reviewByOn": "string", "reviewEveryDays": 0, "scope": "string", "slug": "string", "status": "string", "summary": "string", "tags": [ "string" ], "title": "string", "visibility": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "authorUserId": "string", "body": "string", "bodyFormat": "string", "isTemplate": false, "labels": [ "string" ], "reviewByOn": "string", "reviewEveryDays": 0, "scope": "string", "slug": "string", "status": "string", "summary": "string", "tags": [ "string" ], "title": "string", "visibility": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Patch, "https://depot.example.com/api/v1/docs/articles/<articleId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());DELETE /api/v1/docs/articles/{articleId}
Section titled “DELETE /api/v1/docs/articles/{articleId}”DELETEdocs:writeshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Delete doc article
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
articleId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
204 | None | Success, with no body. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | That documentation library cannot be written to. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
Request samples
Section titled “Request samples”# 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/docs/articles/<articleId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Delete ` -Uri 'https://depot.example.com/api/v1/docs/articles/<articleId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/articles/<articleId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.delete(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodDelete, "https://depot.example.com/api/v1/docs/articles/<articleId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/articles/<articleId>";
const response = await fetch(url, { method: "DELETE", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Delete, "https://depot.example.com/api/v1/docs/articles/<articleId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/articles/{articleId}/documents
Section titled “GET /api/v1/docs/articles/{articleId}/documents”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
listDocArticleDocuments is the same read hung off an article (ruling A.14).
THE ARTICLE IS RESOLVED THROUGH BOTH RUNGS and the files are read from the rung that answered, which is the whole reason this is not one handler with a parent kind parameter: a practice article’s images live in the practice database, and reading them out of the tenant’s would answer an empty list for an article that is full of them.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
articleId | path | string | Yes | A uuid. |
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, PagedResultDocDocumentView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | That documentation library cannot be written to. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocDocumentView | |
items[].contentTyperequired | string | |
items[].createdAtrequired | string (date-time) | |
items[].downloadUrlrequired | string | |
items[].fileNamerequired | string | |
items[].parentIdrequired | string | |
items[].parentKindrequired | string | |
items[].publicIdrequired | string | |
items[].sizeBytesrequired | integer | int64. |
items[].uploadedByName | string | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/articles/<articleId>/documents?page=0&pageSize=0' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/articles/<articleId>/documents?page=0&pageSize=0' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/articles/<articleId>/documents"params = { "page": "0", "pageSize": "0",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/articles/<articleId>/documents?page=0&pageSize=0", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/articles/<articleId>/documents");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/articles/<articleId>/documents?page=0&pageSize=0");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/articles/{articleId}/documents
Section titled “POST /api/v1/docs/articles/{articleId}/documents”POSTdocs:writeshared facehosteditmspremote
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
uploadDocArticleDocument is the same upload hung off an article (ruling A.14).
THE CONSOLE EDITOR PUTS IMAGES THROUGH IT. A markdown body references an image by URL, and the only URL that survives an export, a move between libraries and a client who is not signed in to the console is one this Depot serves from its own storage. Pasting a data URI into a body instead would put megabytes of base64 into a column that is searched, diffed and revisioned.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
articleId | path | string | Yes | A uuid. |
fileName | query | string | No |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
201 | application/json, DocDocumentView | Created. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
413 | application/problem+json, ProblemDetails | The request was refused. |
415 | application/problem+json, ProblemDetails | A fileName query parameter is required. |
500 | application/problem+json, ProblemDetails | That documentation library cannot be written to. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
502 | application/problem+json, ProblemDetails | The file could not be stored. Nothing was attached. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
201 response body
| Field | Type | Description |
|---|---|---|
contentTyperequired | string | |
createdAtrequired | string (date-time) | |
downloadUrlrequired | string | |
fileNamerequired | string | |
parentIdrequired | string | |
parentKindrequired | string | |
publicIdrequired | string | |
sizeBytesrequired | integer | int64. |
uploadedByName | string |
Request samples
Section titled “Request samples”# Sign in first. outpost_console is a session cookie, so send it with every request.curl -X POST 'https://depot.example.com/api/v1/docs/articles/<articleId>/documents?fileName=<fileName>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# Sign in first. outpost_console is a session cookie, so send it with every request.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/articles/<articleId>/documents?fileName=<fileName>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# Sign in first. outpost_console is a session cookie, so send it with every request.
import requests
url = "https://depot.example.com/api/v1/docs/articles/<articleId>/documents"params = { "fileName": "<fileName>",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.post(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// Sign in first. outpost_console is a session cookie, so send it with every request.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/articles/<articleId>/documents?fileName=<fileName>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// Sign in first. outpost_console is a session cookie, so send it with every request.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/articles/<articleId>/documents");url.searchParams.set("fileName", "<fileName>");
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// Sign in first. outpost_console is a session cookie, so send it with every request.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/articles/<articleId>/documents?fileName=<fileName>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/articles/{articleId}/publish
Section titled “POST /api/v1/docs/articles/{articleId}/publish”POSTdocs:writeshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
publishDocArticle is the status flip as its own verb.
Its own route rather than a PATCH of “status”, because publishing is the act that makes an internal runbook customer-visible and it deserves an audit verb and a permission story of its own rather than being one field of a body.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
articleId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
published | boolean or null | |
visibility | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocArticleView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | That documentation library cannot be written to. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
authorUserId | string | |
bodyrequired | string | |
bodyFormatrequired | string | |
createdAtrequired | string (date-time) | |
grantrequired | string | |
isTemplaterequired | boolean | |
labelsrequired | array of string | |
linkCountrequired | integer | |
publicIdrequired | string | |
publishedAt | string (date-time) or null | |
restrictedrequired | boolean | |
reviewByOn | string (date-time) or null | |
reviewEveryDays | integer | |
scoperequired | string | |
slugrequired | string | |
sourceRef | string | |
sourceSystem | string | |
statusrequired | string | |
summary | string | |
tagsrequired | array of string | |
titlerequired | string | |
updatedAtrequired | string (date-time) | |
verifiedAt | string (date-time) or null | |
verifiedByName | string | |
viewCountrequired | integer | int64. |
visibilityrequired | string |
Request samples
Section titled “Request samples”# 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/docs/articles/<articleId>/publish' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "published": false, "visibility": "string"}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "published": false, "visibility": "string"}'@
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/articles/<articleId>/publish' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/articles/<articleId>/publish"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "published": False, "visibility": "string",}
response = requests.post(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "published": false, "visibility": "string"}`)
req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/articles/<articleId>/publish", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/articles/<articleId>/publish";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "published": false, "visibility": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "published": false, "visibility": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/articles/<articleId>/publish");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/articles/{articleId}/revisions
Section titled “GET /api/v1/docs/articles/{articleId}/revisions”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
List doc article revisions
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
articleId | path | string | Yes | A uuid. |
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, PagedResultDocRevisionView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | That documentation library cannot be written to. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocRevisionView | |
items[].authoredByName | string | |
items[].authoredByUserId | string | |
items[].bodyFormatrequired | string | |
items[].createdAtrequired | string (date-time) | |
items[].labelsrequired | array of string | |
items[].publicIdrequired | string | |
items[].reasonrequired | string | |
items[].scoperequired | string | |
items[].summary | string | |
items[].titlerequired | string | |
items[].versionNorequired | integer | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/articles/<articleId>/revisions?page=0&pageSize=0' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/articles/<articleId>/revisions?page=0&pageSize=0' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/articles/<articleId>/revisions"params = { "page": "0", "pageSize": "0",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/articles/<articleId>/revisions?page=0&pageSize=0", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/articles/<articleId>/revisions");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/articles/<articleId>/revisions?page=0&pageSize=0");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/articles/{articleId}/revisions/{v}/diff
Section titled “GET /api/v1/docs/articles/{articleId}/revisions/{v}/diff”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
diffDocArticleRevision compares one version against another, word by word.
WORD LEVEL AND NOT LINE LEVEL, because an article is prose. A line diff of a paragraph somebody rewrapped reports the whole paragraph as changed, which is the answer that makes a history unusable for the one question people ask it: what actually changed in this sentence.
“against” names the other version and defaults to the one before {v}, which is what a reader clicking a row in the history means.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
articleId | path | string | Yes | A uuid. |
v | path | string | Yes | |
against | query | string | No |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocDiffView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | That documentation library cannot be written to. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
articleIdrequired | string | |
fromTitlerequired | string | |
fromVersionrequired | integer | |
opsrequired | array of DocDiffOp | |
ops[].oprequired | string | |
ops[].textrequired | string | |
toTitlerequired | string | |
toVersionrequired | integer | |
truncatedrequired | boolean |
Request samples
Section titled “Request samples”# 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/docs/articles/<articleId>/revisions/<v>/diff?against=<against>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/articles/<articleId>/revisions/<v>/diff?against=<against>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/articles/<articleId>/revisions/<v>/diff"params = { "against": "<against>",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/articles/<articleId>/revisions/<v>/diff?against=<against>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/articles/<articleId>/revisions/<v>/diff");url.searchParams.set("against", "<against>");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/articles/<articleId>/revisions/<v>/diff?against=<against>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/articles/{articleId}/revisions/{v}/restore
Section titled “POST /api/v1/docs/articles/{articleId}/revisions/{v}/restore”POSTdocs:writeshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Restore doc article revision
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
articleId | path | string | Yes | A uuid. |
v | path | string | Yes |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocArticleView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | That documentation library cannot be written to. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
authorUserId | string | |
bodyrequired | string | |
bodyFormatrequired | string | |
createdAtrequired | string (date-time) | |
grantrequired | string | |
isTemplaterequired | boolean | |
labelsrequired | array of string | |
linkCountrequired | integer | |
publicIdrequired | string | |
publishedAt | string (date-time) or null | |
restrictedrequired | boolean | |
reviewByOn | string (date-time) or null | |
reviewEveryDays | integer | |
scoperequired | string | |
slugrequired | string | |
sourceRef | string | |
sourceSystem | string | |
statusrequired | string | |
summary | string | |
tagsrequired | array of string | |
titlerequired | string | |
updatedAtrequired | string (date-time) | |
verifiedAt | string (date-time) or null | |
verifiedByName | string | |
viewCountrequired | integer | int64. |
visibilityrequired | string |
Request samples
Section titled “Request samples”# 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/docs/articles/<articleId>/revisions/<v>/restore' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/articles/<articleId>/revisions/<v>/restore' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/articles/<articleId>/revisions/<v>/restore"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.post(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/articles/<articleId>/revisions/<v>/restore", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/articles/<articleId>/revisions/<v>/restore";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/articles/<articleId>/revisions/<v>/restore");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/articles/{articleId}/verify
Section titled “POST /api/v1/docs/articles/{articleId}/verify”POSTdocs:writeshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
verifyDocArticle stamps the article current as of now, NAMING WHO SAID SO.
A stamp with no name is a checkbox rather than evidence, which is why the store takes the actor and the label and why this route exists at all instead of a “verified” boolean on the PATCH body.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
articleId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocArticleView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | That documentation library cannot be written to. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
authorUserId | string | |
bodyrequired | string | |
bodyFormatrequired | string | |
createdAtrequired | string (date-time) | |
grantrequired | string | |
isTemplaterequired | boolean | |
labelsrequired | array of string | |
linkCountrequired | integer | |
publicIdrequired | string | |
publishedAt | string (date-time) or null | |
restrictedrequired | boolean | |
reviewByOn | string (date-time) or null | |
reviewEveryDays | integer | |
scoperequired | string | |
slugrequired | string | |
sourceRef | string | |
sourceSystem | string | |
statusrequired | string | |
summary | string | |
tagsrequired | array of string | |
titlerequired | string | |
updatedAtrequired | string (date-time) | |
verifiedAt | string (date-time) or null | |
verifiedByName | string | |
viewCountrequired | integer | int64. |
visibilityrequired | string |
Request samples
Section titled “Request samples”# 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/docs/articles/<articleId>/verify' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/articles/<articleId>/verify' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/articles/<articleId>/verify"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.post(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/articles/<articleId>/verify", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/articles/<articleId>/verify";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/articles/<articleId>/verify");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/assets
Section titled “GET /api/v1/docs/assets”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
listDocAssets pages the client’s records, narrowed by layout key and text.
A FILTER NAMING A CONFIDENTIAL FIELD IS A 422 AND NOT AN EMPTY RESULT. An empty page reads as “no firewall has that value”, which is a statement about the data; the truth is that the question cannot be asked, and saying so is the difference between a search somebody trusts and one they quietly stop using.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
archived | query | string | No | |
field | query | string | No | |
includeSuggested | query | string | No | |
label | query | string | No | |
layoutKey | query | string | No | |
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
q | query | string | No | Free-text search term. |
relatedId | query | string | No | |
relatedKind | query | string | No | |
updatedSince | query | string | No |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, PagedResultDocAssetView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocAssetView | |
items[].archivedrequired | boolean | |
items[].createdAtrequired | string (date-time) | |
items[].grantrequired | string | |
items[].labelsrequired | array of string | |
items[].layoutIdrequired | string | |
items[].layoutKeyrequired | string | |
items[].layoutNamerequired | string | |
items[].layoutScoperequired | string | |
items[].linkCountrequired | integer | |
items[].publicIdrequired | string | |
items[].restrictedrequired | boolean | |
items[].siteId | string | |
items[].sourceRef | string | |
items[].sourceSystem | string | |
items[].titlerequired | string | |
items[].updatedAtrequired | string (date-time) | |
items[].values | array of DocAssetValueView | |
items[].values[].credentialId | string | |
items[].values[].documentId | string | |
items[].values[].fieldIdrequired | string | |
items[].values[].fieldKeyrequired | string | |
items[].values[].hasValuerequired | boolean | |
items[].values[].kindrequired | string | |
items[].values[].relations | array of DocRelationRefView | |
items[].values[].relations[].idrequired | string | |
items[].values[].relations[].kindrequired | string | |
items[].values[].relations[].restrictedrequired | boolean | |
items[].values[].relations[].subtitle | string | |
items[].values[].relations[].titlerequired | string | |
items[].values[].setByName | string | |
items[].values[].sourcerequired | string | |
items[].values[].sourceRef | string | |
items[].values[].syncedAt | string (date-time) or null | |
items[].values[].updatedAtrequired | string (date-time) | |
items[].values[].value | string | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/assets?archived=<archived>&field=<field>&includeSuggested=<includeSuggested>&label=<label>&layoutKey=<layoutKey>&page=0' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/assets?archived=<archived>&field=<field>&includeSuggested=<includeSuggested>&label=<label>&layoutKey=<layoutKey>&page=0' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/assets"params = { "archived": "<archived>", "field": "<field>", "includeSuggested": "<includeSuggested>", "label": "<label>", "layoutKey": "<layoutKey>", "page": "0",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/assets?archived=<archived>&field=<field>&includeSuggested=<includeSuggested>&label=<label>&layoutKey=<layoutKey>&page=0", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/assets");url.searchParams.set("archived", "<archived>");url.searchParams.set("field", "<field>");url.searchParams.set("includeSuggested", "<includeSuggested>");url.searchParams.set("label", "<label>");url.searchParams.set("layoutKey", "<layoutKey>");url.searchParams.set("page", "0");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/assets?archived=<archived>&field=<field>&includeSuggested=<includeSuggested>&label=<label>&layoutKey=<layoutKey>&page=0");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/assets
Section titled “POST /api/v1/docs/assets”POSTdocs:writetenant facehosteditmspremote
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Create doc asset
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
archived | boolean or null | |
labelsrequired | array of string | |
layoutId | string or null | |
restricted | boolean or null | |
siteId | string or null | |
title | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
201 | application/json, DocAssetView | Created. |
400 | application/problem+json, ProblemDetails | The request body is not valid JSON. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
201 response body
| Field | Type | Description |
|---|---|---|
archivedrequired | boolean | |
createdAtrequired | string (date-time) | |
grantrequired | string | |
labelsrequired | array of string | |
layoutIdrequired | string | |
layoutKeyrequired | string | |
layoutNamerequired | string | |
layoutScoperequired | string | |
linkCountrequired | integer | |
publicIdrequired | string | |
restrictedrequired | boolean | |
siteId | string | |
sourceRef | string | |
sourceSystem | string | |
titlerequired | string | |
updatedAtrequired | string (date-time) | |
values | array of DocAssetValueView | |
values[].credentialId | string | |
values[].documentId | string | |
values[].fieldIdrequired | string | |
values[].fieldKeyrequired | string | |
values[].hasValuerequired | boolean | |
values[].kindrequired | string | |
values[].relations | array of DocRelationRefView | |
values[].relations[].idrequired | string | |
values[].relations[].kindrequired | string | |
values[].relations[].restrictedrequired | boolean | |
values[].relations[].subtitle | string | |
values[].relations[].titlerequired | string | |
values[].setByName | string | |
values[].sourcerequired | string | |
values[].sourceRef | string | |
values[].syncedAt | string (date-time) or null | |
values[].updatedAtrequired | string (date-time) | |
values[].value | string |
Request samples
Section titled “Request samples”# Sign in first. outpost_console is a session cookie, so send it with every request.curl -X POST 'https://depot.example.com/api/v1/docs/assets' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "archived": false, "labels": [ "string" ], "layoutId": "string", "restricted": false, "siteId": "string", "title": "string"}'# Sign in first. outpost_console is a session cookie, so send it with every request.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "archived": false, "labels": [ "string" ], "layoutId": "string", "restricted": false, "siteId": "string", "title": "string"}'@
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/assets' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# Sign in first. outpost_console is a session cookie, so send it with every request.
import requests
url = "https://depot.example.com/api/v1/docs/assets"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "archived": False, "labels": [ "string", ], "layoutId": "string", "restricted": False, "siteId": "string", "title": "string",}
response = requests.post(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// Sign in first. outpost_console is a session cookie, so send it with every request.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "archived": false, "labels": [ "string" ], "layoutId": "string", "restricted": false, "siteId": "string", "title": "string"}`)
req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/assets", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// Sign in first. outpost_console is a session cookie, so send it with every request.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/assets";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "archived": false, "labels": [ "string" ], "layoutId": "string", "restricted": false, "siteId": "string", "title": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// Sign in first. outpost_console is a session cookie, so send it with every request.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "archived": false, "labels": [ "string" ], "layoutId": "string", "restricted": false, "siteId": "string", "title": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/assets");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/assets/{assetId}
Section titled “GET /api/v1/docs/assets/{assetId}”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Get doc asset
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
assetId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocAssetView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
archivedrequired | boolean | |
createdAtrequired | string (date-time) | |
grantrequired | string | |
labelsrequired | array of string | |
layoutIdrequired | string | |
layoutKeyrequired | string | |
layoutNamerequired | string | |
layoutScoperequired | string | |
linkCountrequired | integer | |
publicIdrequired | string | |
restrictedrequired | boolean | |
siteId | string | |
sourceRef | string | |
sourceSystem | string | |
titlerequired | string | |
updatedAtrequired | string (date-time) | |
values | array of DocAssetValueView | |
values[].credentialId | string | |
values[].documentId | string | |
values[].fieldIdrequired | string | |
values[].fieldKeyrequired | string | |
values[].hasValuerequired | boolean | |
values[].kindrequired | string | |
values[].relations | array of DocRelationRefView | |
values[].relations[].idrequired | string | |
values[].relations[].kindrequired | string | |
values[].relations[].restrictedrequired | boolean | |
values[].relations[].subtitle | string | |
values[].relations[].titlerequired | string | |
values[].setByName | string | |
values[].sourcerequired | string | |
values[].sourceRef | string | |
values[].syncedAt | string (date-time) or null | |
values[].updatedAtrequired | string (date-time) | |
values[].value | string |
Request samples
Section titled “Request samples”# 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/docs/assets/<assetId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/assets/<assetId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/assets/<assetId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/assets/<assetId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/assets/<assetId>";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/assets/<assetId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());PATCH /api/v1/docs/assets/{assetId}
Section titled “PATCH /api/v1/docs/assets/{assetId}”PATCHdocs:writetenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Patch doc asset
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
assetId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
archived | boolean or null | |
labelsrequired | array of string | |
layoutId | string or null | |
restricted | boolean or null | |
siteId | string or null | |
title | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocAssetView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
archivedrequired | boolean | |
createdAtrequired | string (date-time) | |
grantrequired | string | |
labelsrequired | array of string | |
layoutIdrequired | string | |
layoutKeyrequired | string | |
layoutNamerequired | string | |
layoutScoperequired | string | |
linkCountrequired | integer | |
publicIdrequired | string | |
restrictedrequired | boolean | |
siteId | string | |
sourceRef | string | |
sourceSystem | string | |
titlerequired | string | |
updatedAtrequired | string (date-time) | |
values | array of DocAssetValueView | |
values[].credentialId | string | |
values[].documentId | string | |
values[].fieldIdrequired | string | |
values[].fieldKeyrequired | string | |
values[].hasValuerequired | boolean | |
values[].kindrequired | string | |
values[].relations | array of DocRelationRefView | |
values[].relations[].idrequired | string | |
values[].relations[].kindrequired | string | |
values[].relations[].restrictedrequired | boolean | |
values[].relations[].subtitle | string | |
values[].relations[].titlerequired | string | |
values[].setByName | string | |
values[].sourcerequired | string | |
values[].sourceRef | string | |
values[].syncedAt | string (date-time) or null | |
values[].updatedAtrequired | string (date-time) | |
values[].value | string |
Request samples
Section titled “Request samples”# 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/docs/assets/<assetId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "archived": false, "labels": [ "string" ], "layoutId": "string", "restricted": false, "siteId": "string", "title": "string"}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "archived": false, "labels": [ "string" ], "layoutId": "string", "restricted": false, "siteId": "string", "title": "string"}'@
$response = Invoke-RestMethod ` -Method Patch ` -Uri 'https://depot.example.com/api/v1/docs/assets/<assetId>' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/assets/<assetId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "archived": False, "labels": [ "string", ], "layoutId": "string", "restricted": False, "siteId": "string", "title": "string",}
response = requests.patch(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "archived": false, "labels": [ "string" ], "layoutId": "string", "restricted": false, "siteId": "string", "title": "string"}`)
req, err := http.NewRequest(http.MethodPatch, "https://depot.example.com/api/v1/docs/assets/<assetId>", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/assets/<assetId>";
const response = await fetch(url, { method: "PATCH", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "archived": false, "labels": [ "string" ], "layoutId": "string", "restricted": false, "siteId": "string", "title": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "archived": false, "labels": [ "string" ], "layoutId": "string", "restricted": false, "siteId": "string", "title": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Patch, "https://depot.example.com/api/v1/docs/assets/<assetId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());DELETE /api/v1/docs/assets/{assetId}
Section titled “DELETE /api/v1/docs/assets/{assetId}”DELETEdocs:writetenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Delete doc asset
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
assetId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
204 | None | Success, with no body. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
Request samples
Section titled “Request samples”# 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/docs/assets/<assetId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Delete ` -Uri 'https://depot.example.com/api/v1/docs/assets/<assetId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/assets/<assetId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.delete(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodDelete, "https://depot.example.com/api/v1/docs/assets/<assetId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/assets/<assetId>";
const response = await fetch(url, { method: "DELETE", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Delete, "https://depot.example.com/api/v1/docs/assets/<assetId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/assets/{assetId}/documents
Section titled “GET /api/v1/docs/assets/{assetId}/documents”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
List doc asset documents
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
assetId | path | string | Yes | A uuid. |
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, PagedResultDocDocumentView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocDocumentView | |
items[].contentTyperequired | string | |
items[].createdAtrequired | string (date-time) | |
items[].downloadUrlrequired | string | |
items[].fileNamerequired | string | |
items[].parentIdrequired | string | |
items[].parentKindrequired | string | |
items[].publicIdrequired | string | |
items[].sizeBytesrequired | integer | int64. |
items[].uploadedByName | string | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/assets/<assetId>/documents?page=0&pageSize=0' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/assets/<assetId>/documents?page=0&pageSize=0' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/assets/<assetId>/documents"params = { "page": "0", "pageSize": "0",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/assets/<assetId>/documents?page=0&pageSize=0", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/assets/<assetId>/documents");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/assets/<assetId>/documents?page=0&pageSize=0");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/assets/{assetId}/documents
Section titled “POST /api/v1/docs/assets/{assetId}/documents”POSTdocs:writetenant facehosteditmspremote
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
uploadDocDocument takes one file as the raw request body.
The tenant is already on the context: these routes mount on apiMux behind tenant.Middleware, which is what the project surface has to reconstruct by hand because its documents hang off the MSP mux.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
assetId | path | string | Yes | A uuid. |
fileName | query | string | No |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
201 | application/json, DocDocumentView | Created. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
413 | application/problem+json, ProblemDetails | The request was refused. |
415 | application/problem+json, ProblemDetails | A fileName query parameter is required. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
502 | application/problem+json, ProblemDetails | The file could not be stored. Nothing was attached. |
503 | application/problem+json, ProblemDetails | File storage is not configured on this Depot. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
201 response body
| Field | Type | Description |
|---|---|---|
contentTyperequired | string | |
createdAtrequired | string (date-time) | |
downloadUrlrequired | string | |
fileNamerequired | string | |
parentIdrequired | string | |
parentKindrequired | string | |
publicIdrequired | string | |
sizeBytesrequired | integer | int64. |
uploadedByName | string |
Request samples
Section titled “Request samples”# Sign in first. outpost_console is a session cookie, so send it with every request.curl -X POST 'https://depot.example.com/api/v1/docs/assets/<assetId>/documents?fileName=<fileName>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# Sign in first. outpost_console is a session cookie, so send it with every request.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/assets/<assetId>/documents?fileName=<fileName>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# Sign in first. outpost_console is a session cookie, so send it with every request.
import requests
url = "https://depot.example.com/api/v1/docs/assets/<assetId>/documents"params = { "fileName": "<fileName>",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.post(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// Sign in first. outpost_console is a session cookie, so send it with every request.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/assets/<assetId>/documents?fileName=<fileName>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// Sign in first. outpost_console is a session cookie, so send it with every request.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/assets/<assetId>/documents");url.searchParams.set("fileName", "<fileName>");
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// Sign in first. outpost_console is a session cookie, so send it with every request.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/assets/<assetId>/documents?fileName=<fileName>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/assets/{assetId}/fields
Section titled “GET /api/v1/docs/assets/{assetId}/fields”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
List doc asset values
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
assetId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, PagedResultDocAssetValueView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocAssetValueView | |
items[].credentialId | string | |
items[].documentId | string | |
items[].fieldIdrequired | string | |
items[].fieldKeyrequired | string | |
items[].hasValuerequired | boolean | |
items[].kindrequired | string | |
items[].relations | array of DocRelationRefView | |
items[].relations[].idrequired | string | |
items[].relations[].kindrequired | string | |
items[].relations[].restrictedrequired | boolean | |
items[].relations[].subtitle | string | |
items[].relations[].titlerequired | string | |
items[].setByName | string | |
items[].sourcerequired | string | |
items[].sourceRef | string | |
items[].syncedAt | string (date-time) or null | |
items[].updatedAtrequired | string (date-time) | |
items[].value | string | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/assets/<assetId>/fields' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/assets/<assetId>/fields' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/assets/<assetId>/fields"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/assets/<assetId>/fields", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/assets/<assetId>/fields";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/assets/<assetId>/fields");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());PUT /api/v1/docs/assets/{assetId}/fields
Section titled “PUT /api/v1/docs/assets/{assetId}/fields”PUTdocs:writetenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
putDocAssetValues writes the whole field set.
WHOLE-SET AND NOT A DIFF, which is the store’s contract and this handler’s job to honour: a key absent from the body CLEARS its value. That is stated on the route in the console so nobody discovers it by losing a field, and it is the only shape under which the title and the search vector can be rebuilt from all current values in one transaction.
A SEALED VALUE LEFT OUT IS REFUSED, NOT SILENTLY CLEARED. This is the sharp edge of the whole-set rule and it is worth the paragraph.
A caller that read the record back got hasValue and no plaintext, so it cannot echo a confidential value it never saw, and the obvious “save what I read” therefore omits every password on the record. Under the whole-set rule that DELETES them. Carrying them forward is not available: carrying means sending, and the only plaintext this package can obtain is through an AUDITED reveal - decrypting a secret in order to save a form is a disclosure with no record, which rule 1.2 exists to forbid. Nor can the value be sent back empty: CK_DocAssetFieldValue_Carrier requires a confidential row to carry ciphertext, so “no value” is the ABSENCE of the row and not a row holding nothing.
So the omission is refused, naming the field, and a caller that MEANT to remove the value says so with clear. Keeping is re-sending, clearing is explicit, and neither is the default that loses data.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
assetId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
valuesrequired | array of object | |
values[].clearrequired | boolean | |
values[].credentialId | string or null | |
values[].documentId | string or null | |
values[].fieldKeyrequired | string | |
values[].relationIdsrequired | array of string | |
values[].relationKindrequired | string | |
values[].value | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocAssetView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
archivedrequired | boolean | |
createdAtrequired | string (date-time) | |
grantrequired | string | |
labelsrequired | array of string | |
layoutIdrequired | string | |
layoutKeyrequired | string | |
layoutNamerequired | string | |
layoutScoperequired | string | |
linkCountrequired | integer | |
publicIdrequired | string | |
restrictedrequired | boolean | |
siteId | string | |
sourceRef | string | |
sourceSystem | string | |
titlerequired | string | |
updatedAtrequired | string (date-time) | |
values | array of DocAssetValueView | |
values[].credentialId | string | |
values[].documentId | string | |
values[].fieldIdrequired | string | |
values[].fieldKeyrequired | string | |
values[].hasValuerequired | boolean | |
values[].kindrequired | string | |
values[].relations | array of DocRelationRefView | |
values[].relations[].idrequired | string | |
values[].relations[].kindrequired | string | |
values[].relations[].restrictedrequired | boolean | |
values[].relations[].subtitle | string | |
values[].relations[].titlerequired | string | |
values[].setByName | string | |
values[].sourcerequired | string | |
values[].sourceRef | string | |
values[].syncedAt | string (date-time) or null | |
values[].updatedAtrequired | string (date-time) | |
values[].value | string |
Request samples
Section titled “Request samples”# 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/docs/assets/<assetId>/fields' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "values": [ { "clear": false, "credentialId": "string", "documentId": "string", "fieldKey": "string", "relationIds": [ "string" ], "relationKind": "string", "value": "string" } ]}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "values": [ { "clear": false, "credentialId": "string", "documentId": "string", "fieldKey": "string", "relationIds": [ "string" ], "relationKind": "string", "value": "string" } ]}'@
$response = Invoke-RestMethod ` -Method Put ` -Uri 'https://depot.example.com/api/v1/docs/assets/<assetId>/fields' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/assets/<assetId>/fields"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "values": [ { "clear": False, "credentialId": "string", "documentId": "string", "fieldKey": "string", "relationIds": [ "string", ], "relationKind": "string", "value": "string", }, ],}
response = requests.put(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "values": [ { "clear": false, "credentialId": "string", "documentId": "string", "fieldKey": "string", "relationIds": [ "string" ], "relationKind": "string", "value": "string" } ]}`)
req, err := http.NewRequest(http.MethodPut, "https://depot.example.com/api/v1/docs/assets/<assetId>/fields", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/assets/<assetId>/fields";
const response = await fetch(url, { method: "PUT", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "values": [ { "clear": false, "credentialId": "string", "documentId": "string", "fieldKey": "string", "relationIds": [ "string" ], "relationKind": "string", "value": "string" } ] }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "values": [ { "clear": false, "credentialId": "string", "documentId": "string", "fieldKey": "string", "relationIds": [ "string" ], "relationKind": "string", "value": "string" } ]}""";
var request = new HttpRequestMessage(HttpMethod.Put, "https://depot.example.com/api/v1/docs/assets/<assetId>/fields");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/assets/{assetId}/fields/{fieldKey}/reveal
Section titled “POST /api/v1/docs/assets/{assetId}/fields/{fieldKey}/reveal”POSTdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
revealDocAssetField is the nine steps of DOCS_CONTRACTS.md section 7.1, applied to a confidential asset field.
THE ORDER IS THE RULE. The record is read first so a field that does not exist is a 404 with nothing written to the chain; the access is resolved; the audit row is appended AND CHECKED; only then is the store asked for plaintext. An audit write that fails answers 500 and never the value, because this is the one audit in the package that records something leaving no other trace.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
assetId | path | string | Yes | A uuid. |
fieldKey | path | string | Yes |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocFieldRevealResponse | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
auditIdrequired | integer | int64. |
fieldKeyrequired | string | |
valuerequired | string |
Request samples
Section titled “Request samples”# 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/docs/assets/<assetId>/fields/<fieldKey>/reveal' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/assets/<assetId>/fields/<fieldKey>/reveal' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/assets/<assetId>/fields/<fieldKey>/reveal"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.post(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/assets/<assetId>/fields/<fieldKey>/reveal", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/assets/<assetId>/fields/<fieldKey>/reveal";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/assets/<assetId>/fields/<fieldKey>/reveal");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/certificates
Section titled “GET /api/v1/docs/certificates”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
List doc certificates
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
agentId | query | string | No | |
domainId | query | string | No | |
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, PagedResultDocCertificateView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocCertificateView | |
items[].agentId | string | |
items[].createdAtrequired | string (date-time) | |
items[].domainId | string | |
items[].issuer | string | |
items[].monitorExpiryrequired | boolean | |
items[].notAfter | string (date-time) or null | |
items[].notBefore | string (date-time) or null | |
items[].publicIdrequired | string | |
items[].sansrequired | array of string | |
items[].serialNumber | string | |
items[].sourcerequired | string | |
items[].storePath | string | |
items[].subjectrequired | string | |
items[].thumbprint | string | |
items[].updatedAtrequired | string (date-time) | |
items[].usage | string | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/certificates?agentId=<agentId>&domainId=<domainId>&page=0&pageSize=0' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/certificates?agentId=<agentId>&domainId=<domainId>&page=0&pageSize=0' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/certificates"params = { "agentId": "<agentId>", "domainId": "<domainId>", "page": "0", "pageSize": "0",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/certificates?agentId=<agentId>&domainId=<domainId>&page=0&pageSize=0", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/certificates");url.searchParams.set("agentId", "<agentId>");url.searchParams.set("domainId", "<domainId>");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/certificates?agentId=<agentId>&domainId=<domainId>&page=0&pageSize=0");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/certificates
Section titled “POST /api/v1/docs/certificates”POSTdocs:writetenant facehosteditmspremote
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Create doc certificate
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
domainId | string or null | |
issuer | string or null | |
monitorExpiry | boolean or null | |
notAfter | string or null | |
notBefore | string or null | |
sansrequired | array of string | |
serialNumber | string or null | |
storePath | string or null | |
subject | string or null | |
thumbprint | string or null | |
usage | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
201 | application/json, DocCertificateView | Created. |
400 | application/problem+json, ProblemDetails | The request body is not valid JSON. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
201 response body
| Field | Type | Description |
|---|---|---|
agentId | string | |
createdAtrequired | string (date-time) | |
domainId | string | |
issuer | string | |
monitorExpiryrequired | boolean | |
notAfter | string (date-time) or null | |
notBefore | string (date-time) or null | |
publicIdrequired | string | |
sansrequired | array of string | |
serialNumber | string | |
sourcerequired | string | |
storePath | string | |
subjectrequired | string | |
thumbprint | string | |
updatedAtrequired | string (date-time) | |
usage | string |
Request samples
Section titled “Request samples”# Sign in first. outpost_console is a session cookie, so send it with every request.curl -X POST 'https://depot.example.com/api/v1/docs/certificates' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "domainId": "string", "issuer": "string", "monitorExpiry": false, "notAfter": "string", "notBefore": "string", "sans": [ "string" ], "serialNumber": "string", "storePath": "string", "subject": "string", "thumbprint": "string", "usage": "string"}'# Sign in first. outpost_console is a session cookie, so send it with every request.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "domainId": "string", "issuer": "string", "monitorExpiry": false, "notAfter": "string", "notBefore": "string", "sans": [ "string" ], "serialNumber": "string", "storePath": "string", "subject": "string", "thumbprint": "string", "usage": "string"}'@
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/certificates' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# Sign in first. outpost_console is a session cookie, so send it with every request.
import requests
url = "https://depot.example.com/api/v1/docs/certificates"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "domainId": "string", "issuer": "string", "monitorExpiry": False, "notAfter": "string", "notBefore": "string", "sans": [ "string", ], "serialNumber": "string", "storePath": "string", "subject": "string", "thumbprint": "string", "usage": "string",}
response = requests.post(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// Sign in first. outpost_console is a session cookie, so send it with every request.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "domainId": "string", "issuer": "string", "monitorExpiry": false, "notAfter": "string", "notBefore": "string", "sans": [ "string" ], "serialNumber": "string", "storePath": "string", "subject": "string", "thumbprint": "string", "usage": "string"}`)
req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/certificates", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// Sign in first. outpost_console is a session cookie, so send it with every request.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/certificates";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "domainId": "string", "issuer": "string", "monitorExpiry": false, "notAfter": "string", "notBefore": "string", "sans": [ "string" ], "serialNumber": "string", "storePath": "string", "subject": "string", "thumbprint": "string", "usage": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// Sign in first. outpost_console is a session cookie, so send it with every request.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "domainId": "string", "issuer": "string", "monitorExpiry": false, "notAfter": "string", "notBefore": "string", "sans": [ "string" ], "serialNumber": "string", "storePath": "string", "subject": "string", "thumbprint": "string", "usage": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/certificates");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/certificates/{certId}
Section titled “GET /api/v1/docs/certificates/{certId}”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Get doc certificate
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
certId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocCertificateView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
agentId | string | |
createdAtrequired | string (date-time) | |
domainId | string | |
issuer | string | |
monitorExpiryrequired | boolean | |
notAfter | string (date-time) or null | |
notBefore | string (date-time) or null | |
publicIdrequired | string | |
sansrequired | array of string | |
serialNumber | string | |
sourcerequired | string | |
storePath | string | |
subjectrequired | string | |
thumbprint | string | |
updatedAtrequired | string (date-time) | |
usage | string |
Request samples
Section titled “Request samples”# 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/docs/certificates/<certId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/certificates/<certId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/certificates/<certId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/certificates/<certId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/certificates/<certId>";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/certificates/<certId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());PATCH /api/v1/docs/certificates/{certId}
Section titled “PATCH /api/v1/docs/certificates/{certId}”PATCHdocs:writetenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
patchDocCertificate edits a HAND-ENTERED certificate.
A row mirrored out of an endpoint’s inventory or read off a TLS handshake is REFUSED, because the next sweep would overwrite the edit and the operator would have watched their correction disappear. The fix for a wrong inventory-sourced row is the endpoint, not this record.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
certId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
domainId | string or null | |
issuer | string or null | |
monitorExpiry | boolean or null | |
notAfter | string or null | |
notBefore | string or null | |
sansrequired | array of string | |
serialNumber | string or null | |
storePath | string or null | |
subject | string or null | |
thumbprint | string or null | |
usage | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocCertificateView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
agentId | string | |
createdAtrequired | string (date-time) | |
domainId | string | |
issuer | string | |
monitorExpiryrequired | boolean | |
notAfter | string (date-time) or null | |
notBefore | string (date-time) or null | |
publicIdrequired | string | |
sansrequired | array of string | |
serialNumber | string | |
sourcerequired | string | |
storePath | string | |
subjectrequired | string | |
thumbprint | string | |
updatedAtrequired | string (date-time) | |
usage | string |
Request samples
Section titled “Request samples”# 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/docs/certificates/<certId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "domainId": "string", "issuer": "string", "monitorExpiry": false, "notAfter": "string", "notBefore": "string", "sans": [ "string" ], "serialNumber": "string", "storePath": "string", "subject": "string", "thumbprint": "string", "usage": "string"}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "domainId": "string", "issuer": "string", "monitorExpiry": false, "notAfter": "string", "notBefore": "string", "sans": [ "string" ], "serialNumber": "string", "storePath": "string", "subject": "string", "thumbprint": "string", "usage": "string"}'@
$response = Invoke-RestMethod ` -Method Patch ` -Uri 'https://depot.example.com/api/v1/docs/certificates/<certId>' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/certificates/<certId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "domainId": "string", "issuer": "string", "monitorExpiry": False, "notAfter": "string", "notBefore": "string", "sans": [ "string", ], "serialNumber": "string", "storePath": "string", "subject": "string", "thumbprint": "string", "usage": "string",}
response = requests.patch(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "domainId": "string", "issuer": "string", "monitorExpiry": false, "notAfter": "string", "notBefore": "string", "sans": [ "string" ], "serialNumber": "string", "storePath": "string", "subject": "string", "thumbprint": "string", "usage": "string"}`)
req, err := http.NewRequest(http.MethodPatch, "https://depot.example.com/api/v1/docs/certificates/<certId>", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/certificates/<certId>";
const response = await fetch(url, { method: "PATCH", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "domainId": "string", "issuer": "string", "monitorExpiry": false, "notAfter": "string", "notBefore": "string", "sans": [ "string" ], "serialNumber": "string", "storePath": "string", "subject": "string", "thumbprint": "string", "usage": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "domainId": "string", "issuer": "string", "monitorExpiry": false, "notAfter": "string", "notBefore": "string", "sans": [ "string" ], "serialNumber": "string", "storePath": "string", "subject": "string", "thumbprint": "string", "usage": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Patch, "https://depot.example.com/api/v1/docs/certificates/<certId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());DELETE /api/v1/docs/certificates/{certId}
Section titled “DELETE /api/v1/docs/certificates/{certId}”DELETEdocs:writetenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Delete doc certificate
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
certId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
204 | None | Success, with no body. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
Request samples
Section titled “Request samples”# 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/docs/certificates/<certId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Delete ` -Uri 'https://depot.example.com/api/v1/docs/certificates/<certId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/certificates/<certId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.delete(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodDelete, "https://depot.example.com/api/v1/docs/certificates/<certId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/certificates/<certId>";
const response = await fetch(url, { method: "DELETE", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Delete, "https://depot.example.com/api/v1/docs/certificates/<certId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/connected-sources
Section titled “GET /api/v1/docs/connected-sources”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
listDocConnectedSources answers the bindings a connected field may name.
IT IS STATIC AND IT IS ON BOTH FACES, which is why it takes no store and reads no tenant: the grammar is the Depot’s, not a client’s, and a layout designed on the practice face is instanced into every client’s database, so a picker that answered differently depending on which face asked would offer a binding that stops resolving the moment the layout is used.
IT EXISTS BECAUSE THE CONSOLE HARDCODED THE LIST. A second copy of these keys in TypeScript drifts the day a column is added to the grammar, and the failure is silent in the direction nobody checks: the builder never offers the new field, so the grammar that would have accepted it is never asked and nobody finds out it was added.
docs:read and not docs:manage, even though only the layout builder renders it: it is a vocabulary rather than a setting, it names no client’s data, and a picker behind a code the person filling in the form lacks is a picker that renders empty for exactly the reader who needs to know what a field is bound to.
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocConnectedSourcesResponse | Success. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
200 response body
| Field | Type | Description |
|---|---|---|
sourcesrequired | array of Binding | |
sources[].keyrequired | string | |
sources[].kindrequired | string | |
sources[].labelrequired | string |
Request samples
Section titled “Request samples”# 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/docs/connected-sources' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/connected-sources' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/connected-sources"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/connected-sources", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/connected-sources";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/connected-sources");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/diagrams
Section titled “GET /api/v1/docs/diagrams”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
listDocDiagrams lists the client’s diagram files, newest first.
q narrows to files whose name or parent’s title contains it. A file whose parent the caller may not see is left out, never shown as restricted: the restriction exists to hide the parent.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
q | query | string | No |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, PagedResultDocDiagramView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocDiagramView | |
items[].createdAtrequired | string (date-time) | |
items[].documentIdrequired | string | |
items[].fileNamerequired | string | |
items[].formatrequired | string, one of drawio, image, vsdx | |
items[].parentIdrequired | string | |
items[].parentKindrequired | string | |
items[].parentTitlerequired | string | |
items[].sizeBytesrequired | integer | int64. |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/diagrams?page=0&pageSize=0&q=<q>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/diagrams?page=0&pageSize=0&q=<q>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/diagrams"params = { "page": "0", "pageSize": "0", "q": "<q>",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/diagrams?page=0&pageSize=0&q=<q>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/diagrams");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");url.searchParams.set("q", "<q>");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/diagrams?page=0&pageSize=0&q=<q>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());DELETE /api/v1/docs/documents/{documentId}
Section titled “DELETE /api/v1/docs/documents/{documentId}”DELETEdocs:writeshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Delete doc document
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
documentId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
204 | None | Success, with no body. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
Request samples
Section titled “Request samples”# 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/docs/documents/<documentId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Delete ` -Uri 'https://depot.example.com/api/v1/docs/documents/<documentId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/documents/<documentId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.delete(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodDelete, "https://depot.example.com/api/v1/docs/documents/<documentId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/documents/<documentId>";
const response = await fetch(url, { method: "DELETE", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Delete, "https://depot.example.com/api/v1/docs/documents/<documentId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/documents/{documentId}/content
Section titled “GET /api/v1/docs/documents/{documentId}/content”GETdocs:readshared facehosteditmspremoteIdempotentdownloadNot 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
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]
downloadDocDocument streams one file back.
The document is addressed by its own id rather than through its parent, because a document hangs off four different kinds of record and four routes would be four places to forget a check. The ACCESS CHECK IS STILL THE PARENT’S: the document inherits the record’s restriction, and a reader who may not see the firewall record may not download its configuration export either.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
documentId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/octet-stream, string (binary) | Success. The body shape was not resolved; see x-outpost-unresolved. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
502 | application/problem+json, ProblemDetails | The file could not be read. |
503 | application/problem+json, ProblemDetails | File storage is not configured on this Depot. |
Request samples
Section titled “Request samples”# 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/docs/documents/<documentId>/content' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/documents/<documentId>/content' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/documents/<documentId>/content"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/documents/<documentId>/content", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/documents/<documentId>/content";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/documents/<documentId>/content");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/documents/{documentId}/diagram
Section titled “GET /api/v1/docs/documents/{documentId}/diagram”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
readDocDiagram parses one diagram file (.drawio or .vsdx) and answers its pages as a graph plus the text summary Pioneer reads.
An image, or a file that will not parse, is a 422 saying why: an image is read only when the technician attaches it in a Pioneer chat.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
documentId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocDiagramRead | Success. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
422 | application/problem+json, ProblemDetails | The request was refused. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
502 | application/problem+json, ProblemDetails | The file could not be read. |
503 | application/problem+json, ProblemDetails | File storage is not configured on this Depot. |
200 response body
| Field | Type | Description |
|---|---|---|
diagramrequired | Diagram | Diagram is a parsed diagram file (.drawio or .vsdx): one Graph per page, every node and edge Source "doc" (NETWORK_MAP_CONTRACTS.md 9). |
diagram.formatrequired | string, one of drawio, vsdx | |
diagram.pagesrequired | array of DiagramPage | |
diagram.pages[].graphrequired | Graph | Graph is the network map. |
diagram.pages[].graph.edgesrequired | array of Edge | |
diagram.pages[].graph.groupsrequired | array of Group | |
diagram.pages[].graph.heightrequired | number | double. |
diagram.pages[].graph.icons | object | |
diagram.pages[].graph.nodesrequired | array of Node | |
diagram.pages[].graph.versionrequired | integer | |
diagram.pages[].graph.view | string | |
diagram.pages[].graph.widthrequired | number | double. |
diagram.pages[].namerequired | string | |
documentIdrequired | string | |
fileNamerequired | string | |
formatrequired | string | |
summaryrequired | string |
Request samples
Section titled “Request samples”# 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/docs/documents/<documentId>/diagram' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/documents/<documentId>/diagram' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/documents/<documentId>/diagram"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/documents/<documentId>/diagram", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/documents/<documentId>/diagram";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/documents/<documentId>/diagram");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/domains
Section titled “GET /api/v1/docs/domains”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
List doc domains
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
dir | query | string, one of asc, desc | No | Sort direction. |
expiringWithinDays | query | string | No | |
hasContract | query | string | No | |
monitored | query | string | No | |
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
q | query | string | No | Free-text search term. |
sort | query | string, one of created, expires, name, updated | No | Sort key. |
vendorId | query | string | No |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocDomainListResponse | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocDomainView | |
items[].checkFailureCountrequired | integer | |
items[].createdAtrequired | string (date-time) | |
items[].dkimSelectorsrequired | array of string | |
items[].dkimState | string | |
items[].dmarcRecord | string | |
items[].dmarcState | string | |
items[].expiresOn | string (date-time) or null | |
items[].lastCheckError | string | |
items[].lastCheckStatus | string | |
items[].lastCheckedAt | string (date-time) or null | |
items[].linkCountrequired | integer | |
items[].monitorDnsrequired | boolean | |
items[].monitorExpiryrequired | boolean | |
items[].monitorTlsrequired | boolean | |
items[].namerequired | string | |
items[].nameserversrequired | array of string | |
items[].nextCheckAt | string (date-time) or null | |
items[].publicIdrequired | string | |
items[].registeredOn | string (date-time) or null | |
items[].registrar | string | |
items[].restrictedrequired | boolean | |
items[].spfRecord | string | |
items[].spfState | string | |
items[].updatedAtrequired | string (date-time) | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer | |
truncated | boolean |
Request samples
Section titled “Request samples”# 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/docs/domains?dir=asc&expiringWithinDays=<expiringWithinDays>&hasContract=<hasContract>&monitored=<monitored>&page=0&pageSize=0' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/domains?dir=asc&expiringWithinDays=<expiringWithinDays>&hasContract=<hasContract>&monitored=<monitored>&page=0&pageSize=0' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/domains"params = { "dir": "asc", "expiringWithinDays": "<expiringWithinDays>", "hasContract": "<hasContract>", "monitored": "<monitored>", "page": "0", "pageSize": "0",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/domains?dir=asc&expiringWithinDays=<expiringWithinDays>&hasContract=<hasContract>&monitored=<monitored>&page=0&pageSize=0", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/domains");url.searchParams.set("dir", "asc");url.searchParams.set("expiringWithinDays", "<expiringWithinDays>");url.searchParams.set("hasContract", "<hasContract>");url.searchParams.set("monitored", "<monitored>");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/domains?dir=asc&expiringWithinDays=<expiringWithinDays>&hasContract=<hasContract>&monitored=<monitored>&page=0&pageSize=0");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/domains
Section titled “POST /api/v1/docs/domains”POSTdocs:writetenant facehosteditmspremote
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Create doc domain
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
dkimSelectorsrequired | array of string | |
expiresOn | string or null | |
monitorDns | boolean or null | |
monitorExpiry | boolean or null | |
monitorTls | boolean or null | |
name | string or null | |
nameserversrequired | array of string | |
registeredOn | string or null | |
registrar | string or null | |
restricted | boolean or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
201 | application/json, DocDomainView | Created. |
400 | application/problem+json, ProblemDetails | The request body is not valid JSON. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
201 response body
| Field | Type | Description |
|---|---|---|
checkFailureCountrequired | integer | |
createdAtrequired | string (date-time) | |
dkimSelectorsrequired | array of string | |
dkimState | string | |
dmarcRecord | string | |
dmarcState | string | |
expiresOn | string (date-time) or null | |
lastCheckError | string | |
lastCheckStatus | string | |
lastCheckedAt | string (date-time) or null | |
linkCountrequired | integer | |
monitorDnsrequired | boolean | |
monitorExpiryrequired | boolean | |
monitorTlsrequired | boolean | |
namerequired | string | |
nameserversrequired | array of string | |
nextCheckAt | string (date-time) or null | |
publicIdrequired | string | |
registeredOn | string (date-time) or null | |
registrar | string | |
restrictedrequired | boolean | |
spfRecord | string | |
spfState | string | |
updatedAtrequired | string (date-time) |
Request samples
Section titled “Request samples”# Sign in first. outpost_console is a session cookie, so send it with every request.curl -X POST 'https://depot.example.com/api/v1/docs/domains' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "dkimSelectors": [ "string" ], "expiresOn": "string", "monitorDns": false, "monitorExpiry": false, "monitorTls": false, "name": "string", "nameservers": [ "string" ], "registeredOn": "string", "registrar": "string", "restricted": false}'# Sign in first. outpost_console is a session cookie, so send it with every request.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "dkimSelectors": [ "string" ], "expiresOn": "string", "monitorDns": false, "monitorExpiry": false, "monitorTls": false, "name": "string", "nameservers": [ "string" ], "registeredOn": "string", "registrar": "string", "restricted": false}'@
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/domains' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# Sign in first. outpost_console is a session cookie, so send it with every request.
import requests
url = "https://depot.example.com/api/v1/docs/domains"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "dkimSelectors": [ "string", ], "expiresOn": "string", "monitorDns": False, "monitorExpiry": False, "monitorTls": False, "name": "string", "nameservers": [ "string", ], "registeredOn": "string", "registrar": "string", "restricted": False,}
response = requests.post(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// Sign in first. outpost_console is a session cookie, so send it with every request.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "dkimSelectors": [ "string" ], "expiresOn": "string", "monitorDns": false, "monitorExpiry": false, "monitorTls": false, "name": "string", "nameservers": [ "string" ], "registeredOn": "string", "registrar": "string", "restricted": false}`)
req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/domains", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// Sign in first. outpost_console is a session cookie, so send it with every request.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/domains";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "dkimSelectors": [ "string" ], "expiresOn": "string", "monitorDns": false, "monitorExpiry": false, "monitorTls": false, "name": "string", "nameservers": [ "string" ], "registeredOn": "string", "registrar": "string", "restricted": false }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// Sign in first. outpost_console is a session cookie, so send it with every request.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "dkimSelectors": [ "string" ], "expiresOn": "string", "monitorDns": false, "monitorExpiry": false, "monitorTls": false, "name": "string", "nameservers": [ "string" ], "registeredOn": "string", "registrar": "string", "restricted": false}""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/domains");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/domains/{domainId}
Section titled “GET /api/v1/docs/domains/{domainId}”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Get doc domain
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
domainId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocDomainView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
checkFailureCountrequired | integer | |
createdAtrequired | string (date-time) | |
dkimSelectorsrequired | array of string | |
dkimState | string | |
dmarcRecord | string | |
dmarcState | string | |
expiresOn | string (date-time) or null | |
lastCheckError | string | |
lastCheckStatus | string | |
lastCheckedAt | string (date-time) or null | |
linkCountrequired | integer | |
monitorDnsrequired | boolean | |
monitorExpiryrequired | boolean | |
monitorTlsrequired | boolean | |
namerequired | string | |
nameserversrequired | array of string | |
nextCheckAt | string (date-time) or null | |
publicIdrequired | string | |
registeredOn | string (date-time) or null | |
registrar | string | |
restrictedrequired | boolean | |
spfRecord | string | |
spfState | string | |
updatedAtrequired | string (date-time) |
Request samples
Section titled “Request samples”# 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/docs/domains/<domainId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/domains/<domainId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/domains/<domainId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/domains/<domainId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/domains/<domainId>";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/domains/<domainId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());PATCH /api/v1/docs/domains/{domainId}
Section titled “PATCH /api/v1/docs/domains/{domainId}”PATCHdocs:writetenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Patch doc domain
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
domainId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
dkimSelectorsrequired | array of string | |
expiresOn | string or null | |
monitorDns | boolean or null | |
monitorExpiry | boolean or null | |
monitorTls | boolean or null | |
name | string or null | |
nameserversrequired | array of string | |
registeredOn | string or null | |
registrar | string or null | |
restricted | boolean or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocDomainView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
checkFailureCountrequired | integer | |
createdAtrequired | string (date-time) | |
dkimSelectorsrequired | array of string | |
dkimState | string | |
dmarcRecord | string | |
dmarcState | string | |
expiresOn | string (date-time) or null | |
lastCheckError | string | |
lastCheckStatus | string | |
lastCheckedAt | string (date-time) or null | |
linkCountrequired | integer | |
monitorDnsrequired | boolean | |
monitorExpiryrequired | boolean | |
monitorTlsrequired | boolean | |
namerequired | string | |
nameserversrequired | array of string | |
nextCheckAt | string (date-time) or null | |
publicIdrequired | string | |
registeredOn | string (date-time) or null | |
registrar | string | |
restrictedrequired | boolean | |
spfRecord | string | |
spfState | string | |
updatedAtrequired | string (date-time) |
Request samples
Section titled “Request samples”# 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/docs/domains/<domainId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "dkimSelectors": [ "string" ], "expiresOn": "string", "monitorDns": false, "monitorExpiry": false, "monitorTls": false, "name": "string", "nameservers": [ "string" ], "registeredOn": "string", "registrar": "string", "restricted": false}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "dkimSelectors": [ "string" ], "expiresOn": "string", "monitorDns": false, "monitorExpiry": false, "monitorTls": false, "name": "string", "nameservers": [ "string" ], "registeredOn": "string", "registrar": "string", "restricted": false}'@
$response = Invoke-RestMethod ` -Method Patch ` -Uri 'https://depot.example.com/api/v1/docs/domains/<domainId>' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/domains/<domainId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "dkimSelectors": [ "string", ], "expiresOn": "string", "monitorDns": False, "monitorExpiry": False, "monitorTls": False, "name": "string", "nameservers": [ "string", ], "registeredOn": "string", "registrar": "string", "restricted": False,}
response = requests.patch(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "dkimSelectors": [ "string" ], "expiresOn": "string", "monitorDns": false, "monitorExpiry": false, "monitorTls": false, "name": "string", "nameservers": [ "string" ], "registeredOn": "string", "registrar": "string", "restricted": false}`)
req, err := http.NewRequest(http.MethodPatch, "https://depot.example.com/api/v1/docs/domains/<domainId>", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/domains/<domainId>";
const response = await fetch(url, { method: "PATCH", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "dkimSelectors": [ "string" ], "expiresOn": "string", "monitorDns": false, "monitorExpiry": false, "monitorTls": false, "name": "string", "nameservers": [ "string" ], "registeredOn": "string", "registrar": "string", "restricted": false }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "dkimSelectors": [ "string" ], "expiresOn": "string", "monitorDns": false, "monitorExpiry": false, "monitorTls": false, "name": "string", "nameservers": [ "string" ], "registeredOn": "string", "registrar": "string", "restricted": false}""";
var request = new HttpRequestMessage(HttpMethod.Patch, "https://depot.example.com/api/v1/docs/domains/<domainId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());DELETE /api/v1/docs/domains/{domainId}
Section titled “DELETE /api/v1/docs/domains/{domainId}”DELETEdocs:writetenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Delete doc domain
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
domainId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
204 | None | Success, with no body. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
Request samples
Section titled “Request samples”# 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/docs/domains/<domainId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Delete ` -Uri 'https://depot.example.com/api/v1/docs/domains/<domainId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/domains/<domainId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.delete(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodDelete, "https://depot.example.com/api/v1/docs/domains/<domainId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/domains/<domainId>";
const response = await fetch(url, { method: "DELETE", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Delete, "https://depot.example.com/api/v1/docs/domains/<domainId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/domains/{domainId}/check
Section titled “POST /api/v1/docs/domains/{domainId}/check”POSTdocs:writetenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Check doc domain
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
domainId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
202 | application/json, DocDomainCheckResponse | Accepted. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot cannot schedule a domain check. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
202 response body
| Field | Type | Description |
|---|---|---|
domainChecksAvailablerequired | boolean | |
nextCheckAt | string (date-time) or null | |
publicIdrequired | string |
Request samples
Section titled “Request samples”# 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/docs/domains/<domainId>/check' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/domains/<domainId>/check' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/domains/<domainId>/check"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.post(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/domains/<domainId>/check", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/domains/<domainId>/check";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/domains/<domainId>/check");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/expirations
Section titled “GET /api/v1/docs/expirations”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
listDocExpirations answers the expirations page and the Documentation overview’s two counts.
withinDays is the lead-day filter the console’s chips send. It defaults to the SECOND lead day plus the first, so the default page is everything either warning band would have raised, rather than an arbitrary ninety days.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
clientId | query | string | No | |
includePast | query | string | No | |
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
siteId | query | string | No | |
sourceKinds | query | string, one of article_review, asset_field, asset_warranty, certificate, credential_rotate, domain, licence, vendor_contract | No | Comma-separated set. An unrecognised value is refused. |
withinDays | query | string | No |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocExpirationsResponse | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches that scope. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | The client scope is unavailable. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
breachChecksAvailablerequired | boolean | |
domainChecksAvailablerequired | boolean | |
itemsrequired | array of DocExpirationRow | |
items[].clientId | string | |
items[].clientName | string | |
items[].daysRemainingrequired | integer | |
items[].detailrequired | string | |
items[].dueOnrequired | string (date-time) | |
items[].hrefrequired | string | |
items[].objectIdrequired | string | |
items[].objectKindrequired | string | |
items[].severityrequired | string | |
items[].sourceKindrequired | string | |
items[].titlerequired | string | |
pagerequired | integer | |
pageSizerequired | integer | |
siteFilteredrequired | boolean | |
totalrequired | integer | |
unavailableClients | array of DocUnavailableClient | |
unavailableClients[].clientIdrequired | string | |
unavailableClients[].namerequired | string |
Request samples
Section titled “Request samples”# 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/docs/expirations?clientId=<clientId>&includePast=<includePast>&page=0&pageSize=0&siteId=<siteId>&sourceKinds=article_review' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/expirations?clientId=<clientId>&includePast=<includePast>&page=0&pageSize=0&siteId=<siteId>&sourceKinds=article_review' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/expirations"params = { "clientId": "<clientId>", "includePast": "<includePast>", "page": "0", "pageSize": "0", "siteId": "<siteId>", "sourceKinds": "article_review",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/expirations?clientId=<clientId>&includePast=<includePast>&page=0&pageSize=0&siteId=<siteId>&sourceKinds=article_review", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/expirations");url.searchParams.set("clientId", "<clientId>");url.searchParams.set("includePast", "<includePast>");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");url.searchParams.set("siteId", "<siteId>");url.searchParams.set("sourceKinds", "article_review");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/expirations?clientId=<clientId>&includePast=<includePast>&page=0&pageSize=0&siteId=<siteId>&sourceKinds=article_review");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/layouts
Section titled “GET /api/v1/docs/layouts”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
List doc layouts
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
includeArchived | query | string | No | |
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, PagedResultDocLayoutView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocLayoutView | |
items[].archivedrequired | boolean | |
items[].createdAtrequired | string (date-time) | |
items[].description | string | |
items[].fieldsrequired | array of DocFieldView | |
items[].fields[].connectedSource | string | |
items[].fields[].defaultValue | string | |
items[].fields[].hint | string | |
items[].fields[].keyrequired | string | |
items[].fields[].kindrequired | string | |
items[].fields[].labelrequired | string | |
items[].fields[].optionListId | string | |
items[].fields[].optionsrequired | array of string | |
items[].fields[].publicIdrequired | string | |
items[].fields[].relationKindsrequired | array of string | |
items[].fields[].requiredrequired | boolean | |
items[].fields[].showIf | any | |
items[].fields[].showInListrequired | boolean | |
items[].fields[].sortOrderrequired | integer | |
items[].fields[].tracksExpirationrequired | boolean | |
items[].icon | string | |
items[].keyrequired | string | |
items[].namerequired | string | |
items[].publicIdrequired | string | |
items[].restrictedrequired | boolean | |
items[].scoperequired | string | |
items[].sortOrderrequired | integer | |
items[].titleFieldKey | string | |
items[].updatedAtrequired | string (date-time) | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/layouts?includeArchived=<includeArchived>&page=0&pageSize=0' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/layouts?includeArchived=<includeArchived>&page=0&pageSize=0' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/layouts"params = { "includeArchived": "<includeArchived>", "page": "0", "pageSize": "0",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/layouts?includeArchived=<includeArchived>&page=0&pageSize=0", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/layouts");url.searchParams.set("includeArchived", "<includeArchived>");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/layouts?includeArchived=<includeArchived>&page=0&pageSize=0");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/layouts
Section titled “POST /api/v1/docs/layouts”POSTdocs:manageshared facehosteditmspremote
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Create doc layout
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
archived | boolean or null | |
description | string or null | |
icon | string or null | |
key | string or null | |
name | string or null | |
restricted | boolean or null | |
sortOrder | integer or null | |
titleFieldKey | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
201 | application/json, DocLayoutView | Created. |
400 | application/problem+json, ProblemDetails | The request body is not valid JSON. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:manage. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
201 response body
| Field | Type | Description |
|---|---|---|
archivedrequired | boolean | |
createdAtrequired | string (date-time) | |
description | string | |
fieldsrequired | array of DocFieldView | |
fields[].connectedSource | string | |
fields[].defaultValue | string | |
fields[].hint | string | |
fields[].keyrequired | string | |
fields[].kindrequired | string | |
fields[].labelrequired | string | |
fields[].optionListId | string | |
fields[].optionsrequired | array of string | |
fields[].publicIdrequired | string | |
fields[].relationKindsrequired | array of string | |
fields[].requiredrequired | boolean | |
fields[].showIf | any | |
fields[].showInListrequired | boolean | |
fields[].sortOrderrequired | integer | |
fields[].tracksExpirationrequired | boolean | |
icon | string | |
keyrequired | string | |
namerequired | string | |
publicIdrequired | string | |
restrictedrequired | boolean | |
scoperequired | string | |
sortOrderrequired | integer | |
titleFieldKey | string | |
updatedAtrequired | string (date-time) |
Request samples
Section titled “Request samples”# Sign in first. outpost_console is a session cookie, so send it with every request.curl -X POST 'https://depot.example.com/api/v1/docs/layouts' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "archived": false, "description": "string", "icon": "string", "key": "string", "name": "string", "restricted": false, "sortOrder": 0, "titleFieldKey": "string"}'# Sign in first. outpost_console is a session cookie, so send it with every request.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "archived": false, "description": "string", "icon": "string", "key": "string", "name": "string", "restricted": false, "sortOrder": 0, "titleFieldKey": "string"}'@
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/layouts' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# Sign in first. outpost_console is a session cookie, so send it with every request.
import requests
url = "https://depot.example.com/api/v1/docs/layouts"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "archived": False, "description": "string", "icon": "string", "key": "string", "name": "string", "restricted": False, "sortOrder": 0, "titleFieldKey": "string",}
response = requests.post(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// Sign in first. outpost_console is a session cookie, so send it with every request.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "archived": false, "description": "string", "icon": "string", "key": "string", "name": "string", "restricted": false, "sortOrder": 0, "titleFieldKey": "string"}`)
req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/layouts", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// Sign in first. outpost_console is a session cookie, so send it with every request.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/layouts";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "archived": false, "description": "string", "icon": "string", "key": "string", "name": "string", "restricted": false, "sortOrder": 0, "titleFieldKey": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// Sign in first. outpost_console is a session cookie, so send it with every request.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "archived": false, "description": "string", "icon": "string", "key": "string", "name": "string", "restricted": false, "sortOrder": 0, "titleFieldKey": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/layouts");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/layouts/{layoutId}
Section titled “GET /api/v1/docs/layouts/{layoutId}”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Get doc layout
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
layoutId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocLayoutView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
archivedrequired | boolean | |
createdAtrequired | string (date-time) | |
description | string | |
fieldsrequired | array of DocFieldView | |
fields[].connectedSource | string | |
fields[].defaultValue | string | |
fields[].hint | string | |
fields[].keyrequired | string | |
fields[].kindrequired | string | |
fields[].labelrequired | string | |
fields[].optionListId | string | |
fields[].optionsrequired | array of string | |
fields[].publicIdrequired | string | |
fields[].relationKindsrequired | array of string | |
fields[].requiredrequired | boolean | |
fields[].showIf | any | |
fields[].showInListrequired | boolean | |
fields[].sortOrderrequired | integer | |
fields[].tracksExpirationrequired | boolean | |
icon | string | |
keyrequired | string | |
namerequired | string | |
publicIdrequired | string | |
restrictedrequired | boolean | |
scoperequired | string | |
sortOrderrequired | integer | |
titleFieldKey | string | |
updatedAtrequired | string (date-time) |
Request samples
Section titled “Request samples”# 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/docs/layouts/<layoutId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/layouts/<layoutId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/layouts/<layoutId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/layouts/<layoutId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/layouts/<layoutId>";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/layouts/<layoutId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());PATCH /api/v1/docs/layouts/{layoutId}
Section titled “PATCH /api/v1/docs/layouts/{layoutId}”PATCHdocs:manageshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Patch doc layout
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
layoutId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
archived | boolean or null | |
description | string or null | |
icon | string or null | |
key | string or null | |
name | string or null | |
restricted | boolean or null | |
sortOrder | integer or null | |
titleFieldKey | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocLayoutView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:manage. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
archivedrequired | boolean | |
createdAtrequired | string (date-time) | |
description | string | |
fieldsrequired | array of DocFieldView | |
fields[].connectedSource | string | |
fields[].defaultValue | string | |
fields[].hint | string | |
fields[].keyrequired | string | |
fields[].kindrequired | string | |
fields[].labelrequired | string | |
fields[].optionListId | string | |
fields[].optionsrequired | array of string | |
fields[].publicIdrequired | string | |
fields[].relationKindsrequired | array of string | |
fields[].requiredrequired | boolean | |
fields[].showIf | any | |
fields[].showInListrequired | boolean | |
fields[].sortOrderrequired | integer | |
fields[].tracksExpirationrequired | boolean | |
icon | string | |
keyrequired | string | |
namerequired | string | |
publicIdrequired | string | |
restrictedrequired | boolean | |
scoperequired | string | |
sortOrderrequired | integer | |
titleFieldKey | string | |
updatedAtrequired | string (date-time) |
Request samples
Section titled “Request samples”# 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/docs/layouts/<layoutId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "archived": false, "description": "string", "icon": "string", "key": "string", "name": "string", "restricted": false, "sortOrder": 0, "titleFieldKey": "string"}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "archived": false, "description": "string", "icon": "string", "key": "string", "name": "string", "restricted": false, "sortOrder": 0, "titleFieldKey": "string"}'@
$response = Invoke-RestMethod ` -Method Patch ` -Uri 'https://depot.example.com/api/v1/docs/layouts/<layoutId>' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/layouts/<layoutId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "archived": False, "description": "string", "icon": "string", "key": "string", "name": "string", "restricted": False, "sortOrder": 0, "titleFieldKey": "string",}
response = requests.patch(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "archived": false, "description": "string", "icon": "string", "key": "string", "name": "string", "restricted": false, "sortOrder": 0, "titleFieldKey": "string"}`)
req, err := http.NewRequest(http.MethodPatch, "https://depot.example.com/api/v1/docs/layouts/<layoutId>", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/layouts/<layoutId>";
const response = await fetch(url, { method: "PATCH", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "archived": false, "description": "string", "icon": "string", "key": "string", "name": "string", "restricted": false, "sortOrder": 0, "titleFieldKey": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "archived": false, "description": "string", "icon": "string", "key": "string", "name": "string", "restricted": false, "sortOrder": 0, "titleFieldKey": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Patch, "https://depot.example.com/api/v1/docs/layouts/<layoutId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());DELETE /api/v1/docs/layouts/{layoutId}
Section titled “DELETE /api/v1/docs/layouts/{layoutId}”DELETEdocs:manageshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Delete doc layout
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
layoutId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
204 | None | Success, with no body. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:manage. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
Request samples
Section titled “Request samples”# 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/docs/layouts/<layoutId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Delete ` -Uri 'https://depot.example.com/api/v1/docs/layouts/<layoutId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/layouts/<layoutId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.delete(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodDelete, "https://depot.example.com/api/v1/docs/layouts/<layoutId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/layouts/<layoutId>";
const response = await fetch(url, { method: "DELETE", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Delete, "https://depot.example.com/api/v1/docs/layouts/<layoutId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/layouts/{layoutId}/fields
Section titled “GET /api/v1/docs/layouts/{layoutId}/fields”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
List doc layout fields
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
layoutId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, PagedResultDocFieldView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocFieldView | |
items[].connectedSource | string | |
items[].defaultValue | string | |
items[].hint | string | |
items[].keyrequired | string | |
items[].kindrequired | string | |
items[].labelrequired | string | |
items[].optionListId | string | |
items[].optionsrequired | array of string | |
items[].publicIdrequired | string | |
items[].relationKindsrequired | array of string | |
items[].requiredrequired | boolean | |
items[].showIf | any | |
items[].showInListrequired | boolean | |
items[].sortOrderrequired | integer | |
items[].tracksExpirationrequired | boolean | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/layouts/<layoutId>/fields' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/layouts/{layoutId}/fields
Section titled “POST /api/v1/docs/layouts/{layoutId}/fields”POSTdocs:manageshared facehosteditmspremote
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Create doc layout field
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
layoutId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
connectedSource | string or null | |
defaultValue | string or null | |
hint | string or null | |
key | string or null | |
kind | string or null | |
label | string or null | |
optionListId | string or null | |
optionsrequired | array of string | |
relationKindsrequired | array of string | |
required | boolean or null | |
showIfrequired | any | Arbitrary JSON. |
showInList | boolean or null | |
sortOrder | integer or null | |
tracksExpiration | boolean or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
201 | application/json, DocFieldView | Created. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:manage. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
201 response body
| Field | Type | Description |
|---|---|---|
connectedSource | string | |
defaultValue | string | |
hint | string | |
keyrequired | string | |
kindrequired | string | |
labelrequired | string | |
optionListId | string | |
optionsrequired | array of string | |
publicIdrequired | string | |
relationKindsrequired | array of string | |
requiredrequired | boolean | |
showIf | any | |
showInListrequired | boolean | |
sortOrderrequired | integer | |
tracksExpirationrequired | boolean |
Request samples
Section titled “Request samples”# Sign in first. outpost_console is a session cookie, so send it with every request.curl -X POST 'https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "connectedSource": "string", "defaultValue": "string", "hint": "string", "key": "string", "kind": "string", "label": "string", "optionListId": "string", "options": [ "string" ], "relationKinds": [ "string" ], "required": false, "showIf": "string", "showInList": false, "sortOrder": 0, "tracksExpiration": false}'# Sign in first. outpost_console is a session cookie, so send it with every request.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "connectedSource": "string", "defaultValue": "string", "hint": "string", "key": "string", "kind": "string", "label": "string", "optionListId": "string", "options": [ "string" ], "relationKinds": [ "string" ], "required": false, "showIf": "string", "showInList": false, "sortOrder": 0, "tracksExpiration": false}'@
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# Sign in first. outpost_console is a session cookie, so send it with every request.
import requests
url = "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "connectedSource": "string", "defaultValue": "string", "hint": "string", "key": "string", "kind": "string", "label": "string", "optionListId": "string", "options": [ "string", ], "relationKinds": [ "string", ], "required": False, "showIf": "string", "showInList": False, "sortOrder": 0, "tracksExpiration": False,}
response = requests.post(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// Sign in first. outpost_console is a session cookie, so send it with every request.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "connectedSource": "string", "defaultValue": "string", "hint": "string", "key": "string", "kind": "string", "label": "string", "optionListId": "string", "options": [ "string" ], "relationKinds": [ "string" ], "required": false, "showIf": "string", "showInList": false, "sortOrder": 0, "tracksExpiration": false}`)
req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// Sign in first. outpost_console is a session cookie, so send it with every request.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "connectedSource": "string", "defaultValue": "string", "hint": "string", "key": "string", "kind": "string", "label": "string", "optionListId": "string", "options": [ "string" ], "relationKinds": [ "string" ], "required": false, "showIf": "string", "showInList": false, "sortOrder": 0, "tracksExpiration": false }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// Sign in first. outpost_console is a session cookie, so send it with every request.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "connectedSource": "string", "defaultValue": "string", "hint": "string", "key": "string", "kind": "string", "label": "string", "optionListId": "string", "options": [ "string" ], "relationKinds": [ "string" ], "required": false, "showIf": "string", "showInList": false, "sortOrder": 0, "tracksExpiration": false}""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());PATCH /api/v1/docs/layouts/{layoutId}/fields/{fieldId}
Section titled “PATCH /api/v1/docs/layouts/{layoutId}/fields/{fieldId}”PATCHdocs:manageshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Patch doc layout field
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
fieldId | path | string | Yes | A uuid. |
layoutId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
connectedSource | string or null | |
defaultValue | string or null | |
hint | string or null | |
key | string or null | |
kind | string or null | |
label | string or null | |
optionListId | string or null | |
optionsrequired | array of string | |
relationKindsrequired | array of string | |
required | boolean or null | |
showIfrequired | any | Arbitrary JSON. |
showInList | boolean or null | |
sortOrder | integer or null | |
tracksExpiration | boolean or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocFieldView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:manage. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
connectedSource | string | |
defaultValue | string | |
hint | string | |
keyrequired | string | |
kindrequired | string | |
labelrequired | string | |
optionListId | string | |
optionsrequired | array of string | |
publicIdrequired | string | |
relationKindsrequired | array of string | |
requiredrequired | boolean | |
showIf | any | |
showInListrequired | boolean | |
sortOrderrequired | integer | |
tracksExpirationrequired | boolean |
Request samples
Section titled “Request samples”# 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/docs/layouts/<layoutId>/fields/<fieldId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "connectedSource": "string", "defaultValue": "string", "hint": "string", "key": "string", "kind": "string", "label": "string", "optionListId": "string", "options": [ "string" ], "relationKinds": [ "string" ], "required": false, "showIf": "string", "showInList": false, "sortOrder": 0, "tracksExpiration": false}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "connectedSource": "string", "defaultValue": "string", "hint": "string", "key": "string", "kind": "string", "label": "string", "optionListId": "string", "options": [ "string" ], "relationKinds": [ "string" ], "required": false, "showIf": "string", "showInList": false, "sortOrder": 0, "tracksExpiration": false}'@
$response = Invoke-RestMethod ` -Method Patch ` -Uri 'https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields/<fieldId>' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields/<fieldId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "connectedSource": "string", "defaultValue": "string", "hint": "string", "key": "string", "kind": "string", "label": "string", "optionListId": "string", "options": [ "string", ], "relationKinds": [ "string", ], "required": False, "showIf": "string", "showInList": False, "sortOrder": 0, "tracksExpiration": False,}
response = requests.patch(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "connectedSource": "string", "defaultValue": "string", "hint": "string", "key": "string", "kind": "string", "label": "string", "optionListId": "string", "options": [ "string" ], "relationKinds": [ "string" ], "required": false, "showIf": "string", "showInList": false, "sortOrder": 0, "tracksExpiration": false}`)
req, err := http.NewRequest(http.MethodPatch, "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields/<fieldId>", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields/<fieldId>";
const response = await fetch(url, { method: "PATCH", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "connectedSource": "string", "defaultValue": "string", "hint": "string", "key": "string", "kind": "string", "label": "string", "optionListId": "string", "options": [ "string" ], "relationKinds": [ "string" ], "required": false, "showIf": "string", "showInList": false, "sortOrder": 0, "tracksExpiration": false }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "connectedSource": "string", "defaultValue": "string", "hint": "string", "key": "string", "kind": "string", "label": "string", "optionListId": "string", "options": [ "string" ], "relationKinds": [ "string" ], "required": false, "showIf": "string", "showInList": false, "sortOrder": 0, "tracksExpiration": false}""";
var request = new HttpRequestMessage(HttpMethod.Patch, "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields/<fieldId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());DELETE /api/v1/docs/layouts/{layoutId}/fields/{fieldId}
Section titled “DELETE /api/v1/docs/layouts/{layoutId}/fields/{fieldId}”DELETEdocs:manageshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Delete doc layout field
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
fieldId | path | string | Yes | A uuid. |
layoutId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
204 | None | Success, with no body. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:manage. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
Request samples
Section titled “Request samples”# 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/docs/layouts/<layoutId>/fields/<fieldId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Delete ` -Uri 'https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields/<fieldId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields/<fieldId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.delete(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodDelete, "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields/<fieldId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields/<fieldId>";
const response = await fetch(url, { method: "DELETE", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Delete, "https://depot.example.com/api/v1/docs/layouts/<layoutId>/fields/<fieldId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/licences
Section titled “GET /api/v1/docs/licences”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
List doc licences
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
dir | query | string, one of asc, desc | No | Sort direction. |
expiringWithinDays | query | string | No | |
hasContract | query | string | No | |
monitored | query | string | No | |
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
q | query | string | No | Free-text search term. |
sort | query | string, one of created, expires, name, updated | No | Sort key. |
vendorId | query | string | No |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocLicenceListResponse | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocLicenceView | |
items[].autoRenewsrequired | boolean | |
items[].createdAtrequired | string (date-time) | |
items[].expiresOn | string (date-time) or null | |
items[].keyCredentialId | string | |
items[].labelsrequired | array of string | |
items[].linkCountrequired | integer | |
items[].namerequired | string | |
items[].notes | string | |
items[].product | string | |
items[].publicIdrequired | string | |
items[].purchasedOn | string (date-time) or null | |
items[].restrictedrequired | boolean | |
items[].seatsTotalrequired | integer | |
items[].seatsUsedrequired | integer | |
items[].updatedAtrequired | string (date-time) | |
items[].vendorId | string | |
items[].vendorName | string | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer | |
truncated | boolean |
Request samples
Section titled “Request samples”# 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/docs/licences?dir=asc&expiringWithinDays=<expiringWithinDays>&hasContract=<hasContract>&monitored=<monitored>&page=0&pageSize=0' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/licences?dir=asc&expiringWithinDays=<expiringWithinDays>&hasContract=<hasContract>&monitored=<monitored>&page=0&pageSize=0' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/licences"params = { "dir": "asc", "expiringWithinDays": "<expiringWithinDays>", "hasContract": "<hasContract>", "monitored": "<monitored>", "page": "0", "pageSize": "0",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/licences?dir=asc&expiringWithinDays=<expiringWithinDays>&hasContract=<hasContract>&monitored=<monitored>&page=0&pageSize=0", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/licences");url.searchParams.set("dir", "asc");url.searchParams.set("expiringWithinDays", "<expiringWithinDays>");url.searchParams.set("hasContract", "<hasContract>");url.searchParams.set("monitored", "<monitored>");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/licences?dir=asc&expiringWithinDays=<expiringWithinDays>&hasContract=<hasContract>&monitored=<monitored>&page=0&pageSize=0");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/licences
Section titled “POST /api/v1/docs/licences”POSTdocs:writetenant facehosteditmspremote
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Create doc licence
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
autoRenews | boolean or null | |
expiresOn | string or null | |
key | string or null | |
keyCredentialId | string or null | |
labelsrequired | array of string | |
name | string or null | |
notes | string or null | |
product | string or null | |
purchasedOn | string or null | |
restricted | boolean or null | |
seatsTotal | integer or null | |
seatsUsed | integer or null | |
vendorId | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
201 | application/json, DocLicenceView | Created. |
400 | application/problem+json, ProblemDetails | The request body is not valid JSON. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
201 response body
| Field | Type | Description |
|---|---|---|
autoRenewsrequired | boolean | |
createdAtrequired | string (date-time) | |
expiresOn | string (date-time) or null | |
keyCredentialId | string | |
labelsrequired | array of string | |
linkCountrequired | integer | |
namerequired | string | |
notes | string | |
product | string | |
publicIdrequired | string | |
purchasedOn | string (date-time) or null | |
restrictedrequired | boolean | |
seatsTotalrequired | integer | |
seatsUsedrequired | integer | |
updatedAtrequired | string (date-time) | |
vendorId | string | |
vendorName | string |
Request samples
Section titled “Request samples”# Sign in first. outpost_console is a session cookie, so send it with every request.curl -X POST 'https://depot.example.com/api/v1/docs/licences' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "autoRenews": false, "expiresOn": "string", "key": "string", "keyCredentialId": "string", "labels": [ "string" ], "name": "string", "notes": "string", "product": "string", "purchasedOn": "string", "restricted": false, "seatsTotal": 0, "seatsUsed": 0, "vendorId": "string"}'# Sign in first. outpost_console is a session cookie, so send it with every request.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "autoRenews": false, "expiresOn": "string", "key": "string", "keyCredentialId": "string", "labels": [ "string" ], "name": "string", "notes": "string", "product": "string", "purchasedOn": "string", "restricted": false, "seatsTotal": 0, "seatsUsed": 0, "vendorId": "string"}'@
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/licences' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# Sign in first. outpost_console is a session cookie, so send it with every request.
import requests
url = "https://depot.example.com/api/v1/docs/licences"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "autoRenews": False, "expiresOn": "string", "key": "string", "keyCredentialId": "string", "labels": [ "string", ], "name": "string", "notes": "string", "product": "string", "purchasedOn": "string", "restricted": False, "seatsTotal": 0, "seatsUsed": 0, "vendorId": "string",}
response = requests.post(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// Sign in first. outpost_console is a session cookie, so send it with every request.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "autoRenews": false, "expiresOn": "string", "key": "string", "keyCredentialId": "string", "labels": [ "string" ], "name": "string", "notes": "string", "product": "string", "purchasedOn": "string", "restricted": false, "seatsTotal": 0, "seatsUsed": 0, "vendorId": "string"}`)
req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/licences", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// Sign in first. outpost_console is a session cookie, so send it with every request.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/licences";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "autoRenews": false, "expiresOn": "string", "key": "string", "keyCredentialId": "string", "labels": [ "string" ], "name": "string", "notes": "string", "product": "string", "purchasedOn": "string", "restricted": false, "seatsTotal": 0, "seatsUsed": 0, "vendorId": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// Sign in first. outpost_console is a session cookie, so send it with every request.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "autoRenews": false, "expiresOn": "string", "key": "string", "keyCredentialId": "string", "labels": [ "string" ], "name": "string", "notes": "string", "product": "string", "purchasedOn": "string", "restricted": false, "seatsTotal": 0, "seatsUsed": 0, "vendorId": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/licences");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/licences/{licenceId}
Section titled “GET /api/v1/docs/licences/{licenceId}”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Get doc licence
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
licenceId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocLicenceView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
autoRenewsrequired | boolean | |
createdAtrequired | string (date-time) | |
expiresOn | string (date-time) or null | |
keyCredentialId | string | |
labelsrequired | array of string | |
linkCountrequired | integer | |
namerequired | string | |
notes | string | |
product | string | |
publicIdrequired | string | |
purchasedOn | string (date-time) or null | |
restrictedrequired | boolean | |
seatsTotalrequired | integer | |
seatsUsedrequired | integer | |
updatedAtrequired | string (date-time) | |
vendorId | string | |
vendorName | string |
Request samples
Section titled “Request samples”# 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/docs/licences/<licenceId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/licences/<licenceId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/licences/<licenceId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/licences/<licenceId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/licences/<licenceId>";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/licences/<licenceId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());PATCH /api/v1/docs/licences/{licenceId}
Section titled “PATCH /api/v1/docs/licences/{licenceId}”PATCHdocs:writetenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Patch doc licence
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
licenceId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
autoRenews | boolean or null | |
expiresOn | string or null | |
key | string or null | |
keyCredentialId | string or null | |
labelsrequired | array of string | |
name | string or null | |
notes | string or null | |
product | string or null | |
purchasedOn | string or null | |
restricted | boolean or null | |
seatsTotal | integer or null | |
seatsUsed | integer or null | |
vendorId | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocLicenceView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
autoRenewsrequired | boolean | |
createdAtrequired | string (date-time) | |
expiresOn | string (date-time) or null | |
keyCredentialId | string | |
labelsrequired | array of string | |
linkCountrequired | integer | |
namerequired | string | |
notes | string | |
product | string | |
publicIdrequired | string | |
purchasedOn | string (date-time) or null | |
restrictedrequired | boolean | |
seatsTotalrequired | integer | |
seatsUsedrequired | integer | |
updatedAtrequired | string (date-time) | |
vendorId | string | |
vendorName | string |
Request samples
Section titled “Request samples”# 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/docs/licences/<licenceId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "autoRenews": false, "expiresOn": "string", "key": "string", "keyCredentialId": "string", "labels": [ "string" ], "name": "string", "notes": "string", "product": "string", "purchasedOn": "string", "restricted": false, "seatsTotal": 0, "seatsUsed": 0, "vendorId": "string"}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "autoRenews": false, "expiresOn": "string", "key": "string", "keyCredentialId": "string", "labels": [ "string" ], "name": "string", "notes": "string", "product": "string", "purchasedOn": "string", "restricted": false, "seatsTotal": 0, "seatsUsed": 0, "vendorId": "string"}'@
$response = Invoke-RestMethod ` -Method Patch ` -Uri 'https://depot.example.com/api/v1/docs/licences/<licenceId>' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/licences/<licenceId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "autoRenews": False, "expiresOn": "string", "key": "string", "keyCredentialId": "string", "labels": [ "string", ], "name": "string", "notes": "string", "product": "string", "purchasedOn": "string", "restricted": False, "seatsTotal": 0, "seatsUsed": 0, "vendorId": "string",}
response = requests.patch(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "autoRenews": false, "expiresOn": "string", "key": "string", "keyCredentialId": "string", "labels": [ "string" ], "name": "string", "notes": "string", "product": "string", "purchasedOn": "string", "restricted": false, "seatsTotal": 0, "seatsUsed": 0, "vendorId": "string"}`)
req, err := http.NewRequest(http.MethodPatch, "https://depot.example.com/api/v1/docs/licences/<licenceId>", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/licences/<licenceId>";
const response = await fetch(url, { method: "PATCH", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "autoRenews": false, "expiresOn": "string", "key": "string", "keyCredentialId": "string", "labels": [ "string" ], "name": "string", "notes": "string", "product": "string", "purchasedOn": "string", "restricted": false, "seatsTotal": 0, "seatsUsed": 0, "vendorId": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "autoRenews": false, "expiresOn": "string", "key": "string", "keyCredentialId": "string", "labels": [ "string" ], "name": "string", "notes": "string", "product": "string", "purchasedOn": "string", "restricted": false, "seatsTotal": 0, "seatsUsed": 0, "vendorId": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Patch, "https://depot.example.com/api/v1/docs/licences/<licenceId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());DELETE /api/v1/docs/licences/{licenceId}
Section titled “DELETE /api/v1/docs/licences/{licenceId}”DELETEdocs:writetenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Delete doc licence
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
licenceId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
204 | None | Success, with no body. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
Request samples
Section titled “Request samples”# 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/docs/licences/<licenceId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Delete ` -Uri 'https://depot.example.com/api/v1/docs/licences/<licenceId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/licences/<licenceId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.delete(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodDelete, "https://depot.example.com/api/v1/docs/licences/<licenceId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/licences/<licenceId>";
const response = await fetch(url, { method: "DELETE", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Delete, "https://depot.example.com/api/v1/docs/licences/<licenceId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/links
Section titled “GET /api/v1/docs/links”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
listDocLinks answers the Related panel for one object.
The object is named by query parameters rather than by path, because the panel hangs off fourteen different kinds of page and a path per kind would be fourteen routes answering one question.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | query | string | No | |
kind | query | string | No | |
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, PagedResultDocLinkView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | Discovery read permission is required. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocLinkView | |
items[].directionrequired | string | |
items[].originrequired | string | |
items[].otherrequired | DocRelationRefView | |
items[].other.idrequired | string | |
items[].other.kindrequired | string | |
items[].other.restrictedrequired | boolean | |
items[].other.subtitle | string | |
items[].other.titlerequired | string | |
items[].publicIdrequired | string | |
items[].relationrequired | string | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/links?id=<id>&kind=<kind>&page=0&pageSize=0' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/links?id=<id>&kind=<kind>&page=0&pageSize=0' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/links"params = { "id": "<id>", "kind": "<kind>", "page": "0", "pageSize": "0",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/links?id=<id>&kind=<kind>&page=0&pageSize=0", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/links");url.searchParams.set("id", "<id>");url.searchParams.set("kind", "<kind>");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/links?id=<id>&kind=<kind>&page=0&pageSize=0");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/links
Section titled “POST /api/v1/docs/links”POSTdocs:writeshared facehosteditmspremote
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
createDocLink draws one edge by hand.
ORIGIN IS ALWAYS ‘manual’ HERE and is not read from the body. An ‘auto’ edge carries the rule that computed it and is written by the recompute; letting a caller claim one would mean a hand-drawn edge that the next recompute deletes as stale, which is a relation that disappears with nothing to blame.
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
fromIdrequired | string | |
fromKindrequired | string | |
relationrequired | string | |
toIdrequired | string | |
toKindrequired | string |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
201 | application/json, DocLinkView | Created. |
400 | application/problem+json, ProblemDetails | The request body is not valid JSON. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | Discovery read permission is required. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
201 response body
| Field | Type | Description |
|---|---|---|
directionrequired | string | |
originrequired | string | |
otherrequired | DocRelationRefView | |
other.idrequired | string | |
other.kindrequired | string | |
other.restrictedrequired | boolean | |
other.subtitle | string | |
other.titlerequired | string | |
publicIdrequired | string | |
relationrequired | string |
Request samples
Section titled “Request samples”# Sign in first. outpost_console is a session cookie, so send it with every request.curl -X POST 'https://depot.example.com/api/v1/docs/links' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "fromId": "string", "fromKind": "string", "relation": "string", "toId": "string", "toKind": "string"}'# Sign in first. outpost_console is a session cookie, so send it with every request.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "fromId": "string", "fromKind": "string", "relation": "string", "toId": "string", "toKind": "string"}'@
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/links' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# Sign in first. outpost_console is a session cookie, so send it with every request.
import requests
url = "https://depot.example.com/api/v1/docs/links"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "fromId": "string", "fromKind": "string", "relation": "string", "toId": "string", "toKind": "string",}
response = requests.post(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// Sign in first. outpost_console is a session cookie, so send it with every request.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "fromId": "string", "fromKind": "string", "relation": "string", "toId": "string", "toKind": "string"}`)
req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/links", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// Sign in first. outpost_console is a session cookie, so send it with every request.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/links";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "fromId": "string", "fromKind": "string", "relation": "string", "toId": "string", "toKind": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// Sign in first. outpost_console is a session cookie, so send it with every request.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "fromId": "string", "fromKind": "string", "relation": "string", "toId": "string", "toKind": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/links");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());DELETE /api/v1/docs/links/{linkId}
Section titled “DELETE /api/v1/docs/links/{linkId}”DELETEdocs:writeshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
deleteDocLink removes one edge, and for an auto or suggested one leaves the tombstone that stops the next recompute re-creating it.
THE TOMBSTONE IS THE WHOLE POINT of this route being more than a DELETE. An operator who deletes the same wrong relation every hour stops using the panel, and a panel nobody trusts is worse than no panel.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
linkId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
204 | None | Success, with no body. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
Request samples
Section titled “Request samples”# 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/docs/links/<linkId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Delete ` -Uri 'https://depot.example.com/api/v1/docs/links/<linkId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/links/<linkId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.delete(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodDelete, "https://depot.example.com/api/v1/docs/links/<linkId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/links/<linkId>";
const response = await fetch(url, { method: "DELETE", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Delete, "https://depot.example.com/api/v1/docs/links/<linkId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/mention
Section titled “GET /api/v1/docs/mention”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
resolveDocMention answers the editor’s autocomplete and the reader’s hover card from one route.
A MENTION THE READER MAY NOT SEE IS A 404, not a padlocked card. A card that said “restricted: Domain administrator (Acme DC01)” would have disclosed the credential’s name to somebody the restriction exists to keep away from it; the padlock belongs in a list of things you already may see.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | query | string | No | |
kind | query | string | No |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocMentionPreview | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | Nothing matches that mention. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
hrefrequired | string | |
idrequired | string | |
kindrequired | string | |
restrictedrequired | boolean | |
subtitlerequired | string | |
titlerequired | string |
Request samples
Section titled “Request samples”# 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/docs/mention?id=<id>&kind=<kind>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/mention?id=<id>&kind=<kind>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/mention"params = { "id": "<id>", "kind": "<kind>",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/mention?id=<id>&kind=<kind>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/mention");url.searchParams.set("id", "<id>");url.searchParams.set("kind", "<kind>");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/mention?id=<id>&kind=<kind>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/option-lists
Section titled “GET /api/v1/docs/option-lists”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
List doc option lists
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, PagedResultDocOptionListView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocOptionListView | |
items[].itemsrequired | array of string | |
items[].keyrequired | string | |
items[].namerequired | string | |
items[].publicIdrequired | string | |
items[].scoperequired | string | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/option-lists?page=0&pageSize=0' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/option-lists?page=0&pageSize=0' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/option-lists"params = { "page": "0", "pageSize": "0",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/option-lists?page=0&pageSize=0", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/option-lists");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/option-lists?page=0&pageSize=0");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/option-lists
Section titled “POST /api/v1/docs/option-lists”POSTdocs:manageshared facehosteditmspremote
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Create doc option list
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
itemsrequired | array of string | |
key | string or null | |
name | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
201 | application/json, DocOptionListView | Created. |
400 | application/problem+json, ProblemDetails | The request body is not valid JSON. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:manage. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
201 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of string | |
keyrequired | string | |
namerequired | string | |
publicIdrequired | string | |
scoperequired | string |
Request samples
Section titled “Request samples”# Sign in first. outpost_console is a session cookie, so send it with every request.curl -X POST 'https://depot.example.com/api/v1/docs/option-lists' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "items": [ "string" ], "key": "string", "name": "string"}'# Sign in first. outpost_console is a session cookie, so send it with every request.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "items": [ "string" ], "key": "string", "name": "string"}'@
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/option-lists' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# Sign in first. outpost_console is a session cookie, so send it with every request.
import requests
url = "https://depot.example.com/api/v1/docs/option-lists"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "items": [ "string", ], "key": "string", "name": "string",}
response = requests.post(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// Sign in first. outpost_console is a session cookie, so send it with every request.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "items": [ "string" ], "key": "string", "name": "string"}`)
req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/option-lists", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// Sign in first. outpost_console is a session cookie, so send it with every request.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/option-lists";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "items": [ "string" ], "key": "string", "name": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// Sign in first. outpost_console is a session cookie, so send it with every request.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "items": [ "string" ], "key": "string", "name": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/option-lists");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());PATCH /api/v1/docs/option-lists/{listId}
Section titled “PATCH /api/v1/docs/option-lists/{listId}”PATCHdocs:manageshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Patch doc option list
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
listId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
itemsrequired | array of string | |
key | string or null | |
name | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocOptionListView | Success. |
400 | application/problem+json, ProblemDetails | The request body is not valid JSON. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:manage. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of string | |
keyrequired | string | |
namerequired | string | |
publicIdrequired | string | |
scoperequired | string |
Request samples
Section titled “Request samples”# 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/docs/option-lists/<listId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "items": [ "string" ], "key": "string", "name": "string"}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "items": [ "string" ], "key": "string", "name": "string"}'@
$response = Invoke-RestMethod ` -Method Patch ` -Uri 'https://depot.example.com/api/v1/docs/option-lists/<listId>' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/option-lists/<listId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "items": [ "string", ], "key": "string", "name": "string",}
response = requests.patch(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "items": [ "string" ], "key": "string", "name": "string"}`)
req, err := http.NewRequest(http.MethodPatch, "https://depot.example.com/api/v1/docs/option-lists/<listId>", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/option-lists/<listId>";
const response = await fetch(url, { method: "PATCH", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "items": [ "string" ], "key": "string", "name": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "items": [ "string" ], "key": "string", "name": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Patch, "https://depot.example.com/api/v1/docs/option-lists/<listId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());DELETE /api/v1/docs/option-lists/{listId}
Section titled “DELETE /api/v1/docs/option-lists/{listId}”DELETEdocs:manageshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Delete doc option list
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
listId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
204 | None | Success, with no body. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:manage. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
Request samples
Section titled “Request samples”# 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/docs/option-lists/<listId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Delete ` -Uri 'https://depot.example.com/api/v1/docs/option-lists/<listId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/option-lists/<listId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.delete(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodDelete, "https://depot.example.com/api/v1/docs/option-lists/<listId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/option-lists/<listId>";
const response = await fetch(url, { method: "DELETE", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Delete, "https://depot.example.com/api/v1/docs/option-lists/<listId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/process-templates
Section titled “GET /api/v1/docs/process-templates”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
listDocProcessTemplates is the TENANT-face read: both rungs, merged, so a run picker inside a client workspace sees the practice’s procedures and any this client has of its own.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
scope | query | string | No |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, PagedResultDocProcessTemplateView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocProcessTemplateView | |
items[].archivedrequired | boolean | |
items[].createdAtrequired | string (date-time) | |
items[].description | string | |
items[].labelsrequired | array of string | |
items[].namerequired | string | |
items[].publicIdrequired | string | |
items[].restrictedrequired | boolean | |
items[].scoperequired | string | |
items[].stepsrequired | array of DocProcessStepView | |
items[].steps[].articleId | string | |
items[].steps[].articleScope | string | |
items[].steps[].detail | string | |
items[].steps[].optionalrequired | boolean | |
items[].steps[].publicIdrequired | string | |
items[].steps[].roleHint | string | |
items[].steps[].sortOrderrequired | integer | |
items[].steps[].titlerequired | string | |
items[].updatedAtrequired | string (date-time) | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/process-templates?page=0&pageSize=0&scope=<scope>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/process-templates?page=0&pageSize=0&scope=<scope>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/process-templates"params = { "page": "0", "pageSize": "0", "scope": "<scope>",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/process-templates?page=0&pageSize=0&scope=<scope>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/process-templates");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");url.searchParams.set("scope", "<scope>");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/process-templates?page=0&pageSize=0&scope=<scope>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/process-templates
Section titled “POST /api/v1/docs/process-templates”POSTdocs:writeshared facehosteditmspremote
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Create process template
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
archived | boolean or null | |
description | string or null | |
labelsrequired | array of string | |
name | string or null | |
restricted | boolean or null | |
stepsrequired | array of object | |
steps[].articleIdrequired | string | |
steps[].articleScoperequired | string | |
steps[].detailrequired | string | |
steps[].optionalrequired | boolean | |
steps[].roleHintrequired | string | |
steps[].titlerequired | string |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
201 | application/json, DocProcessTemplateView | Created. |
400 | application/problem+json, ProblemDetails | The request body is not valid JSON. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
201 response body
| Field | Type | Description |
|---|---|---|
archivedrequired | boolean | |
createdAtrequired | string (date-time) | |
description | string | |
labelsrequired | array of string | |
namerequired | string | |
publicIdrequired | string | |
restrictedrequired | boolean | |
scoperequired | string | |
stepsrequired | array of DocProcessStepView | |
steps[].articleId | string | |
steps[].articleScope | string | |
steps[].detail | string | |
steps[].optionalrequired | boolean | |
steps[].publicIdrequired | string | |
steps[].roleHint | string | |
steps[].sortOrderrequired | integer | |
steps[].titlerequired | string | |
updatedAtrequired | string (date-time) |
Request samples
Section titled “Request samples”# Sign in first. outpost_console is a session cookie, so send it with every request.curl -X POST 'https://depot.example.com/api/v1/docs/process-templates' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "archived": false, "description": "string", "labels": [ "string" ], "name": "string", "restricted": false, "steps": [ { "articleId": "string", "articleScope": "string", "detail": "string", "optional": false, "roleHint": "string", "title": "string" } ]}'# Sign in first. outpost_console is a session cookie, so send it with every request.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "archived": false, "description": "string", "labels": [ "string" ], "name": "string", "restricted": false, "steps": [ { "articleId": "string", "articleScope": "string", "detail": "string", "optional": false, "roleHint": "string", "title": "string" } ]}'@
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/process-templates' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# Sign in first. outpost_console is a session cookie, so send it with every request.
import requests
url = "https://depot.example.com/api/v1/docs/process-templates"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "archived": False, "description": "string", "labels": [ "string", ], "name": "string", "restricted": False, "steps": [ { "articleId": "string", "articleScope": "string", "detail": "string", "optional": False, "roleHint": "string", "title": "string", }, ],}
response = requests.post(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// Sign in first. outpost_console is a session cookie, so send it with every request.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "archived": false, "description": "string", "labels": [ "string" ], "name": "string", "restricted": false, "steps": [ { "articleId": "string", "articleScope": "string", "detail": "string", "optional": false, "roleHint": "string", "title": "string" } ]}`)
req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/process-templates", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// Sign in first. outpost_console is a session cookie, so send it with every request.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/process-templates";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "archived": false, "description": "string", "labels": [ "string" ], "name": "string", "restricted": false, "steps": [ { "articleId": "string", "articleScope": "string", "detail": "string", "optional": false, "roleHint": "string", "title": "string" } ] }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// Sign in first. outpost_console is a session cookie, so send it with every request.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "archived": false, "description": "string", "labels": [ "string" ], "name": "string", "restricted": false, "steps": [ { "articleId": "string", "articleScope": "string", "detail": "string", "optional": false, "roleHint": "string", "title": "string" } ]}""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/process-templates");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/process-templates/{templateId}
Section titled “GET /api/v1/docs/process-templates/{templateId}”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Get doc process template
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
templateId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocProcessTemplateView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
archivedrequired | boolean | |
createdAtrequired | string (date-time) | |
description | string | |
labelsrequired | array of string | |
namerequired | string | |
publicIdrequired | string | |
restrictedrequired | boolean | |
scoperequired | string | |
stepsrequired | array of DocProcessStepView | |
steps[].articleId | string | |
steps[].articleScope | string | |
steps[].detail | string | |
steps[].optionalrequired | boolean | |
steps[].publicIdrequired | string | |
steps[].roleHint | string | |
steps[].sortOrderrequired | integer | |
steps[].titlerequired | string | |
updatedAtrequired | string (date-time) |
Request samples
Section titled “Request samples”# 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/docs/process-templates/<templateId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/process-templates/<templateId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/process-templates/<templateId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/process-templates/<templateId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/process-templates/<templateId>";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/process-templates/<templateId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());PATCH /api/v1/docs/process-templates/{templateId}
Section titled “PATCH /api/v1/docs/process-templates/{templateId}”PATCHdocs:writeshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
patchProcessTemplate edits the practice’s own procedure.
EDITING A TEMPLATE DOES NOT TOUCH A RUN. Every open run already copied its steps, which is the whole reason the copy exists: a practice that improves its onboarding checklist on Tuesday has not changed what somebody did on Monday.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
templateId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
archived | boolean or null | |
description | string or null | |
labelsrequired | array of string | |
name | string or null | |
restricted | boolean or null | |
stepsrequired | array of object | |
steps[].articleIdrequired | string | |
steps[].articleScoperequired | string | |
steps[].detailrequired | string | |
steps[].optionalrequired | boolean | |
steps[].roleHintrequired | string | |
steps[].titlerequired | string |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocProcessTemplateView | Success. |
400 | application/problem+json, ProblemDetails | The request body is not valid JSON. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
archivedrequired | boolean | |
createdAtrequired | string (date-time) | |
description | string | |
labelsrequired | array of string | |
namerequired | string | |
publicIdrequired | string | |
restrictedrequired | boolean | |
scoperequired | string | |
stepsrequired | array of DocProcessStepView | |
steps[].articleId | string | |
steps[].articleScope | string | |
steps[].detail | string | |
steps[].optionalrequired | boolean | |
steps[].publicIdrequired | string | |
steps[].roleHint | string | |
steps[].sortOrderrequired | integer | |
steps[].titlerequired | string | |
updatedAtrequired | string (date-time) |
Request samples
Section titled “Request samples”# 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/docs/process-templates/<templateId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "archived": false, "description": "string", "labels": [ "string" ], "name": "string", "restricted": false, "steps": [ { "articleId": "string", "articleScope": "string", "detail": "string", "optional": false, "roleHint": "string", "title": "string" } ]}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "archived": false, "description": "string", "labels": [ "string" ], "name": "string", "restricted": false, "steps": [ { "articleId": "string", "articleScope": "string", "detail": "string", "optional": false, "roleHint": "string", "title": "string" } ]}'@
$response = Invoke-RestMethod ` -Method Patch ` -Uri 'https://depot.example.com/api/v1/docs/process-templates/<templateId>' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/process-templates/<templateId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "archived": False, "description": "string", "labels": [ "string", ], "name": "string", "restricted": False, "steps": [ { "articleId": "string", "articleScope": "string", "detail": "string", "optional": False, "roleHint": "string", "title": "string", }, ],}
response = requests.patch(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "archived": false, "description": "string", "labels": [ "string" ], "name": "string", "restricted": false, "steps": [ { "articleId": "string", "articleScope": "string", "detail": "string", "optional": false, "roleHint": "string", "title": "string" } ]}`)
req, err := http.NewRequest(http.MethodPatch, "https://depot.example.com/api/v1/docs/process-templates/<templateId>", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/process-templates/<templateId>";
const response = await fetch(url, { method: "PATCH", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "archived": false, "description": "string", "labels": [ "string" ], "name": "string", "restricted": false, "steps": [ { "articleId": "string", "articleScope": "string", "detail": "string", "optional": false, "roleHint": "string", "title": "string" } ] }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "archived": false, "description": "string", "labels": [ "string" ], "name": "string", "restricted": false, "steps": [ { "articleId": "string", "articleScope": "string", "detail": "string", "optional": false, "roleHint": "string", "title": "string" } ]}""";
var request = new HttpRequestMessage(HttpMethod.Patch, "https://depot.example.com/api/v1/docs/process-templates/<templateId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());DELETE /api/v1/docs/process-templates/{templateId}
Section titled “DELETE /api/v1/docs/process-templates/{templateId}”DELETEdocs:writeshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Delete process template
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
templateId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
204 | None | Success, with no body. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | The request failed. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
Request samples
Section titled “Request samples”# 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/docs/process-templates/<templateId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Delete ` -Uri 'https://depot.example.com/api/v1/docs/process-templates/<templateId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/process-templates/<templateId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.delete(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodDelete, "https://depot.example.com/api/v1/docs/process-templates/<templateId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/process-templates/<templateId>";
const response = await fetch(url, { method: "DELETE", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Delete, "https://depot.example.com/api/v1/docs/process-templates/<templateId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/process-templates/{templateId}/pdf
Section titled “GET /api/v1/docs/process-templates/{templateId}/pdf”GETdocs:readshared facehosteditmspremoteIdempotentdownloadNot 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
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]
docProcessTemplatePDF renders one template as a blank runbook.
It resolves through the docslib two-rung library exactly as the template’s own read route does, so a client-scope procedure and a practice-scope one print the same way and a broken rung is an error rather than a fall-through to the wrong library’s document.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
templateId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/octet-stream, string (binary) | Success. The body shape was not resolved; see x-outpost-unresolved. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
Request samples
Section titled “Request samples”# 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/docs/process-templates/<templateId>/pdf' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/process-templates/<templateId>/pdf' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/process-templates/<templateId>/pdf"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/process-templates/<templateId>/pdf", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/process-templates/<templateId>/pdf";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/process-templates/<templateId>/pdf");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/processes/runs
Section titled “GET /api/v1/docs/processes/runs”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
List doc process runs
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
state | query | string | No |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, PagedResultDocRunView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocRunView | |
items[].abandonedReason | string | |
items[].agentId | string | |
items[].completedAt | string (date-time) or null | |
items[].doneCountrequired | integer | |
items[].namedUserId | string | |
items[].projectId | string | |
items[].publicIdrequired | string | |
items[].siteId | string | |
items[].startedAtrequired | string (date-time) | |
items[].startedByName | string | |
items[].staterequired | string | |
items[].stepCountrequired | integer | |
items[].stepsrequired | array of DocRunStepView | |
items[].steps[].articleId | string | |
items[].steps[].articleScope | string | |
items[].steps[].detail | string | |
items[].steps[].doneAt | string (date-time) or null | |
items[].steps[].doneByName | string | |
items[].steps[].note | string | |
items[].steps[].optionalrequired | boolean | |
items[].steps[].publicIdrequired | string | |
items[].steps[].sortOrderrequired | integer | |
items[].steps[].staterequired | string | |
items[].steps[].titlerequired | string | |
items[].templateIdrequired | string | |
items[].templateNamerequired | string | |
items[].templateScoperequired | string | |
items[].ticketId | string | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/processes/runs?page=0&pageSize=0&state=<state>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/processes/runs?page=0&pageSize=0&state=<state>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/processes/runs"params = { "page": "0", "pageSize": "0", "state": "<state>",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/processes/runs?page=0&pageSize=0&state=<state>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/processes/runs");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");url.searchParams.set("state", "<state>");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/processes/runs?page=0&pageSize=0&state=<state>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/processes/runs
Section titled “POST /api/v1/docs/processes/runs”POSTdocs:writetenant facehosteditmspremote
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Start doc process run
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
agentIdrequired | string | |
namedUserIdrequired | string | |
projectIdrequired | string | |
siteIdrequired | string | |
templateIdrequired | string | |
ticketIdrequired | string |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
201 | application/json, DocRunView | Created. |
400 | application/problem+json, ProblemDetails | The request body is not valid JSON. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold the required permission. |
404 | application/problem+json, ProblemDetails | No documentation record matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
201 response body
| Field | Type | Description |
|---|---|---|
abandonedReason | string | |
agentId | string | |
completedAt | string (date-time) or null | |
doneCountrequired | integer | |
namedUserId | string | |
projectId | string | |
publicIdrequired | string | |
siteId | string | |
startedAtrequired | string (date-time) | |
startedByName | string | |
staterequired | string | |
stepCountrequired | integer | |
stepsrequired | array of DocRunStepView | |
steps[].articleId | string | |
steps[].articleScope | string | |
steps[].detail | string | |
steps[].doneAt | string (date-time) or null | |
steps[].doneByName | string | |
steps[].note | string | |
steps[].optionalrequired | boolean | |
steps[].publicIdrequired | string | |
steps[].sortOrderrequired | integer | |
steps[].staterequired | string | |
steps[].titlerequired | string | |
templateIdrequired | string | |
templateNamerequired | string | |
templateScoperequired | string | |
ticketId | string |
Request samples
Section titled “Request samples”# Sign in first. outpost_console is a session cookie, so send it with every request.curl -X POST 'https://depot.example.com/api/v1/docs/processes/runs' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "agentId": "string", "namedUserId": "string", "projectId": "string", "siteId": "string", "templateId": "string", "ticketId": "string"}'# Sign in first. outpost_console is a session cookie, so send it with every request.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "agentId": "string", "namedUserId": "string", "projectId": "string", "siteId": "string", "templateId": "string", "ticketId": "string"}'@
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/processes/runs' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# Sign in first. outpost_console is a session cookie, so send it with every request.
import requests
url = "https://depot.example.com/api/v1/docs/processes/runs"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "agentId": "string", "namedUserId": "string", "projectId": "string", "siteId": "string", "templateId": "string", "ticketId": "string",}
response = requests.post(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// Sign in first. outpost_console is a session cookie, so send it with every request.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "agentId": "string", "namedUserId": "string", "projectId": "string", "siteId": "string", "templateId": "string", "ticketId": "string"}`)
req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/processes/runs", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// Sign in first. outpost_console is a session cookie, so send it with every request.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/processes/runs";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "agentId": "string", "namedUserId": "string", "projectId": "string", "siteId": "string", "templateId": "string", "ticketId": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// Sign in first. outpost_console is a session cookie, so send it with every request.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "agentId": "string", "namedUserId": "string", "projectId": "string", "siteId": "string", "templateId": "string", "ticketId": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/processes/runs");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/processes/runs/{runId}
Section titled “GET /api/v1/docs/processes/runs/{runId}”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Get doc process run
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
runId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocRunView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
abandonedReason | string | |
agentId | string | |
completedAt | string (date-time) or null | |
doneCountrequired | integer | |
namedUserId | string | |
projectId | string | |
publicIdrequired | string | |
siteId | string | |
startedAtrequired | string (date-time) | |
startedByName | string | |
staterequired | string | |
stepCountrequired | integer | |
stepsrequired | array of DocRunStepView | |
steps[].articleId | string | |
steps[].articleScope | string | |
steps[].detail | string | |
steps[].doneAt | string (date-time) or null | |
steps[].doneByName | string | |
steps[].note | string | |
steps[].optionalrequired | boolean | |
steps[].publicIdrequired | string | |
steps[].sortOrderrequired | integer | |
steps[].staterequired | string | |
steps[].titlerequired | string | |
templateIdrequired | string | |
templateNamerequired | string | |
templateScoperequired | string | |
ticketId | string |
Request samples
Section titled “Request samples”# 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/docs/processes/runs/<runId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/processes/runs/<runId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/processes/runs/<runId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/processes/runs/<runId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/processes/runs/<runId>";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/processes/runs/<runId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/processes/runs/{runId}/complete
Section titled “POST /api/v1/docs/processes/runs/{runId}/complete”POSTdocs:writetenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
completeDocProcessRun is the one terminator.
See the file header.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
runId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
outcomerequired | string | |
reasonrequired | string |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocRunView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
abandonedReason | string | |
agentId | string | |
completedAt | string (date-time) or null | |
doneCountrequired | integer | |
namedUserId | string | |
projectId | string | |
publicIdrequired | string | |
siteId | string | |
startedAtrequired | string (date-time) | |
startedByName | string | |
staterequired | string | |
stepCountrequired | integer | |
stepsrequired | array of DocRunStepView | |
steps[].articleId | string | |
steps[].articleScope | string | |
steps[].detail | string | |
steps[].doneAt | string (date-time) or null | |
steps[].doneByName | string | |
steps[].note | string | |
steps[].optionalrequired | boolean | |
steps[].publicIdrequired | string | |
steps[].sortOrderrequired | integer | |
steps[].staterequired | string | |
steps[].titlerequired | string | |
templateIdrequired | string | |
templateNamerequired | string | |
templateScoperequired | string | |
ticketId | string |
Request samples
Section titled “Request samples”# 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/docs/processes/runs/<runId>/complete' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "outcome": "string", "reason": "string"}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "outcome": "string", "reason": "string"}'@
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/processes/runs/<runId>/complete' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/processes/runs/<runId>/complete"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "outcome": "string", "reason": "string",}
response = requests.post(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "outcome": "string", "reason": "string"}`)
req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/processes/runs/<runId>/complete", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/processes/runs/<runId>/complete";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "outcome": "string", "reason": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "outcome": "string", "reason": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/processes/runs/<runId>/complete");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/processes/runs/{runId}/pdf
Section titled “GET /api/v1/docs/processes/runs/{runId}/pdf”GETdocs:readtenant facehosteditmspremoteIdempotentdownloadNot 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
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]
docProcessRunPDF renders one run as the document somebody files.
THIS IS THE ARTIFACT THE FEATURE IS BOUGHT FOR. “Show me the onboarding you ran for this starter” is answered by a file with the steps, who ticked each one, when, and what they wrote, rather than by a screenshot of a console.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
runId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/octet-stream, string (binary) | Success. The body shape was not resolved; see x-outpost-unresolved. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
Request samples
Section titled “Request samples”# 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/docs/processes/runs/<runId>/pdf' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/processes/runs/<runId>/pdf' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/processes/runs/<runId>/pdf"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/processes/runs/<runId>/pdf", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/processes/runs/<runId>/pdf";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/processes/runs/<runId>/pdf");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());PATCH /api/v1/docs/processes/runs/{runId}/steps/{stepId}
Section titled “PATCH /api/v1/docs/processes/runs/{runId}/steps/{stepId}”PATCHdocs:writetenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Set doc process run step
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
runId | path | string | Yes | A uuid. |
stepId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
noterequired | string | |
staterequired | string |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocRunView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
abandonedReason | string | |
agentId | string | |
completedAt | string (date-time) or null | |
doneCountrequired | integer | |
namedUserId | string | |
projectId | string | |
publicIdrequired | string | |
siteId | string | |
startedAtrequired | string (date-time) | |
startedByName | string | |
staterequired | string | |
stepCountrequired | integer | |
stepsrequired | array of DocRunStepView | |
steps[].articleId | string | |
steps[].articleScope | string | |
steps[].detail | string | |
steps[].doneAt | string (date-time) or null | |
steps[].doneByName | string | |
steps[].note | string | |
steps[].optionalrequired | boolean | |
steps[].publicIdrequired | string | |
steps[].sortOrderrequired | integer | |
steps[].staterequired | string | |
steps[].titlerequired | string | |
templateIdrequired | string | |
templateNamerequired | string | |
templateScoperequired | string | |
ticketId | string |
Request samples
Section titled “Request samples”# 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/docs/processes/runs/<runId>/steps/<stepId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "note": "string", "state": "string"}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "note": "string", "state": "string"}'@
$response = Invoke-RestMethod ` -Method Patch ` -Uri 'https://depot.example.com/api/v1/docs/processes/runs/<runId>/steps/<stepId>' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/processes/runs/<runId>/steps/<stepId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "note": "string", "state": "string",}
response = requests.patch(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "note": "string", "state": "string"}`)
req, err := http.NewRequest(http.MethodPatch, "https://depot.example.com/api/v1/docs/processes/runs/<runId>/steps/<stepId>", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/processes/runs/<runId>/steps/<stepId>";
const response = await fetch(url, { method: "PATCH", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "note": "string", "state": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "note": "string", "state": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Patch, "https://depot.example.com/api/v1/docs/processes/runs/<runId>/steps/<stepId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/search
Section titled “GET /api/v1/docs/search”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
searchDocs is the documentation console’s own search.
IT SHARES SearchDocs WITH THE BAR and adds what the bar does not model: facets, a scope filter, a layout filter, labels, and a URL somebody can save and send to a colleague. The permission story is unchanged and is the point: each kind answers to the code its own list route is guarded by, so a holder of docs:read cannot reach a credential through this box either. THE CREDENTIAL KIND IS NOT OFFERED HERE AT ALL: it belongs to the vault’s own surface and to the global bar’s credential arm, both guarded on vault:read.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
kinds | query | string | No | |
labels | query | string | No | |
layoutKey | query | string | No | |
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
q | query | string | No | Free-text search term. |
scope | query | string | No | |
typeahead | query | string | No |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocSearchResponse | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocSearchHitView | |
items[].hrefrequired | string | |
items[].idrequired | string | |
items[].kindrequired | string | |
items[].matchedOnrequired | string | |
items[].restrictedrequired | boolean | |
items[].scorerequired | number | double. |
items[].subtitlerequired | string | |
items[].titlerequired | string | |
kindsrequired | array of string | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/search?kinds=<kinds>&labels=<labels>&layoutKey=<layoutKey>&page=0&pageSize=0&q=<q>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/search?kinds=<kinds>&labels=<labels>&layoutKey=<layoutKey>&page=0&pageSize=0&q=<q>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/search"params = { "kinds": "<kinds>", "labels": "<labels>", "layoutKey": "<layoutKey>", "page": "0", "pageSize": "0", "q": "<q>",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/search?kinds=<kinds>&labels=<labels>&layoutKey=<layoutKey>&page=0&pageSize=0&q=<q>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/search");url.searchParams.set("kinds", "<kinds>");url.searchParams.set("labels", "<labels>");url.searchParams.set("layoutKey", "<layoutKey>");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");url.searchParams.set("q", "<q>");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/search?kinds=<kinds>&labels=<labels>&layoutKey=<layoutKey>&page=0&pageSize=0&q=<q>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/settings
Section titled “GET /api/v1/docs/settings”GETdocs:readshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Get doc settings
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocSettingsView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
breachCheckEnabledrequired | boolean | |
breachChecksAvailablerequired | boolean | |
domainChecksAvailablerequired | boolean | |
domainMonitorEnabledrequired | boolean | |
domainMonitorIntervalHoursrequired | integer | |
expirationLeadDaysrequired | integer | |
expirationSecondLeadDaysrequired | integer | |
extensionEnabledrequired | boolean | |
managedPendingExpiryDaysrequired | integer | |
passwordHistoryDepthrequired | integer | |
requireJustificationOnRevealrequired | boolean | |
requireStepUpOnRevealrequired | boolean | |
seededLayoutsAt | string (date-time) or null | |
seededProcessesAt | string (date-time) or null | |
shareDefaultMaxViewsrequired | integer | |
shareDeletionGraceDaysrequired | integer | |
shareMaxLifetimeHoursrequired | integer | |
shareRequireRecipientVerificationrequired | boolean | |
sharingEnabledrequired | boolean | |
staleCredentialDaysrequired | integer | |
stepUpFreshnessMinutesrequired | integer | |
vaultIdleTimeoutMinutesrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/settings' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/settings' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/settings"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/settings", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/settings";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/settings");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());PUT /api/v1/docs/settings
Section titled “PUT /api/v1/docs/settings”PUTdocs:manageshared facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Put doc settings
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
breachCheckEnabled | boolean or null | |
domainMonitorEnabled | boolean or null | |
domainMonitorIntervalHours | integer or null | |
expirationLeadDays | integer or null | |
expirationSecondLeadDays | integer or null | |
extensionEnabled | boolean or null | |
managedPendingExpiryDays | integer or null | |
passwordHistoryDepth | integer or null | |
requireJustificationOnReveal | boolean or null | |
requireStepUpOnReveal | boolean or null | |
shareDefaultMaxViews | integer or null | |
shareDeletionGraceDays | integer or null | |
shareMaxLifetimeHours | integer or null | |
shareRequireRecipientVerification | boolean or null | |
sharingEnabled | boolean or null | |
staleCredentialDays | integer or null | |
stepUpFreshnessMinutes | integer or null | |
vaultIdleTimeoutMinutes | integer or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocSettingsView | Success. |
400 | application/problem+json, ProblemDetails | The request body is not valid JSON. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:manage. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
503 | application/problem+json, ProblemDetails | This Depot has no practice library yet. Finish first-run setup and try again. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
breachCheckEnabledrequired | boolean | |
breachChecksAvailablerequired | boolean | |
domainChecksAvailablerequired | boolean | |
domainMonitorEnabledrequired | boolean | |
domainMonitorIntervalHoursrequired | integer | |
expirationLeadDaysrequired | integer | |
expirationSecondLeadDaysrequired | integer | |
extensionEnabledrequired | boolean | |
managedPendingExpiryDaysrequired | integer | |
passwordHistoryDepthrequired | integer | |
requireJustificationOnRevealrequired | boolean | |
requireStepUpOnRevealrequired | boolean | |
seededLayoutsAt | string (date-time) or null | |
seededProcessesAt | string (date-time) or null | |
shareDefaultMaxViewsrequired | integer | |
shareDeletionGraceDaysrequired | integer | |
shareMaxLifetimeHoursrequired | integer | |
shareRequireRecipientVerificationrequired | boolean | |
sharingEnabledrequired | boolean | |
staleCredentialDaysrequired | integer | |
stepUpFreshnessMinutesrequired | integer | |
vaultIdleTimeoutMinutesrequired | integer |
Request samples
Section titled “Request samples”# 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/docs/settings' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "breachCheckEnabled": false, "domainMonitorEnabled": false, "domainMonitorIntervalHours": 0, "expirationLeadDays": 0, "expirationSecondLeadDays": 0, "extensionEnabled": false, "managedPendingExpiryDays": 0, "passwordHistoryDepth": 0, "requireJustificationOnReveal": false, "requireStepUpOnReveal": false, "shareDefaultMaxViews": 0, "shareDeletionGraceDays": 0, "shareMaxLifetimeHours": 0, "shareRequireRecipientVerification": false, "sharingEnabled": false, "staleCredentialDays": 0, "stepUpFreshnessMinutes": 0, "vaultIdleTimeoutMinutes": 0}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "breachCheckEnabled": false, "domainMonitorEnabled": false, "domainMonitorIntervalHours": 0, "expirationLeadDays": 0, "expirationSecondLeadDays": 0, "extensionEnabled": false, "managedPendingExpiryDays": 0, "passwordHistoryDepth": 0, "requireJustificationOnReveal": false, "requireStepUpOnReveal": false, "shareDefaultMaxViews": 0, "shareDeletionGraceDays": 0, "shareMaxLifetimeHours": 0, "shareRequireRecipientVerification": false, "sharingEnabled": false, "staleCredentialDays": 0, "stepUpFreshnessMinutes": 0, "vaultIdleTimeoutMinutes": 0}'@
$response = Invoke-RestMethod ` -Method Put ` -Uri 'https://depot.example.com/api/v1/docs/settings' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/settings"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "breachCheckEnabled": False, "domainMonitorEnabled": False, "domainMonitorIntervalHours": 0, "expirationLeadDays": 0, "expirationSecondLeadDays": 0, "extensionEnabled": False, "managedPendingExpiryDays": 0, "passwordHistoryDepth": 0, "requireJustificationOnReveal": False, "requireStepUpOnReveal": False, "shareDefaultMaxViews": 0, "shareDeletionGraceDays": 0, "shareMaxLifetimeHours": 0, "shareRequireRecipientVerification": False, "sharingEnabled": False, "staleCredentialDays": 0, "stepUpFreshnessMinutes": 0, "vaultIdleTimeoutMinutes": 0,}
response = requests.put(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "breachCheckEnabled": false, "domainMonitorEnabled": false, "domainMonitorIntervalHours": 0, "expirationLeadDays": 0, "expirationSecondLeadDays": 0, "extensionEnabled": false, "managedPendingExpiryDays": 0, "passwordHistoryDepth": 0, "requireJustificationOnReveal": false, "requireStepUpOnReveal": false, "shareDefaultMaxViews": 0, "shareDeletionGraceDays": 0, "shareMaxLifetimeHours": 0, "shareRequireRecipientVerification": false, "sharingEnabled": false, "staleCredentialDays": 0, "stepUpFreshnessMinutes": 0, "vaultIdleTimeoutMinutes": 0}`)
req, err := http.NewRequest(http.MethodPut, "https://depot.example.com/api/v1/docs/settings", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/settings";
const response = await fetch(url, { method: "PUT", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "breachCheckEnabled": false, "domainMonitorEnabled": false, "domainMonitorIntervalHours": 0, "expirationLeadDays": 0, "expirationSecondLeadDays": 0, "extensionEnabled": false, "managedPendingExpiryDays": 0, "passwordHistoryDepth": 0, "requireJustificationOnReveal": false, "requireStepUpOnReveal": false, "shareDefaultMaxViews": 0, "shareDeletionGraceDays": 0, "shareMaxLifetimeHours": 0, "shareRequireRecipientVerification": false, "sharingEnabled": false, "staleCredentialDays": 0, "stepUpFreshnessMinutes": 0, "vaultIdleTimeoutMinutes": 0 }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "breachCheckEnabled": false, "domainMonitorEnabled": false, "domainMonitorIntervalHours": 0, "expirationLeadDays": 0, "expirationSecondLeadDays": 0, "extensionEnabled": false, "managedPendingExpiryDays": 0, "passwordHistoryDepth": 0, "requireJustificationOnReveal": false, "requireStepUpOnReveal": false, "shareDefaultMaxViews": 0, "shareDeletionGraceDays": 0, "shareMaxLifetimeHours": 0, "shareRequireRecipientVerification": false, "sharingEnabled": false, "staleCredentialDays": 0, "stepUpFreshnessMinutes": 0, "vaultIdleTimeoutMinutes": 0}""";
var request = new HttpRequestMessage(HttpMethod.Put, "https://depot.example.com/api/v1/docs/settings");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/vendors
Section titled “GET /api/v1/docs/vendors”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
listDocVendors is a CLIENT-FACE read and there is no practice-mux twin.
RULED. “DocVendor” is a client-database table, so a vendor is one client’s supplier record even when six clients buy from the same company: their account numbers, their contract dates and their support contacts differ, and a shared row would have to pick one practice’s answer for all of them. The duplication is real and is the smaller cost.
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
dir | query | string, one of asc, desc | No | Sort direction. |
expiringWithinDays | query | string | No | |
hasContract | query | string | No | |
monitored | query | string | No | |
page | query | integer | No | One-based page number. Defaults to 1. |
pageSize | query | integer | No | Rows per page, 1 to 200. Defaults to 50. |
q | query | string | No | Free-text search term. |
sort | query | string, one of created, expires, name, updated | No | Sort key. |
vendorId | query | string | No |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocVendorListResponse | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
itemsrequired | array of DocVendorView | |
items[].accountNumber | string | |
items[].category | string | |
items[].contactEmail | string | |
items[].contactName | string | |
items[].contactPhone | string | |
items[].contractEndOn | string (date-time) or null | |
items[].contractStartOn | string (date-time) or null | |
items[].createdAtrequired | string (date-time) | |
items[].labelsrequired | array of string | |
items[].linkCountrequired | integer | |
items[].namerequired | string | |
items[].notes | string | |
items[].publicIdrequired | string | |
items[].renewalNoticeDaysrequired | integer | |
items[].restrictedrequired | boolean | |
items[].supportPhone | string | |
items[].supportUrl | string | |
items[].updatedAtrequired | string (date-time) | |
items[].websiteUrl | string | |
pagerequired | integer | |
pageSizerequired | integer | |
totalrequired | integer | |
truncated | boolean |
Request samples
Section titled “Request samples”# 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/docs/vendors?dir=asc&expiringWithinDays=<expiringWithinDays>&hasContract=<hasContract>&monitored=<monitored>&page=0&pageSize=0' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/vendors?dir=asc&expiringWithinDays=<expiringWithinDays>&hasContract=<hasContract>&monitored=<monitored>&page=0&pageSize=0' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/vendors"params = { "dir": "asc", "expiringWithinDays": "<expiringWithinDays>", "hasContract": "<hasContract>", "monitored": "<monitored>", "page": "0", "pageSize": "0",}headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, params=params, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/vendors?dir=asc&expiringWithinDays=<expiringWithinDays>&hasContract=<hasContract>&monitored=<monitored>&page=0&pageSize=0", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = new URL("https://depot.example.com/api/v1/docs/vendors");url.searchParams.set("dir", "asc");url.searchParams.set("expiringWithinDays", "<expiringWithinDays>");url.searchParams.set("hasContract", "<hasContract>");url.searchParams.set("monitored", "<monitored>");url.searchParams.set("page", "0");url.searchParams.set("pageSize", "0");
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/vendors?dir=asc&expiringWithinDays=<expiringWithinDays>&hasContract=<hasContract>&monitored=<monitored>&page=0&pageSize=0");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());POST /api/v1/docs/vendors
Section titled “POST /api/v1/docs/vendors”POSTdocs:writetenant facehosteditmspremote
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Create doc vendor
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
accountNumber | string or null | |
category | string or null | |
contactEmail | string or null | |
contactName | string or null | |
contactPhone | string or null | |
contractEndOn | string or null | |
contractStartOn | string or null | |
labelsrequired | array of string | |
name | string or null | |
notes | string or null | |
renewalNoticeDays | integer or null | |
restricted | boolean or null | |
supportPhone | string or null | |
supportUrl | string or null | |
websiteUrl | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
201 | application/json, DocVendorView | Created. |
400 | application/problem+json, ProblemDetails | The request body is not valid JSON. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
201 response body
| Field | Type | Description |
|---|---|---|
accountNumber | string | |
category | string | |
contactEmail | string | |
contactName | string | |
contactPhone | string | |
contractEndOn | string (date-time) or null | |
contractStartOn | string (date-time) or null | |
createdAtrequired | string (date-time) | |
labelsrequired | array of string | |
linkCountrequired | integer | |
namerequired | string | |
notes | string | |
publicIdrequired | string | |
renewalNoticeDaysrequired | integer | |
restrictedrequired | boolean | |
supportPhone | string | |
supportUrl | string | |
updatedAtrequired | string (date-time) | |
websiteUrl | string |
Request samples
Section titled “Request samples”# Sign in first. outpost_console is a session cookie, so send it with every request.curl -X POST 'https://depot.example.com/api/v1/docs/vendors' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "accountNumber": "string", "category": "string", "contactEmail": "string", "contactName": "string", "contactPhone": "string", "contractEndOn": "string", "contractStartOn": "string", "labels": [ "string" ], "name": "string", "notes": "string", "renewalNoticeDays": 0, "restricted": false, "supportPhone": "string", "supportUrl": "string", "websiteUrl": "string"}'# Sign in first. outpost_console is a session cookie, so send it with every request.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "accountNumber": "string", "category": "string", "contactEmail": "string", "contactName": "string", "contactPhone": "string", "contractEndOn": "string", "contractStartOn": "string", "labels": [ "string" ], "name": "string", "notes": "string", "renewalNoticeDays": 0, "restricted": false, "supportPhone": "string", "supportUrl": "string", "websiteUrl": "string"}'@
$response = Invoke-RestMethod ` -Method Post ` -Uri 'https://depot.example.com/api/v1/docs/vendors' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# Sign in first. outpost_console is a session cookie, so send it with every request.
import requests
url = "https://depot.example.com/api/v1/docs/vendors"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "accountNumber": "string", "category": "string", "contactEmail": "string", "contactName": "string", "contactPhone": "string", "contractEndOn": "string", "contractStartOn": "string", "labels": [ "string", ], "name": "string", "notes": "string", "renewalNoticeDays": 0, "restricted": False, "supportPhone": "string", "supportUrl": "string", "websiteUrl": "string",}
response = requests.post(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// Sign in first. outpost_console is a session cookie, so send it with every request.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "accountNumber": "string", "category": "string", "contactEmail": "string", "contactName": "string", "contactPhone": "string", "contractEndOn": "string", "contractStartOn": "string", "labels": [ "string" ], "name": "string", "notes": "string", "renewalNoticeDays": 0, "restricted": false, "supportPhone": "string", "supportUrl": "string", "websiteUrl": "string"}`)
req, err := http.NewRequest(http.MethodPost, "https://depot.example.com/api/v1/docs/vendors", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// Sign in first. outpost_console is a session cookie, so send it with every request.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/vendors";
const response = await fetch(url, { method: "POST", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "accountNumber": "string", "category": "string", "contactEmail": "string", "contactName": "string", "contactPhone": "string", "contractEndOn": "string", "contractStartOn": "string", "labels": [ "string" ], "name": "string", "notes": "string", "renewalNoticeDays": 0, "restricted": false, "supportPhone": "string", "supportUrl": "string", "websiteUrl": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// Sign in first. outpost_console is a session cookie, so send it with every request.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "accountNumber": "string", "category": "string", "contactEmail": "string", "contactName": "string", "contactPhone": "string", "contractEndOn": "string", "contractStartOn": "string", "labels": [ "string" ], "name": "string", "notes": "string", "renewalNoticeDays": 0, "restricted": false, "supportPhone": "string", "supportUrl": "string", "websiteUrl": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Post, "https://depot.example.com/api/v1/docs/vendors");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());GET /api/v1/docs/vendors/{vendorId}
Section titled “GET /api/v1/docs/vendors/{vendorId}”GETdocs:readtenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Get doc vendor
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
vendorId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocVendorView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:read. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
accountNumber | string | |
category | string | |
contactEmail | string | |
contactName | string | |
contactPhone | string | |
contractEndOn | string (date-time) or null | |
contractStartOn | string (date-time) or null | |
createdAtrequired | string (date-time) | |
labelsrequired | array of string | |
linkCountrequired | integer | |
namerequired | string | |
notes | string | |
publicIdrequired | string | |
renewalNoticeDaysrequired | integer | |
restrictedrequired | boolean | |
supportPhone | string | |
supportUrl | string | |
updatedAtrequired | string (date-time) | |
websiteUrl | string |
Request samples
Section titled “Request samples”# 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/docs/vendors/<vendorId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Get ` -Uri 'https://depot.example.com/api/v1/docs/vendors/<vendorId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/vendors/<vendorId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.get(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodGet, "https://depot.example.com/api/v1/docs/vendors/<vendorId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/vendors/<vendorId>";
const response = await fetch(url, { method: "GET", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, "https://depot.example.com/api/v1/docs/vendors/<vendorId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());PATCH /api/v1/docs/vendors/{vendorId}
Section titled “PATCH /api/v1/docs/vendors/{vendorId}”PATCHdocs:writetenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Patch doc vendor
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
vendorId | path | string | Yes | A uuid. |
Request body
Section titled “Request body”Required, sent as application/json.
| Field | Type | Description |
|---|---|---|
accountNumber | string or null | |
category | string or null | |
contactEmail | string or null | |
contactName | string or null | |
contactPhone | string or null | |
contractEndOn | string or null | |
contractStartOn | string or null | |
labelsrequired | array of string | |
name | string or null | |
notes | string or null | |
renewalNoticeDays | integer or null | |
restricted | boolean or null | |
supportPhone | string or null | |
supportUrl | string or null | |
websiteUrl | string or null |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
200 | application/json, DocVendorView | Success. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
200 response body
| Field | Type | Description |
|---|---|---|
accountNumber | string | |
category | string | |
contactEmail | string | |
contactName | string | |
contactPhone | string | |
contractEndOn | string (date-time) or null | |
contractStartOn | string (date-time) or null | |
createdAtrequired | string (date-time) | |
labelsrequired | array of string | |
linkCountrequired | integer | |
namerequired | string | |
notes | string | |
publicIdrequired | string | |
renewalNoticeDaysrequired | integer | |
restrictedrequired | boolean | |
supportPhone | string | |
supportUrl | string | |
updatedAtrequired | string (date-time) | |
websiteUrl | string |
Request samples
Section titled “Request samples”# 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/docs/vendors/<vendorId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -b 'outpost_console=<console-session>' \ --data '{ "accountNumber": "string", "category": "string", "contactEmail": "string", "contactName": "string", "contactPhone": "string", "contractEndOn": "string", "contractStartOn": "string", "labels": [ "string" ], "name": "string", "notes": "string", "renewalNoticeDays": 0, "restricted": false, "supportPhone": "string", "supportUrl": "string", "websiteUrl": "string"}'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Content-Type' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$body = @'{ "accountNumber": "string", "category": "string", "contactEmail": "string", "contactName": "string", "contactPhone": "string", "contractEndOn": "string", "contractStartOn": "string", "labels": [ "string" ], "name": "string", "notes": "string", "renewalNoticeDays": 0, "restricted": false, "supportPhone": "string", "supportUrl": "string", "websiteUrl": "string"}'@
$response = Invoke-RestMethod ` -Method Patch ` -Uri 'https://depot.example.com/api/v1/docs/vendors/<vendorId>' ` -Headers $headers ` -ContentType 'application/json' ` -Body $body
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/vendors/<vendorId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json",}cookies = { "outpost_console": "<console-session>",}payload = { "accountNumber": "string", "category": "string", "contactEmail": "string", "contactName": "string", "contactPhone": "string", "contractEndOn": "string", "contractStartOn": "string", "labels": [ "string", ], "name": "string", "notes": "string", "renewalNoticeDays": 0, "restricted": False, "supportPhone": "string", "supportUrl": "string", "websiteUrl": "string",}
response = requests.patch(url, headers=headers, cookies=cookies, json=payload, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "bytes" "fmt" "io" "log" "net/http")
func main() { body := []byte(`{ "accountNumber": "string", "category": "string", "contactEmail": "string", "contactName": "string", "contactPhone": "string", "contractEndOn": "string", "contractStartOn": "string", "labels": [ "string" ], "name": "string", "notes": "string", "renewalNoticeDays": 0, "restricted": false, "supportPhone": "string", "supportUrl": "string", "websiteUrl": "string"}`)
req, err := http.NewRequest(http.MethodPatch, "https://depot.example.com/api/v1/docs/vendors/<vendorId>", bytes.NewReader(body)) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.Header.Set("Content-Type", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/vendors/<vendorId>";
const response = await fetch(url, { method: "PATCH", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", "Content-Type": "application/json", }, credentials: "include", body: JSON.stringify({ "accountNumber": "string", "category": "string", "contactEmail": "string", "contactName": "string", "contactPhone": "string", "contractEndOn": "string", "contractStartOn": "string", "labels": [ "string" ], "name": "string", "notes": "string", "renewalNoticeDays": 0, "restricted": false, "supportPhone": "string", "supportUrl": "string", "websiteUrl": "string" }),});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;using System.Text;
using var client = new HttpClient();
const string body = """{ "accountNumber": "string", "category": "string", "contactEmail": "string", "contactName": "string", "contactPhone": "string", "contractEndOn": "string", "contractStartOn": "string", "labels": [ "string" ], "name": "string", "notes": "string", "renewalNoticeDays": 0, "restricted": false, "supportPhone": "string", "supportUrl": "string", "websiteUrl": "string"}""";
var request = new HttpRequestMessage(HttpMethod.Patch, "https://depot.example.com/api/v1/docs/vendors/<vendorId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");request.Content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());DELETE /api/v1/docs/vendors/{vendorId}
Section titled “DELETE /api/v1/docs/vendors/{vendorId}”DELETEdocs:writetenant facehosteditmspremoteIdempotent
From an MSP console, prefix the path with /api/v1/clients/{clientID} to reach one client.
Source: [object Object]
Delete doc vendor
Parameters
Section titled “Parameters”| Name | In | Type | Required | Description |
|---|---|---|---|---|
vendorId | path | string | Yes | A uuid. |
Responses
Section titled “Responses”| Status | Body | Description |
|---|---|---|
204 | None | Success, with no body. |
400 | application/problem+json, ProblemDetails | One or more validation errors occurred. |
401 | application/problem+json, ProblemDetails | No signed-in identity. |
403 | application/problem+json, ProblemDetails | The identity does not hold docs:write. |
404 | application/problem+json, ProblemDetails | No resource matches that id. |
409 | application/problem+json, ProblemDetails | The request conflicts with the current state. |
500 | application/problem+json, ProblemDetails | No client store in request context. |
501 | application/problem+json, ProblemDetails | That part of the documentation store is not available on this Depot yet. |
507 | application/problem+json, ProblemDetails | The storage profile for this client is over its configured quota. Raise the quota or remove attachments. |
Request samples
Section titled “Request samples”# 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/docs/vendors/<vendorId>' \ -H 'X-CSRF-Token: <csrf-token>' \ -H 'Accept: application/json' \ -b 'outpost_console=<console-session>'# 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.
$headers = @{ 'X-CSRF-Token' = '<csrf-token>' 'Accept' = 'application/json' 'Cookie' = 'outpost_console=<console-session>'}
$response = Invoke-RestMethod ` -Method Delete ` -Uri 'https://depot.example.com/api/v1/docs/vendors/<vendorId>' ` -Headers $headers
$response | ConvertTo-Json -Depth 10# 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.
import requests
url = "https://depot.example.com/api/v1/docs/vendors/<vendorId>"headers = { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json",}cookies = { "outpost_console": "<console-session>",}
response = requests.delete(url, headers=headers, cookies=cookies, timeout=30)response.raise_for_status()print(response.json())// 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.package main
import ( "fmt" "io" "log" "net/http")
func main() { req, err := http.NewRequest(http.MethodDelete, "https://depot.example.com/api/v1/docs/vendors/<vendorId>", nil) if err != nil { log.Fatal(err) }
req.Header.Set("X-CSRF-Token", "<csrf-token>") req.Header.Set("Accept", "application/json") req.AddCookie(&http.Cookie{Name: "outpost_console", Value: "<console-session>"})
resp, err := http.DefaultClient.Do(req) if err != nil { log.Fatal(err) } defer resp.Body.Close()
out, err := io.ReadAll(resp.Body) if err != nil { log.Fatal(err) } fmt.Println(resp.Status, string(out))}// 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.// The session cookie is set by signing in. A script cannot set it itself.
const url = "https://depot.example.com/api/v1/docs/vendors/<vendorId>";
const response = await fetch(url, { method: "DELETE", headers: { "X-CSRF-Token": "<csrf-token>", "Accept": "application/json", }, credentials: "include",});
if (!response.ok) { throw new Error(`Request failed with status ${response.status}`);}
const data = await response.json();console.log(data);// 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.
using System;using System.Net.Http;
using var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Delete, "https://depot.example.com/api/v1/docs/vendors/<vendorId>");request.Headers.TryAddWithoutValidation("X-CSRF-Token", "<csrf-token>");request.Headers.TryAddWithoutValidation("Accept", "application/json");request.Headers.TryAddWithoutValidation("Cookie", "outpost_console=<console-session>");
var response = await client.SendAsync(request);response.EnsureSuccessStatusCode();Console.WriteLine(await response.Content.ReadAsStringAsync());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.