openapi: 3.0.0 info: title: AI Service Actions Sandboxes API version: 1.0.0 contact: email: devel@keboola.com license: name: MIT url: https://opensource.org/licenses/MIT tags: - name: Sandboxes paths: /sandboxes: post: summary: Create sandbox operationId: createSandbox tags: - Sandboxes description: 'This endpoint is intended to create Python/R Sandboxes. ' security: - storageApiToken: [] requestBody: required: true content: application/json: schema: type: object required: - componentId - configurationId - type - host additionalProperties: true properties: componentId: type: string description: Keboola component ID (e.g. keboola.sandboxes) configurationId: type: string description: Keboola configuration ID configurationVersion: type: string description: 'Configuration version to use. If omitted, the latest version is resolved automatically. ' type: type: string enum: - python - r - snowflake - bigquery - streamlit - python-js description: Sandbox type physicalId: type: string description: Physical identifier of the underlying resource (e.g. Snowflake schema name) host: type: string description: Hostname of the underlying resource size: type: string enum: - micro - tiny - small - medium - large nullable: true branchId: type: string nullable: true user: type: string nullable: true password: type: string nullable: true url: type: string nullable: true active: type: boolean shared: type: boolean imageVersion: type: string nullable: true packages: type: array deprecated: true items: type: string autoSuspendAfterSeconds: type: integer nullable: true responses: '201': description: Sandbox created successfully content: application/json: schema: $ref: '#/components/schemas/SandboxResponse' '401': description: Unauthorized '403': description: Forbidden '422': description: Unprocessable Entity /sandboxes/{appId}: get: summary: Get sandbox operationId: getSandbox tags: - Sandboxes description: 'This endpoint is intended to get details for Python/R Sandboxes. ' security: - storageApiToken: [] parameters: - in: path name: appId required: true schema: type: string responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/SandboxResponse' '401': description: Unauthorized '403': description: Forbidden '404': description: Sandbox not found patch: summary: Update sandbox operationId: patchSandbox tags: - Sandboxes description: 'This endpoint is intended to update Python/R Sandboxes. ' security: - storageApiToken: [] parameters: - in: path name: appId required: true schema: type: string requestBody: required: true content: application/json: schema: type: object required: - configurationVersion additionalProperties: true properties: configurationVersion: type: string active: type: boolean nullable: true url: type: string nullable: true expirationAfterHours: type: integer nullable: true minimum: 0 autoSuspendAfterSeconds: type: integer nullable: true minimum: 0 password: type: string nullable: true persistentStorage: type: object nullable: true description: Persistent volume claim data; populated by the sandboxes component after PVC provisioning. properties: pvcName: type: string nullable: true description: Name of the PVC in Kubernetes (e.g. "sandbox-123"). k8sManifest: type: string nullable: true description: Serialized YAML of the PVC Kubernetes manifest. isEnabled: type: boolean description: Whether persistent storage is enabled for this sandbox. ready: type: boolean nullable: true description: Whether the project-level persistent storage is ready. k8sStorageClassName: type: string nullable: true description: Kubernetes StorageClass name for the project's persistent storage. sizeParameters: type: object nullable: true description: Size parameters for the sandbox; used to store the PVC storage size. properties: storageSize_GB: type: integer nullable: true description: PVC storage size in GB. responses: '200': description: Sandbox updated successfully. content: application/json: schema: $ref: '#/components/schemas/SandboxResponse' '401': description: Unauthorized '403': description: Forbidden '404': description: Sandbox not found '422': description: Unprocessable Entity delete: summary: Delete sandbox operationId: deleteSandbox tags: - Sandboxes description: 'This endpoint is intended to delete Python/R Sandboxes. ' security: - storageApiToken: [] parameters: - in: path name: appId required: true schema: type: string responses: '204': description: Sandbox deleted successfully '401': description: Unauthorized '403': description: Forbidden '404': description: Sandbox not found components: schemas: SandboxResponse: type: object description: 'Response schema for sandbox endpoints (GET, POST, PATCH). ' properties: id: type: string projectId: type: string tokenId: type: string deprecated: true description: Always empty string branchId: type: string nullable: true configurationId: type: string physicalId: type: string deprecated: true description: Always empty string type: type: string active: type: boolean description: Whether the sandbox is currently running. createdTimestamp: type: string format: date-time startTimestamp: type: string format: date-time updatedTimestamp: type: string format: date-time persistentStorage: type: object properties: pvcName: type: string nullable: true k8sManifest: type: string nullable: true isEnabled: type: boolean description: Whether persistent storage is enabled for this sandbox. ready: type: boolean nullable: true description: Whether the project-level persistent storage is ready. k8sStorageClassName: type: string nullable: true description: Kubernetes StorageClass name for the project's persistent storage. shared: type: boolean componentId: type: string configurationVersion: type: string size: type: string nullable: true lastAutosaveTimestamp: type: string nullable: true format: date-time deprecated: true description: Always null expirationTimestamp: type: string nullable: true format: date-time deprecated: true description: Deprecated, always null autoSuspendAfterSeconds: type: integer description: Auto-suspend timeout in seconds (defaults to 3600) expirationAfterHours: type: integer deprecated: true description: Deprecated, use autoSuspendAfterSeconds user: type: string nullable: true deprecated: true description: Always null url: type: string nullable: true password: type: string nullable: true autosaveTokenId: type: string nullable: true deprecated: true description: Always null host: type: string nullable: true deprecated: true description: Deprecated, always null imageVersion: type: string nullable: true packages: type: array nullable: true items: type: string sizeParameters: nullable: true deprecated: true description: Deprecated, always null stagingWorkspaceId: nullable: true deprecated: true description: Deprecated, always null stagingWorkspaceType: nullable: true deprecated: true description: Deprecated, always null workspaceDetails: nullable: true deprecated: true description: Deprecated, always null databricks: nullable: true deprecated: true description: Deprecated, always null credentials: nullable: true deprecated: true description: Deprecated, always null securitySchemes: ApiKeyAuth: type: apiKey in: header name: X-StorageApi-Token