Skip to content

Depot reportdefinitions

Registers the definition library on the TENANT mux.

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

GETreport:readtenant facehosteditmspremoteIdempotent

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

Source: [object Object]

List report definitions

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

200 response body

FieldTypeDescription
itemsrequiredarray of ReportDefinitionView
items[].createdAtrequiredstring (date-time)
items[].createdByUserIdstring
items[].descriptionrequiredstring
items[].namerequiredstring
items[].publicIdrequiredstring
items[].sectionsrequiredarray of ReportSectionRequest
items[].sections[].columnsrequiredarray of string
items[].sections[].datasetrequiredstring
items[].sections[].filtersrequiredarray of ReportFilterRequest
items[].sections[].filters[].columnrequiredstring
items[].sections[].filters[].oprequiredstring
items[].sections[].filters[].valuerequiredstring
items[].sections[].groupByrequiredstring
items[].sections[].limitrequiredinteger
items[].sections[].sortrequiredarray of ReportSortKeyRequest
items[].sections[].sort[].columnrequiredstring
items[].sections[].sort[].descrequiredboolean
items[].sections[].summaryrequiredboolean
items[].sections[].titlerequiredstring
items[].updatedAtrequiredstring (date-time)
pagerequiredinteger
pageSizerequiredinteger
totalrequiredinteger
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/reports/definitions?dir=asc&page=0&pageSize=0&q=<q>&sort=created' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POSTreport:managetenant facehosteditmspremote

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

Source: [object Object]

Create report definition

Required, sent as application/json.

FieldTypeDescription
descriptionrequiredstring
namerequiredstring
sectionsrequiredarray of ReportSectionRequest
sections[].columnsrequiredarray of string
sections[].datasetrequiredstring
sections[].filtersrequiredarray of ReportFilterRequest
sections[].filters[].columnrequiredstring
sections[].filters[].oprequiredstring
sections[].filters[].valuerequiredstring
sections[].groupByrequiredstring
sections[].limitrequiredinteger
sections[].sortrequiredarray of ReportSortKeyRequest
sections[].sort[].columnrequiredstring
sections[].sort[].descrequiredboolean
sections[].summaryrequiredboolean
sections[].titlerequiredstring
StatusBodyDescription
201application/json, ReportDefinitionViewCreated.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold report:manage.
404application/problem+json, ProblemDetailsReport not found.
409application/problem+json, ProblemDetailsA report with that name already exists.
500application/problem+json, ProblemDetailsNo client store in request context.

201 response body

FieldTypeDescription
createdAtrequiredstring (date-time)
createdByUserIdstring
descriptionrequiredstring
namerequiredstring
publicIdrequiredstring
sectionsrequiredarray of ReportSectionRequest
sections[].columnsrequiredarray of string
sections[].datasetrequiredstring
sections[].filtersrequiredarray of ReportFilterRequest
sections[].filters[].columnrequiredstring
sections[].filters[].oprequiredstring
sections[].filters[].valuerequiredstring
sections[].groupByrequiredstring
sections[].limitrequiredinteger
sections[].sortrequiredarray of ReportSortKeyRequest
sections[].sort[].columnrequiredstring
sections[].sort[].descrequiredboolean
sections[].summaryrequiredboolean
sections[].titlerequiredstring
updatedAtrequiredstring (date-time)
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/reports/definitions' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"description": "string",
"name": "string",
"sections": [
{
"columns": [
"string"
],
"dataset": "string",
"filters": [
{
"column": "string",
"op": "string",
"value": "string"
}
],
"groupBy": "string",
"limit": 0,
"sort": [
{
"column": "string",
"desc": false
}
],
"summary": false,
"title": "string"
}
]
}'

GET /api/v1/reports/definitions/{definitionId}

Section titled “GET /api/v1/reports/definitions/{definitionId}”

GETreport:readtenant facehosteditmspremoteIdempotent

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

Source: [object Object]

Get report definition

NameInTypeRequiredDescription
definitionIdpathstringYesA uuid.
StatusBodyDescription
200application/json, ReportDefinitionViewSuccess.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold report:read.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsNo client store in request context.

200 response body

FieldTypeDescription
createdAtrequiredstring (date-time)
createdByUserIdstring
descriptionrequiredstring
namerequiredstring
publicIdrequiredstring
sectionsrequiredarray of ReportSectionRequest
sections[].columnsrequiredarray of string
sections[].datasetrequiredstring
sections[].filtersrequiredarray of ReportFilterRequest
sections[].filters[].columnrequiredstring
sections[].filters[].oprequiredstring
sections[].filters[].valuerequiredstring
sections[].groupByrequiredstring
sections[].limitrequiredinteger
sections[].sortrequiredarray of ReportSortKeyRequest
sections[].sort[].columnrequiredstring
sections[].sort[].descrequiredboolean
sections[].summaryrequiredboolean
sections[].titlerequiredstring
updatedAtrequiredstring (date-time)
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/reports/definitions/<definitionId>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

PUT /api/v1/reports/definitions/{definitionId}

Section titled “PUT /api/v1/reports/definitions/{definitionId}”

PUTreport:managetenant facehosteditmspremoteIdempotent

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

Source: [object Object]

Update report definition

NameInTypeRequiredDescription
definitionIdpathstringYesA uuid.

Required, sent as application/json.

FieldTypeDescription
descriptionrequiredstring
namerequiredstring
sectionsrequiredarray of ReportSectionRequest
sections[].columnsrequiredarray of string
sections[].datasetrequiredstring
sections[].filtersrequiredarray of ReportFilterRequest
sections[].filters[].columnrequiredstring
sections[].filters[].oprequiredstring
sections[].filters[].valuerequiredstring
sections[].groupByrequiredstring
sections[].limitrequiredinteger
sections[].sortrequiredarray of ReportSortKeyRequest
sections[].sort[].columnrequiredstring
sections[].sort[].descrequiredboolean
sections[].summaryrequiredboolean
sections[].titlerequiredstring
StatusBodyDescription
200application/json, ReportDefinitionViewSuccess.
400application/problem+json, ProblemDetailsThe request body is not valid JSON.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold report:manage.
404application/problem+json, ProblemDetailsNo resource matches that id.
409application/problem+json, ProblemDetailsA report with that name already exists.
500application/problem+json, ProblemDetailsNo client store in request context.

200 response body

FieldTypeDescription
createdAtrequiredstring (date-time)
createdByUserIdstring
descriptionrequiredstring
namerequiredstring
publicIdrequiredstring
sectionsrequiredarray of ReportSectionRequest
sections[].columnsrequiredarray of string
sections[].datasetrequiredstring
sections[].filtersrequiredarray of ReportFilterRequest
sections[].filters[].columnrequiredstring
sections[].filters[].oprequiredstring
sections[].filters[].valuerequiredstring
sections[].groupByrequiredstring
sections[].limitrequiredinteger
sections[].sortrequiredarray of ReportSortKeyRequest
sections[].sort[].columnrequiredstring
sections[].sort[].descrequiredboolean
sections[].summaryrequiredboolean
sections[].titlerequiredstring
updatedAtrequiredstring (date-time)
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X PUT 'https://depot.example.com/api/v1/reports/definitions/<definitionId>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"description": "string",
"name": "string",
"sections": [
{
"columns": [
"string"
],
"dataset": "string",
"filters": [
{
"column": "string",
"op": "string",
"value": "string"
}
],
"groupBy": "string",
"limit": 0,
"sort": [
{
"column": "string",
"desc": false
}
],
"summary": false,
"title": "string"
}
]
}'

DELETE /api/v1/reports/definitions/{definitionId}

Section titled “DELETE /api/v1/reports/definitions/{definitionId}”

DELETEreport:managetenant facehosteditmspremoteIdempotent

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

Source: [object Object]

deleteReportDefinition is a HARD delete and it takes this report’s schedules with it, which the store’s cascade does rather than this handler.

A schedule whose definition is gone has nothing to render: leaving it armed is a delivery failure every morning that cannot be turned off from the console, because the page it would be turned off from is the list of definitions.

NameInTypeRequiredDescription
definitionIdpathstringYesA uuid.
StatusBodyDescription
204NoneSuccess, with no body.
401application/problem+json, ProblemDetailsNo signed-in identity.
403application/problem+json, ProblemDetailsThe identity does not hold report:manage.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsNo client store in request context.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X DELETE 'https://depot.example.com/api/v1/reports/definitions/<definitionId>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

GET /api/v1/reports/definitions/{definitionId}/run

Section titled “GET /api/v1/reports/definitions/{definitionId}/run”

GETreport:readtenant facehosteditmspremoteIdempotentdownload

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

Source: [object Object]

runReportDefinition runs a saved report UNDER THE CALLER’S OWN PERMISSIONS.

This is the property that makes a saved report safe to share. The definition is the author’s and the permission set is the reader’s, so a report written by somebody who can see vulnerabilities and run by somebody who cannot is a 403 naming vuln:read rather than a document full of CVEs. The engine refuses the whole run rather than dropping the section, because a report silently missing a section reads as “there are none”.

NameInTypeRequiredDescription
definitionIdpathstringYesA uuid.
formatquerystringNo
StatusBodyDescription
200application/octet-stream, string (binary)Success.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsAuthentication is required.
402application/problem+json, ProblemDetailsThis report is not included in your plan.
403application/problem+json, ProblemDetailsThe identity does not hold the required permission.
404application/problem+json, ProblemDetailsNo resource matches that id.
500application/problem+json, ProblemDetailsNo client store in request context.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
# This operation is idempotent. Repeating it does not repeat its effect.
curl -X GET 'https://depot.example.com/api/v1/reports/definitions/<definitionId>/run?format=<format>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-b 'outpost_console=<console-session>'

POSTreport:readtenant facehosteditmspremotedownload

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

Source: [object Object]

previewReportDefinition runs a definition that has not been saved, so an author sees the table before the report exists.

Same engine, same permission check, same refusal: a preview that showed more than the saved report will would be worse than no preview.

NameInTypeRequiredDescription
formatquerystringNo

Required, sent as application/json.

FieldTypeDescription
descriptionrequiredstring
namerequiredstring
sectionsrequiredarray of ReportSectionRequest
sections[].columnsrequiredarray of string
sections[].datasetrequiredstring
sections[].filtersrequiredarray of ReportFilterRequest
sections[].filters[].columnrequiredstring
sections[].filters[].oprequiredstring
sections[].filters[].valuerequiredstring
sections[].groupByrequiredstring
sections[].limitrequiredinteger
sections[].sortrequiredarray of ReportSortKeyRequest
sections[].sort[].columnrequiredstring
sections[].sort[].descrequiredboolean
sections[].summaryrequiredboolean
sections[].titlerequiredstring
StatusBodyDescription
200application/octet-stream, string (binary)Success.
400application/problem+json, ProblemDetailsOne or more validation errors occurred.
401application/problem+json, ProblemDetailsAuthentication is required.
402application/problem+json, ProblemDetailsThis report is not included in your plan.
403application/problem+json, ProblemDetailsThe identity does not hold the required permission.
500application/problem+json, ProblemDetailsNo client store in request context.
Terminal window
# Sign in first. outpost_console is a session cookie, so send it with every request.
curl -X POST 'https://depot.example.com/api/v1/reports/preview?format=<format>' \
-H 'X-CSRF-Token: <csrf-token>' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-b 'outpost_console=<console-session>' \
--data '{
"description": "string",
"name": "string",
"sections": [
{
"columns": [
"string"
],
"dataset": "string",
"filters": [
{
"column": "string",
"op": "string",
"value": "string"
}
],
"groupBy": "string",
"limit": 0,
"sort": [
{
"column": "string",
"desc": false
}
],
"summary": false,
"title": "string"
}
]
}'

Content is licensed CC BY 4.0. Code samples are MIT. Outpost and the Outpost mark are trademarks of Outpost Business Solutions, PBC and are not covered by either license.