Skip to main content
Control Plane API enables programmatic management of deployments and environments in Cube Cloud. You can use it to list deployments, manage environments, generate JWT tokens for accessing Core Data APIs, and export audit log events.
Control Plane API is only available in Cube Cloud.

Prerequisites

Authentication

Control Plane API uses API key authentication. Include your API key in the Authorization header with the Bearer prefix:

Error handling

In case of an error, Control Plane API returns a JSON object with an error property:

Pagination

Endpoints that return lists support pagination using offset and limit query parameters: Paginated responses include a pagination object:

Reference

/api/v1/deployments

Send a GET request to list all deployments accessible to the authenticated user. Query parameters: Example request:
Example response:

/api/v1/deployments/{deployment_id}/environments

Send a GET request to list environments for a specific deployment. Path parameters: Query parameters: Example request:
Example response:

/api/v1/deployments/{deployment_id}/environments/{environment_id}/tokens-for-meta-sync

Send a POST request to create a JWT token for accessing the Metadata API. The generated token is scoped specifically to metadata endpoints (e.g., /v1/data-sources, /v1/entities) and cannot be used to query data via the REST (JSON) API. This makes it suitable for integrations such as data catalogs and lineage tools that only need to read data model metadata. The security context you provide is embedded in the token and controls which parts of the data model are visible, following the same multi-tenancy rules as regular API tokens. Path parameters: Request body: Example request:
Example response:

/build/api/v1/deployments/{deployment_id}/branches/staging-environment

Send a PUT request to enable or disable a branch, i.e. to control whether its staging environment stays always active. Disabled (the default), a staging environment is only active while the branch is viewed in the Cube UI; enabled, it remains active and accessible regardless of user activity, and it is reported by /api/v1/deployments/{deployment_id}/environments as a staging environment. Only shared branches can be enabled — personal development branches and the production branch are rejected.
Note the /build prefix: data model and branch endpoints are served by the build API.
Path parameters: Body parameters: Example request:
Example response:
The same operation is available in the CLI as cube data-model enable-branch / cube data-model disable-branch.

/api/v1/deployments/{deployment_id}/versions

Send a GET request to list the Cube versions a deployment can be switched to — the same set the Cube Cloud UI’s version picker offers: the head of each update channel, plus the older versions your account has run before. Example request:
Example response:
To change the version, send a listed value as releaseChannelVersion to PUT /api/v1/deployments/{deployment_id}. Any of 1.7.20, v1.7.20 or cubejs/cube:v1.7.20 is accepted; a version that is not on the list is rejected with a 400. The container image is resolved from the version server-side and cannot be set directly.
Leaving releaseChannelVersion out and sending only releaseChannel moves the deployment to that channel’s latest version.
The same operation is available in the CLI as cube deployments versions, with cube deployments update ID --release-channel-version 1.7.20 to apply one.

/api/v1/audit-logs/export

Send a GET request to export audit log events as a CSV file. This endpoint allows you to programmatically retrieve security-related events for compliance reviews, external log aggregation, or integration with SIEM tools.
Requires Audit Log to be enabled on the Enterprise plan. The authenticated user must have the AuditLogManage permission.
Query parameters: The response is a CSV file streamed as an attachment. Example request:
Example request with filters:

/api/v1/deployments/{deployment_id}/dashboard-exports

Request a server-rendered snapshot of a whole published dashboard as PNG or PDF — the same rendering the Download as PNG or PDF action uses — without driving a browser through the console. A draft that has never been published can’t be exported. Identify the dashboard with either dashboardId (numeric) or dashboardPublicId (string) — exactly one, not both. Requires manage access to the dashboard’s workbook, the same permission the console’s whole-dashboard download requires. Rendering happens asynchronously, since a capture waits for every widget on the dashboard to finish querying: submit a job, poll it until status is completed — or failed, whose error says why — then download the file. The job and its file are dropped at the expiresAt the submit returns — 5 minutes out — so download before then or submit again. Only the identity that submitted a job can poll or download it.
An account administrator can also render the dashboard as if a specific other user opened it — renderAs a console user or an embed user — so the file reflects that person’s own row-level security. An embed subject that doesn’t exist yet is provisioned by the call; the groups/userAttributes/ securityContext passed with it apply to that render only, never to the user’s stored context. This is meant for scheduled, per-recipient reports: one API key produces a correctly-scoped file per person, instead of one key per person. Submitting returns 400 for a request that supplies both ids or neither, 404 for a dashboard that doesn’t belong to the deployment or a deactivated console subject, and 403 when the account has data downloads restricted (not bypassed for an on-behalf-of export, unlike a built-in scheduled notification) or when an embed subject’s tenant doesn’t have the dashboard’s workbook shared with it. It returns 429 when too many exports are already in flight for the identity being rendered as, so fan out per-recipient reports with a bounded number of jobs open at a time. See the API reference for the full request and response schema.