Workspace

Every server has a workspace — a virtual file system for storing files and folders. Apps can be published from workspace contents.

Get workspace

GET /api/servers/:serverId/workspace
const workspace = await client.getWorkspace('server-id')
workspace = client.get_workspace("server-id")

Update workspace

PATCH /api/servers/:serverId/workspace
await client.updateWorkspace('server-id', { name: 'Updated' })
client.update_workspace("server-id", name="Updated")

Get file tree

GET /api/servers/:serverId/workspace/tree

Returns the full workspace tree structure.

const tree = await client.getWorkspaceTree('server-id')
tree = client.get_workspace_tree("server-id")

Get workspace stats

GET /api/servers/:serverId/workspace/stats
const stats = await client.getWorkspaceStats('server-id')
stats = client.get_workspace_stats("server-id")

List children

GET /api/servers/:serverId/workspace/children?parentId=folder-id
const children = await client.listWorkspaceChildren('server-id', 'parent-folder-id')
children = client.list_workspace_children("server-id", parent_id="parent-folder-id")

Batch list children

POST /api/servers/:serverId/workspace/children/batch
const result = await client.batchListChildren('server-id', ['folder-1', 'folder-2'])
result = client.batch_list_children("server-id", parent_ids=["folder-1", "folder-2"])

Download workspace

GET /api/servers/:serverId/workspace/download

Downloads the entire workspace as a ZIP file.

const blob = await client.downloadWorkspace('server-id')
data = client.download_workspace("server-id")

Folders

Create folder

POST /api/servers/:serverId/workspace/folders
const folder = await client.createWorkspaceFolder('server-id', {
  name: 'docs',
  parentId: null,
})
folder = client.create_workspace_folder("server-id", name="docs")

Update folder

PATCH /api/servers/:serverId/workspace/folders/:folderId
await client.updateWorkspaceFolder('server-id', 'folder-id', { name: 'renamed' })
client.update_workspace_folder("server-id", "folder-id", name="renamed")

Delete folder

DELETE /api/servers/:serverId/workspace/folders/:folderId
await client.deleteWorkspaceFolder('server-id', 'folder-id')
client.delete_workspace_folder("server-id", "folder-id")

Search folders

GET /api/servers/:serverId/workspace/folders/search
const folders = await client.searchWorkspaceFolders('server-id', { query: 'docs' })
folders = client.search_workspace_folders("server-id", query="docs")

Download folder

GET /api/servers/:serverId/workspace/folders/:folderId/download

Downloads a specific folder as a ZIP file.

const blob = await client.downloadWorkspaceFolder('server-id', 'folder-id')
data = client.download_workspace_folder("server-id", "folder-id")

Files

Create file

POST /api/servers/:serverId/workspace/files
const file = await client.createWorkspaceFile('server-id', {
  name: 'index.html',
  content: '<h1>Hello</h1>',
  parentId: 'folder-id',
})
file = client.create_workspace_file("server-id",
    name="index.html",
    content="<h1>Hello</h1>",
    parentId="folder-id",
)

Get file

GET /api/servers/:serverId/workspace/files/:fileId
const file = await client.getWorkspaceFile('server-id', 'file-id')
file = client.get_workspace_file("server-id", "file-id")

Update file

PATCH /api/servers/:serverId/workspace/files/:fileId
await client.updateWorkspaceFile('server-id', 'file-id', {
  content: '<h1>Updated</h1>',
})
client.update_workspace_file("server-id", "file-id", content="<h1>Updated</h1>")

Delete file

DELETE /api/servers/:serverId/workspace/files/:fileId
await client.deleteWorkspaceFile('server-id', 'file-id')
client.delete_workspace_file("server-id", "file-id")

Search files

GET /api/servers/:serverId/workspace/files/search
const files = await client.searchWorkspaceFiles('server-id', { query: 'index' })
files = client.search_workspace_files("server-id", query="index")

Clone file

POST /api/servers/:serverId/workspace/files/:fileId/clone
const clone = await client.cloneWorkspaceFile('server-id', 'file-id')
clone = client.clone_workspace_file("server-id", "file-id")

Bulk operations

Paste nodes

POST /api/servers/:serverId/workspace/nodes/paste
await client.pasteWorkspaceNodes('server-id', {
  nodeIds: ['file-1', 'folder-1'],
  targetParentId: 'destination-folder',
  mode: 'copy',
})
client.paste_workspace_nodes("server-id",
    nodeIds=["file-1", "folder-1"],
    targetParentId="destination-folder",
    mode="copy",
)

Run commands

POST /api/servers/:serverId/workspace/commands
await client.runWorkspaceCommands('server-id', {
  commands: [
    { type: 'rename', nodeId: 'file-id', name: 'new-name.txt' },
  ],
})
client.run_workspace_commands("server-id", commands=[
    {"type": "rename", "nodeId": "file-id", "name": "new-name.txt"},
])

Upload file

POST /api/servers/:serverId/workspace/upload

Multipart upload. Fields: file (binary), parentId (optional string).

const formData = new FormData()
formData.append('file', fileBlob, 'photo.png')
await client.uploadWorkspaceFile('server-id', formData)
client.upload_workspace_file("server-id", file=open("photo.png", "rb"), parent_id="folder-id")