curl --request PATCH \
--url https://api.select.dev/v2/dashboards/{dashboard_id}/digests/{digest_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"name": "<string>",
"custom_message": "<string>",
"schedule": {
"frequency": "daily"
},
"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"
}
],
"destination_ids": [
"<string>"
]
}
'import requests
url = "https://api.select.dev/v2/dashboards/{dashboard_id}/digests/{digest_id}"
payload = {
"name": "<string>",
"custom_message": "<string>",
"schedule": { "frequency": "daily" },
"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"
}
],
"destination_ids": ["<string>"]
}
headers = {
"x-tenant-id": "<x-tenant-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {
'x-tenant-id': '<x-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
custom_message: '<string>',
schedule: {frequency: 'daily'},
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'
}
],
destination_ids: ['<string>']
})
};
fetch('https://api.select.dev/v2/dashboards/{dashboard_id}/digests/{digest_id}', 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/{digest_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'custom_message' => '<string>',
'schedule' => [
'frequency' => 'daily'
],
'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'
]
],
'destination_ids' => [
'<string>'
]
]),
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/{digest_id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"custom_message\": \"<string>\",\n \"schedule\": {\n \"frequency\": \"daily\"\n },\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 \"destination_ids\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.select.dev/v2/dashboards/{dashboard_id}/digests/{digest_id}")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"custom_message\": \"<string>\",\n \"schedule\": {\n \"frequency\": \"daily\"\n },\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 \"destination_ids\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.select.dev/v2/dashboards/{dashboard_id}/digests/{digest_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["x-tenant-id"] = '<x-tenant-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"custom_message\": \"<string>\",\n \"schedule\": {\n \"frequency\": \"daily\"\n },\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 \"destination_ids\": [\n \"<string>\"\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": [
{}
]
}{
"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": [
{}
]
}Update a dashboard digest
Applies a merge patch to a digest. Omitted fields remain unchanged; an explicit null clears a nullable field.
curl --request PATCH \
--url https://api.select.dev/v2/dashboards/{dashboard_id}/digests/{digest_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-tenant-id: <x-tenant-id>' \
--data '
{
"name": "<string>",
"custom_message": "<string>",
"schedule": {
"frequency": "daily"
},
"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"
}
],
"destination_ids": [
"<string>"
]
}
'import requests
url = "https://api.select.dev/v2/dashboards/{dashboard_id}/digests/{digest_id}"
payload = {
"name": "<string>",
"custom_message": "<string>",
"schedule": { "frequency": "daily" },
"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"
}
],
"destination_ids": ["<string>"]
}
headers = {
"x-tenant-id": "<x-tenant-id>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {
'x-tenant-id': '<x-tenant-id>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '<string>',
custom_message: '<string>',
schedule: {frequency: 'daily'},
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'
}
],
destination_ids: ['<string>']
})
};
fetch('https://api.select.dev/v2/dashboards/{dashboard_id}/digests/{digest_id}', 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/{digest_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'custom_message' => '<string>',
'schedule' => [
'frequency' => 'daily'
],
'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'
]
],
'destination_ids' => [
'<string>'
]
]),
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/{digest_id}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"custom_message\": \"<string>\",\n \"schedule\": {\n \"frequency\": \"daily\"\n },\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 \"destination_ids\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.select.dev/v2/dashboards/{dashboard_id}/digests/{digest_id}")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"custom_message\": \"<string>\",\n \"schedule\": {\n \"frequency\": \"daily\"\n },\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 \"destination_ids\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.select.dev/v2/dashboards/{dashboard_id}/digests/{digest_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["x-tenant-id"] = '<x-tenant-id>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"custom_message\": \"<string>\",\n \"schedule\": {\n \"frequency\": \"daily\"\n },\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 \"destination_ids\": [\n \"<string>\"\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": [
{}
]
}{
"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 digest's current ETag.
The organization ID the request is scoped to.
Body
Changes to apply to a digest.
Omitted fields remain unchanged. An explicit null clears a nullable field.
1 - 255- DailySchedule
- WeeklySchedule
- MonthlySchedule
Show child attributes
Show child attributes
pdf, png, url active, paused Filters applied to the dashboard when it is captured, in place of the dashboard's own saved filters. Set this field to null to clear the override, so the digest goes back to capturing with the dashboard's saved filters; set it to an empty array to capture 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" } ]
1Response
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

