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))
EOF
Base 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
- Sign in or create an account at maton.ai
- Go to maton.ai/settings
- 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))
EOF
Create 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")
EOF
Specifying 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
POST /dropbox-business/2/team/features/get_values
Content-Type: application/json
{
"features": [{".tag": "upload_api_rate_limit"}]
}
Team Members
List Members
POST /dropbox-business/2/team/members/list
Content-Type: application/json
{
"limit": 100
}
Response:
{
"members": [
{
"profile": {
"team_member_id": "dbmid:AAA...",
"account_id": "dbid:AAC...",
"email": "user@company.com",
"email_verified": true,
"status": {".tag": "active"},
"name": {
"given_name": "John",
"surname": "Doe",
"display_name": "John Doe"
},
"membership_type": {".tag": "full"},
"joined_on": "2026-01-15T10:00:00Z"
},
"role": {".tag": "team_admin"}
}
],
"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"}]
}
Alternative selectors:
{".tag": "team_member_id", "team_member_id": "dbmid:AAA..."}{".tag": "external_id", "external_id": "..."}
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"},
"keep_account": false
}
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
}
Delete Group
POST /dropbox-business/2/team/groups/delete
Content-Type: application/json
{
".tag": "group_id",
"group_id": "g:1d31f47b..."
}
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"
}
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..."
}
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
}
Revoke Linked App
POST /dropbox-business/2/team/linked_apps/revoke_linked_app
Content-Type: application/json
{
"app_id": "...",
"team_member_id": "dbmid:AAA..."
}
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:
apps- Third-party app eventscomments- Comment eventsdevices- Device eventsdomains- Domain eventsfile_operations- File and folder eventsfile_requests- File request eventsgroups- Group eventslogins- Login eventsmembers- Member eventspaper- Paper eventspasswords- Password eventsreports- Report eventssharing- Sharing eventsshowcase- Showcase eventssso- SSO eventsteam_folders- Team folder eventsteam_policies- Policy eventsteam_profile- Team profile eventstfa- Two-factor auth events
Continue Getting Events
POST /dropbox-business/2/team_log/get_events/continue
Content-Type: application/json
{
"cursor": "..."
}
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
- POST for Everything: Dropbox Business API uses POST for almost all endpoints, including read operations
- JSON Body Required: Even for endpoints with no parameters, send
nullas the request body - Tag Format: Many fields use
.tagto indicate the type (e.g.,{".tag": "email", "email": "..."}) - Member Selectors: Use
.tagwithemail,team_member_id, orexternal_idto identify members - Async Operations: Some operations (like group member changes) may be async; check
team/groups/job_status/get - IMPORTANT: When piping curl output to
jqor other commands, environment variables like$MATON_API_KEYmay not expand correctly in some shell environments
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"
}
}