Keboola Workspaces API
The Workspaces API from Keboola — 24 operation(s) for workspaces.
The Workspaces API from Keboola — 24 operation(s) for workspaces.
openapi: 3.0.0
info:
title: AI Service Actions Workspaces API
version: 1.0.0
contact:
email: devel@keboola.com
license:
name: MIT
url: https://opensource.org/licenses/MIT
tags:
- name: Workspaces
paths:
/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/workspaces:
post:
tags:
- Workspaces
summary: Create workspace
description: Creates a new workspace. Provide componentId and configurationId to create workspace for a configuration. Set "async=true" to create asynchronously.
operationId: post_/v2/storage/branch/{branchId}/components/{componentId}/configs/{configurationId}/workspaces::WorkspaceCreateAction
parameters:
- name: componentId
in: path
description: Component identifier.
required: true
schema:
type: string
pattern: .+
- name: configurationId
in: path
description: Configuration identifier.
required: true
schema:
type: string
pattern: .+
- name: async
in: query
description: Create workspace asynchronously.
required: false
schema:
type: boolean
default: false
- name: branchId
in: path
required: true
schema:
type: string
- name: X-KBC-Backend
in: header
schema:
schema: BackendConfigurationRequest
properties:
context:
type: string
nullable: true
minLength: 1
type: object
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/CreateWorkspaceRequest'
responses:
'201':
description: Workspace created successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDetailResponse'
'202':
description: Workspace creation job enqueued.
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponse'
'400':
description: Returned when the request is invalid.
'404':
description: Returned when the component or configuration is not found.
'501':
description: Returned when Snowflake Partner Connect projects are not supported.
/v2/storage/components/{componentId}/configs/{configurationId}/workspaces:
post:
tags:
- Workspaces
summary: Create workspace
description: Creates a new workspace. Provide componentId and configurationId to create workspace for a configuration. Set "async=true" to create asynchronously.
operationId: post_/v2/storage/components/{componentId}/configs/{configurationId}/workspaces::WorkspaceCreateAction
parameters:
- name: componentId
in: path
description: Component identifier.
required: true
schema:
type: string
pattern: .+
- name: configurationId
in: path
description: Configuration identifier.
required: true
schema:
type: string
pattern: .+
- name: async
in: query
description: Create workspace asynchronously.
required: false
schema:
type: boolean
default: false
- name: X-KBC-Backend
in: header
schema:
schema: BackendConfigurationRequest
properties:
context:
type: string
nullable: true
minLength: 1
type: object
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/CreateWorkspaceRequest'
responses:
'201':
description: Workspace created successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDetailResponse'
'202':
description: Workspace creation job enqueued.
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponse'
'400':
description: Returned when the request is invalid.
'404':
description: Returned when the component or configuration is not found.
'501':
description: Returned when Snowflake Partner Connect projects are not supported.
/v2/storage/branch/{branchId}/workspaces/{workspaceId}/public-key:
post:
tags:
- Workspaces
summary: Set public key for workspace
description: Sets the public key for the specified workspace. This allows the workspace to connect to external services that require key-based authentication.
operationId: post_/v2/storage/branch/{branchId}/workspaces/{workspaceId}/public-key::WorkspacesSetPublicKeyAction
parameters:
- name: branchId
in: path
required: true
schema:
type: string
- name: workspaceId
in: path
required: true
schema:
type: string
pattern: \d+
responses:
'200':
description: Workspace details
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDetailResponse'
'404':
description: Workspace not found.
'400':
description: Backend not supported or invalid public key.
/v2/storage/workspaces/{workspaceId}/public-key:
post:
tags:
- Workspaces
summary: Set public key for workspace
description: Sets the public key for the specified workspace. This allows the workspace to connect to external services that require key-based authentication.
operationId: post_/v2/storage/workspaces/{workspaceId}/public-key::WorkspacesSetPublicKeyAction
parameters:
- name: workspaceId
in: path
required: true
schema:
type: string
pattern: \d+
responses:
'200':
description: Workspace details
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDetailResponse'
'404':
description: Workspace not found.
'400':
description: Backend not supported or invalid public key.
/v2/storage/branch/{branchId}/workspaces/{workspaceId}/public-key/{keyName}:
post:
tags:
- Workspaces
summary: Set public key for workspace
description: Sets the public key for the specified workspace. This allows the workspace to connect to external services that require key-based authentication.
operationId: post_/v2/storage/branch/{branchId}/workspaces/{workspaceId}/public-key/{keyName}::WorkspacesSetPublicKeyAction
parameters:
- name: branchId
in: path
required: true
schema:
type: string
- name: workspaceId
in: path
required: true
schema:
type: string
pattern: \d+
- name: keyName
in: path
required: true
schema:
type: string
pattern: RSA_PUBLIC_KEY|RSA_PUBLIC_KEY_2|BQ_KEY_1|BQ_KEY_2
enum:
- RSA_PUBLIC_KEY
- RSA_PUBLIC_KEY_2
- BQ_KEY_1
- BQ_KEY_2
responses:
'200':
description: Workspace details
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDetailResponse'
'404':
description: Workspace not found.
'400':
description: Backend not supported or invalid public key.
/v2/storage/workspaces/{workspaceId}/public-key/{keyName}:
post:
tags:
- Workspaces
summary: Set public key for workspace
description: Sets the public key for the specified workspace. This allows the workspace to connect to external services that require key-based authentication.
operationId: post_/v2/storage/workspaces/{workspaceId}/public-key/{keyName}::WorkspacesSetPublicKeyAction
parameters:
- name: workspaceId
in: path
required: true
schema:
type: string
pattern: \d+
- name: keyName
in: path
required: true
schema:
type: string
pattern: RSA_PUBLIC_KEY|RSA_PUBLIC_KEY_2|BQ_KEY_1|BQ_KEY_2
enum:
- RSA_PUBLIC_KEY
- RSA_PUBLIC_KEY_2
- BQ_KEY_1
- BQ_KEY_2
responses:
'200':
description: Workspace details
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDetailResponse'
'404':
description: Workspace not found.
'400':
description: Backend not supported or invalid public key.
/v2/storage/branch/{branchId}/workspaces/{workspaceId}/objects/batch-delete:
post:
tags:
- Workspaces
summary: Batch delete workspace objects
description: Deletes multiple tables and views from a workspace in a single operation. Returns a job. The job fails if any object deletion fails, but all objects are attempted.
operationId: post_/v2/storage/branch/{branchId}/workspaces/{workspaceId}/objects/batch-delete::ObjectBatchDeleteAction
parameters:
- name: workspaceId
in: path
description: ID of the workspace.
required: true
schema:
type: integer
pattern: '[0-9]+'
- name: branchId
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BatchDeleteRequest'
responses:
'202':
description: Batch delete job enqueued.
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponse'
'404':
description: Returned when the workspace is not found.
/v2/storage/workspaces/{workspaceId}/objects/batch-delete:
post:
tags:
- Workspaces
summary: Batch delete workspace objects
description: Deletes multiple tables and views from a workspace in a single operation. Returns a job. The job fails if any object deletion fails, but all objects are attempted.
operationId: post_/v2/storage/workspaces/{workspaceId}/objects/batch-delete::ObjectBatchDeleteAction
parameters:
- name: workspaceId
in: path
description: ID of the workspace.
required: true
schema:
type: integer
pattern: '[0-9]+'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BatchDeleteRequest'
responses:
'202':
description: Batch delete job enqueued.
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponse'
'404':
description: Returned when the workspace is not found.
/v2/storage/branch/{branchId}/workspaces/{workspaceId}/objects:
get:
tags:
- Workspaces
summary: List workspace objects
description: Returns a list of objects (tables and views) present in the workspace.
operationId: get_/v2/storage/branch/{branchId}/workspaces/{workspaceId}/objects::ObjectListAction
parameters:
- name: workspaceId
in: path
description: ID of the workspace.
required: true
schema:
type: integer
pattern: '[0-9]+'
- name: branchId
in: path
required: true
schema:
type: string
responses:
'200':
description: List of objects in the workspace
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ObjectListResponse'
'404':
description: Returned when the workspace is not found.
'422':
description: Returned when the workspace backend is not supported.
/v2/storage/workspaces/{workspaceId}/objects:
get:
tags:
- Workspaces
summary: List workspace objects
description: Returns a list of objects (tables and views) present in the workspace.
operationId: get_/v2/storage/workspaces/{workspaceId}/objects::ObjectListAction
parameters:
- name: workspaceId
in: path
description: ID of the workspace.
required: true
schema:
type: integer
pattern: '[0-9]+'
responses:
'200':
description: List of objects in the workspace
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/ObjectListResponse'
'404':
description: Returned when the workspace is not found.
'422':
description: Returned when the workspace backend is not supported.
/v2/storage/branch/{branchId}/workspaces:
get:
tags:
- Workspaces
summary: List workspaces
description: Lists all workspaces available in the current branch for the project.
operationId: get_/v2/storage/branch/{branchId}/workspaces::WorkspacesListAction
parameters:
- name: branchId
in: path
required: true
schema:
type: string
responses:
'200':
description: List of workspaces
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/WorkspaceDetailResponse'
post:
tags:
- Workspaces
summary: Create workspace
description: Creates a new workspace. Provide componentId and configurationId to create workspace for a configuration. Set "async=true" to create asynchronously.
operationId: post_/v2/storage/branch/{branchId}/workspaces::WorkspaceCreateAction
parameters:
- name: componentId
in: path
description: Component identifier.
required: false
schema:
type: string
- name: configurationId
in: path
description: Configuration identifier.
required: false
schema:
type: string
- name: async
in: query
description: Create workspace asynchronously.
required: false
schema:
type: boolean
default: false
- name: branchId
in: path
required: true
schema:
type: string
- name: X-KBC-Backend
in: header
schema:
schema: BackendConfigurationRequest
properties:
context:
type: string
nullable: true
minLength: 1
type: object
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/CreateWorkspaceRequest'
responses:
'201':
description: Workspace created successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDetailResponse'
'202':
description: Workspace creation job enqueued.
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponse'
'400':
description: Returned when the request is invalid.
'404':
description: Returned when the component or configuration is not found.
'501':
description: Returned when Snowflake Partner Connect projects are not supported.
/v2/storage/workspaces:
get:
tags:
- Workspaces
summary: List workspaces
description: Lists all workspaces available in the current branch for the project.
operationId: get_/v2/storage/workspaces::WorkspacesListAction
responses:
'200':
description: List of workspaces
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/WorkspaceDetailResponse'
post:
tags:
- Workspaces
summary: Create workspace
description: Creates a new workspace. Provide componentId and configurationId to create workspace for a configuration. Set "async=true" to create asynchronously.
operationId: post_/v2/storage/workspaces::WorkspaceCreateAction
parameters:
- name: componentId
in: path
description: Component identifier.
required: false
schema:
type: string
- name: configurationId
in: path
description: Configuration identifier.
required: false
schema:
type: string
- name: async
in: query
description: Create workspace asynchronously.
required: false
schema:
type: boolean
default: false
- name: X-KBC-Backend
in: header
schema:
schema: BackendConfigurationRequest
properties:
context:
type: string
nullable: true
minLength: 1
type: object
requestBody:
required: true
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/CreateWorkspaceRequest'
responses:
'201':
description: Workspace created successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDetailResponse'
'202':
description: Workspace creation job enqueued.
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponse'
'400':
description: Returned when the request is invalid.
'404':
description: Returned when the component or configuration is not found.
'501':
description: Returned when Snowflake Partner Connect projects are not supported.
/v2/storage/branch/{branchId}/workspaces/{workspaceId}:
get:
tags:
- Workspaces
summary: Get workspace details
description: Returns detailed information about a specific workspace.
operationId: get_/v2/storage/branch/{branchId}/workspaces/{workspaceId}::WorkspacesDetailAction
parameters:
- name: workspaceId
in: path
description: ID of the workspace.
required: true
schema:
type: integer
pattern: '[0-9]+'
- name: branchId
in: path
required: true
schema:
type: string
responses:
'200':
description: Workspace details
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDetailResponse'
'404':
description: Returned when the workspace is not found.
/v2/storage/workspaces/{workspaceId}:
get:
tags:
- Workspaces
summary: Get workspace details
description: Returns detailed information about a specific workspace.
operationId: get_/v2/storage/workspaces/{workspaceId}::WorkspacesDetailAction
parameters:
- name: workspaceId
in: path
description: ID of the workspace.
required: true
schema:
type: integer
pattern: '[0-9]+'
responses:
'200':
description: Workspace details
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDetailResponse'
'404':
description: Returned when the workspace is not found.
/v2/storage/branch/{branchId}/workspaces/{workspaceId}/input-mapping-load:
post:
tags:
- Workspaces
summary: Load tables into a workspace using an input-mapping config
description: Accepts a component-style input-mapping configuration and either returns the resolved load types (dryRun=true) or creates a workspace-load job (dryRun=false, default).
operationId: post_/v2/storage/branch/{branchId}/workspaces/{workspaceId}/input-mapping-load::WorkspaceInputMappingLoadAction
parameters:
- name: workspaceId
in: path
description: ID of the target workspace.
required: true
schema:
type: integer
pattern: '[1-9][0-9]*'
- name: dryRun
in: query
description: If `true`, do not create a job — return resolved load types per table instead.
required: false
schema:
type: boolean
default: false
- name: branchId
in: path
required: true
schema:
type: string
- name: X-KBC-Backend
in: header
schema:
schema: BackendConfigurationRequest
properties:
context:
type: string
nullable: true
minLength: 1
type: object
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/InputMappingLoadRequest'
responses:
'200':
description: 'Dry-run: validates the payload exactly as the real load would and returns the resolved load types per input table. A successful 200 response means the same payload submitted with dryRun=false will not be rejected by validation (modulo source state changing).'
content:
application/json:
schema:
$ref: '#/components/schemas/InputMappingLoadDryRunResponse'
'202':
description: Workspace-load job accepted (dryRun=false).
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponse'
'400':
description: Invalid request — validation error, unsupported option, or duplicate destination.
'403':
description: Caller does not have access to the requested source table.
'404':
description: Workspace, source bucket, or source table not found.
'422':
description: Unsupported workspace backend for the requested load.
/v2/storage/workspaces/{workspaceId}/input-mapping-load:
post:
tags:
- Workspaces
summary: Load tables into a workspace using an input-mapping config
description: Accepts a component-style input-mapping configuration and either returns the resolved load types (dryRun=true) or creates a workspace-load job (dryRun=false, default).
operationId: post_/v2/storage/workspaces/{workspaceId}/input-mapping-load::WorkspaceInputMappingLoadAction
parameters:
- name: workspaceId
in: path
description: ID of the target workspace.
required: true
schema:
type: integer
pattern: '[1-9][0-9]*'
- name: dryRun
in: query
description: If `true`, do not create a job — return resolved load types per table instead.
required: false
schema:
type: boolean
default: false
- name: X-KBC-Backend
in: header
schema:
schema: BackendConfigurationRequest
properties:
context:
type: string
nullable: true
minLength: 1
type: object
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/InputMappingLoadRequest'
responses:
'200':
description: 'Dry-run: validates the payload exactly as the real load would and returns the resolved load types per input table. A successful 200 response means the same payload submitted with dryRun=false will not be rejected by validation (modulo source state changing).'
content:
application/json:
schema:
$ref: '#/components/schemas/InputMappingLoadDryRunResponse'
'202':
description: Workspace-load job accepted (dryRun=false).
content:
application/json:
schema:
$ref: '#/components/schemas/JobResponse'
'400':
description: Invalid request — validation error, unsupported option, or duplicate destination.
'403':
description: Caller does not have access to the requested source table.
'404':
description: Workspace, source bucket, or source table not found.
'422':
description: Unsupported workspace backend for the requested load.
/v2/storage/branch/{branchId}/workspaces/{workspaceId}/credentials:
post:
tags:
- Workspaces
summary: Get workspace credentials
description: Returns workspace credentials for BigQuery or Snowflake backends. Creates credentials if they do not exist.
operationId: post_/v2/storage/branch/{branchId}/workspaces/{workspaceId}/credentials::WorkspaceStorageCredentialsCreateAction
parameters:
- name: workspaceId
in: path
description: ID of the workspace.
required: true
schema:
type: integer
pattern: '[1-9][0-9]*'
- name: branchId
in: path
required: true
schema:
type: string
responses:
'200':
description: Workspace credentials
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDetailResponseWithSecret'
'404':
description: Returned when the workspace is not found.
'400':
description: Returned when the workspace backend is not supported (only BigQuery and Snowflake are supported).
/v2/storage/workspaces/{workspaceId}/credentials:
post:
tags:
- Workspaces
summary: Get workspace credentials
description: Returns workspace credentials for BigQuery or Snowflake backends. Creates credentials if they do not exist.
operationId: post_/v2/storage/workspaces/{workspaceId}/credentials::WorkspaceStorageCredentialsCreateAction
parameters:
- name: workspaceId
in: path
description: ID of the workspace.
required: true
schema:
type: integer
pattern: '[1-9][0-9]*'
responses:
'200':
description: Workspace credentials
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDetailResponseWithSecret'
'404':
description: Returned when the workspace is not found.
'400':
description: Returned when the workspace backend is not supported (only BigQuery and Snowflake are supported).
/v2/storage/branch/{branchId}/workspaces/{workspaceId}/credentials/{id}:
get:
tags:
- Workspaces
summary: Get specific workspace credential
description: Returns details of a specific workspace credential by ID.
operationId: get_/v2/storage/branch/{branchId}/workspaces/{workspaceId}/credentials/{id}::WorkspaceStorageCredentialsDetailAction
parameters:
- name: workspaceId
in: path
description: ID of the workspace.
required: true
schema:
type: integer
pattern: '[1-9][0-9]*'
- name: id
in: path
description: ID of the credential.
required: true
schema:
type: integer
pattern: '[1-9][0-9]*'
- name: branchId
in: path
required: true
schema:
type: string
responses:
'200':
description: Workspace credential details
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDetailResponseWithSecret'
'404':
description: Returned when the workspace or credential is not found.
delete:
tags:
- Workspaces
summary: Delete workspace credential
description: Deletes a specific workspace credential from both the database and the backend (BigQuery or Snowflake).
operationId: delete_/v2/storage/branch/{branchId}/workspaces/{workspaceId}/credentials/{id}::WorkspaceStorageCredentialsDeleteAction
parameters:
- name: workspaceId
in: path
description: ID of the workspace.
required: true
schema:
type: integer
pattern: '[1-9][0-9]*'
- name: id
in: path
description: ID of the credential.
required: true
schema:
type: integer
pattern: '[1-9][0-9]*'
- name: branchId
in: path
required: true
schema:
type: string
responses:
'204':
description: Credential successfully deleted
'404':
description: Returned when the workspace or credential is not found.
/v2/storage/workspaces/{workspaceId}/credentials/{id}:
get:
tags:
- Workspaces
summary: Get specific workspace credential
description: Returns details of a specific workspace credential by ID.
operationId: get_/v2/storage/workspaces/{workspaceId}/credentials/{id}::WorkspaceStorageCredentialsDetailAction
parameters:
- name: workspaceId
in: path
description: ID of the workspace.
required: true
schema:
type: integer
pattern: '[1-9][0-9]*'
- name: id
in: path
description: ID of the credential.
required: true
schema:
type: integer
pattern: '[1-9][0-9]*'
responses:
'200':
description: Workspace credential details
content:
application/json:
schema:
$ref: '#/components/schemas/WorkspaceDetailResponseWithSecret'
'404':
description: Returned when the workspace or credential is not found.
delete:
tags:
- Workspaces
summary: Delete workspace credential
description: Deletes a specific workspace credential from both the database and the backend (BigQuery or Snowflake).
operationId: delete_/v2/storage/workspaces/{workspaceId}/credentials/{id}::WorkspaceStorageCredentialsDeleteAction
parameters:
- name: workspaceId
in: path
description: ID of the workspace.
required: true
schema:
type: integer
pattern: '[1-9][0-9]*'
- name: id
in: path
description: ID of the credential.
required: true
schema:
type: integer
pattern: '[1-9][0-9]*'
responses:
'204':
description: Credential successfully deleted
'404':
description: Returned when the workspace or credential is not found.
/v2/storage/branch/{branchId}/workspaces/{workspaceId}/table-export:
post:
tags:
- Workspaces
summary: Export table from workspace
description: 'Export existing table from workspace to a file in the storage backend connected to the workspace.
Initial response returns job details [JobResponse](#model-JobResponse). The result of the asynchronous job can be fetched via `/v2/storage/jobs/{id}`. When the job completes, final result is [TableExportJobResponse](#model-TableExportJobResponse).'
operationId: post_/v2/storage/branch/{branchId}/workspaces/{workspaceId}/table-export::WorkspaceTableExportAction
parameters:
- name: workspaceId
in: path
description: ID of the workspace.
required: true
schema:
type: integer
pattern: \d+
- name: branchId
in: path
required: true
schema:
type: string
requestBody:
description: Table, file name and file type to export.
required: true
content:
application/
# --- truncated at 32 KB (71 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/keboola/refs/heads/main/openapi/keboola-workspaces-api-openapi.yml