curl --request POST \
--url 'https://api.flashcat.cloud/monit/datasource/create?app_key=' \
--header 'Content-Type: application/json' \
--data '
{
"type_ident": "prometheus",
"name": "Prometheus Prod",
"note": "Production Prometheus",
"address": "http://prometheus.example.com:9090",
"edge_cluster_name": "default",
"payload": {
"prometheus": {
"basic_auth_enabled": false
}
}
}
'import requests
url = "https://api.flashcat.cloud/monit/datasource/create?app_key="
payload = {
"type_ident": "prometheus",
"name": "Prometheus Prod",
"note": "Production Prometheus",
"address": "http://prometheus.example.com:9090",
"edge_cluster_name": "default",
"payload": { "prometheus": { "basic_auth_enabled": False } }
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
type_ident: 'prometheus',
name: 'Prometheus Prod',
note: 'Production Prometheus',
address: 'http://prometheus.example.com:9090',
edge_cluster_name: 'default',
payload: {prometheus: {basic_auth_enabled: false}}
})
};
fetch('https://api.flashcat.cloud/monit/datasource/create?app_key=', 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.flashcat.cloud/monit/datasource/create?app_key=",
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([
'type_ident' => 'prometheus',
'name' => 'Prometheus Prod',
'note' => 'Production Prometheus',
'address' => 'http://prometheus.example.com:9090',
'edge_cluster_name' => 'default',
'payload' => [
'prometheus' => [
'basic_auth_enabled' => false
]
]
]),
CURLOPT_HTTPHEADER => [
"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://api.flashcat.cloud/monit/datasource/create?app_key="
payload := strings.NewReader("{\n \"type_ident\": \"prometheus\",\n \"name\": \"Prometheus Prod\",\n \"note\": \"Production Prometheus\",\n \"address\": \"http://prometheus.example.com:9090\",\n \"edge_cluster_name\": \"default\",\n \"payload\": {\n \"prometheus\": {\n \"basic_auth_enabled\": false\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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.flashcat.cloud/monit/datasource/create?app_key=")
.header("Content-Type", "application/json")
.body("{\n \"type_ident\": \"prometheus\",\n \"name\": \"Prometheus Prod\",\n \"note\": \"Production Prometheus\",\n \"address\": \"http://prometheus.example.com:9090\",\n \"edge_cluster_name\": \"default\",\n \"payload\": {\n \"prometheus\": {\n \"basic_auth_enabled\": false\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flashcat.cloud/monit/datasource/create?app_key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"type_ident\": \"prometheus\",\n \"name\": \"Prometheus Prod\",\n \"note\": \"Production Prometheus\",\n \"address\": \"http://prometheus.example.com:9090\",\n \"edge_cluster_name\": \"default\",\n \"payload\": {\n \"prometheus\": {\n \"basic_auth_enabled\": false\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"data": {
"id": 10,
"type_ident": "prometheus",
"name": "Prometheus Prod",
"enabled": true,
"edge_cluster_name": "default",
"updated_at": 1712000000,
"alerting_enabled": true
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InvalidParameter",
"message": "The specified parameter is not valid."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "Unauthorized",
"message": "You are unauthorized."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "RequestTooFrequently",
"message": "Request too frequently."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InternalError",
"message": "We encountered an internal error, and it has been reported. Please try again later."
}
}Create datasource
Create a new monitoring data source. The payload must include the type-specific configuration block. Supports diagnostic types redis_node, redis_sentinel, mongodb_mongod, mongodb_mongos and kafka; enabled and alerting_enabled are independent.
curl --request POST \
--url 'https://api.flashcat.cloud/monit/datasource/create?app_key=' \
--header 'Content-Type: application/json' \
--data '
{
"type_ident": "prometheus",
"name": "Prometheus Prod",
"note": "Production Prometheus",
"address": "http://prometheus.example.com:9090",
"edge_cluster_name": "default",
"payload": {
"prometheus": {
"basic_auth_enabled": false
}
}
}
'import requests
url = "https://api.flashcat.cloud/monit/datasource/create?app_key="
payload = {
"type_ident": "prometheus",
"name": "Prometheus Prod",
"note": "Production Prometheus",
"address": "http://prometheus.example.com:9090",
"edge_cluster_name": "default",
"payload": { "prometheus": { "basic_auth_enabled": False } }
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
type_ident: 'prometheus',
name: 'Prometheus Prod',
note: 'Production Prometheus',
address: 'http://prometheus.example.com:9090',
edge_cluster_name: 'default',
payload: {prometheus: {basic_auth_enabled: false}}
})
};
fetch('https://api.flashcat.cloud/monit/datasource/create?app_key=', 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.flashcat.cloud/monit/datasource/create?app_key=",
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([
'type_ident' => 'prometheus',
'name' => 'Prometheus Prod',
'note' => 'Production Prometheus',
'address' => 'http://prometheus.example.com:9090',
'edge_cluster_name' => 'default',
'payload' => [
'prometheus' => [
'basic_auth_enabled' => false
]
]
]),
CURLOPT_HTTPHEADER => [
"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://api.flashcat.cloud/monit/datasource/create?app_key="
payload := strings.NewReader("{\n \"type_ident\": \"prometheus\",\n \"name\": \"Prometheus Prod\",\n \"note\": \"Production Prometheus\",\n \"address\": \"http://prometheus.example.com:9090\",\n \"edge_cluster_name\": \"default\",\n \"payload\": {\n \"prometheus\": {\n \"basic_auth_enabled\": false\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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.flashcat.cloud/monit/datasource/create?app_key=")
.header("Content-Type", "application/json")
.body("{\n \"type_ident\": \"prometheus\",\n \"name\": \"Prometheus Prod\",\n \"note\": \"Production Prometheus\",\n \"address\": \"http://prometheus.example.com:9090\",\n \"edge_cluster_name\": \"default\",\n \"payload\": {\n \"prometheus\": {\n \"basic_auth_enabled\": false\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.flashcat.cloud/monit/datasource/create?app_key=")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"type_ident\": \"prometheus\",\n \"name\": \"Prometheus Prod\",\n \"note\": \"Production Prometheus\",\n \"address\": \"http://prometheus.example.com:9090\",\n \"edge_cluster_name\": \"default\",\n \"payload\": {\n \"prometheus\": {\n \"basic_auth_enabled\": false\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"data": {
"id": 10,
"type_ident": "prometheus",
"name": "Prometheus Prod",
"enabled": true,
"edge_cluster_name": "default",
"updated_at": 1712000000,
"alerting_enabled": true
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InvalidParameter",
"message": "The specified parameter is not valid."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "Unauthorized",
"message": "You are unauthorized."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "RequestTooFrequently",
"message": "Request too frequently."
}
}{
"request_id": "01HK8XQE3Z7JM2NTFQ5YJ8P9R4",
"error": {
"code": "InternalError",
"message": "We encountered an internal error, and it has been reported. Please try again later."
}
}Restrictions
| Aspect | Value |
|---|---|
| Rate limits | 1,000 requests/minute; 50 requests/second per account |
| Permissions | Datasources Manage (monit) |
Usage
type_identmust be one of:prometheus,loki,mysql,oracle,postgres,clickhouse,elasticsearch,sls,tencent_cls,victorialogs,redis_node,redis_sentinel,mongodb_mongod,mongodb_mongos,kafka.edge_cluster_namespecifies which Monitors edge cluster evaluates rules using this datasource.- For
elasticsearch, setpayload.elasticsearch.deploymenttocloudorself-managed. - Every call is recorded in the account audit log. Use credential fields only for connection credentials.
Authorizations
App key issued from the Flashduty console under Account → APP Keys. Required on every public API call. Keep it secret — it grants the same access as the owning account.
Body
Request body for creating or updating a datasource. id is required only for update. address is required for all types except Elasticsearch with deployment=cloud.
Datasource type identifier. Allowed: prometheus, loki, mysql, oracle, postgres, clickhouse, elasticsearch, sls, tencent_cls, victorialogs, redis_node, redis_sentinel, mongodb_mongod, mongodb_mongos, kafka。
Datasource display name. This is the name referenced as ds_name in query APIs.
Type-specific configuration block. Must include the key matching type_ident. For diagnostic types, password and Kafka tls_key are omitted from responses unless they are ${env:...} references. On update, omit those fields to preserve stored secrets; explicitly send an empty string to clear. Other configuration fields retain their existing behavior.
Show child attributes
Show child attributes
Monitors edge cluster name responsible for evaluating rules using this datasource.
Datasource ID. Required for update; omit for create.
Optional description.
Connection address. Required for every type except elasticsearch with deployment: cloud. Prometheus/Loki/VictoriaLogs: HTTP URL; MySQL/Oracle/Postgres/ClickHouse: host:port; SLS: endpoint without the http(s):// prefix; tencent_cls: must be cls.tencentcloudapi.com or cls.internal.tencentcloudapi.com (requires Monitors edge >= v0.66.0). Redis/MongoDB diagnostic types: one host:port, bracket IPv6; no URI, userinfo or query. Kafka: 1–32 unique comma-separated host:port bootstrap addresses; payload has no broker list. At most 4096 characters after normalization.
4096Whether business execution is enabled. Omitted on create: true; omitted on update: preserve the current value. Explicit false disables execution; null is invalid. Does not change alerting_enabled.
Whether this datasource may evaluate alerts. Omitted on create: true for alerting types, false for diagnostic-only types; omitted on update: preserve current value. null is invalid. redis_node, redis_sentinel, mongodb_mongod, mongodb_mongos and kafka reject true. Disabling is rejected with conflict when enabled rules reference the datasource.
Response
Success
Success response envelope. On every 2xx response, request_id identifies the call (also mirrored in the Flashcat-Request-Id header) and data holds the endpoint-specific payload. Failure responses use a different shape — see ErrorResponse.
Was this page helpful?