Cardinality Explorer API Reference
The Cardinality Explorer API provides programmatic access to the cardinality data surfaced by the Metrics Cardinality Explorer UI. Use it to retrieve metric series counts, label series counts, and label value counts, with optional filters to scope results to a specific metric or label-value combination.
All three endpoints are under the /api/v1/cardinality/ base path and use a Service Account Bearer token for authentication.
Replace <your-instance> with your Kloudfuse hostname and <sa-token> with a valid Service Account token.
Common Parameters
All three endpoints share the same time range parameters.
| Parameter | Type | Description |
|---|---|---|
|
integer |
End of the time range as a Unix timestamp (seconds). Required. |
|
integer |
Length of the time range in seconds. Use |
|
integer |
Aggregation bucket size in seconds. Set to the same value as |
|
string |
Optional PromQL selector to filter results. Accepts standard Prometheus selector syntax.
Use a metric name with or without label filters (e.g. |
| The Cardinality Explorer UI enforces a maximum time range of 5 minutes. The API does not impose this limit, but wider ranges increase response time significantly. |
Get Metric Series Counts
Returns all metric names and their series counts within the given time range and filter scope.
# All metrics, instant query
curl -H "Authorization: Bearer <sa-token>" \
-G \
--data-urlencode "timestamp=1745280000" \
--data-urlencode "duration=0" \
--data-urlencode "rollUpSeconds=300" \
"https://<your-instance>/api/v1/cardinality/metrics_series"
# Scoped to a single label-value
curl -H "Authorization: Bearer <sa-token>" \
-G \
--data-urlencode "timestamp=1745280000" \
--data-urlencode "duration=0" \
--data-urlencode "rollUpSeconds=300" \
--data-urlencode "match[]={namespace=\"kube-system\"}" \
"https://<your-instance>/api/v1/cardinality/metrics_series"
# Scoped to multiple selected values for a label (regex OR)
curl -H "Authorization: Bearer <sa-token>" \
-G \
--data-urlencode "timestamp=1745280000" \
--data-urlencode "duration=0" \
--data-urlencode "rollUpSeconds=300" \
--data-urlencode "match[]={host=~\"node-1|node-2\"}" \
"https://<your-instance>/api/v1/cardinality/metrics_series"
[
{
"bucketStart": 1745279700,
"overallCardinality": 26206,
"metricNames": {
"kube_pod_info": 312,
"kube_node_status_capacity": 18,
"container_cpu_usage_seconds_total": 934
}
}
]
The response is an array of time buckets. For instant queries (duration=0) the array contains a single element.
Response fields
| Field | Type | Description |
|---|---|---|
|
integer |
Start of the bucket as a Unix timestamp (seconds). |
|
integer |
Total number of unique time series across all metrics in scope. |
|
object |
Map of metric name → series count. Each entry is the number of unique time series for that metric within the time range and filter scope. |
Get Label Series Counts
Returns all label names and the number of unique time series that include each label, optionally scoped to a metric or label-value filter. This is the data behind the series count toggle in the Labels column of the Cardinality Explorer UI.
# All labels across all metrics
curl -H "Authorization: Bearer <sa-token>" \
-G \
--data-urlencode "timestamp=1745280000" \
--data-urlencode "duration=0" \
--data-urlencode "rollUpSeconds=300" \
--data-urlencode "aggregation=distinctcount" \
"https://<your-instance>/api/v1/cardinality/series"
# Labels scoped to a specific metric
curl -H "Authorization: Bearer <sa-token>" \
-G \
--data-urlencode "timestamp=1745280000" \
--data-urlencode "duration=0" \
--data-urlencode "rollUpSeconds=300" \
--data-urlencode "aggregation=distinctcount" \
--data-urlencode "match[]=kube_pod_info{}" \
"https://<your-instance>/api/v1/cardinality/series"
# Labels for a metric, scoped to multiple selected values for another label (regex OR)
curl -H "Authorization: Bearer <sa-token>" \
-G \
--data-urlencode "timestamp=1745280000" \
--data-urlencode "duration=0" \
--data-urlencode "rollUpSeconds=300" \
--data-urlencode "aggregation=distinctcount" \
--data-urlencode "match[]=kube_pod_info{host=~\"node-1|node-2\"}" \
"https://<your-instance>/api/v1/cardinality/series"
Additional parameters
| Parameter | Type | Description |
|---|---|---|
|
string |
Must be |
|
string (repeatable) |
Optional. When provided, restricts results to the specified label names. Repeat the parameter to request multiple labels. |
[
{
"bucketStart": 1745279700,
"overallCardinality": 26206,
"labelNames": {
"namespace": 24,
"pod": 312,
"container": 87,
"node": 18
}
}
]
Response fields
| Field | Type | Description |
|---|---|---|
|
integer |
Start of the bucket as a Unix timestamp (seconds). |
|
integer |
Total number of unique time series in scope. |
|
object |
Map of label name → series count. Each entry is the number of unique time series that carry this label within the time range and filter scope. |
Get Label Value Counts
Returns the number of distinct values for each requested label name, optionally scoped to a metric. This is the value count displayed in the Labels column of the Cardinality Explorer UI.
# Value count for specific labels
curl -H "Authorization: Bearer <sa-token>" \
-G \
--data-urlencode "timestamp=1745280000" \
--data-urlencode "duration=0" \
--data-urlencode "rollUpSeconds=300" \
--data-urlencode "aggregation=distinctcount" \
--data-urlencode "label=namespace" \
--data-urlencode "label=pod" \
"https://<your-instance>/api/v1/cardinality/label_values"
# Value count scoped to a specific metric
curl -H "Authorization: Bearer <sa-token>" \
-G \
--data-urlencode "timestamp=1745280000" \
--data-urlencode "duration=0" \
--data-urlencode "rollUpSeconds=300" \
--data-urlencode "aggregation=distinctcount" \
--data-urlencode "label=namespace" \
--data-urlencode "match[]=kube_pod_info{}" \
"https://<your-instance>/api/v1/cardinality/label_values"
# Value count with multiple selected values promoted as a filter (regex OR)
curl -H "Authorization: Bearer <sa-token>" \
-G \
--data-urlencode "timestamp=1745280000" \
--data-urlencode "duration=0" \
--data-urlencode "rollUpSeconds=300" \
--data-urlencode "aggregation=distinctcount" \
--data-urlencode "label=namespace" \
--data-urlencode "match[]={host=~\"node-1|node-2\"}" \
"https://<your-instance>/api/v1/cardinality/label_values"
Additional parameters
| Parameter | Type | Description |
|---|---|---|
|
string |
Must be |
|
string (repeatable) |
One or more label names to return value counts for. Repeat the parameter for each label. |
[
{
"bucketStart": 1745279700,
"labelNames": {
"namespace": 24,
"pod": 312
}
}
]
Response fields
| Field | Type | Description |
|---|---|---|
|
integer |
Start of the bucket as a Unix timestamp (seconds). |
|
object |
Map of label name → distinct value count. Each entry is the number of unique values observed for that label within the time range and filter scope. |
Unlike the series endpoint, this endpoint counts distinct values per label — not the number of time series. A label with 5 values but 1000 series would return 5 here.
|
Error Codes
| HTTP Status | Meaning |
|---|---|
|
Success. |
|
Bad request — missing required parameter or invalid selector syntax. |
|
Missing or invalid |
|
Insufficient permissions. |
See Also
-
Metrics Cardinality Explorer — UI guide for the Cardinality Explorer
-
Metric Best Practices — Managing cardinality in production
-
Kloudfuse API Reference — Kloudfuse API overview