Dropbox Business
name: dropbox-business
by byungkyu · published 2026-03-22
$ claw add gh:byungkyu/byungkyu-dropbox-business---
name: dropbox-business
description: |
Dropbox Business API integration with managed OAuth. Manage team members, groups, team folders, devices, and audit logs for Dropbox Business teams.
Use this skill when users want to administer Dropbox Business teams, manage members, create groups, handle team folders, or access audit logs.
For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).
Requires network access and valid Maton API key.
metadata:
author: maton
version: "1.0"
clawdbot:
emoji: 🧠
homepage: "https://maton.ai"
requires:
env:
- MATON_API_KEY
---
# Dropbox Business
Access the Dropbox Business API with managed OAuth authentication. Manage team administration including members, groups, team folders, devices, linked apps, and audit logs.
Quick Start
# Get team info
python3 <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://gateway.maton.ai/dropbox-business/2/team/get_info', data=b'null', method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFBase URL
https://gateway.maton.ai/dropbox-business/2/{endpoint-path}Replace `{endpoint-path}` with the actual Dropbox Business API endpoint path. The gateway proxies requests to `api.dropboxapi.com` and automatically injects your OAuth token.
**IMPORTANT:** Dropbox Business API uses **POST** for almost all endpoints, including read operations. Request bodies should be JSON (use `null` for endpoints with no parameters).
Authentication
All requests require the Maton API key in the Authorization header:
Authorization: Bearer $MATON_API_KEY**Environment Variable:** Set your API key as `MATON_API_KEY`:
export MATON_API_KEY="YOUR_API_KEY"Getting Your API Key
1. Sign in or create an account at [maton.ai](https://maton.ai)
2. Go to [maton.ai/settings](https://maton.ai/settings)
3. Copy your API key
Connection Management
Manage your Dropbox Business OAuth connections at `https://ctrl.maton.ai`.
List Connections
python3 <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=dropbox-business&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFCreate Connection
python3 <<'EOF'
import urllib.request, os, json
data = json.dumps({'app': 'dropbox-business'}).encode()
req = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF**Response:**
{
"connection_id": "09062f57-98a9-49f2-9e63-b2a7e03a9d7a",
"status": "PENDING",
"url": "https://connect.maton.ai/?session_token=...",
"app": "dropbox-business"
}Open the returned `url` in a browser to complete OAuth authorization.
Delete Connection
python3 <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
urllib.request.urlopen(req)
print("Deleted")
EOFSpecifying Connection
If you have multiple Dropbox Business connections, specify which one to use with the `Maton-Connection` header:
req.add_header('Maton-Connection', '{connection_id}')If omitted, the gateway uses the default (oldest) active connection.
API Reference
Team Information
#### Get Team Info
Retrieves information about the team including license usage and policies.
POST /dropbox-business/2/team/get_info
Content-Type: application/json
null**Response:**
{
"name": "My Company",
"team_id": "dbtid:AAC...",
"num_licensed_users": 10,
"num_provisioned_users": 5,
"num_used_licenses": 5,
"policies": {
"sharing": {...},
"emm_state": {".tag": "disabled"},
"office_addin": {".tag": "enabled"}
}
}#### Get Team Features
Query team feature availability.
POST /dropbox-business/2/team/features/get_values
Content-Type: application/json
{
"features": [
{".tag": "upload_api_rate_limit"},
{".tag": "has_team_shared_dropbox"},
{".tag": "has_team_file_events"},
{".tag": "has_team_selective_sync"}
]
}**Response:**
{
"values": [
{".tag": "upload_api_rate_limit", "upload_api_rate_limit": {".tag": "limit", "limit": 1000000000}},
{".tag": "has_team_shared_dropbox", "has_team_shared_dropbox": {".tag": "has_team_shared_dropbox", "has_team_shared_dropbox": false}},
{".tag": "has_team_file_events", "has_team_file_events": {".tag": "enabled", "enabled": true}},
{".tag": "has_team_selective_sync", "has_team_selective_sync": {".tag": "has_team_selective_sync", "has_team_selective_sync": true}}
]
}#### Get Authenticated Admin
Get info about the currently authenticated admin.
POST /dropbox-business/2/team/token/get_authenticated_admin
Content-Type: application/json
null**Response:**
{
"admin_profile": {
"team_member_id": "dbmid:AAA...",
"account_id": "dbid:AAC...",
"email": "admin@company.com",
"email_verified": true,
"status": {".tag": "active"},
"name": {"given_name": "Admin", "surname": "User", "display_name": "Admin User"},
"membership_type": {".tag": "full"},
"joined_on": "2026-02-15T08:27:35Z"
}
}Team Members
#### List Members
POST /dropbox-business/2/team/members/list
Content-Type: application/json
{
"limit": 100
}#### List Members (V2)
Returns members with roles information (recommended).
POST /dropbox-business/2/team/members/list_v2
Content-Type: application/json
{
"limit": 100,
"include_removed": false
}**Response:**
{
"members": [
{
"profile": {
"team_member_id": "dbmid:AAA...",
"account_id": "dbid:AAC...",
"email": "user@company.com",
"email_verified": true,
"secondary_emails": [],
"status": {".tag": "active"},
"name": {
"given_name": "John",
"surname": "Doe",
"familiar_name": "John",
"display_name": "John Doe",
"abbreviated_name": "JD"
},
"membership_type": {".tag": "full"},
"joined_on": "2026-01-15T10:00:00Z",
"groups": ["g:1d31f47b..."],
"member_folder_id": "13646219987",
"root_folder_id": "13650024947"
},
"roles": [
{
"role_id": "pid_dbtmr:...",
"name": "Team",
"description": "Manage everything and access all permissions"
}
]
}
],
"cursor": "AAQ...",
"has_more": false
}#### Continue Listing Members
POST /dropbox-business/2/team/members/list/continue
Content-Type: application/json
{
"cursor": "AAQ..."
}#### Get Member Info
POST /dropbox-business/2/team/members/get_info
Content-Type: application/json
{
"members": [{".tag": "email", "email": "user@company.com"}]
}#### Get Member Info (V2)
Returns member with roles information (recommended).
POST /dropbox-business/2/team/members/get_info_v2
Content-Type: application/json
{
"members": [{".tag": "email", "email": "user@company.com"}]
}**Response:**
{
"members_info": [
{
".tag": "member_info",
"profile": {
"team_member_id": "dbmid:AAA...",
"email": "user@company.com",
"secondary_emails": [],
"status": {".tag": "active"},
"name": {...},
"groups": ["g:..."]
},
"roles": [
{"role_id": "...", "name": "Team", "description": "..."}
]
}
]
}**Member Selectors:**
#### Add Member
POST /dropbox-business/2/team/members/add
Content-Type: application/json
{
"new_members": [
{
"member_email": "newuser@company.com",
"member_given_name": "Jane",
"member_surname": "Smith",
"send_welcome_email": true,
"role": {".tag": "member_only"}
}
]
}#### Suspend Member
POST /dropbox-business/2/team/members/suspend
Content-Type: application/json
{
"user": {".tag": "email", "email": "user@company.com"},
"wipe_data": false
}#### Unsuspend Member
POST /dropbox-business/2/team/members/unsuspend
Content-Type: application/json
{
"user": {".tag": "email", "email": "user@company.com"}
}#### Remove Member
POST /dropbox-business/2/team/members/remove
Content-Type: application/json
{
"user": {".tag": "email", "email": "user@company.com"},
"wipe_data": true,
"transfer_dest_id": {".tag": "email", "email": "admin@company.com"},
"transfer_admin_id": {".tag": "email", "email": "admin@company.com"},
"keep_account": false
}#### Check Remove Job Status
POST /dropbox-business/2/team/members/remove/job_status/get
Content-Type: application/json
{
"async_job_id": "dbjid:..."
}#### Send Welcome Email
Send or resend welcome email to pending members.
POST /dropbox-business/2/team/members/send_welcome_email
Content-Type: application/json
{".tag": "email", "email": "pending@company.com"}#### Set Member Profile (V2)
Update member profile information.
POST /dropbox-business/2/team/members/set_profile_v2
Content-Type: application/json
{
"user": {".tag": "team_member_id", "team_member_id": "dbmid:AAA..."},
"new_given_name": "John",
"new_surname": "Smith",
"new_external_id": "emp-123"
}#### Delete Profile Photo (V2)
POST /dropbox-business/2/team/members/delete_profile_photo_v2
Content-Type: application/json
{
"user": {".tag": "team_member_id", "team_member_id": "dbmid:AAA..."}
}#### Set Profile Photo (V2)
POST /dropbox-business/2/team/members/set_profile_photo_v2
Content-Type: application/json
{
"user": {".tag": "team_member_id", "team_member_id": "dbmid:AAA..."},
"photo": {".tag": "base64_data", "base64_data": "<base64-encoded-image>"}
}#### Set Admin Permissions (V2)
Change a member's admin role.
POST /dropbox-business/2/team/members/set_admin_permissions_v2
Content-Type: application/json
{
"user": {".tag": "email", "email": "user@company.com"},
"new_roles": ["pid_dbtmr:..."]
}Secondary Emails
#### Add Secondary Emails
POST /dropbox-business/2/team/members/secondary_emails/add
Content-Type: application/json
{
"new_secondary_emails": [
{
"user": {".tag": "email", "email": "user@company.com"},
"secondary_emails": ["alias@company.com"]
}
]
}#### Delete Secondary Emails
POST /dropbox-business/2/team/members/secondary_emails/delete
Content-Type: application/json
{
"emails_to_delete": [
{
"user": {".tag": "email", "email": "user@company.com"},
"secondary_emails": ["alias@company.com"]
}
]
}#### Resend Verification Emails
POST /dropbox-business/2/team/members/secondary_emails/resend_verification_emails
Content-Type: application/json
{
"emails_to_resend": [
{
"user": {".tag": "email", "email": "user@company.com"},
"secondary_emails": ["alias@company.com"]
}
]
}Groups
#### List Groups
POST /dropbox-business/2/team/groups/list
Content-Type: application/json
{
"limit": 100
}**Response:**
{
"groups": [
{
"group_name": "Engineering",
"group_id": "g:1d31f47b...",
"member_count": 5,
"group_management_type": {".tag": "company_managed"}
}
],
"cursor": "AAZ...",
"has_more": false
}#### Get Group Info
POST /dropbox-business/2/team/groups/get_info
Content-Type: application/json
{
".tag": "group_ids",
"group_ids": ["g:1d31f47b..."]
}#### Create Group
POST /dropbox-business/2/team/groups/create
Content-Type: application/json
{
"group_name": "Marketing Team",
"group_management_type": {".tag": "company_managed"}
}#### Add Members to Group
POST /dropbox-business/2/team/groups/members/add
Content-Type: application/json
{
"group": {".tag": "group_id", "group_id": "g:1d31f47b..."},
"members": [
{
"user": {".tag": "email", "email": "user@company.com"},
"access_type": {".tag": "member"}
}
],
"return_members": true
}#### Remove Members from Group
POST /dropbox-business/2/team/groups/members/remove
Content-Type: application/json
{
"group": {".tag": "group_id", "group_id": "g:1d31f47b..."},
"users": [{".tag": "email", "email": "user@company.com"}],
"return_members": true
}#### List Group Members
POST /dropbox-business/2/team/groups/members/list
Content-Type: application/json
{
"group": {".tag": "group_id", "group_id": "g:1d31f47b..."},
"limit": 100
}**Response:**
{
"members": [
{
"profile": {
"team_member_id": "dbmid:AAA...",
"email": "user@company.com",
"status": {".tag": "active"},
"name": {...}
},
"access_type": {".tag": "member"}
}
],
"cursor": "...",
"has_more": false
}#### Update Group
POST /dropbox-business/2/team/groups/update
Content-Type: application/json
{
"group": {".tag": "group_id", "group_id": "g:1d31f47b..."},
"new_group_name": "Updated Name",
"new_group_external_id": "ext-123"
}**Note:** System-managed groups (like "Everyone at...") cannot be updated.
#### Delete Group
POST /dropbox-business/2/team/groups/delete
Content-Type: application/json
{
".tag": "group_id",
"group_id": "g:1d31f47b..."
}#### Check Group Job Status
For async group operations.
POST /dropbox-business/2/team/groups/job_status/get
Content-Type: application/json
{
"async_job_id": "dbjid:..."
}Team Folders
#### List Team Folders
POST /dropbox-business/2/team/team_folder/list
Content-Type: application/json
{
"limit": 100
}**Response:**
{
"team_folders": [
{
"team_folder_id": "13646676387",
"name": "Company Documents",
"status": {".tag": "active"},
"is_team_shared_dropbox": false,
"sync_setting": {".tag": "default"}
}
],
"cursor": "AAb...",
"has_more": false
}#### Get Team Folder Info
POST /dropbox-business/2/team/team_folder/get_info
Content-Type: application/json
{
"team_folder_ids": ["13646676387"]
}#### Create Team Folder
POST /dropbox-business/2/team/team_folder/create
Content-Type: application/json
{
"name": "New Team Folder",
"sync_setting": {".tag": "default"}
}#### Rename Team Folder
POST /dropbox-business/2/team/team_folder/rename
Content-Type: application/json
{
"team_folder_id": "13646676387",
"name": "Renamed Folder"
}#### Archive Team Folder
POST /dropbox-business/2/team/team_folder/archive
Content-Type: application/json
{
"team_folder_id": "13646676387",
"force_async_off": false
}#### Permanently Delete Team Folder
POST /dropbox-business/2/team/team_folder/permanently_delete
Content-Type: application/json
{
"team_folder_id": "13646676387"
}#### Activate Team Folder
Activate an archived team folder.
POST /dropbox-business/2/team/team_folder/activate
Content-Type: application/json
{
"team_folder_id": "13646676387"
}#### Update Sync Settings
POST /dropbox-business/2/team/team_folder/update_sync_settings
Content-Type: application/json
{
"team_folder_id": "13646676387",
"sync_setting": {".tag": "default"}
}**Response:**
{
"team_folder_id": "13646676387",
"name": "Team Folder",
"status": {".tag": "active"},
"is_team_shared_dropbox": false,
"sync_setting": {".tag": "default"},
"content_sync_settings": []
}Namespaces
#### List Namespaces
POST /dropbox-business/2/team/namespaces/list
Content-Type: application/json
{
"limit": 100
}**Response:**
{
"namespaces": [
{
"name": "Team Folder",
"namespace_id": "13646676387",
"namespace_type": {".tag": "team_folder"}
},
{
"name": "Root",
"namespace_id": "13646219987",
"namespace_type": {".tag": "team_member_folder"},
"team_member_id": "dbmid:AAA..."
}
],
"cursor": "AAY...",
"has_more": false
}Devices
#### List All Members' Devices
POST /dropbox-business/2/team/devices/list_members_devices
Content-Type: application/json
{}**Response:**
{
"devices": [
{
"team_member_id": "dbmid:AAA...",
"web_sessions": [
{
"session_id": "dbwsid:...",
"ip_address": "192.168.1.1",
"country": "United States",
"created": "2026-02-15T08:26:33Z",
"user_agent": "Mozilla/5.0...",
"os": "Mac OS X",
"browser": "Chrome"
}
],
"desktop_clients": [],
"mobile_clients": []
}
],
"has_more": false
}#### List Member Devices
POST /dropbox-business/2/team/devices/list_member_devices
Content-Type: application/json
{
"team_member_id": "dbmid:AAA..."
}#### Revoke Device Session
POST /dropbox-business/2/team/devices/revoke_device_session
Content-Type: application/json
{
".tag": "web_session",
"session_id": "dbwsid:...",
"team_member_id": "dbmid:AAA..."
}#### Revoke Device Sessions (Batch)
POST /dropbox-business/2/team/devices/revoke_device_session_batch
Content-Type: application/json
{
"revoke_devices": [
{".tag": "web_session", "session_id": "dbwsid:...", "team_member_id": "dbmid:AAA..."}
]
}Linked Apps
#### List Members' Linked Apps
POST /dropbox-business/2/team/linked_apps/list_members_linked_apps
Content-Type: application/json
{}**Response:**
{
"apps": [
{
"team_member_id": "dbmid:AAA...",
"linked_api_apps": [
{
"app_id": "...",
"app_name": "Third Party App",
"linked": "2026-01-15T10:00:00Z"
}
]
}
],
"has_more": false
}#### List All Team Linked Apps
POST /dropbox-business/2/team/linked_apps/list_team_linked_apps
Content-Type: application/json
{}#### Revoke Linked App
POST /dropbox-business/2/team/linked_apps/revoke_linked_app
Content-Type: application/json
{
"app_id": "...",
"team_member_id": "dbmid:AAA..."
}Member Space Limits
#### Get Custom Quotas
POST /dropbox-business/2/team/member_space_limits/get_custom_quota
Content-Type: application/json
{
"users": [{".tag": "email", "email": "user@company.com"}]
}#### Set Custom Quotas
POST /dropbox-business/2/team/member_space_limits/set_custom_quota
Content-Type: application/json
{
"users_and_quotas": [
{
"user": {".tag": "email", "email": "user@company.com"},
"quota_gb": 100
}
]
}#### List Excluded Users
List users excluded from automatic backup.
POST /dropbox-business/2/team/member_space_limits/excluded_users/list
Content-Type: application/json
{}Sharing Allowlist
#### List Sharing Allowlist
POST /dropbox-business/2/team/sharing_allowlist/list
Content-Type: application/json
{}**Response:**
{
"domains": [],
"emails": [],
"cursor": "...",
"has_more": false
}#### Add to Sharing Allowlist
POST /dropbox-business/2/team/sharing_allowlist/add
Content-Type: application/json
{
"domains": ["partner.com"],
"emails": ["external@client.com"]
}#### Continue Listing Allowlist
POST /dropbox-business/2/team/sharing_allowlist/list/continue
Content-Type: application/json
{
"cursor": "..."
}Audit Log (Team Log)
#### Get Events
POST /dropbox-business/2/team_log/get_events
Content-Type: application/json
{
"limit": 100,
"category": {".tag": "members"}
}**Response:**
{
"events": [
{
"timestamp": "2026-02-15T08:27:36Z",
"event_category": {".tag": "members"},
"actor": {
".tag": "admin",
"admin": {
"account_id": "dbid:AAC...",
"display_name": "Admin User",
"email": "admin@company.com"
}
},
"event_type": {
".tag": "member_add_name",
"description": "Added team member name"
},
"details": {...}
}
],
"cursor": "...",
"has_more": false
}**Event Categories:**
#### Continue Getting Events
POST /dropbox-business/2/team_log/get_events/continue
Content-Type: application/json
{
"cursor": "..."
}Member File Access
To access files on behalf of a team member, use the `Dropbox-API-Select-User` header with the member's team_member_id. This allows admin applications to access member files, shared folders, and file requests.
List Member's Files
python3 <<'EOF'
import urllib.request, os, json
data = json.dumps({"path": ""}).encode()
req = urllib.request.Request('https://gateway.maton.ai/dropbox-business/2/files/list_folder', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
req.add_header('Dropbox-API-Select-User', 'dbmid:AAA...')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFList Member's Shared Folders
python3 <<'EOF'
import urllib.request, os, json
data = json.dumps({}).encode()
req = urllib.request.Request('https://gateway.maton.ai/dropbox-business/2/sharing/list_folders', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
req.add_header('Dropbox-API-Select-User', 'dbmid:AAA...')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOFList Member's File Requests
python3 <<'EOF'
import urllib.request, os, json
data = json.dumps({}).encode()
req = urllib.request.Request('https://gateway.maton.ai/dropbox-business/2/file_requests/list_v2', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
req.add_header('Dropbox-API-Select-User', 'dbmid:AAA...')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF**Note:** The `Dropbox-API-Select-User` header requires the `team_data.member` scope. Use this to operate on user-level endpoints (files, sharing, etc.) on behalf of team members.
Pagination
Dropbox Business uses cursor-based pagination. List endpoints return a `cursor` and `has_more` field.
**Initial Request:**
POST /dropbox-business/2/team/members/list
Content-Type: application/json
{
"limit": 100
}**Response:**
{
"members": [...],
"cursor": "AAQ...",
"has_more": true
}**Continue with cursor:**
POST /dropbox-business/2/team/members/list/continue
Content-Type: application/json
{
"cursor": "AAQ..."
}Code Examples
JavaScript
async function listTeamMembers() {
const response = await fetch(
'https://gateway.maton.ai/dropbox-business/2/team/members/list',
{
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ limit: 100 })
}
);
return await response.json();
}Python
import os
import json
import urllib.request
def list_team_members():
url = 'https://gateway.maton.ai/dropbox-business/2/team/members/list'
data = json.dumps({'limit': 100}).encode()
req = urllib.request.Request(url, data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
return json.load(urllib.request.urlopen(req))
def get_team_info():
url = 'https://gateway.maton.ai/dropbox-business/2/team/get_info'
req = urllib.request.Request(url, data=b'null', method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
return json.load(urllib.request.urlopen(req))Notes
Error Handling
| Status | Meaning |
|--------|---------|
| 400 | Bad request or invalid parameters |
| 401 | Invalid API key or expired token |
| 403 | Permission denied (requires team admin) |
| 404 | Resource not found |
| 409 | Conflict (e.g., member already exists) |
| 429 | Rate limited |
| 4xx/5xx | Passthrough error from Dropbox API |
Response Error Format
{
"error_summary": "member_not_found/...",
"error": {
".tag": "member_not_found"
}
}Resources
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...