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

  1. One workspace per team - Create separate workspaces for different teams
  2. Clear naming - Use descriptive names (e.g., “Legal Team”, “Sales Q4”)
  3. Set descriptions - Help team members understand workspace purpose

Member Management

  1. Start with viewers - Grant minimum necessary access
  2. Promote as needed - Upgrade permissions when required
  3. Regular audits - Review member list periodically
  4. Remove inactive - Remove members who no longer need access

Permissions

  1. Use roles - Assign appropriate roles (owner, admin, member, viewer)
  2. Document-level - Override workspace permissions for specific documents
  3. Review regularly - Audit permissions periodically

Next Steps


Questions? Check the FAQ or contact support@ubiship.com