Duplicate a monitor
curl --request POST \
--url https://api.select.dev/v2/monitors/{monitor_id}/actions/duplicate \
--header 'Authorization: Bearer <token>' \
--header 'x-tenant-id: <x-tenant-id>'import requests
url = "https://api.select.dev/v2/monitors/{monitor_id}/actions/duplicate"
headers = {
"x-tenant-id": "<x-tenant-id>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-tenant-id': '<x-tenant-id>', Authorization: 'Bearer <token>'}
};
fetch('https://api.select.dev/v2/monitors/{monitor_id}/actions/duplicate', 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/monitors/{monitor_id}/actions/duplicate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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"
"net/http"
"io"
)
func main() {
url := "https://api.select.dev/v2/monitors/{monitor_id}/actions/duplicate"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("x-tenant-id", "<x-tenant-id>")
req.Header.Add("Authorization", "Bearer <token>")
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/monitors/{monitor_id}/actions/duplicate")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.select.dev/v2/monitors/{monitor_id}/actions/duplicate")
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>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"data_source": "account_spend",
"state": "enabled",
"schedule": "hourly",
"display_in_feed": true,
"type": "digest",
"trigger_config": {
"skip_if_empty": true,
"type": "digest"
},
"message_config": {
"sections": [
{
"section_type": "title",
"enabled": true
}
],
"title": "<string>",
"templated_values": {}
},
"notification_frequency_config": {
"frequency_type": "on_trigger"
},
"destination_ids": [
"<string>"
],
"status": "new",
"latest_run_status": "new",
"create_time": "<string>",
"update_time": "<string>",
"etag": "<string>",
"cron": "<string>",
"team_id": "<string>",
"budget_id": "<string>",
"snowflake_account_id": "<string>",
"partition_config": {
"partition_columns": [
{
"title": "<string>"
}
]
},
"last_run_status": "new",
"latest_run_error_message": "<string>",
"latest_notification_send_time": "<string>",
"latest_run_trigger_status": "triggered",
"last_run_finish_time": "<string>",
"next_run_time": "<string>",
"dismiss_time": "<string>",
"dismissed_by": "<string>",
"dismissed_partitions": [
{
"partition_value": {},
"dismiss_time": "<string>",
"dismissed_by": "<string>"
}
],
"created_by": "<string>",
"updated_by": "<string>"
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}monitors
Duplicate a monitor
Creates an enabled copy of a monitor named "<original name> (Copy)", with the same owner, schedule, trigger, message and destinations. A custom SQL section gets its own copy of the SQL, so editing one monitor's SQL leaves the other's unchanged. Run history and feed dismissals are not copied. Requires `monitors:write`.
POST
/
monitors
/
{monitor_id}
/
actions
/
duplicate
Duplicate a monitor
curl --request POST \
--url https://api.select.dev/v2/monitors/{monitor_id}/actions/duplicate \
--header 'Authorization: Bearer <token>' \
--header 'x-tenant-id: <x-tenant-id>'import requests
url = "https://api.select.dev/v2/monitors/{monitor_id}/actions/duplicate"
headers = {
"x-tenant-id": "<x-tenant-id>",
"Authorization": "Bearer <token>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-tenant-id': '<x-tenant-id>', Authorization: 'Bearer <token>'}
};
fetch('https://api.select.dev/v2/monitors/{monitor_id}/actions/duplicate', 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/monitors/{monitor_id}/actions/duplicate",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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"
"net/http"
"io"
)
func main() {
url := "https://api.select.dev/v2/monitors/{monitor_id}/actions/duplicate"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("x-tenant-id", "<x-tenant-id>")
req.Header.Add("Authorization", "Bearer <token>")
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/monitors/{monitor_id}/actions/duplicate")
.header("x-tenant-id", "<x-tenant-id>")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.select.dev/v2/monitors/{monitor_id}/actions/duplicate")
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>'
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"data_source": "account_spend",
"state": "enabled",
"schedule": "hourly",
"display_in_feed": true,
"type": "digest",
"trigger_config": {
"skip_if_empty": true,
"type": "digest"
},
"message_config": {
"sections": [
{
"section_type": "title",
"enabled": true
}
],
"title": "<string>",
"templated_values": {}
},
"notification_frequency_config": {
"frequency_type": "on_trigger"
},
"destination_ids": [
"<string>"
],
"status": "new",
"latest_run_status": "new",
"create_time": "<string>",
"update_time": "<string>",
"etag": "<string>",
"cron": "<string>",
"team_id": "<string>",
"budget_id": "<string>",
"snowflake_account_id": "<string>",
"partition_config": {
"partition_columns": [
{
"title": "<string>"
}
]
},
"last_run_status": "new",
"latest_run_error_message": "<string>",
"latest_notification_send_time": "<string>",
"latest_run_trigger_status": "triggered",
"last_run_finish_time": "<string>",
"next_run_time": "<string>",
"dismiss_time": "<string>",
"dismissed_by": "<string>",
"dismissed_partitions": [
{
"partition_value": {},
"dismiss_time": "<string>",
"dismissed_by": "<string>"
}
],
"created_by": "<string>",
"updated_by": "<string>"
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}{
"title": "<string>",
"status": 123,
"detail": "<string>",
"code": "validation_failed",
"retryable": true,
"type": "about:blank",
"details": [
{}
]
}Response
Successful Response
A scheduled check over the organization's data, and what it reports.
A monitor runs its trigger_config on schedule; when the trigger fires it
renders message_config and sends it, as often as
notification_frequency_config allows. partition_config splits one monitor
into an independent check per partition, each of which triggers and is
dismissed on its own.
The data the monitor reads. custom runs the monitor's own SQL.
Available options:
account_spend, organization_spend, warehouse, account_usage_group, organization_usage_group, workload, custom, insights, storage, select_org_spend, databricks_workload, databricks_query, databricks_served_endpoint, databricks_endpoint_request, bigquery_workload, bigquery_query, bigquery_projects, bigquery_reservation, bigquery_storage, budget How the most recent run in the monitor's run history ended. This ignores state, so a disabled monitor still reports the run it last completed, which status would report as disabled. A monitor with no run history reports new while enabled and unknown otherwise.
Available options:
new, success, failure, triggered, skipped, snoozed, unknown 
