curl --request POST \
--url https://api.select.dev/v2/dashboards/{dashboard_id}/digests \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"name": "<string>",
"schedule": {
"frequency": "daily"
},
"destination_ids": [
"<string>"
],
"custom_message": "<string>",
"state": "active",
"filters": [
{
"field": "warehouse_name",
"operator": "in",
"values": [
"TRANSFORMING"
]
},
{
"field": "user_name",
"operator": "is not"
},
{
"filters": [
{
"field": "database_name",
"operator": "in",
"values": [
"ANALYTICS"
]
},
{
"field": "database_name",
"operator": "in",
"values": [
"RAW"
]
}
],
"operator": "or"
}
]
}
'import requests
url = "https://api.select.dev/v2/dashboards/{dashboard_id}/digests"
payload = {
"name": "<string>",
"schedule": { "frequency": "daily" },
"destination_ids": ["<string>"],
"custom_message": "<string>",
"state": "active",
"filters": [
{
"field": "warehouse_name",
"operator": "in",
"values": ["TRANSFORMING"]
},
{
"field": "user_name",
"operator": "is not"
},
{
"filters": [
{
"field": "database_name",
"operator": "in",
"values": ["ANALYTICS"]
},
{
"field": "database_name",
"operator": "in",
"values": ["RAW"]
}
],
"operator": "or"
}
]
}
headers = {
"x-tenant-id": "<x-tenant-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-tenant-id': '<x-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
schedule: {frequency: 'daily'},
destination_ids: ['<string>'],
custom_message: '<string>',
state: 'active',
filters: [
{field: 'warehouse_name', operator: 'in', values: ['TRANSFORMING']},
{field: 'user_name', operator: 'is not'},
{
filters: [
{field: 'database_name', operator: 'in', values: ['ANALYTICS']},
{field: 'database_name', operator: 'in', values: ['RAW']}
],
operator: 'or'
}
]
})
};
fetch('https://api.select.dev/v2/dashboards/{dashboard_id}/digests', 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://api.select.dev/v2/dashboards/{dashboard_id}/digests",
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([
'name' => '<string>',
'schedule' => [
'frequency' => 'daily'
],
'destination_ids' => [
'<string>'
],
'custom_message' => '<string>',
'state' => 'active',
'filters' => [
[
'field' => 'warehouse_name',
'operator' => 'in',
'values' => [
'TRANSFORMING'
]
],
[
'field' => 'user_name',
'operator' => 'is not'
],
[
'filters' => [
[
'field' => 'database_name',
'operator' => 'in',
'values' => [
'ANALYTICS'
]
],
[
'field' => 'database_name',
'operator' => 'in',
'values' => [
'RAW'
]
]
],
'operator' => 'or'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-tenant-id: <x-tenant-id>"
],
]);
$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://api.select.dev/v2/dashboards/{dashboard_id}/digests"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"schedule\": {\n \"frequency\": \"daily\"\n },\n \"destination_ids\": [\n \"<string>\"\n ],\n \"custom_message\": \"<string>\",\n \"state\": \"active\",\n \"filters\": [\n {\n \"field\": \"warehouse_name\",\n \"operator\": \"in\",\n \"values\": [\n \"TRANSFORMING\"\n ]\n },\n {\n \"field\": \"user_name\",\n \"operator\": \"is not\"\n },\n {\n \"filters\": [\n {\n \"field\": \"database_name\",\n \"operator\": \"in\",\n \"values\": [\n \"ANALYTICS\"\n ]\n },\n {\n \"field\": \"database_name\",\n \"operator\": \"in\",\n \"values\": [\n \"RAW\"\n ]\n }\n ],\n \"operator\": \"or\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-tenant-id", "<x-tenant-id>")
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://api.select.dev/v2/dashboards/{dashboard_id}/digests")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"schedule\": {\n \"frequency\": \"daily\"\n },\n \"destination_ids\": [\n \"<string>\"\n ],\n \"custom_message\": \"<string>\",\n \"state\": \"active\",\n \"filters\": [\n {\n \"field\": \"warehouse_name\",\n \"operator\": \"in\",\n \"values\": [\n \"TRANSFORMING\"\n ]\n },\n {\n \"field\": \"user_name\",\n \"operator\": \"is not\"\n },\n {\n \"filters\": [\n {\n \"field\": \"database_name\",\n \"operator\": \"in\",\n \"values\": [\n \"ANALYTICS\"\n ]\n },\n {\n \"field\": \"database_name\",\n \"operator\": \"in\",\n \"values\": [\n \"RAW\"\n ]\n }\n ],\n \"operator\": \"or\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.select.dev/v2/dashboards/{dashboard_id}/digests")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-tenant-id"] = '<x-tenant-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"schedule\": {\n \"frequency\": \"daily\"\n },\n \"destination_ids\": [\n \"<string>\"\n ],\n \"custom_message\": \"<string>\",\n \"state\": \"active\",\n \"filters\": [\n {\n \"field\": \"warehouse_name\",\n \"operator\": \"in\",\n \"values\": [\n \"TRANSFORMING\"\n ]\n },\n {\n \"field\": \"user_name\",\n \"operator\": \"is not\"\n },\n {\n \"filters\": [\n {\n \"field\": \"database_name\",\n \"operator\": \"in\",\n \"values\": [\n \"ANALYTICS\"\n ]\n },\n {\n \"field\": \"database_name\",\n \"operator\": \"in\",\n \"values\": [\n \"RAW\"\n ]\n }\n ],\n \"operator\": \"or\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"dashboard_id": "<string>",
"name": "<string>",
"schedule": {
"frequency": "daily"
},
"delivery_format": "pdf",
"destination_ids": [
"<string>"
],
"destinations": [
{
"id": "<string>",
"type": "slack",
"label": "<string>"
}
],
"created_by": "<string>",
"create_time": "<string>",
"update_time": "<string>",
"etag": "<string>",
"custom_message": "<string>",
"state": "active",
"filters": [
{
"field": "warehouse_name",
"operator": "in",
"values": [
"TRANSFORMING"
]
},
{
"field": "user_name",
"operator": "is not"
},
{
"filters": [
{
"field": "database_name",
"operator": "in",
"values": [
"ANALYTICS"
]
},
{
"field": "database_name",
"operator": "in",
"values": [
"RAW"
]
}
],
"operator": "or"
}
],
"latest_run": {
"id": "<string>",
"status": "running",
"start_time": "<string>",
"scheduled_date": "<string>",
"end_time": "<string>"
}
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}Create a dashboard digest
Schedules a new digest on a dashboard — a recurring capture of the dashboard delivered to one or more destinations.
curl --request POST \
--url https://api.select.dev/v2/dashboards/{dashboard_id}/digests \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"name": "<string>",
"schedule": {
"frequency": "daily"
},
"destination_ids": [
"<string>"
],
"custom_message": "<string>",
"state": "active",
"filters": [
{
"field": "warehouse_name",
"operator": "in",
"values": [
"TRANSFORMING"
]
},
{
"field": "user_name",
"operator": "is not"
},
{
"filters": [
{
"field": "database_name",
"operator": "in",
"values": [
"ANALYTICS"
]
},
{
"field": "database_name",
"operator": "in",
"values": [
"RAW"
]
}
],
"operator": "or"
}
]
}
'import requests
url = "https://api.select.dev/v2/dashboards/{dashboard_id}/digests"
payload = {
"name": "<string>",
"schedule": { "frequency": "daily" },
"destination_ids": ["<string>"],
"custom_message": "<string>",
"state": "active",
"filters": [
{
"field": "warehouse_name",
"operator": "in",
"values": ["TRANSFORMING"]
},
{
"field": "user_name",
"operator": "is not"
},
{
"filters": [
{
"field": "database_name",
"operator": "in",
"values": ["ANALYTICS"]
},
{
"field": "database_name",
"operator": "in",
"values": ["RAW"]
}
],
"operator": "or"
}
]
}
headers = {
"x-tenant-id": "<x-tenant-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-tenant-id': '<x-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
schedule: {frequency: 'daily'},
destination_ids: ['<string>'],
custom_message: '<string>',
state: 'active',
filters: [
{field: 'warehouse_name', operator: 'in', values: ['TRANSFORMING']},
{field: 'user_name', operator: 'is not'},
{
filters: [
{field: 'database_name', operator: 'in', values: ['ANALYTICS']},
{field: 'database_name', operator: 'in', values: ['RAW']}
],
operator: 'or'
}
]
})
};
fetch('https://api.select.dev/v2/dashboards/{dashboard_id}/digests', 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://api.select.dev/v2/dashboards/{dashboard_id}/digests",
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([
'name' => '<string>',
'schedule' => [
'frequency' => 'daily'
],
'destination_ids' => [
'<string>'
],
'custom_message' => '<string>',
'state' => 'active',
'filters' => [
[
'field' => 'warehouse_name',
'operator' => 'in',
'values' => [
'TRANSFORMING'
]
],
[
'field' => 'user_name',
'operator' => 'is not'
],
[
'filters' => [
[
'field' => 'database_name',
'operator' => 'in',
'values' => [
'ANALYTICS'
]
],
[
'field' => 'database_name',
'operator' => 'in',
'values' => [
'RAW'
]
]
],
'operator' => 'or'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-tenant-id: <x-tenant-id>"
],
]);
$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://api.select.dev/v2/dashboards/{dashboard_id}/digests"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"schedule\": {\n \"frequency\": \"daily\"\n },\n \"destination_ids\": [\n \"<string>\"\n ],\n \"custom_message\": \"<string>\",\n \"state\": \"active\",\n \"filters\": [\n {\n \"field\": \"warehouse_name\",\n \"operator\": \"in\",\n \"values\": [\n \"TRANSFORMING\"\n ]\n },\n {\n \"field\": \"user_name\",\n \"operator\": \"is not\"\n },\n {\n \"filters\": [\n {\n \"field\": \"database_name\",\n \"operator\": \"in\",\n \"values\": [\n \"ANALYTICS\"\n ]\n },\n {\n \"field\": \"database_name\",\n \"operator\": \"in\",\n \"values\": [\n \"RAW\"\n ]\n }\n ],\n \"operator\": \"or\"\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-tenant-id", "<x-tenant-id>")
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://api.select.dev/v2/dashboards/{dashboard_id}/digests")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"schedule\": {\n \"frequency\": \"daily\"\n },\n \"destination_ids\": [\n \"<string>\"\n ],\n \"custom_message\": \"<string>\",\n \"state\": \"active\",\n \"filters\": [\n {\n \"field\": \"warehouse_name\",\n \"operator\": \"in\",\n \"values\": [\n \"TRANSFORMING\"\n ]\n },\n {\n \"field\": \"user_name\",\n \"operator\": \"is not\"\n },\n {\n \"filters\": [\n {\n \"field\": \"database_name\",\n \"operator\": \"in\",\n \"values\": [\n \"ANALYTICS\"\n ]\n },\n {\n \"field\": \"database_name\",\n \"operator\": \"in\",\n \"values\": [\n \"RAW\"\n ]\n }\n ],\n \"operator\": \"or\"\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.select.dev/v2/dashboards/{dashboard_id}/digests")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-tenant-id"] = '<x-tenant-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"schedule\": {\n \"frequency\": \"daily\"\n },\n \"destination_ids\": [\n \"<string>\"\n ],\n \"custom_message\": \"<string>\",\n \"state\": \"active\",\n \"filters\": [\n {\n \"field\": \"warehouse_name\",\n \"operator\": \"in\",\n \"values\": [\n \"TRANSFORMING\"\n ]\n },\n {\n \"field\": \"user_name\",\n \"operator\": \"is not\"\n },\n {\n \"filters\": [\n {\n \"field\": \"database_name\",\n \"operator\": \"in\",\n \"values\": [\n \"ANALYTICS\"\n ]\n },\n {\n \"field\": \"database_name\",\n \"operator\": \"in\",\n \"values\": [\n \"RAW\"\n ]\n }\n ],\n \"operator\": \"or\"\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"dashboard_id": "<string>",
"name": "<string>",
"schedule": {
"frequency": "daily"
},
"delivery_format": "pdf",
"destination_ids": [
"<string>"
],
"destinations": [
{
"id": "<string>",
"type": "slack",
"label": "<string>"
}
],
"created_by": "<string>",
"create_time": "<string>",
"update_time": "<string>",
"etag": "<string>",
"custom_message": "<string>",
"state": "active",
"filters": [
{
"field": "warehouse_name",
"operator": "in",
"values": [
"TRANSFORMING"
]
},
{
"field": "user_name",
"operator": "is not"
},
{
"filters": [
{
"field": "database_name",
"operator": "in",
"values": [
"ANALYTICS"
]
},
{
"field": "database_name",
"operator": "in",
"values": [
"RAW"
]
}
],
"operator": "or"
}
],
"latest_run": {
"id": "<string>",
"status": "running",
"start_time": "<string>",
"scheduled_date": "<string>",
"end_time": "<string>"
}
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "<string>",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}Authorizations
Organization API key (sl_…).
Headers
The organization ID the request is scoped to.
Path Parameters
Body
A digest to create on a dashboard.
1 - 255- DailySchedule
- WeeklySchedule
- MonthlySchedule
Show child attributes
Show child attributes
pdf, png, url 1active, paused Filters applied to the dashboard when it is captured, in place of the dashboard's own saved filters. Omit this field or set it to null to capture the dashboard with its saved filters; set it to an empty array to capture the dashboard with no filters at all. Each entry names a field, an operator, and the value or values to compare against, and entries are combined with AND; an entry may instead be an and/or group containing its own entries in the same form. The operators available are the ones the dashboard's filter controls offer. A filter naming a field that none of the dashboard's blocks expose has no effect on the capture.
[
{
"field": "warehouse_name",
"operator": "in",
"values": ["TRANSFORMING"]
},
{
"field": "user_name",
"operator": "is not"
},
{
"filters": [
{
"field": "database_name",
"operator": "in",
"values": ["ANALYTICS"]
},
{
"field": "database_name",
"operator": "in",
"values": ["RAW"]
}
],
"operator": "or"
}
]
Response
Successful Response
A schedule that captures a dashboard and delivers it to destinations.
The unique identifier of the digest.
The dashboard this digest captures and delivers.
The display name of the digest.
How often the digest is delivered.
- DailySchedule
- WeeklySchedule
- MonthlySchedule
Show child attributes
Show child attributes
The format the dashboard is captured and delivered in.
pdf, png, url The destinations the digest delivers to.
The destinations the digest delivers to, with display details.
Show child attributes
Show child attributes
The identifier of the user or API key that created the digest.
When the digest was created, as an RFC 3339 UTC timestamp.
When the digest was last changed, as an RFC 3339 UTC timestamp.
Opaque strong ETag. Supply it in an If-Match header when changing or deleting the digest.
A message included alongside the delivered dashboard.
Whether the digest is actively delivering on its schedule or paused.
active, paused Filters applied to the dashboard when it is captured, in place of the dashboard's own saved filters. Omit this field or set it to null to capture the dashboard with its saved filters; set it to an empty array to capture the dashboard with no filters at all. Each entry names a field, an operator, and the value or values to compare against, and entries are combined with AND; an entry may instead be an and/or group containing its own entries in the same form. The operators available are the ones the dashboard's filter controls offer. A filter naming a field that none of the dashboard's blocks expose has no effect on the capture.
[
{
"field": "warehouse_name",
"operator": "in",
"values": ["TRANSFORMING"]
},
{
"field": "user_name",
"operator": "is not"
},
{
"filters": [
{
"field": "database_name",
"operator": "in",
"values": ["ANALYTICS"]
},
{
"field": "database_name",
"operator": "in",
"values": ["RAW"]
}
],
"operator": "or"
}
]
The most recent attempt to run this digest, if any.
Show child attributes
Show child attributes

