ClickStack: Get Dashboard
This endpoint is in beta. API contract is stable, and no breaking changes are expected in the future.
ClickStack: Retrieves a specific dashboard by ID
GET
/
v1
/
organizations
/
{organizationId}
/
services
/
{serviceId}
/
clickstack
/
dashboards
/
{clickStackDashboardId}
ClickStack: Get Dashboard
curl --request GET \
--url https://api.clickhouse.cloud/v1/organizations/{organizationId}/services/{serviceId}/clickstack/dashboards/{clickStackDashboardId} \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.clickhouse.cloud/v1/organizations/{organizationId}/services/{serviceId}/clickstack/dashboards/{clickStackDashboardId}"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://api.clickhouse.cloud/v1/organizations/{organizationId}/services/{serviceId}/clickstack/dashboards/{clickStackDashboardId}', 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.clickhouse.cloud/v1/organizations/{organizationId}/services/{serviceId}/clickstack/dashboards/{clickStackDashboardId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$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.clickhouse.cloud/v1/organizations/{organizationId}/services/{serviceId}/clickstack/dashboards/{clickStackDashboardId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.clickhouse.cloud/v1/organizations/{organizationId}/services/{serviceId}/clickstack/dashboards/{clickStackDashboardId}")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.clickhouse.cloud/v1/organizations/{organizationId}/services/{serviceId}/clickstack/dashboards/{clickStackDashboardId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"status": 200,
"requestId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"result": {
"id": "65f5e4a3b9e77c001a567890",
"name": "Service Overview",
"tiles": [
{
"name": "Error Rate",
"x": 0,
"y": 0,
"w": 6,
"h": 3,
"id": "65f5e4a3b9e77c001a901234",
"config": {
"displayType": "line",
"sourceId": "65f5e4a3b9e77c001a111111",
"select": [
{
"aggFn": "count",
"valueExpression": "Duration",
"alias": "Request Duration",
"where": "service:api",
"metricName": "http.server.duration",
"periodAggFn": "delta",
"numberFormat": {
"output": "number",
"mantissa": 2,
"thousandSeparated": true,
"average": false,
"decimalBytes": false,
"factor": 1,
"currencySymbol": "$",
"numericUnit": "bytes_iec",
"unit": "ms"
}
}
],
"groupBy": "host",
"asRatio": true,
"alignDateRangeToGranularity": true,
"fillNulls": true,
"numberFormat": {
"output": "number",
"mantissa": 2,
"thousandSeparated": true,
"average": false,
"decimalBytes": false,
"factor": 1,
"currencySymbol": "$",
"numericUnit": "bytes_iec",
"unit": "ms"
},
"compareToPreviousPeriod": true
},
"containerId": "service-health",
"tabId": "errors"
}
],
"tags": [
"production",
"monitoring"
],
"filters": [
{
"type": "QUERY_EXPRESSION",
"name": "Environment",
"expression": "environment",
"sourceId": "65f5e4a3b9e77c001a111111",
"id": "<string>",
"sourceMetricType": "gauge",
"where": "ServiceName:api",
"whereLanguage": "lucene"
}
],
"savedQuery": "service.name = 'api'",
"savedQueryLanguage": "sql",
"savedFilterValues": [
{
"condition": "ServiceName IN ('hdx-oss-dev-api')",
"type": "sql"
}
],
"containers": [
{
"id": "service-health",
"title": "Service Health",
"collapsed": false,
"collapsible": true,
"bordered": true,
"tabs": [
{
"id": "errors",
"title": "Errors"
}
]
}
]
}
}{
"status": 400,
"error": "<string>",
"requestId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"status": 500,
"error": "<string>",
"requestId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}Beta
This endpoint is in beta. API contract is stable, and no breaking changes are expected in the future.
ClickStack: Retrieves a specific dashboard by ID
ClickStack: Retrieves a specific dashboard by ID
Authorizations
Use key ID and key secret obtained in ClickHouse Cloud console: https://clickhouse.com/docs/cloud/manage/openapi
Path Parameters
ID of the organization that owns the service.
ID of the ClickStack service.
ClickStack Dashboard ID
Last modified on July 9, 2026
Was this page helpful?
Previous
ClickStack: Update Dashboard**This endpoint is in beta.** API contract is stable, and no breaking changes are expected in the future. <br /><br /> ClickStack: Updates an existing dashboard. **Concurrency:** This endpoint does not support optimistic concurrency control. Concurrent PUT requests for the same dashboard may silently overwrite each other, which can leave orphan tile-to-container references on layout-shape edits. Clients should serialize edits to a given dashboard.
Next
⌘I
ClickStack: Get Dashboard
curl --request GET \
--url https://api.clickhouse.cloud/v1/organizations/{organizationId}/services/{serviceId}/clickstack/dashboards/{clickStackDashboardId} \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.clickhouse.cloud/v1/organizations/{organizationId}/services/{serviceId}/clickstack/dashboards/{clickStackDashboardId}"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://api.clickhouse.cloud/v1/organizations/{organizationId}/services/{serviceId}/clickstack/dashboards/{clickStackDashboardId}', 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.clickhouse.cloud/v1/organizations/{organizationId}/services/{serviceId}/clickstack/dashboards/{clickStackDashboardId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$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.clickhouse.cloud/v1/organizations/{organizationId}/services/{serviceId}/clickstack/dashboards/{clickStackDashboardId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.clickhouse.cloud/v1/organizations/{organizationId}/services/{serviceId}/clickstack/dashboards/{clickStackDashboardId}")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.clickhouse.cloud/v1/organizations/{organizationId}/services/{serviceId}/clickstack/dashboards/{clickStackDashboardId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"status": 200,
"requestId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"result": {
"id": "65f5e4a3b9e77c001a567890",
"name": "Service Overview",
"tiles": [
{
"name": "Error Rate",
"x": 0,
"y": 0,
"w": 6,
"h": 3,
"id": "65f5e4a3b9e77c001a901234",
"config": {
"displayType": "line",
"sourceId": "65f5e4a3b9e77c001a111111",
"select": [
{
"aggFn": "count",
"valueExpression": "Duration",
"alias": "Request Duration",
"where": "service:api",
"metricName": "http.server.duration",
"periodAggFn": "delta",
"numberFormat": {
"output": "number",
"mantissa": 2,
"thousandSeparated": true,
"average": false,
"decimalBytes": false,
"factor": 1,
"currencySymbol": "$",
"numericUnit": "bytes_iec",
"unit": "ms"
}
}
],
"groupBy": "host",
"asRatio": true,
"alignDateRangeToGranularity": true,
"fillNulls": true,
"numberFormat": {
"output": "number",
"mantissa": 2,
"thousandSeparated": true,
"average": false,
"decimalBytes": false,
"factor": 1,
"currencySymbol": "$",
"numericUnit": "bytes_iec",
"unit": "ms"
},
"compareToPreviousPeriod": true
},
"containerId": "service-health",
"tabId": "errors"
}
],
"tags": [
"production",
"monitoring"
],
"filters": [
{
"type": "QUERY_EXPRESSION",
"name": "Environment",
"expression": "environment",
"sourceId": "65f5e4a3b9e77c001a111111",
"id": "<string>",
"sourceMetricType": "gauge",
"where": "ServiceName:api",
"whereLanguage": "lucene"
}
],
"savedQuery": "service.name = 'api'",
"savedQueryLanguage": "sql",
"savedFilterValues": [
{
"condition": "ServiceName IN ('hdx-oss-dev-api')",
"type": "sql"
}
],
"containers": [
{
"id": "service-health",
"title": "Service Health",
"collapsed": false,
"collapsible": true,
"bordered": true,
"tabs": [
{
"id": "errors",
"title": "Errors"
}
]
}
]
}
}{
"status": 400,
"error": "<string>",
"requestId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}{
"status": 500,
"error": "<string>",
"requestId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}