Skip to content
AsterDrive Developer DocsDeveloper

Teams and Team Spaces

The following paths are relative to /api/v1 and require authentication.

Team capabilities have two layers:

  • team management: team profile, members, and audit logs
  • team workspace: files, folders, uploads, search, tags, shares, WebDAV accounts, trash, and tasks
MethodPathDescription
GET/teamsList teams visible to the current user
POST/teamsCreate a team
GET/teams/{id}Read team details
PATCH/teams/{id}Update team name or description
DELETE/teams/{id}Archive a team
POST/teams/{id}/restoreRestore an archived team
GET/teams/{id}/audit-logsRead team audit logs
GET/teams/{id}/membersPaginated team members
POST/teams/{id}/membersAdd a team member
PATCH/teams/{id}/members/{member_user_id}Change member role
DELETE/teams/{id}/members/{member_user_id}Remove a member

Current behavior:

  • GET /teams supports archived=true
  • POST /teams is still system-admin only and sets the caller as team owner
  • admins can create a team for someone else through /admin/teams; that entry adds the target user with admin role
  • DELETE /teams/{id} archives rather than physically deletes; cleanup happens after team_archive_retention_days
  • GET /teams/{id}/audit-logs requires team owner or admin and supports filters such as user_id, action, after, before, limit, offset
  • GET /teams/{id}/members supports keyword, role, status, limit, offset, sort_by, sort_order
  • POST /teams/{id}/members accepts either user_id or identifier, exactly one of them; omitted role defaults to member
  • member pagination returns owner_count and manager_count in addition to items / total / limit / offset

Team workspace APIs are rooted at:

/api/v1/teams/{team_id}

They are not a separate “team filesystem” implementation. They reuse the personal-space file / folder / upload / search / tag / share / trash / task / WebDAV-account semantics under a team scope.

MethodPathDescription
GET/teams/{team_id}/foldersList team root
POST/teams/{team_id}/foldersCreate a team folder
GET/teams/{team_id}/folders/{id}List a team subfolder
GET/teams/{team_id}/folders/{id}/infoRead full team folder info
GET/teams/{team_id}/folders/{id}/ancestorsRead team breadcrumb ancestors
PATCH/teams/{team_id}/folders/{id}Rename, move, or set folder policy
DELETE/teams/{team_id}/folders/{id}Soft-delete a team folder
POST/teams/{team_id}/folders/{id}/lockLock / unlock a team folder
POST/teams/{team_id}/folders/{id}/copyRecursively copy a team folder
POST/teams/{team_id}/files/uploadTeam multipart direct upload
POST/teams/{team_id}/files/newCreate an empty team file
POST/teams/{team_id}/files/upload/initNegotiate team upload mode
GET/teams/{team_id}/files/upload/sessionsList recoverable team upload sessions
PUT/teams/{team_id}/files/upload/{upload_id}/{chunk_number}Upload a team chunk
POST/teams/{team_id}/files/upload/{upload_id}/presign-partsPresign object-storage / remote multipart part URLs
POST/teams/{team_id}/files/upload/{upload_id}/completeComplete team upload
GET/teams/{team_id}/files/upload/{upload_id}Read team upload progress
DELETE/teams/{team_id}/files/upload/{upload_id}Cancel team upload
GET/teams/{team_id}/files/{id}Read team file metadata
GET/teams/{team_id}/files/{id}/archive-previewRead team archive preview manifest
GET/teams/{team_id}/files/{id}/direct-linkCreate team direct-download token
POST/teams/{team_id}/files/{id}/preview-linkCreate team preview link
POST/teams/{team_id}/files/{id}/resource-handleResolve the team file resource contract
POST/teams/{team_id}/files/{id}/wopi/openCreate WOPI launch session for team file
GET/teams/{team_id}/files/{id}/downloadDownload team file
GET/teams/{team_id}/files/{id}/thumbnailGet team file thumbnail
GET/teams/{team_id}/files/{id}/image-previewGet team file WebP preview
GET/teams/{team_id}/files/{id}/media-metadataGet team file media metadata
PUT/teams/{team_id}/files/{id}/contentOverwrite team file content
POST/teams/{team_id}/files/{id}/extractCreate archive extraction task
PATCH/teams/{team_id}/files/{id}Rename or move a team file
DELETE/teams/{team_id}/files/{id}Soft-delete a team file
POST/teams/{team_id}/files/{id}/lockLock / unlock a team file
POST/teams/{team_id}/files/{id}/copyCopy a team file
GET/teams/{team_id}/files/{id}/versionsList team file versions
POST/teams/{team_id}/files/{id}/versions/{version_id}/restoreRestore a team file version
DELETE/teams/{team_id}/files/{id}/versions/{version_id}Delete a team file version

Request bodies, paging parameters, upload modes, locks, and versions match personal-space APIs. See Files and Folders.

Batch, Search, Tags, Sharing, Trash, Tasks, and WebDAV

Section titled “Batch, Search, Tags, Sharing, Trash, Tasks, and WebDAV”
MethodPathDescription
POST/teams/{team_id}/batch/deleteBatch-delete team resources
POST/teams/{team_id}/batch/moveBatch-move team resources
POST/teams/{team_id}/batch/copyBatch-copy team resources
POST/teams/{team_id}/batch/archive-compressCreate team archive-compress task
POST/teams/{team_id}/batch/archive-downloadCreate team ZIP download ticket
GET/teams/{team_id}/batch/archive-download/{token}Download team ZIP
GET/teams/{team_id}/searchSearch team workspace
GET/teams/{team_id}/tagsList team tags
POST/teams/{team_id}/tagsCreate a team tag
PATCH/teams/{team_id}/tags/{tag_id}Rename or recolor a team tag
DELETE/teams/{team_id}/tags/{tag_id}Delete a team tag
GET/teams/{team_id}/tags/{entity_type}/{entity_id}List tags for a team file or folder
PUT/teams/{team_id}/tags/{entity_type}/{entity_id}Replace all tags for a team file or folder
PUT/teams/{team_id}/tags/{tag_id}/{entity_type}/{entity_id}Attach a tag to a team file or folder
DELETE/teams/{team_id}/tags/{tag_id}/{entity_type}/{entity_id}Detach a tag from a team file or folder
PUT/teams/{team_id}/tags/{tag_id}/batchAttach one tag to multiple team files/folders
DELETE/teams/{team_id}/tags/{tag_id}/batchDetach one tag from multiple team files/folders
POST/teams/{team_id}/sharesCreate team file/folder share
GET/teams/{team_id}/sharesList current user’s shares in this team
PATCH/teams/{team_id}/shares/{id}Edit team share
DELETE/teams/{team_id}/shares/{id}Delete team share
POST/teams/{team_id}/shares/batch-deleteBatch-delete team shares
GET/teams/{team_id}/trashList team trash
POST/teams/{team_id}/trash/{entity_type}/{id}/restoreRestore team trash item
DELETE/teams/{team_id}/trash/{entity_type}/{id}Permanently delete team trash item
DELETE/teams/{team_id}/trashEmpty team trash
GET/teams/{team_id}/tasksList team tasks
POST/teams/{team_id}/tasks/offline-downloadCreate a team offline-download import task
GET/teams/{team_id}/tasks/{id}Read one team task
POST/teams/{team_id}/tasks/{id}/retryRetry failed team task
GET/teams/{team_id}/webdav-accountsList team WebDAV accounts
POST/teams/{team_id}/webdav-accountsCreate a team WebDAV account
DELETE/teams/{team_id}/webdav-accounts/{account_id}Delete a team WebDAV account
POST/teams/{team_id}/webdav-accounts/{account_id}/toggleEnable or disable a team WebDAV account

These reuse personal-space contracts. See Batch, Search, Tags, Sharing, Trash, Tasks, WebDAV, and WOPI.

Team-specific notes:

  • public REST access for team shares still uses /api/v1/s/{token}, and the frontend page is still /s/:token
  • file writes prefer folder-level policy_id; without folder override, the effective storage policy is resolved through teams.policy_group_id
  • team WOPI startup uses /teams/{team_id}/files/{id}/wopi/open, but callbacks still go to /api/v1/wopi/files/{id} because team scope lives in the access token
  • team archive-download tickets can only be consumed under the matching team route
  • recoverable team upload sessions return the same shape as personal sessions but are scoped to the team
  • frontend_client_id works for team upload init and recoverable-session filtering
  • POST /teams/{team_id}/tasks/offline-download creates an offline_download task that imports an HTTP/HTTPS URL into the team space; its request body matches personal /tasks/offline-download
  • team WebDAV accounts authenticate through the same WebDAV mount entry, but their storage scope is the team; ordinary members can manage only accounts they created, while team owner / admin users can manage all accounts in the team
  • archive extraction and compression create background tasks rather than blocking synchronously
  • target_folder_id = null defaults to source-folder or common-parent behavior just like personal space

POST /teams/{team_id}/files/{id}/resource-handle reuses the personal file purpose, delivery-mode, representation, and response contract. Its identity.scope is team, and its request.url uses the team-scoped path. See Files resource handle for the complete contract.