Dashboards
Create/Update Dashboard
Create a new dashboard based on the provided configuration or update an existing one if the dashboard.metadata.id matches an existing dashboard.
POST
/
dashboards
/
update
Create/Update Dashboard
curl --request POST \
--url https://us-east.metoro.io/api/v1/dashboards/update \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"dashboard": {
"settings": {
"hideGlobalEnvironmentSelector": false,
"defaultTimeRange": "defaultTimeRange",
"layoutVersion": 0
},
"metadata": {
"id": "id",
"title": "title",
"folderPath": "/dashboards/default/"
},
"content": {
"variables": [
{
"defaultValue": "defaultValue",
"overridable": true,
"name": "name",
"selectorSettings": {
"metricName": "metricName",
"attribute": "attribute"
}
},
{
"defaultValue": "defaultValue",
"overridable": true,
"name": "name",
"selectorSettings": {
"metricName": "metricName",
"attribute": "attribute"
}
}
],
"title": "title",
"description": "Related widgets for this section",
"widgets": []
}
}
}
'import requests
url = "https://us-east.metoro.io/api/v1/dashboards/update"
payload = { "dashboard": {
"settings": {
"hideGlobalEnvironmentSelector": False,
"defaultTimeRange": "defaultTimeRange",
"layoutVersion": 0
},
"metadata": {
"id": "id",
"title": "title",
"folderPath": "/dashboards/default/"
},
"content": {
"variables": [
{
"defaultValue": "defaultValue",
"overridable": True,
"name": "name",
"selectorSettings": {
"metricName": "metricName",
"attribute": "attribute"
}
},
{
"defaultValue": "defaultValue",
"overridable": True,
"name": "name",
"selectorSettings": {
"metricName": "metricName",
"attribute": "attribute"
}
}
],
"title": "title",
"description": "Related widgets for this section",
"widgets": []
}
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
dashboard: {
settings: {
hideGlobalEnvironmentSelector: false,
defaultTimeRange: 'defaultTimeRange',
layoutVersion: 0
},
metadata: {id: 'id', title: 'title', folderPath: '/dashboards/default/'},
content: {
variables: [
{
defaultValue: 'defaultValue',
overridable: true,
name: 'name',
selectorSettings: {metricName: 'metricName', attribute: 'attribute'}
},
{
defaultValue: 'defaultValue',
overridable: true,
name: 'name',
selectorSettings: {metricName: 'metricName', attribute: 'attribute'}
}
],
title: 'title',
description: 'Related widgets for this section',
widgets: []
}
}
})
};
fetch('https://us-east.metoro.io/api/v1/dashboards/update', 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://us-east.metoro.io/api/v1/dashboards/update",
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([
'dashboard' => [
'settings' => [
'hideGlobalEnvironmentSelector' => false,
'defaultTimeRange' => 'defaultTimeRange',
'layoutVersion' => 0
],
'metadata' => [
'id' => 'id',
'title' => 'title',
'folderPath' => '/dashboards/default/'
],
'content' => [
'variables' => [
[
'defaultValue' => 'defaultValue',
'overridable' => true,
'name' => 'name',
'selectorSettings' => [
'metricName' => 'metricName',
'attribute' => 'attribute'
]
],
[
'defaultValue' => 'defaultValue',
'overridable' => true,
'name' => 'name',
'selectorSettings' => [
'metricName' => 'metricName',
'attribute' => 'attribute'
]
]
],
'title' => 'title',
'description' => 'Related widgets for this section',
'widgets' => [
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://us-east.metoro.io/api/v1/dashboards/update"
payload := strings.NewReader("{\n \"dashboard\": {\n \"settings\": {\n \"hideGlobalEnvironmentSelector\": false,\n \"defaultTimeRange\": \"defaultTimeRange\",\n \"layoutVersion\": 0\n },\n \"metadata\": {\n \"id\": \"id\",\n \"title\": \"title\",\n \"folderPath\": \"/dashboards/default/\"\n },\n \"content\": {\n \"variables\": [\n {\n \"defaultValue\": \"defaultValue\",\n \"overridable\": true,\n \"name\": \"name\",\n \"selectorSettings\": {\n \"metricName\": \"metricName\",\n \"attribute\": \"attribute\"\n }\n },\n {\n \"defaultValue\": \"defaultValue\",\n \"overridable\": true,\n \"name\": \"name\",\n \"selectorSettings\": {\n \"metricName\": \"metricName\",\n \"attribute\": \"attribute\"\n }\n }\n ],\n \"title\": \"title\",\n \"description\": \"Related widgets for this section\",\n \"widgets\": []\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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://us-east.metoro.io/api/v1/dashboards/update")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"dashboard\": {\n \"settings\": {\n \"hideGlobalEnvironmentSelector\": false,\n \"defaultTimeRange\": \"defaultTimeRange\",\n \"layoutVersion\": 0\n },\n \"metadata\": {\n \"id\": \"id\",\n \"title\": \"title\",\n \"folderPath\": \"/dashboards/default/\"\n },\n \"content\": {\n \"variables\": [\n {\n \"defaultValue\": \"defaultValue\",\n \"overridable\": true,\n \"name\": \"name\",\n \"selectorSettings\": {\n \"metricName\": \"metricName\",\n \"attribute\": \"attribute\"\n }\n },\n {\n \"defaultValue\": \"defaultValue\",\n \"overridable\": true,\n \"name\": \"name\",\n \"selectorSettings\": {\n \"metricName\": \"metricName\",\n \"attribute\": \"attribute\"\n }\n }\n ],\n \"title\": \"title\",\n \"description\": \"Related widgets for this section\",\n \"widgets\": []\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://us-east.metoro.io/api/v1/dashboards/update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"dashboard\": {\n \"settings\": {\n \"hideGlobalEnvironmentSelector\": false,\n \"defaultTimeRange\": \"defaultTimeRange\",\n \"layoutVersion\": 0\n },\n \"metadata\": {\n \"id\": \"id\",\n \"title\": \"title\",\n \"folderPath\": \"/dashboards/default/\"\n },\n \"content\": {\n \"variables\": [\n {\n \"defaultValue\": \"defaultValue\",\n \"overridable\": true,\n \"name\": \"name\",\n \"selectorSettings\": {\n \"metricName\": \"metricName\",\n \"attribute\": \"attribute\"\n }\n },\n {\n \"defaultValue\": \"defaultValue\",\n \"overridable\": true,\n \"name\": \"name\",\n \"selectorSettings\": {\n \"metricName\": \"metricName\",\n \"attribute\": \"attribute\"\n }\n }\n ],\n \"title\": \"title\",\n \"description\": \"Related widgets for this section\",\n \"widgets\": []\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "id"
}{
"error": "Invalid alert configuration: missing required field"
}{
"error": "Invalid alert configuration: missing required field"
}{
"error": "Invalid alert configuration: missing required field"
}{
"error": "Invalid alert configuration: missing required field"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
Dashboard to create or update
Request to create or update a dashboard
Dashboard object
Show child attributes
Show child attributes
Example:
{
"settings": {
"hideGlobalEnvironmentSelector": false,
"defaultTimeRange": "defaultTimeRange",
"layoutVersion": 0
},
"metadata": {
"id": "id",
"title": "title",
"folderPath": "/dashboards/default/"
},
"content": {
"variables": [
{
"defaultValue": "defaultValue",
"overridable": true,
"name": "name",
"selectorSettings": {
"metricName": "metricName",
"attribute": "attribute"
}
},
{
"defaultValue": "defaultValue",
"overridable": true,
"name": "name",
"selectorSettings": {
"metricName": "metricName",
"attribute": "attribute"
}
}
],
"title": "title",
"description": "Related widgets for this section",
"widgets": []
}
}
Response
Dashboard created or updated successfully
Response from creating or updating a dashboard
Unique identifier of the created/updated dashboard
Was this page helpful?
Previous
Sync Dashboards From Kubernetes SourcesTrigger immediate synchronization of dashboards from Kubernetes sources, including ConfigMaps and MetoroDashboard CRDs. By default, dashboards are synced once every hour. This endpoint allows triggering the sync process manually without waiting for the scheduled sync.
Next
⌘I
Create/Update Dashboard
curl --request POST \
--url https://us-east.metoro.io/api/v1/dashboards/update \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"dashboard": {
"settings": {
"hideGlobalEnvironmentSelector": false,
"defaultTimeRange": "defaultTimeRange",
"layoutVersion": 0
},
"metadata": {
"id": "id",
"title": "title",
"folderPath": "/dashboards/default/"
},
"content": {
"variables": [
{
"defaultValue": "defaultValue",
"overridable": true,
"name": "name",
"selectorSettings": {
"metricName": "metricName",
"attribute": "attribute"
}
},
{
"defaultValue": "defaultValue",
"overridable": true,
"name": "name",
"selectorSettings": {
"metricName": "metricName",
"attribute": "attribute"
}
}
],
"title": "title",
"description": "Related widgets for this section",
"widgets": []
}
}
}
'import requests
url = "https://us-east.metoro.io/api/v1/dashboards/update"
payload = { "dashboard": {
"settings": {
"hideGlobalEnvironmentSelector": False,
"defaultTimeRange": "defaultTimeRange",
"layoutVersion": 0
},
"metadata": {
"id": "id",
"title": "title",
"folderPath": "/dashboards/default/"
},
"content": {
"variables": [
{
"defaultValue": "defaultValue",
"overridable": True,
"name": "name",
"selectorSettings": {
"metricName": "metricName",
"attribute": "attribute"
}
},
{
"defaultValue": "defaultValue",
"overridable": True,
"name": "name",
"selectorSettings": {
"metricName": "metricName",
"attribute": "attribute"
}
}
],
"title": "title",
"description": "Related widgets for this section",
"widgets": []
}
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
dashboard: {
settings: {
hideGlobalEnvironmentSelector: false,
defaultTimeRange: 'defaultTimeRange',
layoutVersion: 0
},
metadata: {id: 'id', title: 'title', folderPath: '/dashboards/default/'},
content: {
variables: [
{
defaultValue: 'defaultValue',
overridable: true,
name: 'name',
selectorSettings: {metricName: 'metricName', attribute: 'attribute'}
},
{
defaultValue: 'defaultValue',
overridable: true,
name: 'name',
selectorSettings: {metricName: 'metricName', attribute: 'attribute'}
}
],
title: 'title',
description: 'Related widgets for this section',
widgets: []
}
}
})
};
fetch('https://us-east.metoro.io/api/v1/dashboards/update', 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://us-east.metoro.io/api/v1/dashboards/update",
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([
'dashboard' => [
'settings' => [
'hideGlobalEnvironmentSelector' => false,
'defaultTimeRange' => 'defaultTimeRange',
'layoutVersion' => 0
],
'metadata' => [
'id' => 'id',
'title' => 'title',
'folderPath' => '/dashboards/default/'
],
'content' => [
'variables' => [
[
'defaultValue' => 'defaultValue',
'overridable' => true,
'name' => 'name',
'selectorSettings' => [
'metricName' => 'metricName',
'attribute' => 'attribute'
]
],
[
'defaultValue' => 'defaultValue',
'overridable' => true,
'name' => 'name',
'selectorSettings' => [
'metricName' => 'metricName',
'attribute' => 'attribute'
]
]
],
'title' => 'title',
'description' => 'Related widgets for this section',
'widgets' => [
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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://us-east.metoro.io/api/v1/dashboards/update"
payload := strings.NewReader("{\n \"dashboard\": {\n \"settings\": {\n \"hideGlobalEnvironmentSelector\": false,\n \"defaultTimeRange\": \"defaultTimeRange\",\n \"layoutVersion\": 0\n },\n \"metadata\": {\n \"id\": \"id\",\n \"title\": \"title\",\n \"folderPath\": \"/dashboards/default/\"\n },\n \"content\": {\n \"variables\": [\n {\n \"defaultValue\": \"defaultValue\",\n \"overridable\": true,\n \"name\": \"name\",\n \"selectorSettings\": {\n \"metricName\": \"metricName\",\n \"attribute\": \"attribute\"\n }\n },\n {\n \"defaultValue\": \"defaultValue\",\n \"overridable\": true,\n \"name\": \"name\",\n \"selectorSettings\": {\n \"metricName\": \"metricName\",\n \"attribute\": \"attribute\"\n }\n }\n ],\n \"title\": \"title\",\n \"description\": \"Related widgets for this section\",\n \"widgets\": []\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
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://us-east.metoro.io/api/v1/dashboards/update")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"dashboard\": {\n \"settings\": {\n \"hideGlobalEnvironmentSelector\": false,\n \"defaultTimeRange\": \"defaultTimeRange\",\n \"layoutVersion\": 0\n },\n \"metadata\": {\n \"id\": \"id\",\n \"title\": \"title\",\n \"folderPath\": \"/dashboards/default/\"\n },\n \"content\": {\n \"variables\": [\n {\n \"defaultValue\": \"defaultValue\",\n \"overridable\": true,\n \"name\": \"name\",\n \"selectorSettings\": {\n \"metricName\": \"metricName\",\n \"attribute\": \"attribute\"\n }\n },\n {\n \"defaultValue\": \"defaultValue\",\n \"overridable\": true,\n \"name\": \"name\",\n \"selectorSettings\": {\n \"metricName\": \"metricName\",\n \"attribute\": \"attribute\"\n }\n }\n ],\n \"title\": \"title\",\n \"description\": \"Related widgets for this section\",\n \"widgets\": []\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://us-east.metoro.io/api/v1/dashboards/update")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"dashboard\": {\n \"settings\": {\n \"hideGlobalEnvironmentSelector\": false,\n \"defaultTimeRange\": \"defaultTimeRange\",\n \"layoutVersion\": 0\n },\n \"metadata\": {\n \"id\": \"id\",\n \"title\": \"title\",\n \"folderPath\": \"/dashboards/default/\"\n },\n \"content\": {\n \"variables\": [\n {\n \"defaultValue\": \"defaultValue\",\n \"overridable\": true,\n \"name\": \"name\",\n \"selectorSettings\": {\n \"metricName\": \"metricName\",\n \"attribute\": \"attribute\"\n }\n },\n {\n \"defaultValue\": \"defaultValue\",\n \"overridable\": true,\n \"name\": \"name\",\n \"selectorSettings\": {\n \"metricName\": \"metricName\",\n \"attribute\": \"attribute\"\n }\n }\n ],\n \"title\": \"title\",\n \"description\": \"Related widgets for this section\",\n \"widgets\": []\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "id"
}{
"error": "Invalid alert configuration: missing required field"
}{
"error": "Invalid alert configuration: missing required field"
}{
"error": "Invalid alert configuration: missing required field"
}{
"error": "Invalid alert configuration: missing required field"
}