API Overview
Everything you can do in the Tantilium Cloud Runner (TCR) dashboard, you can do programmatically. There are two ways to integrate.
Use the REST API to script TCR or integrate it with your own tools and CI pipelines. Use Webhooks when you want to be notified as things happen: an incident opens, a deploy finishes, an action runs.
Base URL
All REST calls go through your TCR 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.