openapi: 3.1.0 info: title: Cube Cloud REST API version: 1.0.0 description: |- Programmatically manage Cube Cloud: deployments and everything scoped to them (environments, folders, reports, workbooks, notifications, workspace, and agents), plus account-level users, groups, policies, embedding, and AI settings. servers: - url: https://{tenant}.cubecloud.dev/api description: Cube Cloud API base URL. Replace the whole host if you use a custom domain. variables: tenant: default: your-tenant description: Your Cube Cloud tenant subdomain security: - bearerAuth: [] tags: - name: Deployments - name: Environments - name: Folders - name: Reports - name: Workbooks - name: Notifications - name: Workspace - name: User Attributes - name: App Theme - name: Embed - name: Embed Tenants - name: Dbt Sync - name: Env Variables - name: OAuth Integrations - name: OIDC Token Configs - name: Regions - name: Tenant Settings - name: User Attribute Values - name: User OAuth Tokens - name: Users Admin paths: /v1/app-config: get: operationId: getAppConfig responses: '200': content: application/json: schema: $ref: '#/components/schemas/AppConfigResponse' description: '' summary: Get app config tags: - App Theme /v1/deployments: get: operationId: getDeployments parameters: - in: query name: creationStep required: false schema: oneOf: - items: enum: - project - upload - schema - github - ssh - databases - ready - demo type: string type: array $ref: '#/components/schemas/CreationStep' - type: array items: $ref: '#/components/schemas/CreationStep' - in: query name: offset required: false schema: oneOf: - minimum: 0 type: integer - type: 'null' type: integer minimum: 0 - in: query name: limit required: false schema: oneOf: - minimum: 0 type: integer - type: 'null' type: integer minimum: 0 - in: query name: first required: false schema: type: integer minimum: 1 description: Page size for cursor-based pagination - in: query name: after required: false schema: minimum: 1 type: string description: Cursor for fetching the next page responses: '200': content: application/json: schema: $ref: '#/components/schemas/DeploymentsListResponse' description: '' summary: Get deployments tags: - Deployments /v1/deployments/{deploymentId}: delete: operationId: deleteDeployment parameters: - in: path name: deploymentId required: true schema: type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/DeploymentDeleteResponse' description: '' summary: Delete deployment tags: - Deployments get: operationId: getDeployment parameters: - in: path name: deploymentId required: true schema: type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/Deployment' description: '' summary: Get deployment tags: - Deployments put: operationId: updateDeployment parameters: - in: path name: deploymentId required: true schema: type: integer requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateDeploymentInput' description: UpdateDeploymentInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Deployment' description: '' summary: Update deployment tags: - Deployments /v1/deployments/{deploymentId}/dbt-sync: post: operationId: startDbtSync parameters: - in: path name: deploymentId required: true schema: type: integer requestBody: content: application/json: schema: $ref: '#/components/schemas/StartDbtSyncInput' description: StartDbtSyncInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/DbtSyncResponse' description: '' summary: Start a dbt sync for a deployment tags: - Dbt Sync /v1/deployments/{deploymentId}/env-vars: get: operationId: getEnvVariables parameters: - in: path name: deploymentId required: true schema: type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/EnvVariablesListResponse' description: '' summary: Get env variables tags: - Env Variables x-mint: content: >- Lists the deployment environment variables. Values of secret-named variables (containing PASS, SECRET, TOKEN, KEY, or CREDENTIAL) are returned as `[ENCRYPTED]`. put: operationId: setEnvVariables parameters: - in: path name: deploymentId required: true schema: type: integer requestBody: content: application/json: schema: $ref: '#/components/schemas/SetEnvVariablesInput' description: SetEnvVariablesInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/EnvVariablesListResponse' description: '' summary: Set env variables tags: - Env Variables x-mint: content: >- Upserts deployment environment variables by name; variables not included keep their existing values. Passing the `[ENCRYPTED]` placeholder (the masked read value) is rejected β€” omit variables you do not intend to change. /v1/deployments/{deploymentId}/environments: get: operationId: getDeploymentEnvironments parameters: - in: path name: deploymentId required: true schema: type: integer - in: query name: type required: false schema: oneOf: - $ref: '#/components/schemas/GetDeploymentEnvironmentsQueryType' - type: 'null' type: string enum: - production - staging - development - in: query name: offset required: false schema: oneOf: - minimum: 0 type: integer - type: 'null' type: integer minimum: 0 - in: query name: limit required: false schema: oneOf: - minimum: 0 type: integer - type: 'null' type: integer minimum: 0 responses: '200': content: application/json: schema: $ref: '#/components/schemas/DeploymentEnvironmentsListResponse' description: '' summary: Get deployment environments tags: - Environments /v1/deployments/{deploymentId}/environments/{environmentId}/tokens: get: operationId: getDeploymentEnvironmentTokens parameters: - in: path name: deploymentId required: true schema: type: integer - in: path name: environmentId required: true schema: type: integer - in: query name: offset required: false schema: oneOf: - minimum: 0 type: integer - type: 'null' type: integer minimum: 0 - in: query name: limit required: false schema: oneOf: - minimum: 0 type: integer - type: 'null' type: integer minimum: 0 responses: '200': content: application/json: schema: $ref: '#/components/schemas/DeploymentEnvironmentTokensListResponse' description: '' summary: Get deployment environment tokens tags: - Environments post: operationId: createDeploymentEnvironmentToken parameters: - in: path name: deploymentId required: true schema: type: integer - in: path name: environmentId required: true schema: type: integer requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateDeploymentEnvironmentTokenInput' description: CreateDeploymentEnvironmentTokenInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/DeploymentEnvironmentTokenResponse' description: '' summary: Create deployment environment token tags: - Environments /v1/deployments/{deploymentId}/environments/{environmentId}/tokens-for-meta-sync: post: operationId: createDeploymentEnvironmentTokenForMetaSync parameters: - in: path name: deploymentId required: true schema: type: integer - in: path name: environmentId required: true schema: type: integer requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateDeploymentEnvironmentTokenInput' description: CreateDeploymentEnvironmentTokenInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/DeploymentEnvironmentTokenResponse' description: '' summary: Create deployment environment token for meta sync tags: - Environments /v1/deployments/{deploymentId}/folders: get: operationId: getFolders parameters: - in: path name: deploymentId required: true schema: type: number - in: query name: parentId schema: oneOf: - minimum: 0 type: integer - type: 'null' - in: query name: after schema: type: string - in: query name: first schema: minimum: 1 type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/FoldersListResponse' description: '' summary: List folders tags: - Folders x-mint: content: >- List the folders in a deployment's workspace. By default this returns the folders at the workspace root. Pass the `parentId` query parameter to list the direct children of a specific folder instead. Results are scoped to the calling user: only folders the user can see are returned. A folder is visible when the user owns it, has been granted access to it directly, or has access to something inside it (a sub-folder, workbook, or dashboard), in which case the ancestor folders are surfaced as navigation. This endpoint is not recursive β€” it returns a single level of the folder tree per call. Use `parentId` to walk deeper, or `GET /folders/{folderId}/ancestors` to resolve a breadcrumb path. Results are returned in pages using cursor-based pagination: pass `first` to set the page size and `after` (the previous response's `pageInfo.endCursor`) to fetch the next page. The legacy `data` and `count` fields are still populated for backwards compatibility but are deprecated in favour of `items` and `pageInfo`. post: operationId: createFolder parameters: - in: path name: deploymentId required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateFolderInput' description: CreateFolderInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Folder' description: '' summary: Create a folder tags: - Folders x-mint: content: >- Create a new folder in a deployment's workspace. Provide a `name`, and optionally a `parentId` to nest the folder inside an existing one (omit it to create the folder at the workspace root). An optional `position` controls the folder's ordering among its siblings. Requires the **AI BI User** role (or higher). When `parentId` is set, the caller must additionally have **edit** or **manage** access to that parent folder. Folders can be nested up to a fixed maximum depth; exceeding it returns `400`. /v1/deployments/{deploymentId}/folders/{folderId}: delete: operationId: deleteFolder parameters: - in: path name: deploymentId required: true schema: type: number - in: path name: folderId required: true schema: type: number responses: '200': content: application/json: {} description: Successful response summary: Delete a folder tags: - Folders x-mint: content: >- Delete a folder from a deployment's workspace. Responds with `204 No Content` on success. The folder must be empty of sub-folders: if it still has child folders, the request is rejected with `400` β€” delete or move the sub-folders first. Content directly inside the folder (workbooks, dashboards, reports) is **not** deleted. It is detached and returned to the workspace root. Requires **manage** access to the folder. Returns `404` if the folder does not exist or belongs to a different deployment. put: operationId: updateFolder parameters: - in: path name: deploymentId required: true schema: type: number - in: path name: folderId required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateFolderInput' description: UpdateFolderInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Folder' description: '' summary: Update a folder tags: - Folders x-mint: content: >- Update a folder's metadata β€” its `name` and/or its `position` among its siblings. Both fields are optional; only the fields you send are changed. This endpoint does **not** move a folder to a different parent. To re-parent a folder, use `POST /workspace/move` with `type: FOLDER`. Requires **edit** access to the folder. Returns `404` if the folder does not exist or belongs to a different deployment. /v1/deployments/{deploymentId}/folders/{folderId}/ancestors: get: operationId: getFolderAncestors parameters: - in: path name: deploymentId required: true schema: type: number - in: path name: folderId required: true schema: type: number responses: '200': content: application/json: schema: items: $ref: '#/components/schemas/Folder' type: array description: '' summary: List folder ancestors tags: - Folders x-mint: content: >- Return the ancestor chain of a folder, ordered from the workspace root down to (and including) the folder itself. Use this to render a breadcrumb path for a nested folder. For example, for `Root / Sales / Q1` requested on the `Q1` folder, the response is `[Root, Sales, Q1]`. Requires visibility access to the target folder. Returns `404` if the folder does not exist or belongs to a different deployment. /v1/deployments/{deploymentId}/notifications: get: operationId: getNotifications parameters: - in: path name: deploymentId required: true schema: type: integer description: Numeric id of the deployment that owns the notification. - in: query name: dashboardId required: false schema: oneOf: - minimum: 1 type: integer description: >- Optional filter: only return notifications for this numeric dashboard id. Provide this OR dashboardPublicId, not both. - type: 'null' type: integer minimum: 1 description: >- Optional filter: only return notifications for this numeric dashboard id. Provide this OR `dashboardPublicId`, not both. - in: query name: dashboardPublicId required: false schema: oneOf: - type: string description: >- Optional filter: only return notifications for this dashboard public id. Provide this OR dashboardId, not both. - type: 'null' type: string description: >- Optional filter: only return notifications for this dashboard public id. Provide this OR `dashboardId`, not both. - in: query name: recipientUserId required: false schema: oneOf: - minimum: 1 type: integer description: >- Optional filter: only return notifications received by this user, by user id. Mutually exclusive with recipientEmail and the embed-user filter. - type: 'null' type: integer minimum: 1 description: >- Optional filter: only return notifications received by this user, by user id. Mutually exclusive with `recipientEmail` and the embed-user filter. - in: query name: recipientEmail required: false schema: oneOf: - type: string description: >- Optional filter: only return notifications received by this user, by email. Mutually exclusive with recipientUserId and the embed-user filter. - type: 'null' type: string description: >- Optional filter: only return notifications received by this user, by email. Mutually exclusive with `recipientUserId` and the embed-user filter. - in: query name: recipientEmbedTenantName required: false schema: oneOf: - type: string description: >- Optional filter: only return notifications received by this embed user. Required together with recipientExternalId; mutually exclusive with the user filters. - type: 'null' type: string description: >- Optional filter: only return notifications received by this embed user. Required together with `recipientExternalId`; mutually exclusive with the user filters. - in: query name: recipientExternalId required: false schema: oneOf: - type: string description: >- Optional filter: only return notifications received by this embed user. Required together with recipientEmbedTenantName; mutually exclusive with the user filters. - type: 'null' type: string description: >- Optional filter: only return notifications received by this embed user. Required together with `recipientEmbedTenantName`; mutually exclusive with the user filters. - in: query name: first required: false schema: type: integer minimum: 1 maximum: 200 description: Page size for cursor pagination (default 100, max 200). - in: query name: after required: false schema: minimum: 1 type: string description: Opaque cursor for the next page; pass the previous response's `pageInfo.endCursor`. responses: '200': content: application/json: schema: $ref: '#/components/schemas/NotificationsListResponse' description: '' summary: List scheduled notifications tags: - Notifications x-mint: content: >- **πŸ”’ Admin only.** Requires administrator privileges β€” the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role. Returns the deployment’s scheduled notifications (recurring dashboard runs), ordered by creation time (newest first) and cursor-paginated. Optionally filter to a single dashboard with either `dashboardId` (numeric) or `dashboardPublicId` (string), and/or to the notifications a single recipient receives β€” a user (`recipientUserId` or `recipientEmail`) or an embed user (`recipientEmbedTenantName` + `recipientExternalId`). At most one identifier per dashboard/recipient dimension. Each item describes the schedule only; recipients are managed through the `/recipients` sub-resource. post: operationId: createNotification parameters: - in: path name: deploymentId required: true schema: type: integer description: Numeric id of the deployment that owns the notification. requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateNotificationInput' description: CreateNotificationInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/NotificationDto' description: '' summary: Create a scheduled notification tags: - Notifications x-mint: content: >- **πŸ”’ Admin only.** Requires administrator privileges β€” the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role. Creates a scheduled notification β€” a recurring run of a dashboard whose rendered result is delivered to its recipients. The cadence is set by `scheduleType` plus the relevant time fields (`minute`, `hour`, `dayOfWeek`, `dayOfMonth`) or a raw `customCron` expression when `scheduleType` is `CUSTOM`; `timezone` defaults to UTC. Identify the target dashboard with either `dashboardId` (numeric) or `dashboardPublicId` (string) β€” supply exactly one; it must belong to this deployment, otherwise `404` is returned. The created notification has no recipients β€” add them via `POST /notifications/{id}/recipients`. /v1/deployments/{deploymentId}/notifications/{id}: delete: operationId: deleteNotification parameters: - in: path name: deploymentId required: true schema: type: integer description: Numeric id of the deployment that owns the notification. - in: path name: id required: true schema: type: integer description: Numeric id of the notification (scheduled run). responses: '200': content: application/json: {} description: Successful response '204': description: Notification deleted. summary: Delete a scheduled notification tags: - Notifications x-mint: content: >- **πŸ”’ Admin only.** Requires administrator privileges β€” the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role. Permanently deletes a scheduled notification and all of its recipients (main, embed, and Slack) in a single cascade. Returns `204 No Content` on success, or `404` if the notification does not belong to this deployment. get: operationId: getNotification parameters: - in: path name: deploymentId required: true schema: type: integer description: Numeric id of the deployment that owns the notification. - in: path name: id required: true schema: type: integer description: Numeric id of the notification (scheduled run). responses: '200': content: application/json: schema: $ref: '#/components/schemas/NotificationDto' description: '' summary: Get a scheduled notification tags: - Notifications x-mint: content: >- **πŸ”’ Admin only.** Requires administrator privileges β€” the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role. Returns a single scheduled notification by id, including its cron expression, timezone, enabled state, notification format, and a human-readable schedule summary. Returns `404` if the notification does not exist or does not belong to this deployment. put: operationId: updateNotification parameters: - in: path name: deploymentId required: true schema: type: integer description: Numeric id of the deployment that owns the notification. - in: path name: id required: true schema: type: integer description: Numeric id of the notification (scheduled run). requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateNotificationInput' description: UpdateNotificationInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/NotificationDto' description: '' summary: Update a scheduled notification tags: - Notifications x-mint: content: >- **πŸ”’ Admin only.** Requires administrator privileges β€” the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role. Updates a notification’s schedule definition. Any subset of the schedule fields may be supplied (`scheduleType` + time fields or `customCron`, `timezone`), along with `isEnabled`, `notificationEnabled`, and `notificationFormat`. Omitted fields are left unchanged. This endpoint never modifies recipients β€” manage those through the `/recipients` sub-resource. Returns `404` if the notification is not part of this deployment. /v1/deployments/{deploymentId}/notifications/{id}/recipients: delete: operationId: removeRecipients parameters: - in: path name: deploymentId required: true schema: type: integer description: Numeric id of the deployment that owns the notification. - in: path name: id required: true schema: type: integer description: Numeric id of the notification (scheduled run). requestBody: content: application/json: schema: $ref: '#/components/schemas/RemoveNotificationRecipientsInput' description: RemoveNotificationRecipientsInput required: false responses: '200': content: application/json: {} description: Successful response '204': description: Recipients removed. summary: Remove notification recipients tags: - Notifications x-mint: content: >- **πŸ”’ Admin only.** Requires administrator privileges β€” the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role. Unsubscribes one or more recipients (1–1000 per request) from a notification. Each entry is identified by `type` plus the `id` returned by the API β€” `userId` for `USER`, `embedUserId` for `EMBED_USER`, or `channelId` for `SLACK`. `EMBED_USER` entries must also include `embedTenantName`, which locates the recipient’s storage partition. Removals are idempotent (deleting a recipient that isn’t subscribed is a no-op). Returns `204 No Content`, or `404` if the notification is not part of this deployment. get: operationId: getRecipients parameters: - in: path name: deploymentId required: true schema: type: integer description: Numeric id of the deployment that owns the notification. - in: path name: id required: true schema: type: integer description: Numeric id of the notification (scheduled run). - in: query name: first required: false schema: oneOf: - type: string - type: 'null' type: integer minimum: 1 maximum: 200 description: Page size for cursor pagination (default 100, max 200). - in: query name: after required: false schema: oneOf: - minimum: 1 type: integer - type: 'null' type: string description: Opaque cursor for the next page; pass the previous response's `pageInfo.endCursor`. responses: '200': content: application/json: schema: $ref: '#/components/schemas/NotificationRecipientsListResponse' description: '' summary: List notification recipients tags: - Notifications x-mint: content: >- **πŸ”’ Admin only.** Requires administrator privileges β€” the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role. Returns the recipients subscribed to a notification, cursor-paginated and ordered by creation time (newest first). Recipients span three kinds, distinguished by `type`: `USER` (a main console user, with `userId` + `email`), `EMBED_USER` (an embed user, with `embedUserId`, `embedTenantName`, `externalId`, and `email`), and `SLACK` (a channel, with `channelId` + `channelName`). Returns `404` if the notification is not part of this deployment. post: operationId: addRecipients parameters: - in: path name: deploymentId required: true schema: type: integer description: Numeric id of the deployment that owns the notification. - in: path name: id required: true schema: type: integer description: Numeric id of the notification (scheduled run). requestBody: content: application/json: schema: $ref: '#/components/schemas/AddNotificationRecipientsInput' description: AddNotificationRecipientsInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/NotificationRecipientsMutationResponse' description: '' summary: Add notification recipients tags: - Notifications x-mint: content: >- **πŸ”’ Admin only.** Requires administrator privileges β€” the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role. Subscribes one or more recipients (1–1000 per request) to a notification. Each recipient is one of: a main console `USER` (identified by `userId` or `email`); an `EMBED_USER` (identified by `embedTenantName` + `externalId`, auto-provisioned if it does not yet exist, and optionally given `securityContext`, `userAttributes`, and `groups` that drive per-recipient rendering); or `SLACK` β€” **not yet supported**, a request containing a Slack recipient is rejected with `400`. Every recipient must resolve to a valid email (an embed user’s `email`, or an email-shaped `externalId`); otherwise the whole request fails with `400` before anything is written. The operation is idempotent: the response buckets each recipient into `createdRecipients`, `updatedRecipients` (an existing recipient whose embed properties changed), or `unchangedRecipients`. /v1/deployments/{deploymentId}/reports: get: operationId: getReports parameters: - in: path name: deploymentId required: true schema: type: number - in: query name: workbookId schema: oneOf: - type: integer - type: 'null' - in: query name: folderId schema: oneOf: - type: integer - type: 'null' - in: query name: externalWorkbookId schema: oneOf: - type: string - type: 'null' - in: query name: search schema: oneOf: - type: string - type: 'null' - in: query name: limit schema: oneOf: - type: integer - type: 'null' - in: query name: page schema: oneOf: - type: integer - type: 'null' - in: query name: sortBy schema: oneOf: - $ref: '#/components/schemas/GetReportsQuerySortBy' - type: 'null' - in: query name: sortDirection schema: oneOf: - $ref: '#/components/schemas/GetReportsQuerySortDirection' - type: 'null' - in: query name: after schema: type: string - in: query name: first schema: minimum: 1 type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/ReportsListResponse' description: '' summary: List reports tags: - Reports x-mint: content: >- List the reports in a deployment, scoped to the reports the calling user can access. Results are returned in pages using cursor-based pagination: pass `first` to set the page size and `after` (the previous response's `pageInfo.endCursor`) to fetch the next page. Cursor pagination is not supported when sorting by `lastViewedAt` (a per-viewer sort with no stable cursor column). post: operationId: createReport parameters: - in: path name: deploymentId required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateReportInput' description: CreateReportInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Report' description: '' summary: Create report tags: - Reports /v1/deployments/{deploymentId}/reports/{reportId}: delete: operationId: deleteReport parameters: - in: path name: deploymentId required: true schema: type: number - in: path name: reportId required: true schema: type: number responses: '200': content: application/json: {} description: Successful response summary: Delete report tags: - Reports get: operationId: getReport parameters: - in: path name: deploymentId required: true schema: type: number - in: path name: reportId required: true schema: type: number responses: '200': content: application/json: schema: $ref: '#/components/schemas/Report' description: '' summary: Get report tags: - Reports put: operationId: updateReport parameters: - in: path name: deploymentId required: true schema: type: string - in: path name: reportId required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateReportInput' description: UpdateReportInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Report' description: '' summary: Update report tags: - Reports /v1/deployments/{deploymentId}/reports/{reportId}/connect-workbook: put: operationId: connectReportToWorkbook parameters: - in: path name: deploymentId required: true schema: type: number - in: path name: reportId required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/ConnectReportToWorkbookInput' description: ConnectReportToWorkbookInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Report' description: '' summary: Connect a report to the calling spreadsheet tags: - Reports x-mint: content: |- Link a report to the caller's own spreadsheet by recording its placement (workbook id + result location) so the add-in can list and refresh it there. This upserts only the placement for the given workbook and never changes the report's query, name, or other definition β€” so, like refresh, it requires only read access to the report. A user who can view a report can place its data into their own sheet without being its creator or having edit rights. /v1/deployments/{deploymentId}/reports/{reportId}/refresh: put: operationId: refreshReport parameters: - in: path name: deploymentId required: true schema: type: number - in: path name: reportId required: true schema: type: number responses: '200': content: application/json: schema: $ref: '#/components/schemas/Report' description: '' summary: Refresh report tags: - Reports /v1/deployments/{deploymentId}/shared-workspace: get: operationId: sharedWorkspaceObjects parameters: - in: path name: deploymentId required: true schema: type: number - in: query name: folderId schema: oneOf: - type: integer - type: 'null' - in: query name: types schema: oneOf: - items: enum: - FOLDER - WORKBOOK - REPORT type: string type: array - type: 'null' - in: query name: orderByField schema: oneOf: - $ref: '#/components/schemas/GetWorkspaceObjectsQueryOrderByField' - type: 'null' - in: query name: orderByDirection schema: oneOf: - $ref: '#/components/schemas/GetWorkspaceObjectsQueryOrderByDirection' - type: 'null' - in: query name: search schema: oneOf: - type: string - type: 'null' - in: query name: after schema: type: string - in: query name: first schema: minimum: 1 type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/WorkspaceConnectionResponse' description: '' summary: List shared workspace items tags: - Workspace x-mint: content: >- List the workspace items (folders, workbooks, reports) that have been shared with embed users via the built-in "All embed users" group or the caller's per-embed-tenant `system:tenant:{embedTenantName}` group. Unlike `GET /workspace`, this feed is not per-user: every valid embed caller from the same embed tenant sees the same set, scoped to what those groups have been granted. Owner identities are blanked out so they are not exposed to embed users. Accepts the same `folderId`, `types`, `search`, sorting, and cursor-pagination parameters as `GET /workspace`. Folders reachable only because a nested item inside them was shared are surfaced as navigation, but their unshared siblings stay hidden. /v1/deployments/{deploymentId}/token: post: operationId: deploymentToken parameters: - in: path name: deploymentId required: true schema: type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/DeploymentTokenResponse' description: '' summary: Deployment token tags: - Deployments /v1/deployments/{deploymentId}/workbooks: get: operationId: getWorkbooks parameters: - in: path name: deploymentId required: true schema: type: number - in: query name: folderId schema: oneOf: - minimum: 0 type: integer - type: 'null' - in: query name: after schema: type: string - in: query name: first schema: minimum: 1 type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/WorkbooksListResponse' description: '' summary: Get workbooks tags: - Workbooks post: operationId: createWorkbook parameters: - in: path name: deploymentId required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateWorkbookInput' description: CreateWorkbookInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Workbook' description: '' summary: Create workbook tags: - Workbooks /v1/deployments/{deploymentId}/workbooks/{workbookId}: delete: operationId: deleteWorkbook parameters: - in: path name: deploymentId required: true schema: type: number - in: path name: workbookId required: true schema: type: number responses: '200': content: application/json: {} description: Successful response summary: Delete workbook tags: - Workbooks get: operationId: getWorkbook parameters: - in: path name: deploymentId required: true schema: type: number - in: path name: workbookId required: true schema: type: number responses: '200': content: application/json: schema: $ref: '#/components/schemas/Workbook' description: '' summary: Get workbook tags: - Workbooks put: operationId: updateWorkbook parameters: - in: path name: deploymentId required: true schema: type: number - in: path name: workbookId required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateWorkbookInput' description: UpdateWorkbookInput required: false responses: '200': content: application/json: {} description: Successful response summary: Update a workbook tags: - Workbooks x-mint: content: >- Update a workbook's properties. All fields are optional; only the fields you send are changed. - `name` β€” rename the workbook. - `meta` β€” replace the workbook's metadata object. - `folderId` β€” move the workbook between folders. Set it to a folder id to move the workbook into that folder, or to `null` to move it back to the workspace root. Access depends on what you change. Renaming or editing metadata requires **edit** access to the workbook. Moving the workbook (any request that includes `folderId`) requires **manage** access to the workbook, plus **edit** access to the destination folder when moving into one. To move a workbook you can use either this endpoint or the unified `POST /workspace/move`. Returns `404` if the workbook does not exist or belongs to a different deployment. /v1/deployments/{deploymentId}/workbooks/{workbookId}/dashboard: put: operationId: updateWorkbookDashboard parameters: - in: path name: deploymentId required: true schema: type: number - in: path name: workbookId required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/WorkbookDashboardInput' description: WorkbookDashboardInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/WorkbookDashboard' description: '' summary: Update workbook dashboard tags: - Workbooks /v1/deployments/{deploymentId}/workbooks/{workbookId}/dashboard/ai-widget-thread: post: operationId: updatePublishedDashboardAiWidgetThread parameters: - in: path name: deploymentId required: true schema: type: number - in: path name: workbookId required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdatePublishedAiWidgetThreadInput' description: UpdatePublishedAiWidgetThreadInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Dashboard' description: '' summary: Update published dashboard AI widget thread tags: - Workbooks /v1/deployments/{deploymentId}/workbooks/{workbookId}/duplicate: post: operationId: duplicateWorkbook parameters: - in: path name: deploymentId required: true schema: type: number - in: path name: workbookId required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/DuplicateWorkbookInput' description: DuplicateWorkbookInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Workbook' description: '' summary: Clone a workbook tags: - Workbooks x-mint: content: >- Create a full copy of a workbook, including its reports and its published dashboard, and return the new workbook. The clone is created in the same folder as the source and named "Copy of \{original name\}". All report references inside the dashboard (and the dashboard draft) are re-pointed at the copied reports, so the duplicate is fully self-contained and independent of the original. Per-user view history (last-viewed timestamps) is **not** carried over. Requires **read** access to the source workbook and the **AI BI User** role (or higher). The new workbook is owned by the calling user. Creator-mode embed sessions can also clone a workbook from the **shared workspace** (the items listed by `GET /shared-workspace`) by passing `{ "shared": true }` in the request body β€” `workbookId` is then resolved against the shared workspace instead of the caller's own. Such a clone is built from the workbook's **published dashboard**: a fresh report is created per report snapshot, the dashboard is re-published onto the new workbook, and the same config seeds the workbook's draft β€” the source's live reports and unpublished draft are not copied. The clone is placed at the workspace root. Requires the workbook to have a published dashboard (`400` otherwise); `403` for non-creator-mode callers. If the deployment's plan enforces a workbook limit and it has been reached, the request is rejected with `400`. Returns `404` if the workbook does not exist or belongs to a different deployment. /v1/deployments/{deploymentId}/workbooks/{workbookId}/publish: post: operationId: publishDashboard parameters: - in: path name: deploymentId required: true schema: type: number - in: path name: workbookId required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/PublishDashboardInput' description: PublishDashboardInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Dashboard' description: '' summary: Publish dashboard tags: - Workbooks /v1/deployments/{deploymentId}/workspace: get: operationId: workspaceObjects parameters: - in: path name: deploymentId required: true schema: type: number - in: query name: folderId schema: oneOf: - type: integer - type: 'null' - in: query name: types schema: oneOf: - items: enum: - FOLDER - WORKBOOK - REPORT type: string type: array - type: 'null' - in: query name: orderByField schema: oneOf: - $ref: '#/components/schemas/GetWorkspaceObjectsQueryOrderByField' - type: 'null' - in: query name: orderByDirection schema: oneOf: - $ref: '#/components/schemas/GetWorkspaceObjectsQueryOrderByDirection' - type: 'null' - in: query name: search schema: oneOf: - type: string - type: 'null' - in: query name: after schema: type: string - in: query name: first schema: minimum: 1 type: integer responses: '200': content: application/json: schema: $ref: '#/components/schemas/WorkspaceConnectionResponse' description: '' summary: List workspace items tags: - Workspace x-mint: content: >- List the items in a deployment's workspace β€” folders, workbooks, and reports β€” in a single unified, paginated feed. By default this returns the items at the workspace root. Pass `folderId` to list the contents of a specific folder instead. Folders are always returned ahead of other item types so they render at the top of a listing. Supported query parameters: - `folderId` β€” list the contents of this folder (omit for the root). - `types` β€” restrict the results to one or more item types (`FOLDER`, `WORKBOOK`, `REPORT`). Repeat the parameter to pass several. - `search` β€” case-insensitive substring match on item names; searches across all folders, not just the current level. - `orderByField` / `orderByDirection` β€” sort the non-folder items (e.g. by `name`, `updated_at`, `created_at`, or `viewer_last_viewed_at`). - `first` / `after` β€” cursor-based pagination. Results are scoped to the calling user: only items the user can access are returned. /v1/deployments/{deploymentId}/workspace/move: post: operationId: moveWorkspaceObject parameters: - in: path name: deploymentId required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/MoveWorkspaceObjectInput' description: MoveWorkspaceObjectInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/Workbook' description: '' summary: Move a workspace item tags: - Workspace x-mint: content: >- Move any workspace item β€” a workbook, report, or folder β€” into a folder, in one unified endpoint. Returns the moved item. Request body: - `type` β€” the item type: `WORKBOOK`, `REPORT`, or `FOLDER`. - `id` β€” the id of the item to move. - `folderId` β€” the destination folder id, or `null` to move the item to the workspace root. For a folder, this becomes its new parent. Access requirements depend on the item type and mirror the per-type rules: - **Workbook** β€” manage access to the workbook, plus edit access to the destination folder when moving into one. - **Report** β€” edit access to the report (with the report-manage permission). - **Folder** β€” manage access to the folder being moved, plus manage or edit access to the destination parent folder. Moving a folder into one of its own descendants, or exceeding the maximum folder depth, is rejected with `400`. Returns `404` if the item does not exist or belongs to a different deployment. /v1/embed-tenants/{embedTenantName}: delete: operationId: deleteEmbedTenant parameters: - in: path name: embedTenantName required: true schema: type: string responses: '200': content: application/json: {} description: Successful response summary: Delete embed tenant tags: - Embed Tenants /v1/embed-tenants/{embedTenantName}/groups: get: operationId: getGroups parameters: - in: path name: embedTenantName required: true schema: type: string - in: query name: after schema: oneOf: - type: string - type: 'null' - in: query name: first schema: oneOf: - minimum: 1 type: integer - type: 'null' responses: '200': content: application/json: schema: $ref: '#/components/schemas/UserGroupsConnectionResponse' description: '' summary: Get groups tags: - Embed Tenants /v1/embed-tenants/{embedTenantName}/groups/{id}: delete: operationId: deleteGroup parameters: - in: path name: embedTenantName required: true schema: type: string - in: path name: id required: true schema: type: number responses: '200': content: application/json: {} description: Successful response summary: Delete group tags: - Embed Tenants /v1/embed/dashboard/{publicId}: get: operationId: getDashboard parameters: - in: path name: publicId required: true schema: type: string responses: '200': content: application/json: schema: $ref: '#/components/schemas/Dashboard' description: '' summary: Get an embeddable dashboard tags: - Embed x-mint: content: >- Returns the dashboard identified by its `publicId` β€” including its reports/widgets β€” resolved within the caller's embed session scope, for rendering inside an embedded view. Access is authorized against the embed user: the dashboard is returned when the user owns its workbook, has been granted workbook access (folder-based or direct), holds `EmbedDashboardRead` on the dashboard, or when it has been shared with all embed users (creator-mode flow). Returns `404` if the dashboard does not exist or is not visible to the caller. Signed embedding additionally requires the dashboard to have "Allow signed embedding" enabled; the trusted screenshoter and creator-mode session flows are exempt. Returns `403` when embedding is not permitted for the dashboard. /v1/embed/generate-session: post: operationId: generateSession requestBody: content: application/json: schema: $ref: '#/components/schemas/GenerateSession' description: GenerateSessionDTO required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/GenerateSessionResponse' description: '' summary: Generate an embed session tags: - Embed x-mint: content: >- **πŸ”’ Admin only.** Requires administrator privileges β€” the authenticated principal (API key, embed JWT, or any bearer token) must belong to a user with the admin role. Creates a one-time embed session for a deployment and returns its `sessionId`. The session captures the embed context that will be baked into the embed token once redeemed β€” the target `deploymentId`, the end user's identity (`externalId` / `email` / `userProfile`), their group memberships, `userAttributes`, and an optional `securityContext`. Exchange the returned `sessionId` for a signed embed JWT via `POST /api/v1/embed/session/token` (single use). The end user can be assigned to two independent kinds of group, which serve different purposes: - **`groups`** β€” global, tenant-wide groups for **data-model access control**. Their names are passed verbatim into the Cube security context (`cubeCloud.groups`), where your data model's `access_policy` rules use them to gate cubes, views, members, and row-/column-level filters. They must already exist in the tenant. - **`tenantGroups`** β€” per-embed-tenant groups for **sharing and organizing content within a single embed tenant** (e.g. sharing a workbook or dashboard with a group in Creator Mode). Requires `creatorMode: true` and `embedTenantName`; create them inline via `tenantGroupDefinitions`. In the security context they are namespaced as `system:tenant:{embedTenantName}:group:{group}`, so they never collide with a same-named global group. See the individual request-body fields for the full contract. `deploymentId` is required and the caller must have read access to it. Embedding must be enabled for the tenant, otherwise `403` is returned. /v1/embed/session/token: post: operationId: postTokenBySessionId requestBody: content: application/json: schema: $ref: '#/components/schemas/PostTokenBySessionIdInput' description: PostTokenBySessionIdInputDTO required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/GenerateEmbedTokenResponse' description: '' summary: Exchange a session for an embed token tags: - Embed x-mint: content: >- Exchanges a one-time embed session id (created via `POST /api/v1/embed/generate-session`) for a signed, short-lived embed JWT used to authenticate the embedded analytics in the browser. The session is **single-use**: it is consumed (deleted) on the first successful exchange, so a given `sessionId` can be redeemed only once. The returned token is signed with the tenant's embed secret, issued by `cubecloud`, and expires after 24 hours. This endpoint is unauthenticated β€” it is called from the embedding client and the session id itself is the credential. Returns `401` if the session id is unknown or has already been redeemed. /v1/oauth-integrations: get: operationId: listOAuthIntegrations responses: '200': content: application/json: schema: items: $ref: '#/components/schemas/OAuthIntegration' type: array description: '' summary: List OAuth integrations tags: - OAuth Integrations post: operationId: createOAuthIntegration requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateOAuthIntegrationInput' description: CreateOAuthIntegrationInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/OAuthIntegration' description: '' summary: Create OAuth integration tags: - OAuth Integrations /v1/oauth-integrations/{id}: delete: operationId: deleteOAuthIntegration parameters: - in: path name: id required: true schema: type: number responses: '200': content: application/json: {} description: Successful response summary: Delete OAuth integration tags: - OAuth Integrations get: operationId: getOAuthIntegration parameters: - in: path name: id required: true schema: type: number responses: '200': content: application/json: schema: $ref: '#/components/schemas/OAuthIntegration' description: '' summary: Get OAuth integration tags: - OAuth Integrations put: operationId: updateOAuthIntegration parameters: - in: path name: id required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateOAuthIntegrationInput' description: UpdateOAuthIntegrationInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/OAuthIntegration' description: '' summary: Update OAuth integration tags: - OAuth Integrations /v1/oidc-token-configs: get: operationId: listOidcTokenConfigs responses: '200': content: application/json: schema: items: $ref: '#/components/schemas/OidcTokenConfig' type: array description: '' summary: List OIDC token configs tags: - OIDC Token Configs post: operationId: createOidcTokenConfig requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateOidcTokenConfigInput' description: CreateOidcTokenConfigInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/OidcTokenConfig' description: '' summary: Create OIDC token config tags: - OIDC Token Configs /v1/oidc-token-configs/{id}: delete: operationId: deleteOidcTokenConfig parameters: - in: path name: id required: true schema: type: number responses: '200': content: application/json: {} description: Successful response summary: Delete OIDC token config tags: - OIDC Token Configs get: operationId: getOidcTokenConfig parameters: - in: path name: id required: true schema: type: number responses: '200': content: application/json: schema: $ref: '#/components/schemas/OidcTokenConfig' description: '' summary: Get OIDC token config tags: - OIDC Token Configs put: operationId: updateOidcTokenConfig parameters: - in: path name: id required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateOidcTokenConfigInput' description: UpdateOidcTokenConfigInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/OidcTokenConfig' description: '' summary: Update OIDC token config tags: - OIDC Token Configs /v1/regions: get: operationId: listRegions responses: '200': content: application/json: schema: $ref: '#/components/schemas/RegionsListResponse' description: '' summary: List regions tags: - Regions /v1/tenant/settings: get: operationId: getTenantSettings responses: '200': content: application/json: schema: $ref: '#/components/schemas/TenantSettings' description: '' summary: Get tenant settings tags: - Tenant Settings put: operationId: updateTenantSettings requestBody: content: application/json: schema: $ref: '#/components/schemas/TenantSettingsInput' description: TenantSettingsInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/TenantSettings' description: '' summary: Update tenant settings tags: - Tenant Settings /v1/user-attribute-values: post: operationId: upsertUserAttributeValue requestBody: content: application/json: schema: $ref: '#/components/schemas/UserAttributeValueCreateInput' description: UserAttributeValueCreateInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/UserAttributeValueDTO' description: '' summary: Upsert user attribute value tags: - User Attribute Values /v1/user-attribute-values/{userId}: get: operationId: getUserAttributeValues parameters: - in: path name: userId required: true schema: type: number responses: '200': content: application/json: schema: items: $ref: '#/components/schemas/UserAttributeValueDTO' type: array description: '' summary: Get user attribute values tags: - User Attribute Values /v1/user-attributes: get: operationId: getUserAttributes parameters: - in: query name: offset schema: oneOf: - type: integer - type: 'null' - in: query name: limit schema: oneOf: - type: integer - type: 'null' - in: query name: name schema: oneOf: - type: string - type: 'null' - in: query name: type schema: oneOf: - $ref: '#/components/schemas/GetUserAttributesQueryType' - type: 'null' responses: '200': content: application/json: schema: $ref: '#/components/schemas/UserAttributesListResponse' description: '' summary: Get user attributes tags: - User Attributes post: operationId: createUserAttribute requestBody: content: application/json: schema: $ref: '#/components/schemas/UserAttributeCreateInput' description: UserAttributeCreateInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/UserAttribute' description: '' summary: Create user attribute tags: - User Attributes /v1/user-attributes/{id}: put: operationId: updateUserAttribute parameters: - in: path name: id required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/UserAttributeUpdateInput' description: UserAttributeUpdateInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/UserAttribute' description: '' summary: Update user attribute tags: - User Attributes /v1/user-oauth-tokens: get: operationId: listUserOAuthTokens responses: '200': content: application/json: schema: items: $ref: '#/components/schemas/UserOAuthToken' type: array description: '' summary: List user OAuth tokens tags: - User OAuth Tokens /v1/user-oauth-tokens/{integrationId}: delete: operationId: revokeUserOAuthToken parameters: - in: path name: integrationId required: true schema: type: number responses: '200': content: application/json: {} description: Successful response summary: Revoke user OAuth token tags: - User OAuth Tokens get: operationId: getUserOAuthToken parameters: - in: path name: integrationId required: true schema: type: number responses: '200': content: application/json: schema: $ref: '#/components/schemas/UserOAuthToken' description: '' summary: Get user OAuth token tags: - User OAuth Tokens /v1/user-oauth-tokens/{integrationId}/initiate: post: operationId: initiateOAuthFlow parameters: - in: path name: integrationId required: true schema: type: number responses: '200': content: application/json: {} description: Successful response summary: Initiate OAuth flow tags: - User OAuth Tokens /v1/users: post: operationId: createUser requestBody: content: application/json: schema: $ref: '#/components/schemas/UserCreateInput' description: UserCreateInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/User' description: '' summary: Create user tags: - Users Admin /v1/users/{id}: delete: operationId: deleteUser parameters: - in: path name: id required: true schema: type: number responses: '200': content: application/json: {} description: Successful response summary: Delete user tags: - Users Admin put: operationId: updateUser parameters: - in: path name: id required: true schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/UserUpdateInput' description: UserUpdateInput required: false responses: '200': content: application/json: schema: $ref: '#/components/schemas/User' description: '' summary: Update user tags: - Users Admin components: securitySchemes: bearerAuth: type: http scheme: bearer description: 'Token authentication. Send `Authorization: Bearer `.' schemas: AddNotificationRecipientsInput: properties: recipients: description: Recipients to subscribe (1–1000 per request) items: $ref: '#/components/schemas/NotificationRecipientInput' maxItems: 1000 minItems: 1 type: array required: - recipients type: object AppConfigResponse: properties: appTheme: oneOf: - $ref: '#/components/schemas/AppTheme' - type: 'null' applyThemeGlobally: type: boolean creatorMode: oneOf: - $ref: '#/components/schemas/CreatorMode' - type: 'null' embedding: oneOf: - $ref: '#/components/schemas/EmbedSettings' - type: 'null' required: - applyThemeGlobally type: object AppTheme: properties: dark: $ref: '#/components/schemas/AppThemeScheme' light: $ref: '#/components/schemas/AppThemeScheme' typography: oneOf: - $ref: '#/components/schemas/AppThemeTypography' - type: 'null' required: - light - dark type: object AppThemeFontRef: properties: fontRef: type: string fontWeight: type: number required: - fontRef - fontWeight type: object AppThemeScheme: properties: accentColor: type: string backgroundColor: type: string contrast: type: number foregroundColor: type: string logoUrl: type: string required: - accentColor - backgroundColor - foregroundColor - contrast - logoUrl type: object AppThemeTypography: properties: body: $ref: '#/components/schemas/AppThemeFontRef' fonts: items: $ref: '#/components/schemas/ThemeFont' type: array heading: $ref: '#/components/schemas/AppThemeFontRef' required: - fonts - body - heading type: object ColumnFormatOverride: properties: decimalPlaces: oneOf: - type: integer - type: 'null' type: $ref: '#/components/schemas/ColumnFormatOverrideDtoType' required: - type type: object ColumnFormatOverrideDtoType: enum: - currency - percent - number type: string ConnectReportToWorkbookInput: properties: endResultCell: oneOf: - type: string - type: 'null' externalWorkbookId: type: string resultLocation: type: string required: - externalWorkbookId - resultLocation type: object ControlThemeBorderSectionInput: properties: color: oneOf: - type: string - type: 'null' radius: oneOf: - type: string - type: 'null' style: oneOf: - type: string - type: 'null' width: oneOf: - type: string - type: 'null' type: object ControlThemeSectionInput: properties: backgroundColor: oneOf: - type: string - type: 'null' border: oneOf: - $ref: '#/components/schemas/ControlThemeBorderSectionInput' - type: 'null' padding: oneOf: - type: string - type: 'null' title: oneOf: - $ref: '#/components/schemas/ControlThemeTitleSectionInput' - type: 'null' type: object ControlThemeTitleSectionInput: properties: color: oneOf: - type: string - type: 'null' fontFamily: oneOf: - type: string - type: 'null' fontSize: oneOf: - type: string - type: 'null' fontWeight: oneOf: - type: string - type: 'null' type: object CreateDeploymentEnvironmentTokenInput: properties: expires_in: oneOf: - maximum: 3600 type: integer minimum: 1 - type: 'null' scopes: oneOf: - items: type: string type: array - type: 'null' security_context: additionalProperties: true not: type: 'null' type: object required: - security_context type: object CreateFolderInput: properties: name: maxLength: 255 type: string parentId: oneOf: - type: integer - type: 'null' position: oneOf: - type: integer - type: 'null' required: - name type: object CreateNotificationInput: properties: customCron: oneOf: - type: string description: Custom cron expression (required if scheduleType is CUSTOM) - type: 'null' dashboardId: oneOf: - type: integer description: >- Numeric id of the dashboard to run on the schedule. Provide this OR dashboardPublicId (exactly one). - type: 'null' dashboardPublicId: oneOf: - type: string description: >- Public id of the dashboard to run on the schedule. Provide this OR dashboardId (exactly one). - type: 'null' dayOfMonth: oneOf: - type: integer description: Day of month (1-31) - type: 'null' dayOfWeek: oneOf: - type: integer description: Day of week (0-6, Sunday=0) - type: 'null' filters: oneOf: - items: $ref: '#/components/schemas/DashboardFilterInput' type: array description: >- Dimension filters applied to the dashboard when the notification is rendered (substituted into the screenshot/PDF for every recipient). - type: 'null' hour: oneOf: - type: integer description: Hour of the day (0-23) - type: 'null' minute: oneOf: - type: integer description: Minute of the hour (0-59) - type: 'null' notificationEnabled: oneOf: - type: boolean - type: 'null' notificationFormat: oneOf: - $ref: '#/components/schemas/CreateNotificationInputNotificationFormat' - type: 'null' scheduleType: $ref: '#/components/schemas/CreateNotificationInputScheduleType' timeGrains: oneOf: - items: $ref: '#/components/schemas/DashboardTimeGrainInput' type: array description: Time-grain overrides applied to the dashboard when the notification is rendered. - type: 'null' timezone: oneOf: - type: string description: Timezone for the schedule (e.g. "America/New_York") - type: 'null' required: - scheduleType type: object CreateNotificationInputNotificationFormat: enum: - png - pdf type: string CreateNotificationInputScheduleType: enum: - HOURLY - DAILY - WEEKLY - MONTHLY - CUSTOM type: string CreateOAuthIntegrationInput: properties: authUrl: format: url type: string clientId: type: string clientSecret: type: string config: additionalProperties: true type: object name: type: string redirectUri: format: url type: string scopes: items: type: string type: array tokenUrl: format: url type: string type: type: string required: - clientSecret - name - type - authUrl - tokenUrl - clientId - redirectUri type: object CreateOidcTokenConfigInput: properties: audienceType: type: string customAudience: oneOf: - type: string - type: 'null' customClaims: oneOf: - type: object - type: 'null' isEnabled: oneOf: - type: boolean - type: 'null' name: oneOf: - pattern: ^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$ type: string - type: 'null' subFormat: oneOf: - pattern: ^(?:[A-Za-z0-9:_-]|\{(?:deployment_id|component|region)\})+$ type: string maxLength: 200 - type: 'null' targetEnvVar: oneOf: - pattern: ^[A-Z_][A-Z0-9_]*$ type: string maxLength: 128 - type: 'null' required: - audienceType type: object CreateReportInput: properties: endResultCell: oneOf: - type: string - type: 'null' externalWorkbookId: oneOf: - type: string - type: 'null' folderId: oneOf: - type: integer - type: 'null' jsonQuery: oneOf: - type: string - type: 'null' meta: oneOf: - type: object additionalProperties: true - type: 'null' name: oneOf: - type: string - type: 'null' pivotItems: oneOf: - $ref: '#/components/schemas/PivotItemsInput' - type: 'null' publicId: oneOf: - pattern: ^[0-9A-Za-z]+$ type: string minLength: 12 maxLength: 12 - type: 'null' resultLocation: oneOf: - type: string - type: 'null' source: oneOf: - $ref: '#/components/schemas/CreateReportInputSource' - type: 'null' sqlQuery: oneOf: - type: string - type: 'null' title: oneOf: - type: string - type: 'null' workbookId: oneOf: - type: integer - type: 'null' type: object CreateReportInputSource: enum: - GOOGLE_SHEETS - EXCEL - PLAYGROUND - D3 type: string CreateWorkbookInput: properties: folderId: oneOf: - type: number - type: 'null' meta: oneOf: - type: object additionalProperties: true - type: 'null' name: oneOf: - type: string - type: 'null' type: object CreationStep: enum: - project - upload - schema - github - ssh - databases - ready - demo type: string CreatorMode: properties: localizedTitles: oneOf: - items: $ref: '#/components/schemas/LocalizedValue' type: array maxItems: 50 - type: 'null' showGeneratedSql: oneOf: - type: boolean - type: 'null' showSemanticSql: oneOf: - type: boolean - type: 'null' showWorkspaceTitle: oneOf: - type: boolean - type: 'null' workspaceTitle: oneOf: - type: string - type: 'null' type: object Dashboard: properties: allowEmbed: type: boolean config: $ref: '#/components/schemas/DashboardConfig' createdBy: oneOf: - type: integer - type: 'null' deploymentId: type: integer description: oneOf: - type: string - type: 'null' fromSharedWorkspace: oneOf: - type: boolean - type: 'null' id: type: integer publicId: type: string reportSnapshots: items: $ref: '#/components/schemas/ReportSnapshot' type: array restrictDataDownload: oneOf: - type: boolean - type: 'null' status: $ref: '#/components/schemas/DashboardDtoStatus' title: oneOf: - type: string - type: 'null' useBoardDashboards: oneOf: - type: boolean - type: 'null' versionId: type: integer versionNumber: type: integer workbookId: type: integer required: - id - publicId - deploymentId - workbookId - status - allowEmbed - config - versionNumber - versionId - reportSnapshots type: object DashboardBreakpointCols: properties: lg: oneOf: - type: integer - type: 'null' md: oneOf: - type: integer - type: 'null' sm: oneOf: - type: integer - type: 'null' xs: oneOf: - type: integer - type: 'null' xxs: oneOf: - type: integer - type: 'null' title: DashboardBreakpointColsDto type: object DashboardBreakpointColsInput: properties: lg: oneOf: - type: integer - type: 'null' md: oneOf: - type: integer - type: 'null' sm: oneOf: - type: integer - type: 'null' xs: oneOf: - type: integer - type: 'null' xxs: oneOf: - type: integer - type: 'null' title: DashboardBreakpointColsInput type: object DashboardBreakpoints: properties: lg: oneOf: - type: integer - type: 'null' md: oneOf: - type: integer - type: 'null' sm: oneOf: - type: integer - type: 'null' xs: oneOf: - type: integer - type: 'null' xxs: oneOf: - type: integer - type: 'null' title: DashboardBreakpointsDto type: object DashboardBreakpointsInput: properties: lg: oneOf: - type: integer - type: 'null' md: oneOf: - type: integer - type: 'null' sm: oneOf: - type: integer - type: 'null' xs: oneOf: - type: integer - type: 'null' xxs: oneOf: - type: integer - type: 'null' title: DashboardBreakpointsInput type: object DashboardConfig: properties: description: oneOf: - type: string - type: 'null' layout: oneOf: - $ref: '#/components/schemas/DashboardLayout' - type: 'null' settings: oneOf: - type: object additionalProperties: true - type: 'null' theme: oneOf: - type: object additionalProperties: true - type: 'null' title: oneOf: - type: string - type: 'null' widgets: oneOf: - items: $ref: '#/components/schemas/DashboardWidget' type: array - type: 'null' type: object DashboardConfigInput: properties: description: oneOf: - type: string - type: 'null' layout: oneOf: - $ref: '#/components/schemas/DashboardLayoutInput' - type: 'null' settings: oneOf: - type: object additionalProperties: true - type: 'null' theme: oneOf: - $ref: '#/components/schemas/DashboardThemeInput' - type: 'null' title: oneOf: - type: string - type: 'null' widgets: oneOf: - items: $ref: '#/components/schemas/DashboardWidgetInput' type: array - type: 'null' type: object DashboardDtoStatus: enum: - draft - published - archived type: string DashboardFilter: properties: caseSensitive: oneOf: - {} - type: 'null' endInclusive: oneOf: - {} - type: 'null' member: type: string operator: oneOf: - $ref: '#/components/schemas/DashboardFilterOperator' - type: 'null' startInclusive: oneOf: - {} - type: 'null' value: oneOf: - oneOf: - type: string - type: number - type: boolean - type: array items: {} - type: 'null' required: - member type: object DashboardFilterInput: properties: caseSensitive: oneOf: - description: 'For string filters: whether matching is case-sensitive' - type: 'null' endInclusive: oneOf: - description: 'For between filters: whether the end bound is inclusive' - type: 'null' member: description: Dimension path, e.g. "Orders.status" pattern: .+\..+ type: string operator: oneOf: - $ref: '#/components/schemas/DashboardFilterInputOperator' - type: 'null' startInclusive: oneOf: - description: 'For between filters: whether the start bound is inclusive' - type: 'null' value: oneOf: - description: >- Filter value. Omit for is_null / is_not_null; provide a 2-element [start, end] array for between. oneOf: - type: string - type: number - type: boolean - type: array items: {} - type: 'null' required: - member type: object DashboardFilterInputOperator: enum: - equals - not_equals - greater_than - greater_than_or_equal - less_than - less_than_or_equal - contains - not_contains - starts_with - not_starts_with - ends_with - not_ends_with - is_null - is_not_null - between - custom type: string DashboardFilterOperator: enum: - equals - not_equals - greater_than - greater_than_or_equal - less_than - less_than_or_equal - contains - not_contains - starts_with - not_starts_with - ends_with - not_ends_with - is_null - is_not_null - between - custom type: string DashboardLayout: properties: breakpoints: oneOf: - $ref: '#/components/schemas/DashboardBreakpoints' - type: 'null' cols: oneOf: - $ref: '#/components/schemas/DashboardBreakpointCols' - type: 'null' containerPadding: oneOf: - items: type: integer type: array - type: 'null' margin: oneOf: - items: type: integer type: array - type: 'null' rowHeight: oneOf: - type: integer - type: 'null' type: object DashboardLayoutInput: properties: breakpoints: oneOf: - $ref: '#/components/schemas/DashboardBreakpointsInput' - type: 'null' cols: oneOf: - $ref: '#/components/schemas/DashboardBreakpointColsInput' - type: 'null' containerPadding: oneOf: - items: type: integer type: array - type: 'null' margin: oneOf: - items: type: integer type: array - type: 'null' rowHeight: oneOf: - type: integer - type: 'null' type: object DashboardResponsiveLayouts: properties: lg: oneOf: - $ref: '#/components/schemas/DashboardWidgetPosition' - type: 'null' md: oneOf: - $ref: '#/components/schemas/DashboardWidgetPosition' - type: 'null' sm: oneOf: - $ref: '#/components/schemas/DashboardWidgetPosition' - type: 'null' xs: oneOf: - $ref: '#/components/schemas/DashboardWidgetPosition' - type: 'null' xxs: oneOf: - $ref: '#/components/schemas/DashboardWidgetPosition' - type: 'null' type: object DashboardResponsiveLayoutsInput: properties: lg: oneOf: - $ref: '#/components/schemas/DashboardWidgetPositionInput' - type: 'null' md: oneOf: - $ref: '#/components/schemas/DashboardWidgetPositionInput' - type: 'null' sm: oneOf: - $ref: '#/components/schemas/DashboardWidgetPositionInput' - type: 'null' xs: oneOf: - $ref: '#/components/schemas/DashboardWidgetPositionInput' - type: 'null' xxs: oneOf: - $ref: '#/components/schemas/DashboardWidgetPositionInput' - type: 'null' type: object DashboardThemeInput: properties: backgroundColor: oneOf: - type: string - type: 'null' controls: oneOf: - $ref: '#/components/schemas/ControlThemeSectionInput' - type: 'null' dashboard: oneOf: - $ref: '#/components/schemas/DashboardThemeSectionInput' - type: 'null' fontFamily: oneOf: - type: string - type: 'null' primaryColor: oneOf: - type: string - type: 'null' themeId: oneOf: - type: string - type: 'null' widgets: oneOf: - $ref: '#/components/schemas/WidgetThemeSectionInput' - type: 'null' type: object DashboardThemeSectionInput: properties: backgroundColor: oneOf: - type: string - type: 'null' padding: oneOf: - type: string - type: 'null' type: object DashboardTimeGrain: properties: grain: type: string member: type: string required: - member - grain type: object DashboardTimeGrainInput: properties: grain: description: Granularity, e.g. "day", "week", "month" type: string member: description: Time dimension path, e.g. "Orders.created_at" pattern: .+\..+ type: string required: - member - grain type: object DashboardWidget: properties: config: oneOf: - type: object additionalProperties: true - type: 'null' id: type: string position: $ref: '#/components/schemas/DashboardWidgetPosition' responsiveLayouts: oneOf: - $ref: '#/components/schemas/DashboardResponsiveLayouts' - type: 'null' style: oneOf: - type: object additionalProperties: true - type: 'null' type: $ref: '#/components/schemas/DashboardWidgetDtoType' required: - id - type - position type: object DashboardWidgetDtoType: enum: - CHART - TEXT - FILTER - AI - TABS_CONTAINER - TIME_GRAIN type: string DashboardWidgetInput: properties: config: oneOf: - type: object additionalProperties: true - type: 'null' id: type: string position: $ref: '#/components/schemas/DashboardWidgetPositionInput' responsiveLayouts: oneOf: - $ref: '#/components/schemas/DashboardResponsiveLayoutsInput' - type: 'null' style: oneOf: - type: object additionalProperties: true - type: 'null' type: $ref: '#/components/schemas/DashboardWidgetInputType' required: - id - type - position type: object DashboardWidgetInputType: enum: - CHART - TEXT - FILTER - AI - TABS_CONTAINER - TIME_GRAIN type: string DashboardWidgetPosition: properties: h: type: integer w: type: integer x: type: integer 'y': type: integer required: - x - 'y' - w - h type: object DashboardWidgetPositionInput: properties: h: type: integer w: type: integer x: type: integer 'y': type: integer required: - x - 'y' - w - h type: object DbtSyncResponse: properties: branchName: type: string syncJobId: type: string workflowId: type: string required: - syncJobId - workflowId - branchName type: object Deployment: properties: creationStep: $ref: '#/components/schemas/CreationStep' deploymentUrl: type: string id: type: integer name: type: string required: - id - name - deploymentUrl - creationStep type: object DeploymentDeleteResponse: properties: success: type: boolean required: - success type: object DeploymentEnvironment: properties: api_credentials: items: $ref: '#/components/schemas/DeploymentEnvironmentApiCredential' type: array branch: oneOf: - type: string - type: 'null' id: type: string type: $ref: '#/components/schemas/DeploymentEnvironmentType' user: oneOf: - type: string - type: 'null' required: - id - type - api_credentials type: object DeploymentEnvironmentApiCredential: properties: database: oneOf: - type: string - type: 'null' host: oneOf: - type: string - type: 'null' port: oneOf: - minimum: 1 type: integer - type: 'null' type: $ref: '#/components/schemas/DeploymentEnvironmentApiCredentialType' url: oneOf: - type: string - type: 'null' version: minimum: 1 type: integer required: - type - version type: object DeploymentEnvironmentApiCredentialType: enum: - rest - sql type: string DeploymentEnvironmentToken: properties: created_at: type: string expires_at: type: string security_context: additionalProperties: true type: object token: type: string required: - token - security_context - created_at - expires_at type: object DeploymentEnvironmentTokenResponse: properties: data: $ref: '#/components/schemas/DeploymentEnvironmentToken' required: - data type: object DeploymentEnvironmentTokensListResponse: properties: data: items: $ref: '#/components/schemas/DeploymentEnvironmentToken' type: array pagination: $ref: '#/components/schemas/DeploymentsPagination' required: - data - pagination type: object DeploymentEnvironmentType: enum: - production - staging - development type: string DeploymentEnvironmentsListResponse: properties: data: items: $ref: '#/components/schemas/DeploymentEnvironment' type: array pagination: $ref: '#/components/schemas/DeploymentsPagination' required: - data - pagination type: object DeploymentTokenResponse: properties: cubeApiToken: type: string required: - cubeApiToken type: object DeploymentsListResponse: properties: count: oneOf: - minimum: 0 type: integer - type: 'null' data: items: $ref: '#/components/schemas/Deployment' type: array items: items: $ref: '#/components/schemas/Deployment' type: array pageInfo: oneOf: - $ref: '#/components/schemas/PageInfo' - type: 'null' pagination: $ref: '#/components/schemas/DeploymentsPagination' totalCount: oneOf: - minimum: 0 type: integer - type: 'null' required: - data - items - pagination type: object DeploymentsPagination: properties: limit: minimum: 0 type: integer offset: minimum: 0 type: integer total: minimum: 0 type: integer required: - total - offset - limit type: object DuplicateWorkbookInput: properties: shared: oneOf: - type: boolean - type: 'null' type: object EmbedSessionSettings: properties: showDashboardChat: oneOf: - type: boolean description: >- Whether embedded published dashboards viewed with this session show the AI chat (agent panel and launcher bubble). Omit to inherit the account-wide embed setting (shown by default); `false` hides the chat even if it is enabled account-wide, `true` shows it even if it is disabled account-wide. Only affects the dashboard surface. - type: 'null' type: object EmbedSettings: properties: locale: oneOf: - type: string - type: 'null' showDashboardChat: oneOf: - type: boolean - type: 'null' type: object EmbedTenantProfile: properties: displayName: oneOf: - type: string - type: 'null' type: object EmbedTheme: properties: analyticsChat: oneOf: - $ref: '#/components/schemas/EmbedThemeAnalyticsChat' type: object - type: 'null' chat: oneOf: - $ref: '#/components/schemas/EmbedThemeChat' type: object - type: 'null' font: oneOf: - type: string - type: 'null' primaryColor: oneOf: - type: string - type: 'null' type: object EmbedThemeAnalyticsChat: properties: backgroundColor: oneOf: - type: string - type: 'null' chatInput: oneOf: - $ref: '#/components/schemas/EmbedThemeAnalyticsChatInput' type: object - type: 'null' type: object EmbedThemeAnalyticsChatInput: properties: backgroundColor: oneOf: - type: string - type: 'null' borderColor: oneOf: - type: string - type: 'null' type: object EmbedThemeChat: properties: inputColor: oneOf: - type: string - type: 'null' type: object EmbedUserProfile: properties: displayName: oneOf: - type: string - type: 'null' picture: oneOf: - format: url type: string - type: 'null' type: object EnvVariableDto: properties: name: type: string value: type: string required: - name - value type: object EnvVariablesListResponse: properties: data: items: $ref: '#/components/schemas/EnvVariableDto' type: array required: - data type: object FillMissingRows: properties: excludedDimensions: oneOf: - items: type: string type: array - type: 'null' member: type: string required: - member type: object Folder: properties: createdAt: oneOf: - format: date type: string - format: date-time type: string createdBy: type: integer deploymentId: type: integer id: type: integer name: type: string parentId: oneOf: - type: integer - type: 'null' position: type: integer type: $ref: '#/components/schemas/FolderDtoType' updatedAt: oneOf: - format: date type: string - format: date-time type: string updatedBy: oneOf: - type: integer - type: 'null' required: - name - position - id - deploymentId - createdAt - updatedAt - type type: object FolderDtoType: enum: - FOLDER - WORKBOOK - REPORT type: string FoldersListResponse: properties: count: oneOf: - minimum: 0 type: integer deprecated: true description: >- Deprecated: total number of accessible folders, ignoring pagination. Kept for backward compatibility. - type: 'null' data: deprecated: true description: 'Deprecated: use `items` instead. Kept for backward compatibility.' items: $ref: '#/components/schemas/Folder' type: array items: items: $ref: '#/components/schemas/Folder' type: array pageInfo: oneOf: - $ref: '#/components/schemas/PageInfo' - type: 'null' required: - items - data type: object GenerateEmbedTokenResponse: properties: token: type: string required: - token type: object GenerateSession: properties: creatorMode: oneOf: - type: boolean - type: 'null' deploymentId: type: number email: oneOf: - type: string - type: 'null' embedTenantName: oneOf: - pattern: ^[a-z][a-z0-9-]{0,34}[a-z0-9]$ type: string - type: 'null' embedTenantProfile: oneOf: - $ref: '#/components/schemas/EmbedTenantProfile' type: object - type: 'null' embedTheme: oneOf: - $ref: '#/components/schemas/EmbedTheme' type: object - type: 'null' externalId: oneOf: - type: string - type: 'null' groupDefinitions: oneOf: - items: $ref: '#/components/schemas/GroupDefinition' type: array deprecated: true description: >- Deprecated and ignored. Global groups can no longer be created through this endpoint β€” define them beforehand via the Cube Cloud UI or admin API. Still accepted for backward compatibility (no error), but it has no effect. To create per-embed-tenant groups, use `tenantGroupDefinitions`. - type: 'null' groups: oneOf: - items: type: string type: array description: >- Global user groups β€” defined once at the tenant level and shared across every embed tenant β€” to assign this embed user to. Use `groups` for **data-model access control**: each name is placed verbatim into the Cube security context as `cubeCloud.groups`, where your data model's `access_policy` rules reference it to gate cubes, views, members, and row-/column-level filters. The groups must already exist in the tenant (create them via the Cube Cloud UI or admin API beforehand) β€” this endpoint never creates global groups, and names that do not resolve to an existing group are rejected. Global groups are NOT shown in an embed tenant’s Creator Mode UI. To share or organize content inside a single embed tenant, use `tenantGroups` instead. - type: 'null' internalId: oneOf: - type: string - type: 'null' isEphemeral: oneOf: - type: boolean - type: 'null' publicDashboardId: oneOf: - type: string - type: 'null' roles: oneOf: - items: type: string type: array - type: 'null' securityContext: oneOf: - type: object additionalProperties: true - type: 'null' settings: oneOf: - $ref: '#/components/schemas/EmbedSessionSettings' type: object description: >- Per-session overrides for embed behavior. Each key is tri-state: omit it to inherit the account-wide setting, or set `true`/`false` to force the behavior for every embed viewed with this session, taking precedence over the account-wide setting. - type: 'null' tenantGroupDefinitions: oneOf: - items: $ref: '#/components/schemas/GroupDefinition' type: array description: >- Idempotently create or update the per-embed-tenant groups referenced by `tenantGroups`, before they are assigned. Requires `creatorMode: true` and `embedTenantName`. Use this to declare a tenant’s groups in the same call that assigns them, so you do not need a separate admin request. Applies only to per-embed-tenant groups; global groups must be defined beforehand. - type: 'null' tenantGroups: oneOf: - items: type: string type: array description: >- Per-embed-tenant user groups β€” scoped to the single embed tenant named by `embedTenantName` β€” to assign this embed user to. Use `tenantGroups` for **content sharing and organization within one embed tenant**: for example, so a creator can share a workbook, dashboard, or folder with a group of that tenant’s users. These are the only groups shown in the embed tenant’s Creator Mode UI. Requires `creatorMode: true` and `embedTenantName`. Define the groups beforehand β€” or in the same request β€” via `tenantGroupDefinitions`. In the Cube security context they appear namespaced as `system:tenant:{embedTenantName}:group:{groupName}`, so a tenant group can never collide with β€” or be mistaken for β€” a global `groups` entry of the same name. For organization-wide data-model access policies, use `groups`. - type: 'null' userAttributeDefinitions: oneOf: - items: $ref: '#/components/schemas/UserAttributeDefinition' type: array - type: 'null' userAttributes: oneOf: - items: $ref: '#/components/schemas/UserAttributeInput' type: array - type: 'null' userProfile: oneOf: - $ref: '#/components/schemas/EmbedUserProfile' type: object - type: 'null' required: - deploymentId type: object GenerateSessionResponse: properties: sessionId: type: string required: - sessionId type: object GetDeploymentEnvironmentsQueryType: enum: - production - staging - development type: string GetReportsQuerySortBy: enum: - name - createdAt - updatedAt - lastViewedAt type: string GetReportsQuerySortDirection: enum: - ASC - DESC type: string GetUserAttributesQueryType: enum: - string - number - boolean - string_array - number_array type: string GetWorkspaceObjectsQueryOrderByDirection: enum: - ASC - DESC type: string GetWorkspaceObjectsQueryOrderByField: enum: - updated_at - created_at - name - viewer_last_viewed_at type: string GroupDefinition: properties: description: oneOf: - type: string - type: 'null' name: type: string required: - name type: object LocalizedValue: properties: locale: maxLength: 35 type: string value: maxLength: 1000 type: string required: - locale - value type: object MoveWorkspaceObjectInput: properties: folderId: oneOf: - type: integer - type: 'null' id: type: integer type: $ref: '#/components/schemas/MoveWorkspaceObjectInputType' required: - type - id type: object MoveWorkspaceObjectInputType: enum: - FOLDER - WORKBOOK - REPORT type: string NotificationDto: properties: cronExpression: type: string dashboardId: type: integer deploymentId: type: integer filters: oneOf: - items: $ref: '#/components/schemas/DashboardFilter' type: array description: Dimension filters applied when the notification is rendered. - type: 'null' humanReadableSchedule: description: Human-readable description of the cron schedule type: string id: type: integer isEnabled: type: boolean notificationEnabled: type: boolean notificationFormat: type: string timeGrains: oneOf: - items: $ref: '#/components/schemas/DashboardTimeGrain' type: array description: Time-grain overrides applied when the notification is rendered. - type: 'null' timezone: type: string required: - id - dashboardId - deploymentId - cronExpression - timezone - isEnabled - humanReadableSchedule - notificationEnabled - notificationFormat type: object NotificationRecipient: properties: channelId: oneOf: - type: string - type: 'null' channelName: oneOf: - type: string - type: 'null' email: oneOf: - type: string - type: 'null' embedTenantName: oneOf: - type: string - type: 'null' embedUserId: oneOf: - type: integer - type: 'null' externalId: oneOf: - type: string - type: 'null' type: $ref: '#/components/schemas/NotificationRecipientType' userId: oneOf: - type: integer - type: 'null' username: oneOf: - type: string - type: 'null' required: - type type: object NotificationRecipientInput: properties: channelId: oneOf: - type: string description: Slack channel id (for type=SLACK) - type: 'null' channelName: oneOf: - type: string description: Slack channel display name (optional, for type=SLACK) - type: 'null' email: oneOf: - type: string description: Main user email (for type=USER; provide this OR userId) - type: 'null' embedTenantName: oneOf: - type: string description: Embed tenant name (for type=EMBED_USER) - type: 'null' externalId: oneOf: - type: string description: Embed user external id (for type=EMBED_USER) - type: 'null' groups: oneOf: - items: type: string type: array description: >- Embed user groups (type=EMBED_USER). Must reference groups that already exist; drives per-recipient access when the report is rendered. - type: 'null' securityContext: oneOf: - type: object additionalProperties: true description: >- Embed user security context (type=EMBED_USER). Applied for per-recipient row-level security when the report is rendered. - type: 'null' type: $ref: '#/components/schemas/NotificationRecipientInputType' userAttributes: oneOf: - items: $ref: '#/components/schemas/UserAttributeInput' type: array description: >- Embed user attribute values (type=EMBED_USER). Names must reference attribute definitions that already exist. - type: 'null' userId: oneOf: - type: integer description: Main user id (for type=USER; provide this OR email) - type: 'null' required: - type type: object NotificationRecipientInputType: enum: - USER - EMBED_USER - SLACK type: string NotificationRecipientType: enum: - USER - EMBED_USER - SLACK type: string NotificationRecipientsListResponse: properties: items: items: $ref: '#/components/schemas/NotificationRecipient' type: array pageInfo: oneOf: - $ref: '#/components/schemas/PageInfo' - type: 'null' required: - items type: object NotificationRecipientsMutationResponse: properties: createdRecipients: description: Recipients newly subscribed by this request items: $ref: '#/components/schemas/NotificationRecipient' type: array unchangedRecipients: description: Recipients that already existed and were left unchanged items: $ref: '#/components/schemas/NotificationRecipient' type: array updatedRecipients: description: >- Existing recipients whose properties (e.g. embed security context / attributes / groups, or Slack channel name) were updated items: $ref: '#/components/schemas/NotificationRecipient' type: array required: - createdRecipients - updatedRecipients - unchangedRecipients type: object NotificationsListResponse: properties: items: items: $ref: '#/components/schemas/NotificationDto' type: array pageInfo: oneOf: - $ref: '#/components/schemas/PageInfo' - type: 'null' required: - items type: object OAuthIntegration: properties: authUrl: format: url type: string clientId: type: string config: oneOf: - type: object additionalProperties: true - type: 'null' createdAt: oneOf: - format: date type: string - format: date-time type: string id: type: integer name: type: string redirectUri: format: url type: string scopes: oneOf: - items: {} type: array - type: 'null' tokenUrl: format: url type: string type: type: string updatedAt: oneOf: - format: date type: string - format: date-time type: string required: - id - name - type - authUrl - tokenUrl - clientId - redirectUri - createdAt - updatedAt type: object OidcTokenConfig: properties: audience: type: string audienceType: type: string createdAt: oneOf: - format: date type: string - format: date-time type: string customClaims: oneOf: - type: object - type: 'null' id: type: integer isEnabled: type: boolean name: type: string subFormat: oneOf: - type: string - type: 'null' targetEnvVar: oneOf: - type: string - type: 'null' updatedAt: oneOf: - format: date type: string - format: date-time type: string required: - id - audienceType - audience - name - isEnabled - createdAt - updatedAt type: object PageInfo: properties: endCursor: oneOf: - type: string - type: 'null' hasNextPage: type: boolean hasPreviousPage: type: boolean startCursor: oneOf: - type: string - type: 'null' required: - hasNextPage - hasPreviousPage type: object PivotItems: properties: columns: items: type: string type: array filters: items: type: string type: array measures: items: type: string type: array rows: items: type: string type: array required: - columns - measures - rows - filters type: object PivotItemsInput: properties: columns: items: type: string type: array filters: items: type: string type: array measures: items: type: string type: array rows: items: type: string type: array required: - columns - measures - rows - filters type: object PostTokenBySessionIdInput: properties: sessionId: type: string required: - sessionId type: object PublishDashboardInput: properties: config: oneOf: - $ref: '#/components/schemas/DashboardConfigInput' - type: 'null' dashboardId: oneOf: - type: integer - type: 'null' description: oneOf: - type: string - type: 'null' title: oneOf: - type: string - type: 'null' workbookId: type: integer required: - workbookId type: object RegionDto: properties: id: type: integer isDedicated: oneOf: - type: boolean - type: 'null' isHybrid: oneOf: - type: boolean - type: 'null' isPublic: oneOf: - type: boolean - type: 'null' name: type: string provider: oneOf: - type: string - type: 'null' title: oneOf: - type: string - type: 'null' useAiEngineer: oneOf: - type: boolean - type: 'null' required: - id - name type: object RegionsListResponse: properties: data: items: $ref: '#/components/schemas/RegionDto' type: array required: - data type: object RemoveNotificationRecipientInput: properties: embedTenantName: oneOf: - type: string description: Embed tenant name (required for type=EMBED_USER; resolves the storage partition) - type: 'null' id: description: >- Recipient id: userId (type=USER), embedUserId (type=EMBED_USER), or channelId (type=SLACK) not: type: 'null' oneOf: - type: integer - type: string type: $ref: '#/components/schemas/RemoveNotificationRecipientInputType' required: - type - id type: object RemoveNotificationRecipientInputType: enum: - USER - EMBED_USER - SLACK type: string RemoveNotificationRecipientsInput: properties: recipients: description: Recipients to unsubscribe (1–1000 per request) items: $ref: '#/components/schemas/RemoveNotificationRecipientInput' maxItems: 1000 minItems: 1 type: array required: - recipients type: object Report: properties: canEdit: oneOf: - type: boolean - type: 'null' canManage: oneOf: - type: boolean - type: 'null' createdAt: oneOf: - format: date type: string - format: date-time type: string createdBy: type: integer deploymentId: type: integer description: oneOf: - type: string - type: 'null' endResultCell: oneOf: - type: string - type: 'null' externalWorkbookId: oneOf: - type: string - type: 'null' externalWorkbookPlacements: oneOf: - items: $ref: '#/components/schemas/ReportPlacement' type: array - type: 'null' folderId: oneOf: - type: integer - type: 'null' id: type: integer jsonQuery: oneOf: - type: string - type: 'null' meta: oneOf: - type: object additionalProperties: true - type: 'null' name: type: string pivotItems: oneOf: - $ref: '#/components/schemas/PivotItems' - type: 'null' publicId: maxLength: 12 minLength: 12 pattern: ^[0-9A-Za-z]+$ type: string refreshedBy: oneOf: - type: integer - type: 'null' refreshedByUser: $ref: '#/components/schemas/ResourceOwner' resultLocation: oneOf: - type: string - type: 'null' rolesWithAccess: oneOf: - items: $ref: '#/components/schemas/RoleWithAccess' type: array - type: 'null' source: oneOf: - $ref: '#/components/schemas/ReportDtoSource' - type: 'null' sqlQuery: oneOf: - type: string - type: 'null' title: oneOf: - type: string - type: 'null' type: $ref: '#/components/schemas/ReportDtoType' updatedAt: oneOf: - format: date type: string - format: date-time type: string user: $ref: '#/components/schemas/ResourceOwner' userId: type: integer version: oneOf: - type: integer - type: 'null' workbookId: oneOf: - type: integer - type: 'null' required: - publicId - userId - user - name - refreshedByUser - id - deploymentId - createdAt - updatedAt - type type: object ReportDtoSource: enum: - GOOGLE_SHEETS - EXCEL - PLAYGROUND - D3 type: string ReportDtoType: enum: - FOLDER - WORKBOOK - REPORT type: string ReportPlacement: properties: endResultCell: oneOf: - type: string - type: 'null' resultLocation: type: string workbookId: type: string required: - workbookId - resultLocation type: object ReportSnapshot: properties: description: oneOf: - type: string - type: 'null' fillMissingRows: oneOf: - $ref: '#/components/schemas/FillMissingRows' - type: 'null' id: type: integer kind: oneOf: - $ref: '#/components/schemas/ReportSnapshotDtoKind' - type: 'null' meta: oneOf: - type: object additionalProperties: true - type: 'null' name: oneOf: - type: string - type: 'null' preferences: oneOf: - $ref: '#/components/schemas/ReportSnapshotPreferences' - type: 'null' reportId: type: integer spec: oneOf: - oneOf: - type: string - type: object - type: 'null' sqlQuery: oneOf: - type: string - type: 'null' title: oneOf: - type: string - type: 'null' versionNumber: type: integer required: - id - reportId - versionNumber type: object ReportSnapshotDtoKind: enum: - vega - table - kpi - html - map type: string ReportSnapshotPreferences: properties: columnFormats: oneOf: - type: object additionalProperties: $ref: '#/components/schemas/ColumnFormatOverride' - type: 'null' type: object ReportsListResponse: properties: count: oneOf: - minimum: 0 type: integer deprecated: true description: >- Deprecated: total number of accessible reports, ignoring pagination. Kept for backward compatibility. - type: 'null' data: deprecated: true description: 'Deprecated: use `items` instead. Kept for backward compatibility.' items: $ref: '#/components/schemas/Report' type: array items: items: $ref: '#/components/schemas/Report' type: array pageInfo: oneOf: - $ref: '#/components/schemas/PageInfo' - type: 'null' required: - items - data type: object ResourceOwner: properties: email: type: string firstName: oneOf: - type: string - type: 'null' id: type: integer picture: oneOf: - type: string - type: 'null' required: - id - email type: object RoleWithAccess: properties: actions: items: enum: - All - DeploymentsManage - DeploymentCreate - DeploymentRead - DeploymentUpdate - DeploymentDelete - SecretsManage - DownloadData - PlaygroundRead - SchemaRead - SchemaUpdate - SchemaUpdateDevBranches - APMRead - PreAggregationBuild - AlertsCreate - AlertsRead - AlertsUpdate - AlertsDelete - AuditLogManage - BillingRead - SqlRunnerRead - DataAssetsRead - DataAssetsManage - CubeNetworkConnect - ReportRead - ReportEdit - ReportManage - WorkbookManage - WorkbookRead - WorkbookEdit - ChatThreadRead - AgentManage - AgentRead - AgentSpaceManage - AgentAdmin - DeploymentAgentRead - OAuthIntegrationsManage - OAuthIntegrationsIssueTokens - McpToolsManage - AIBIDevelop - AIBIExplore - AIBIView - ChartPalettesManage - DashboardThemesManage - AIBIDeveloper - AIBIUser - AIBIViewer - EmbedDeploymentRead - EmbedDashboardRead - FolderRead - FolderEdit - FolderManage type: string type: array id: type: integer name: type: string required: - id - name - actions type: object SetEnvVariablesInput: properties: env_variables: items: $ref: '#/components/schemas/EnvVariableDto' type: array required: - env_variables type: object StartDbtSyncInput: properties: branchName: oneOf: - type: string - type: 'null' type: object TenantSettings: properties: auditLogEnabled: type: boolean auditLogEnabledCurrent: type: boolean auditLogEnabledTimestamp: type: integer hasSupportAccess: type: boolean maintenanceWindowDay: type: string maintenanceWindowEnabled: type: boolean maintenanceWindowTime: type: string oidcEnabled: type: boolean useAIBIUserInterface: type: boolean required: - auditLogEnabled - auditLogEnabledCurrent - auditLogEnabledTimestamp - hasSupportAccess - useAIBIUserInterface - maintenanceWindowEnabled - maintenanceWindowDay - maintenanceWindowTime - oidcEnabled type: object TenantSettingsInput: properties: auditLogEnabled: oneOf: - type: boolean - type: 'null' hasSupportAccess: oneOf: - type: boolean - type: 'null' maintenanceWindowDay: oneOf: - type: string - type: 'null' maintenanceWindowEnabled: oneOf: - type: boolean - type: 'null' maintenanceWindowTime: oneOf: - type: string - type: 'null' oidcEnabled: oneOf: - type: boolean - type: 'null' useAIBIUserInterface: oneOf: - type: boolean - type: 'null' type: object ThemeFont: properties: family: oneOf: - type: string - type: 'null' format: type: string id: type: string name: oneOf: - type: string - type: 'null' url: type: string required: - id - url - format type: object UpdateDeploymentInput: properties: cloudProvider: oneOf: - type: string - type: 'null' creationMethod: oneOf: - $ref: '#/components/schemas/UpdateDeploymentInputCreationMethod' - type: 'null' creationStep: oneOf: - $ref: '#/components/schemas/CreationStep' - type: 'null' customDomain: oneOf: - type: string - type: 'null' deployBranchMergeAllowed: oneOf: - type: boolean - type: 'null' deployBranchName: oneOf: - type: string - type: 'null' deployBranchReadOnly: oneOf: - type: boolean - type: 'null' deployMode: oneOf: - $ref: '#/components/schemas/UpdateDeploymentInputDeployMode' - type: 'null' deployProjectRoot: oneOf: - type: string - type: 'null' name: oneOf: - type: string - type: 'null' region: oneOf: - type: string - type: 'null' type: object UpdateDeploymentInputCreationMethod: enum: - upload - cubecloud - github - ssh type: string UpdateDeploymentInputDeployMode: enum: - git - cli type: string UpdateFolderInput: properties: name: oneOf: - maxLength: 255 type: string - type: 'null' position: oneOf: - type: integer - type: 'null' type: object UpdateNotificationInput: properties: customCron: oneOf: - type: string - type: 'null' dayOfMonth: oneOf: - type: integer - type: 'null' dayOfWeek: oneOf: - type: integer - type: 'null' filters: oneOf: - items: $ref: '#/components/schemas/DashboardFilterInput' type: array description: >- Dimension filters applied to the dashboard when the notification is rendered. Replaces the existing set when provided. - type: 'null' hour: oneOf: - type: integer - type: 'null' isEnabled: oneOf: - type: boolean description: Enable or disable the schedule - type: 'null' minute: oneOf: - type: integer - type: 'null' notificationEnabled: oneOf: - type: boolean - type: 'null' notificationFormat: oneOf: - $ref: '#/components/schemas/UpdateNotificationInputNotificationFormat' - type: 'null' scheduleType: oneOf: - $ref: '#/components/schemas/UpdateNotificationInputScheduleType' - type: 'null' timeGrains: oneOf: - items: $ref: '#/components/schemas/DashboardTimeGrainInput' type: array description: >- Time-grain overrides applied to the dashboard when the notification is rendered. Replaces the existing set when provided. - type: 'null' timezone: oneOf: - type: string - type: 'null' type: object UpdateNotificationInputNotificationFormat: enum: - png - pdf type: string UpdateNotificationInputScheduleType: enum: - HOURLY - DAILY - WEEKLY - MONTHLY - CUSTOM type: string UpdateOAuthIntegrationInput: properties: authUrl: format: url type: string clientId: type: string clientSecret: oneOf: - type: string - type: 'null' config: additionalProperties: true type: object name: type: string redirectUri: format: url type: string scopes: items: type: string type: array tokenUrl: format: url type: string type: type: string required: - name - type - authUrl - tokenUrl - clientId - redirectUri type: object UpdateOidcTokenConfigInput: properties: customAudience: oneOf: - type: string - type: 'null' customClaims: oneOf: - type: object - type: 'null' isEnabled: oneOf: - type: boolean - type: 'null' name: oneOf: - pattern: ^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$ type: string - type: 'null' subFormat: oneOf: - pattern: ^(?:[A-Za-z0-9:_-]|\{(?:deployment_id|component|region)\})+$ type: string maxLength: 200 - type: 'null' targetEnvVar: oneOf: - pattern: ^[A-Z_][A-Z0-9_]*$ type: string maxLength: 128 - type: 'null' type: object UpdatePublishedAiWidgetThreadInput: properties: checksum: oneOf: - type: string - type: 'null' threadId: type: string widgetId: type: string required: - widgetId - threadId type: object UpdateReportInput: properties: endResultCell: oneOf: - type: string - type: 'null' externalWorkbookId: oneOf: - type: string - type: 'null' folderId: oneOf: - type: integer - type: 'null' jsonQuery: oneOf: - type: string - type: 'null' meta: oneOf: - type: object additionalProperties: true - type: 'null' name: oneOf: - type: string - type: 'null' pivotItems: oneOf: - $ref: '#/components/schemas/PivotItems' - type: 'null' resultLocation: oneOf: - type: string - type: 'null' sqlQuery: oneOf: - type: string - type: 'null' title: oneOf: - type: string - type: 'null' workbookId: oneOf: - type: integer - type: 'null' type: object UpdateWorkbookInput: properties: folderId: oneOf: - type: number - type: 'null' meta: oneOf: - type: object additionalProperties: true - type: 'null' name: oneOf: - type: string - type: 'null' slug: oneOf: - type: string - type: 'null' slugTakeover: oneOf: - type: boolean - type: 'null' type: object User: properties: activeRoleId: oneOf: - type: integer - type: 'null' aliases: oneOf: - items: $ref: '#/components/schemas/UserAlias' type: array - type: 'null' createdAt: oneOf: - oneOf: - format: date type: string - format: date-time type: string - type: 'null' defaultRoles: oneOf: - items: type: string type: array - type: 'null' email: type: string externalId: oneOf: - type: string - type: 'null' firstName: oneOf: - type: string - type: 'null' gitUser: oneOf: - type: string - type: 'null' id: type: integer impersonation: oneOf: - $ref: '#/components/schemas/UserImpersonationDTO' - type: 'null' isAdmin: type: boolean isDeactivated: oneOf: - type: boolean - type: 'null' lastLogin: oneOf: - oneOf: - format: date type: string - format: date-time type: string - type: 'null' notifications: additionalProperties: true type: object picture: oneOf: - type: string - type: 'null' samlId: oneOf: - type: string - type: 'null' settings: oneOf: - $ref: '#/components/schemas/UserSettingsInput' - type: 'null' title: oneOf: - type: string - type: 'null' tosAccepted: oneOf: - type: object - type: 'null' updatedAt: oneOf: - oneOf: - format: date type: string - format: date-time type: string - type: 'null' username: type: string required: - id - email - username - isAdmin - notifications type: object UserAlias: properties: createdAt: pattern: \d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d.\d+Z? type: string id: type: integer source: $ref: '#/components/schemas/UserAliasDTOSource' updatedAt: pattern: \d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d.\d+Z? type: string userId: type: integer username: type: string required: - id - userId - username - source - createdAt - updatedAt type: object UserAliasDTOSource: enum: - ldap - saml - scim - manual type: string UserAttribute: properties: defaultValue: oneOf: - type: string - type: 'null' description: oneOf: - type: string - type: 'null' displayName: oneOf: - type: string - type: 'null' id: type: integer name: type: string type: $ref: '#/components/schemas/UserAttributeDTOType' required: - id - name - type type: object UserAttributeCreateInput: properties: defaultValue: oneOf: - type: string - type: 'null' description: oneOf: - type: string - type: 'null' displayName: oneOf: - type: string - type: 'null' name: minLength: 1 type: string type: $ref: '#/components/schemas/UserAttributeCreateInputType' required: - name - type type: object UserAttributeCreateInputType: enum: - string - number - boolean - string_array - number_array type: string UserAttributeDTOType: enum: - string - number - boolean - string_array - number_array type: string UserAttributeDefinition: properties: defaultValue: oneOf: - type: string - type: 'null' description: oneOf: - type: string - type: 'null' displayName: oneOf: - type: string - type: 'null' name: type: string type: $ref: '#/components/schemas/UserAttributeDefinitionDTOType' required: - name - type type: object UserAttributeDefinitionDTOType: enum: - string - number - boolean - string_array - number_array type: string UserAttributeInput: properties: name: type: string value: oneOf: - oneOf: - type: string - type: number - type: boolean - type: array items: type: string - type: array items: type: number - type: 'null' required: - name type: object UserAttributeUpdateInput: properties: defaultValue: oneOf: - type: string - type: 'null' description: oneOf: - type: string - type: 'null' displayName: oneOf: - type: string - type: 'null' type: object UserAttributeValueCreateInput: properties: userAttributeId: minLength: 1 type: string userId: minLength: 1 type: string required: - userId - userAttributeId type: object UserAttributeValueDTO: properties: description: oneOf: - type: string - type: 'null' displayName: oneOf: - type: string - type: 'null' formattedValue: oneOf: - {} - type: 'null' name: type: string type: $ref: '#/components/schemas/UserAttributeValueDTOType' userAttributeId: type: integer userId: type: integer value: oneOf: - {} - type: 'null' required: - userId - userAttributeId - name - type type: object UserAttributeValueDTOType: enum: - string - number - boolean - string_array - number_array type: string UserAttributesListResponse: properties: count: type: integer data: items: $ref: '#/components/schemas/UserAttribute' type: array required: - data - count type: object UserCreateInput: properties: defaultRoles: oneOf: - items: type: string type: array - type: 'null' email: type: string externalId: oneOf: - type: string - type: 'null' firstName: oneOf: - type: string - type: 'null' isAdmin: oneOf: - type: boolean - type: 'null' password: oneOf: - type: string - type: 'null' username: type: string required: - email - username type: object UserGroupDTO: properties: description: oneOf: - type: string - type: 'null' id: type: integer name: type: string userCount: oneOf: - type: integer - type: 'null' required: - id - name type: object UserGroupsConnectionResponse: properties: items: items: $ref: '#/components/schemas/UserGroupDTO' type: array pageInfo: $ref: '#/components/schemas/PageInfo' required: - items - pageInfo type: object UserImpersonationDTO: properties: expiresAt: oneOf: - oneOf: - format: date type: string - format: date-time type: string - type: 'null' impersonatedUser: oneOf: - $ref: '#/components/schemas/User' - type: 'null' startedAt: oneOf: - oneOf: - format: date type: string - format: date-time type: string - type: 'null' type: object UserOAuthToken: properties: accessTokenExpiresAt: oneOf: - oneOf: - format: date type: string - format: date-time type: string - type: 'null' createdAt: oneOf: - format: date type: string - format: date-time type: string id: type: integer integrationId: type: integer lastError: oneOf: - {} - type: 'null' refreshTokenExpiresAt: oneOf: - oneOf: - format: date type: string - format: date-time type: string - type: 'null' status: type: string updatedAt: oneOf: - format: date type: string - format: date-time type: string userId: type: integer required: - id - userId - integrationId - status - createdAt - updatedAt type: object UserSettingsInput: properties: alternatingRowColors: oneOf: - type: boolean - type: 'null' lastSeenChangelogId: oneOf: - type: integer - type: 'null' locale: oneOf: - type: string - type: 'null' theme: oneOf: - type: string - type: 'null' timezone: oneOf: - type: string - type: 'null' type: object UserUpdateInput: properties: firstName: oneOf: - type: string - type: 'null' isAdmin: oneOf: - type: boolean - type: 'null' isDeactivated: oneOf: - type: boolean - type: 'null' notifications: oneOf: - items: type: string type: array - type: 'null' password: oneOf: - type: string - type: 'null' settings: oneOf: - type: object additionalProperties: true - type: 'null' title: oneOf: - type: string - type: 'null' tosAccepted: oneOf: - type: object additionalProperties: true - type: 'null' type: object WidgetThemeBorderSectionInput: properties: color: oneOf: - type: string - type: 'null' radius: oneOf: - type: string - type: 'null' style: oneOf: - type: string - type: 'null' width: oneOf: - type: string - type: 'null' type: object WidgetThemeSectionInput: properties: backgroundColor: oneOf: - type: string - type: 'null' border: oneOf: - $ref: '#/components/schemas/WidgetThemeBorderSectionInput' - type: 'null' margin: oneOf: - type: string - type: 'null' padding: oneOf: - type: string - type: 'null' text: oneOf: - $ref: '#/components/schemas/WidgetThemeTextSectionInput' - type: 'null' title: oneOf: - $ref: '#/components/schemas/WidgetThemeTitleSectionInput' - type: 'null' type: object WidgetThemeTextSectionInput: properties: codeFontFamily: oneOf: - type: string - type: 'null' color: oneOf: - type: string - type: 'null' fontFamily: oneOf: - type: string - type: 'null' secondaryColor: oneOf: - type: string - type: 'null' type: object WidgetThemeTitleSectionInput: properties: color: oneOf: - type: string - type: 'null' fontFamily: oneOf: - type: string - type: 'null' fontSize: oneOf: - type: string - type: 'null' fontWeight: oneOf: - type: string - type: 'null' type: object Workbook: properties: calculatedFields: type: object createdAt: oneOf: - format: date type: string - format: date-time type: string createdBy: type: integer dashboardDraft: oneOf: - $ref: '#/components/schemas/DashboardConfig' - type: 'null' dashboardPublished: oneOf: - $ref: '#/components/schemas/DashboardConfig' - type: 'null' deploymentId: type: integer folderId: oneOf: - type: number - type: 'null' id: type: integer isFavorite: oneOf: - type: boolean - type: 'null' meta: additionalProperties: true type: object name: type: string publishedDashboard: oneOf: - $ref: '#/components/schemas/Dashboard' - type: 'null' slug: oneOf: - type: string - type: 'null' type: $ref: '#/components/schemas/WorkbookDtoType' updatedAt: oneOf: - format: date type: string - format: date-time type: string user: oneOf: - $ref: '#/components/schemas/ResourceOwner' - type: 'null' userId: oneOf: - type: number - type: 'null' required: - name - meta - calculatedFields - id - deploymentId - createdAt - updatedAt - type type: object WorkbookDashboard: properties: dashboardDraft: oneOf: - $ref: '#/components/schemas/DashboardConfig' - type: 'null' dashboardPublished: oneOf: - $ref: '#/components/schemas/DashboardConfig' - type: 'null' type: object WorkbookDashboardInput: properties: dashboardDraft: oneOf: - $ref: '#/components/schemas/DashboardConfigInput' - type: 'null' type: object WorkbookDtoType: enum: - FOLDER - WORKBOOK - REPORT type: string WorkbooksListResponse: properties: count: oneOf: - minimum: 0 type: integer - type: 'null' data: items: $ref: '#/components/schemas/Workbook' type: array items: items: $ref: '#/components/schemas/Workbook' type: array pageInfo: oneOf: - $ref: '#/components/schemas/PageInfo' - type: 'null' required: - items - data type: object WorkspaceConnectionResponse: properties: items: items: $ref: '#/components/schemas/Workbook' type: array pageInfo: $ref: '#/components/schemas/PageInfo' required: - items - pageInfo type: object