API Overview
Everything you can do in the KubeOpera dashboard, you can do programmatically. There are two ways to integrate:
| Use | When you want to… |
|---|---|
| REST API | Script KubeOpera or integrate it with your own tools and CI pipelines. |
| Webhooks | Be notified when something happens — an incident opens, a deploy finishes, an action runs. |
Base URL
All REST calls go through your KubeOpera address's API gateway:
https://<your-kubeopera-domain>/api
The gateway routes each path to the right service — for example /api/kubeopera/* to kubeopera-api and /api/incidents/* to incident-manager — and applies authentication, authorization and rate limits consistently. You never need individual service addresses.
Authentication
Authenticate with a personal access token:
- In the dashboard, open Settings → Access Tokens and select New token.
- Give it a name, an expiry and the scopes it needs.
- Copy the token — it's shown only once.
Send it as a bearer token:
curl -H "Authorization: Bearer $KUBEOPERA_TOKEN" \
https://kubeopera.example.com/api/kubeopera/api/v1/apps
| Scope | Allows |
|---|---|
read | Read everything the user can see. |
deploy | Create, change and delete apps, CloudSpaces and pipelines. |
actions | Approve and reject actions and scaling decisions; drain, roll back, scale. |
agents | Start and cancel agent runs. |
admin | Platform and tenant administration (administrators only). |
A token acts with the permissions of the user who created it, limited to its scopes. For server-to-server integrations, create a service account in Settings → Service Accounts and use the OAuth2 client-credentials flow:
curl -X POST https://kubeopera.example.com/api/auth/oauth/token \
-d grant_type=client_credentials \
-d client_id=$CLIENT_ID -d client_secret=$CLIENT_SECRET \
-d scope="read deploy"
Conventions
-
JSON request and response bodies, UTF-8.
-
Timestamps in RFC 3339 UTC (
2026-09-26T14:02:31Z). -
IDs are UUIDs unless stated otherwise.
-
Pagination — list endpoints accept
limitandcursor, and return:{ "data": [ … ], "next_cursor": "eyJpZCI6…", "total": 128 } -
Errors — a non-2xx response has a consistent body:
{ "error": { "code": "not_found", "message": "App 'hello' was not found.", "request_id": "req_7Hc2…" } }Include
request_idwhen you report a problem. -
Tenancy — tenant users only ever see their own tenant's data; the tenant comes from the token, never from a parameter.
Rate limits
Each token has a request budget per minute. Every response includes:
X-RateLimit-Limit: 600
X-RateLimit-Remaining: 587
X-RateLimit-Reset: 1790000000
When you exceed it you receive 429 Too Many Requests with a Retry-After header.
OpenAPI
Every service publishes an OpenAPI 3 description at /openapi.json through the gateway (for example /api/kubeopera/openapi.json). Use it to generate a client in your language, or browse it interactively at /api/docs.
Next steps
- REST API reference — endpoints by area.
- Webhooks — subscribe to events.
- Security — tokens, scopes and permissions.