Workspaces
Learn how to use workspaces to organize team documents and collaborate effectively.
Overview
Workspaces are shared spaces where team members can collaborate on documents. They provide:
- Shared document storage - All team documents in one place
- Team collaboration - Multiple users can access and edit
- Permission management - Control who can do what
- Organization - Organize documents by project or team
Create Workspace
Basic Workspace
curl -X POST https://api.archivus.app/api/v1/workspaces \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Tenant-Subdomain: your-tenant" \
-H "Content-Type: application/json" \
-d '{
"name": "Legal Team",
"description": "Legal documents and contracts"
}'
Response:
{
"id": "workspace_abc123",
"name": "Legal Team",
"description": "Legal documents and contracts",
"member_count": 1,
"document_count": 0,
"created_at": "2025-12-16T10:30:00Z"
}
Workspace with Settings
curl -X POST https://api.archivus.app/api/v1/workspaces \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Tenant-Subdomain: your-tenant" \
-H "Content-Type: application/json" \
-d '{
"name": "Sales Team",
"description": "Sales documents and proposals",
"settings": {
"default_permission": "view",
"allow_public_sharing": false
}
}'
Add Members
Invite User
curl -X POST https://api.archivus.app/api/v1/workspaces/workspace_abc123/members \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Tenant-Subdomain: your-tenant" \
-H "Content-Type: application/json" \
-d '{
"user_id": "user_xyz789",
"role": "member",
"permission": "edit"
}'
Invite by Email
curl -X POST https://api.archivus.app/api/v1/workspaces/workspace_abc123/invite \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Tenant-Subdomain: your-tenant" \
-H "Content-Type: application/json" \
-d '{
"email": "newmember@example.com",
"role": "member",
"permission": "view"
}'
Workspace Roles
Role Types
| Role | Can Manage Workspace | Can Add Members | Can Edit Documents | Can View Documents |
|---|---|---|---|---|
| owner | ||||
| admin | ||||
| member | ||||
| viewer |
Set Member Role
curl -X PUT https://api.archivus.app/api/v1/workspaces/workspace_abc123/members/user_xyz789 \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Tenant-Subdomain: your-tenant" \
-H "Content-Type: application/json" \
-d '{
"role": "admin"
}'
Code Examples
Python - Workspace Management
import requests
class ArchivusWorkspaces:
def __init__(self, api_key, tenant):
self.api_key = api_key
self.tenant = tenant
self.base_url = "https://api.archivus.app/api/v1"
self.headers = {
"Authorization": f"Bearer {api_key}",
"X-Tenant-Subdomain": tenant
}
def create(self, name, description=None, settings=None):
url = f"{self.base_url}/workspaces"
data = {"name": name}
if description:
data["description"] = description
if settings:
data["settings"] = settings
response = requests.post(url, headers=self.headers, json=data)
return response.json()
def list(self):
url = f"{self.base_url}/workspaces"
response = requests.get(url, headers=self.headers)
return response.json()
def get(self, workspace_id):
url = f"{self.base_url}/workspaces/{workspace_id}"
response = requests.get(url, headers=self.headers)
return response.json()
def add_member(self, workspace_id, user_id, role="member", permission="view"):
url = f"{self.base_url}/workspaces/{workspace_id}/members"
data = {
"user_id": user_id,
"role": role,
"permission": permission
}
response = requests.post(url, headers=self.headers, json=data)
return response.json()
def invite_by_email(self, workspace_id, email, role="member", permission="view"):
url = f"{self.base_url}/workspaces/{workspace_id}/invite"
data = {
"email": email,
"role": role,
"permission": permission
}
response = requests.post(url, headers=self.headers, json=data)
return response.json()
def list_members(self, workspace_id):
url = f"{self.base_url}/workspaces/{workspace_id}/members"
response = requests.get(url, headers=self.headers)
return response.json()
def update_member(self, workspace_id, user_id, role=None, permission=None):
url = f"{self.base_url}/workspaces/{workspace_id}/members/{user_id}"
data = {}
if role:
data["role"] = role
if permission:
data["permission"] = permission
response = requests.put(url, headers=self.headers, json=data)
return response.json()
def remove_member(self, workspace_id, user_id):
url = f"{self.base_url}/workspaces/{workspace_id}/members/{user_id}"
response = requests.delete(url, headers=self.headers)
return response.status_code == 200
# Usage
workspaces = ArchivusWorkspaces("YOUR_API_KEY", "your-tenant")
# Create workspace
workspace = workspaces.create(
"Legal Team",
description="Legal documents and contracts"
)
# Add member
workspaces.add_member(
workspace["id"],
"user_xyz789",
role="member",
permission="edit"
)
# Invite by email
workspaces.invite_by_email(
workspace["id"],
"newmember@example.com",
role="viewer",
permission="view"
)
# List members
members = workspaces.list_members(workspace["id"])
print(f"Workspace has {len(members['members'])} members")
JavaScript - Workspace Management
class ArchivusWorkspaces {
constructor(apiKey, tenant) {
this.apiKey = apiKey;
this.tenant = tenant;
this.baseURL = 'https://api.archivus.app/api/v1';
this.headers = {
'Authorization': `Bearer ${apiKey}`,
'X-Tenant-Subdomain': tenant
};
}
async create(name, description = null, settings = null) {
const data = { name };
if (description) data.description = description;
if (settings) data.settings = settings;
const response = await fetch(`${this.baseURL}/workspaces`, {
method: 'POST',
headers: { ...this.headers, 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
return response.json();
}
async list() {
const response = await fetch(`${this.baseURL}/workspaces`, {
headers: this.headers
});
return response.json();
}
async get(workspaceId) {
const response = await fetch(`${this.baseURL}/workspaces/${workspaceId}`, {
headers: this.headers
});
return response.json();
}
async addMember(workspaceId, userId, role = 'member', permission = 'view') {
const response = await fetch(`${this.baseURL}/workspaces/${workspaceId}/members`, {
method: 'POST',
headers: { ...this.headers, 'Content-Type': 'application/json' },
body: JSON.stringify({ user_id: userId, role, permission })
});
return response.json();
}
async inviteByEmail(workspaceId, email, role = 'member', permission = 'view') {
const response = await fetch(`${this.baseURL}/workspaces/${workspaceId}/invite`, {
method: 'POST',
headers: { ...this.headers, 'Content-Type': 'application/json' },
body: JSON.stringify({ email, role, permission })
});
return response.json();
}
async listMembers(workspaceId) {
const response = await fetch(`${this.baseURL}/workspaces/${workspaceId}/members`, {
headers: this.headers
});
return response.json();
}
async updateMember(workspaceId, userId, role = null, permission = null) {
const data = {};
if (role) data.role = role;
if (permission) data.permission = permission;
const response = await fetch(`${this.baseURL}/workspaces/${workspaceId}/members/${userId}`, {
method: 'PUT',
headers: { ...this.headers, 'Content-Type': 'application/json' },
body: JSON.stringify(data)
});
return response.json();
}
async removeMember(workspaceId, userId) {
const response = await fetch(`${this.baseURL}/workspaces/${workspaceId}/members/${userId}`, {
method: 'DELETE',
headers: this.headers
});
return response.ok;
}
}
// Usage
const workspaces = new ArchivusWorkspaces('YOUR_API_KEY', 'your-tenant');
// Create workspace
const workspace = await workspaces.create('Legal Team', 'Legal documents and contracts');
// Add member
await workspaces.addMember(workspace.id, 'user_xyz789', 'member', 'edit');
// Invite by email
await workspaces.inviteByEmail(workspace.id, 'newmember@example.com', 'viewer', 'view');
// List members
const members = await workspaces.listMembers(workspace.id);
console.log(`Workspace has ${members.members.length} members`);
Upload to Workspace
Upload documents directly to a workspace:
curl -X POST https://api.archivus.app/api/v1/documents/upload \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Tenant-Subdomain: your-tenant" \
-F "file=@document.pdf" \
-F "workspace_id=workspace_abc123"
List Workspace Documents
curl "https://api.archivus.app/api/v1/workspaces/workspace_abc123/documents" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Tenant-Subdomain: your-tenant"
Best Practices
Workspace Organization
- One workspace per team - Create separate workspaces for different teams
- Clear naming - Use descriptive names (e.g., “Legal Team”, “Sales Q4”)
- Set descriptions - Help team members understand workspace purpose
Member Management
- Start with viewers - Grant minimum necessary access
- Promote as needed - Upgrade permissions when required
- Regular audits - Review member list periodically
- Remove inactive - Remove members who no longer need access
Permissions
- Use roles - Assign appropriate roles (owner, admin, member, viewer)
- Document-level - Override workspace permissions for specific documents
- Review regularly - Audit permissions periodically
Next Steps
- Sharing & Permissions - Learn about document sharing
- API Reference - Complete workspaces API documentation
Questions? Check the FAQ or contact support@ubiship.com