GET /slos
List SLOs
Parameters
| Name | In | Required | Type | Description |
|---|---|---|---|---|
limit | query | no | integer | |
cursor | query | no | string |
Example request
curl -X GET "/api/v1/slos" \
-H "Authorization: Bearer YOUR_API_KEY"
Responses
200: ok
{
"items": [
{
"id": "string",
"name": "string",
"service_id": "string",
"metric_def_id": "string",
"target_pct": null,
"window_days": 0,
"public": true,
"unknown_policy": "down",
"error_budget_remaining_pct": null,
"last_evaluated_at": null,
"created_at": "2026-01-01T00:00:00.000Z"
}
],
"next_cursor": null
}
401: missing or invalid bearer token
title: unauthenticated. No bearer token was sent, or the key is
invalid or revoked. detail distinguishes the two.
403: missing required scope
title: forbidden. The key is valid but does not carry
read:slos.
429: rate limit exceeded
title: rate_limited. A burst or daily limit was exceeded;
detail names which. The body carries retry_after in seconds.
500: internal error
title: internal_error. An unhandled server error. Safe to retry.
Every error is an RFC 7807 problem detail served as
application/problem+json:
{
"type": "https://observer.example/problems/forbidden",
"title": "forbidden",
"status": 403,
"detail": "missing scope: read:slos"
}
Branch on title, not on detail. See
Errors and status codes for the full
catalogue and the rate-limit headers.
Was this page helpful?