curl --request POST \
--url https://{tenant}.cubecloud.dev/api/v1/deployments/{deploymentId}/dashboard-exports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"dashboardId": 123,
"dashboardPublicId": "<string>",
"filters": [
{
"member": "<string>",
"caseSensitive": "<unknown>",
"endInclusive": "<unknown>",
"startInclusive": "<unknown>",
"value": "<string>"
}
],
"memberSwitchers": [
{
"member": "<string>",
"selected": "<string>"
}
],
"renderAs": {
"email": "<string>",
"embedTenantName": "<string>",
"externalId": "<string>",
"groups": [
"<string>"
],
"securityContext": {},
"userAttributes": [
{
"name": "<string>",
"value": "<string>"
}
],
"userId": 123
},
"timeGrains": [
{
"grain": "<string>",
"member": "<string>"
}
]
}
'import requests
url = "https://{tenant}.cubecloud.dev/api/v1/deployments/{deploymentId}/dashboard-exports"
payload = {
"dashboardId": 123,
"dashboardPublicId": "<string>",
"filters": [
{
"member": "<string>",
"caseSensitive": "<unknown>",
"endInclusive": "<unknown>",
"startInclusive": "<unknown>",
"value": "<string>"
}
],
"memberSwitchers": [
{
"member": "<string>",
"selected": "<string>"
}
],
"renderAs": {
"email": "<string>",
"embedTenantName": "<string>",
"externalId": "<string>",
"groups": ["<string>"],
"securityContext": {},
"userAttributes": [
{
"name": "<string>",
"value": "<string>"
}
],
"userId": 123
},
"timeGrains": [
{
"grain": "<string>",
"member": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
dashboardId: 123,
dashboardPublicId: '<string>',
filters: [
{
member: '<string>',
caseSensitive: '<unknown>',
endInclusive: '<unknown>',
startInclusive: '<unknown>',
value: '<string>'
}
],
memberSwitchers: [{member: '<string>', selected: '<string>'}],
renderAs: {
email: '<string>',
embedTenantName: '<string>',
externalId: '<string>',
groups: ['<string>'],
securityContext: {},
userAttributes: [{name: '<string>', value: '<string>'}],
userId: 123
},
timeGrains: [{grain: '<string>', member: '<string>'}]
})
};
fetch('https://{tenant}.cubecloud.dev/api/v1/deployments/{deploymentId}/dashboard-exports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{tenant}.cubecloud.dev/api/v1/deployments/{deploymentId}/dashboard-exports",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'dashboardId' => 123,
'dashboardPublicId' => '<string>',
'filters' => [
[
'member' => '<string>',
'caseSensitive' => '<unknown>',
'endInclusive' => '<unknown>',
'startInclusive' => '<unknown>',
'value' => '<string>'
]
],
'memberSwitchers' => [
[
'member' => '<string>',
'selected' => '<string>'
]
],
'renderAs' => [
'email' => '<string>',
'embedTenantName' => '<string>',
'externalId' => '<string>',
'groups' => [
'<string>'
],
'securityContext' => [
],
'userAttributes' => [
[
'name' => '<string>',
'value' => '<string>'
]
],
'userId' => 123
],
'timeGrains' => [
[
'grain' => '<string>',
'member' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{tenant}.cubecloud.dev/api/v1/deployments/{deploymentId}/dashboard-exports"
payload := strings.NewReader("{\n \"dashboardId\": 123,\n \"dashboardPublicId\": \"<string>\",\n \"filters\": [\n {\n \"member\": \"<string>\",\n \"caseSensitive\": \"<unknown>\",\n \"endInclusive\": \"<unknown>\",\n \"startInclusive\": \"<unknown>\",\n \"value\": \"<string>\"\n }\n ],\n \"memberSwitchers\": [\n {\n \"member\": \"<string>\",\n \"selected\": \"<string>\"\n }\n ],\n \"renderAs\": {\n \"email\": \"<string>\",\n \"embedTenantName\": \"<string>\",\n \"externalId\": \"<string>\",\n \"groups\": [\n \"<string>\"\n ],\n \"securityContext\": {},\n \"userAttributes\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"userId\": 123\n },\n \"timeGrains\": [\n {\n \"grain\": \"<string>\",\n \"member\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{tenant}.cubecloud.dev/api/v1/deployments/{deploymentId}/dashboard-exports")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"dashboardId\": 123,\n \"dashboardPublicId\": \"<string>\",\n \"filters\": [\n {\n \"member\": \"<string>\",\n \"caseSensitive\": \"<unknown>\",\n \"endInclusive\": \"<unknown>\",\n \"startInclusive\": \"<unknown>\",\n \"value\": \"<string>\"\n }\n ],\n \"memberSwitchers\": [\n {\n \"member\": \"<string>\",\n \"selected\": \"<string>\"\n }\n ],\n \"renderAs\": {\n \"email\": \"<string>\",\n \"embedTenantName\": \"<string>\",\n \"externalId\": \"<string>\",\n \"groups\": [\n \"<string>\"\n ],\n \"securityContext\": {},\n \"userAttributes\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"userId\": 123\n },\n \"timeGrains\": [\n {\n \"grain\": \"<string>\",\n \"member\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenant}.cubecloud.dev/api/v1/deployments/{deploymentId}/dashboard-exports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"dashboardId\": 123,\n \"dashboardPublicId\": \"<string>\",\n \"filters\": [\n {\n \"member\": \"<string>\",\n \"caseSensitive\": \"<unknown>\",\n \"endInclusive\": \"<unknown>\",\n \"startInclusive\": \"<unknown>\",\n \"value\": \"<string>\"\n }\n ],\n \"memberSwitchers\": [\n {\n \"member\": \"<string>\",\n \"selected\": \"<string>\"\n }\n ],\n \"renderAs\": {\n \"email\": \"<string>\",\n \"embedTenantName\": \"<string>\",\n \"externalId\": \"<string>\",\n \"groups\": [\n \"<string>\"\n ],\n \"securityContext\": {},\n \"userAttributes\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"userId\": 123\n },\n \"timeGrains\": [\n {\n \"grain\": \"<string>\",\n \"member\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"expiresAt": "2023-11-07T05:31:56Z",
"jobId": "<string>"
}Export a dashboard as PNG or PDF
curl --request POST \
--url https://{tenant}.cubecloud.dev/api/v1/deployments/{deploymentId}/dashboard-exports \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"dashboardId": 123,
"dashboardPublicId": "<string>",
"filters": [
{
"member": "<string>",
"caseSensitive": "<unknown>",
"endInclusive": "<unknown>",
"startInclusive": "<unknown>",
"value": "<string>"
}
],
"memberSwitchers": [
{
"member": "<string>",
"selected": "<string>"
}
],
"renderAs": {
"email": "<string>",
"embedTenantName": "<string>",
"externalId": "<string>",
"groups": [
"<string>"
],
"securityContext": {},
"userAttributes": [
{
"name": "<string>",
"value": "<string>"
}
],
"userId": 123
},
"timeGrains": [
{
"grain": "<string>",
"member": "<string>"
}
]
}
'import requests
url = "https://{tenant}.cubecloud.dev/api/v1/deployments/{deploymentId}/dashboard-exports"
payload = {
"dashboardId": 123,
"dashboardPublicId": "<string>",
"filters": [
{
"member": "<string>",
"caseSensitive": "<unknown>",
"endInclusive": "<unknown>",
"startInclusive": "<unknown>",
"value": "<string>"
}
],
"memberSwitchers": [
{
"member": "<string>",
"selected": "<string>"
}
],
"renderAs": {
"email": "<string>",
"embedTenantName": "<string>",
"externalId": "<string>",
"groups": ["<string>"],
"securityContext": {},
"userAttributes": [
{
"name": "<string>",
"value": "<string>"
}
],
"userId": 123
},
"timeGrains": [
{
"grain": "<string>",
"member": "<string>"
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
dashboardId: 123,
dashboardPublicId: '<string>',
filters: [
{
member: '<string>',
caseSensitive: '<unknown>',
endInclusive: '<unknown>',
startInclusive: '<unknown>',
value: '<string>'
}
],
memberSwitchers: [{member: '<string>', selected: '<string>'}],
renderAs: {
email: '<string>',
embedTenantName: '<string>',
externalId: '<string>',
groups: ['<string>'],
securityContext: {},
userAttributes: [{name: '<string>', value: '<string>'}],
userId: 123
},
timeGrains: [{grain: '<string>', member: '<string>'}]
})
};
fetch('https://{tenant}.cubecloud.dev/api/v1/deployments/{deploymentId}/dashboard-exports', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{tenant}.cubecloud.dev/api/v1/deployments/{deploymentId}/dashboard-exports",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'dashboardId' => 123,
'dashboardPublicId' => '<string>',
'filters' => [
[
'member' => '<string>',
'caseSensitive' => '<unknown>',
'endInclusive' => '<unknown>',
'startInclusive' => '<unknown>',
'value' => '<string>'
]
],
'memberSwitchers' => [
[
'member' => '<string>',
'selected' => '<string>'
]
],
'renderAs' => [
'email' => '<string>',
'embedTenantName' => '<string>',
'externalId' => '<string>',
'groups' => [
'<string>'
],
'securityContext' => [
],
'userAttributes' => [
[
'name' => '<string>',
'value' => '<string>'
]
],
'userId' => 123
],
'timeGrains' => [
[
'grain' => '<string>',
'member' => '<string>'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://{tenant}.cubecloud.dev/api/v1/deployments/{deploymentId}/dashboard-exports"
payload := strings.NewReader("{\n \"dashboardId\": 123,\n \"dashboardPublicId\": \"<string>\",\n \"filters\": [\n {\n \"member\": \"<string>\",\n \"caseSensitive\": \"<unknown>\",\n \"endInclusive\": \"<unknown>\",\n \"startInclusive\": \"<unknown>\",\n \"value\": \"<string>\"\n }\n ],\n \"memberSwitchers\": [\n {\n \"member\": \"<string>\",\n \"selected\": \"<string>\"\n }\n ],\n \"renderAs\": {\n \"email\": \"<string>\",\n \"embedTenantName\": \"<string>\",\n \"externalId\": \"<string>\",\n \"groups\": [\n \"<string>\"\n ],\n \"securityContext\": {},\n \"userAttributes\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"userId\": 123\n },\n \"timeGrains\": [\n {\n \"grain\": \"<string>\",\n \"member\": \"<string>\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://{tenant}.cubecloud.dev/api/v1/deployments/{deploymentId}/dashboard-exports")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"dashboardId\": 123,\n \"dashboardPublicId\": \"<string>\",\n \"filters\": [\n {\n \"member\": \"<string>\",\n \"caseSensitive\": \"<unknown>\",\n \"endInclusive\": \"<unknown>\",\n \"startInclusive\": \"<unknown>\",\n \"value\": \"<string>\"\n }\n ],\n \"memberSwitchers\": [\n {\n \"member\": \"<string>\",\n \"selected\": \"<string>\"\n }\n ],\n \"renderAs\": {\n \"email\": \"<string>\",\n \"embedTenantName\": \"<string>\",\n \"externalId\": \"<string>\",\n \"groups\": [\n \"<string>\"\n ],\n \"securityContext\": {},\n \"userAttributes\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"userId\": 123\n },\n \"timeGrains\": [\n {\n \"grain\": \"<string>\",\n \"member\": \"<string>\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://{tenant}.cubecloud.dev/api/v1/deployments/{deploymentId}/dashboard-exports")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"dashboardId\": 123,\n \"dashboardPublicId\": \"<string>\",\n \"filters\": [\n {\n \"member\": \"<string>\",\n \"caseSensitive\": \"<unknown>\",\n \"endInclusive\": \"<unknown>\",\n \"startInclusive\": \"<unknown>\",\n \"value\": \"<string>\"\n }\n ],\n \"memberSwitchers\": [\n {\n \"member\": \"<string>\",\n \"selected\": \"<string>\"\n }\n ],\n \"renderAs\": {\n \"email\": \"<string>\",\n \"embedTenantName\": \"<string>\",\n \"externalId\": \"<string>\",\n \"groups\": [\n \"<string>\"\n ],\n \"securityContext\": {},\n \"userAttributes\": [\n {\n \"name\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"userId\": 123\n },\n \"timeGrains\": [\n {\n \"grain\": \"<string>\",\n \"member\": \"<string>\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"expiresAt": "2023-11-07T05:31:56Z",
"jobId": "<string>"
}dashboardId (numeric) or dashboardPublicId (string) — supply exactly one; it must belong to this deployment, otherwise 404 is returned.
Returns as soon as the job is accepted, because a render waits for every widget to finish querying. Poll GET /dashboard-exports/{jobId} until status is completed, then fetch the file from GET /dashboard-exports/{jobId}/download. The job and its file are dropped at expiresAt (5 minutes) — download before then or submit again.
Pass filters, timeGrains and memberSwitchers to render the board with specific control values, exactly as a scheduled notification does; omit them to render its saved defaults.
By default the dashboard renders under the calling user’s own security context, so the file shows what that user would see. Requires manage access to the dashboard’s workbook — the same permission the console’s own “Download as PNG / PDF” actions require, because a whole-dashboard render is a bulk data export.
To export on someone else’s behalf, pass renderAs: the queries behind the image then run under that user’s security context instead of yours. Requires the caller to be a tenant administrator. Name a console user by userId or email (type: USER), or an embed user by embedTenantName + externalId (type: EMBED_USER). A deactivated console user is not a valid subject and returns 404; an email is matched case-insensitively.
An embed subject is provisioned if it does not exist yet, and groups, userAttributes and securityContext apply to this render only — they are carried on the render’s own session and are NOT written to the user’s stored context, so exporting for someone never changes what their live embedded sessions see. (Use the embed-tenant users API to change a user’s stored context.) An embed subject additionally requires the dashboard’s workbook to be shared with that embed tenant, otherwise 403 is returned.
Returns 403 when the workspace has data downloads restricted — including for an on-behalf-of export, which deliberately does not bypass that setting the way a built-in scheduled notification does — and 429 when there are already too many exports in flight for the identity being rendered as.Authorizations
Token authentication. Send Authorization: Bearer <YOUR_TOKEN>.
Path Parameters
Numeric id of the deployment that owns the dashboard.
Body
StartDashboardExportInput
png, pdf Numeric id of the dashboard to export. Provide either this or dashboardPublicId, not both.
Public id of the dashboard to export. Provide either this or dashboardId, not both.
Dimension filters applied to the dashboard while it renders. Same shape the scheduled-notification API uses.
Show child attributes
Show child attributes
Field-switcher selections applied to the dashboard while it renders.
Show child attributes
Show child attributes
Render the dashboard as this user instead of the caller — the queries behind the image run under THEIR security context. Requires the caller to be a tenant admin. Omit to render as the API key's own user.
Show child attributes
Show child attributes
Time-grain overrides applied to the dashboard while it renders.
Show child attributes
Show child attributes