Dash0 acquires Polar Signals

Last updated: August 20, 2026

Use the SLO API

Authentication, endpoints, and the OpenSLO SLO object — including the OpenSLO subset supported during the Private Beta.

SLOs are created and managed through the Dash0 API using an OpenSLO v1 SLO definition (apiVersion: openslo/v1, kind: SLO). Dash0 implements a subset of the specification.

Authentication

Calls require an Authorization: Bearer <token> header using a Dash0 auth token (format auth_...). Create and manage tokens in Organization Settings › Auth Tokens.

  • Creating or updating an SLO requires a token with configuration permission, which only an Admin can grant.
  • A token without configuration permission can read SLOs (GET) but is rejected with 403 Forbidden on create or update.

Endpoints

The SLO API lives on the Dash0 API host and requires a dataset query parameter.

Method and pathPurpose
POST /api/slos?dataset={dataset}Create an SLO
GET /api/slos?dataset={dataset}List SLOs
GET /api/slos/{originOrId}?dataset={dataset}Read the latest version of an SLO
PUT /api/slos/{originOrId}?dataset={dataset}Update an SLO
DELETE /api/slos/{originOrId}?dataset={dataset}Delete an SLO

On POST and PUT requests (which have a body), the dataset query parameter overrides the dash0.com/dataset label in metadata.labels if both are provided.

Region-specific host

The base host is region-specific (for example https://api.eu-west-1.aws.dash0.com). See the Dash0 API reference for the current host for your region and the full request and response schema.

The SLO object

json
1234567891011121314151617181920212223
{
"apiVersion": "openslo/v1",
"kind": "SLO",
"metadata": {
"name": "doc-validation-availability",
"labels": { "team": "platform" }
},
"spec": {
"budgetingMethod": "Occurrences",
"description": "99.7% of control-plane-api requests complete without an ERROR span status over a rolling 28-day window.",
"indicator": {
"spec": {
"ratioMetric": {
"counter": true,
"good": { "metricSource": { "type": "Prometheus", "spec": { "query": "..." } } },
"total": { "metricSource": { "type": "Prometheus", "spec": { "query": "..." } } }
}
}
},
"timeWindow": [ { "duration": "28d", "isRolling": true } ],
"objectives": [ { "displayName": "control-plane-api: 99.7% server availability", "target": 0.997 } ]
}
}

Notes:

  • target is a fraction in the range [0, 1) (0.997 = 99.7%). The equivalent targetPercent field (range [0, 100)) is also accepted.
  • apiVersion must be openslo/v1 and kind must be SLO. The server assigns the SLO's identity (returned as originOrId) and timestamps — do not include them in the request.
  • The SLI is a ratioMetric with counter: true and inline PromQL over your telemetry (each query must be a bare vector selector: label matchers only, no functions or aggregations, else a 400); the good query is a subset of the total query. Dash0 applies the counter and windowing math for you, so you do not wrap the selector yourself.

Supported in the Private Beta

CapabilityPrivate Beta Behavior
budgetingMethod: OccurrencesSupported
Single objectiveSupported
ratioMetric SLI with inline PromQL (good / total)Supported
Rolling 28-day window (duration: "28d" or "4w", isRolling: true)Supported
Timeslices / RatioTimeslices budgetingRejected with 400
Calendar windowsRejected with 400
Window durations other than 4w/28dRejected with 400
More than one objectiveRejected with 400
thresholdMetric SLIsRejected with 400
indicatorRef (top-level or per-objective)Rejected with 400
Composite objectives (compositeWeight, per-objective indicator)Rejected with 400
Per-objective threshold fields (op / value)Rejected with 400
timeSliceTarget / timeSliceWindowRejected with 400
metricSource.metricSourceRefRejected with 400 — inline the query instead
alertPoliciesAccepted but ignored (configure alerting with check rules)

Errors

  • 400 Bad Request — the definition uses a capability that is not supported in the Private Beta (the message names the capability).
  • 403 Forbidden — the token lacks configuration permission.

Further reading