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": "<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": [
{}
]
}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": "<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
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 unique identifier of the monitor.
The monitor's name, as it appears in the feed.
The data the monitor reads. custom runs the monitor's own SQL.
account_spend, organization_spend, warehouse, account_usage_group, organization_usage_group, workload, custom, insights, storage, select_org_spend, databricks_workload, databricks_query, bigquery_workload, bigquery_query, bigquery_projects, bigquery_reservation, bigquery_storage, budget Whether the monitor runs. A disabled or snoozed monitor is not scheduled and has no next run.
enabled, disabled, snoozed How often the monitor runs. cron reads cron for the schedule.
hourly, daily, weekly, monthly, cron Whether the monitor's runs appear in the monitors feed.
What kind of check the monitor runs. The same value as trigger_config.type, lifted out so it can be filtered and read without parsing the configuration.
digest, condition, anomaly_prophet, anomaly_percentile, budget_threshold What the monitor checks, and the condition that makes it fire.
- DigestTrigger
- ConditionTrigger
- AnomalyProphetTrigger
- AnomalyPercentileTrigger
- BudgetThresholdTrigger
Show child attributes
Show child attributes
What the monitor's notification says when it fires.
Show child attributes
Show child attributes
How often a firing monitor is allowed to notify.
- MonitorNotificationFrequencyOnTrigger
- MonitorNotificationFrequencyOnStatusChange
- MonitorNotificationFrequencyLimitInTimePeriod
Show child attributes
Show child attributes
The alert destinations the monitor notifies when it fires, in ascending order.
What the monitor is doing now. disabled or snoozed when its state stops it running; otherwise how its most recent run ended, or new when it has not run yet.
new, success, failure, triggered, skipped, snoozed, unknown, disabled 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.
new, success, failure, triggered, skipped, snoozed, unknown RFC 3339 UTC creation timestamp.
RFC 3339 UTC last-update timestamp.
Opaque strong ETag.
The cron expression the monitor runs on, in UTC. Set only when schedule is cron.
The team that owns this monitor. Null means no team owns it — it belongs to the organization, or, for a monitor running its own SQL, to one connection.
The budget this monitor watches. Null on a monitor that watches something other than a budget.
The Snowflake account this monitor reads, as listed by /v2/snowflake-accounts. Set on a monitor running its own SQL. Null on a monitor that reads the organization as a whole.
Splits the monitor into an independent check per distinct value of these columns. Null checks the data as a whole.
Show child attributes
Show child attributes
How the monitor's most recent finished run ended, as the monitor itself recorded it. Null on a monitor that has never finished a run.
new, success, failure, triggered, skipped, snoozed, unknown Why the most recent run failed. Null when that run succeeded, or when the monitor has not run.
RFC 3339 UTC timestamp of the last run that actually sent a notification. Null if the monitor has never notified.
Whether the most recent run's trigger fired. Null until the monitor has run.
triggered, not_triggered, skipped, snoozed, unknown RFC 3339 UTC timestamp of when the most recent run finished. Null until the monitor has run.
RFC 3339 UTC timestamp of when the monitor's schedule next comes due. The run itself starts once the data for that period has finished loading, which can be later. Null while the monitor is disabled or snoozed.
RFC 3339 UTC timestamp of when the monitor was dismissed from the feed. Null while it is not dismissed.
Who dismissed the monitor from the feed.
The partitions dismissed from the feed individually. Null on a monitor with no partitions dismissed.
Show child attributes
Show child attributes
Who created the monitor.
Who last changed the monitor. Null if no one has since it was created.

