通过 Maton 网关访问 Dropbox 文件、文件夹与元数据,OAuth 由网关托管。
文档
dropbox-business
试用通过托管 OAuth 管理 Dropbox Business 团队,默认只读,所有写入需用户确认。
它能做什么
通过托管 OAuth 网关访问 Dropbox Business API。可管理团队成员、群组、团队文件夹、设备、审计日志、关联应用、共享以及文件请求。通过 Dropbox-API-Select-User 头可访问指定成员的文件与共享文件夹。网关将请求代理到 api.dropboxapi.com,并自动注入 OAuth 令牌。绝大多数端点使用 POST(包括读取操作),请求体为 JSON,无参数时传 null。所有写入、删除以及成员文件访问操作,都必须由用户用具体资源标识符显式确认后方可执行。需要 Maton API 密钥与网络访问。
什么时候用它
- 列出、暂停或移除 Dropbox Business 团队成员
- 创建、更新或归档团队文件夹与群组
- 查看设备、关联应用与团队审计日志
- 出于明确业务需要访问指定成员的文件
技能文档
Dropbox Business
Access the Dropbox Business API with managed OAuth authentication. Manage team members, groups, team folders, devices, linked apps, audit logs, and access individual members' files. This is an admin-level integration — all write, delete, and member-file-access operations require explicit user approval.
Quick Start
# Get team info
python3 <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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://api.maton.ai/dropbox-business/2/{resource-path}
The gateway proxies requests to api.dropboxapi.com and automatically injects your OAuth token. Only the endpoints documented in this skill are supported — always use specific endpoint paths from the API Reference section below rather than constructing arbitrary paths.
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 (Maton Platform)
The following endpoints are Maton platform operations for managing the OAuth connection to Dropbox Business — they are not part of the Dropbox Business API itself. Only the endpoints listed in the API Reference section below are proxied to Dropbox.
List Connections
python3 <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://api.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://api.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": "{connection_id}",
"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://api.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 you have multiple connections, always include this header to ensure requests go to the intended account.
Security & Permissions
- Access is scoped to the connected Dropbox Business account via OAuth. The connection grants team-level admin access — only install if you trust this integration and intend to grant Dropbox Business admin access. Use the least-privileged Dropbox admin account available and review OAuth permissions before authorizing.
- Default to read-only operations. Always start by listing or retrieving resources to confirm identifiers before proposing any changes.
- All write operations require explicit user approval with specific identifiers. Before executing any create, update, or delete call:
- Retrieve and display the target resource (member email, group name, folder name/ID) so the user can verify.
- Clearly describe the intended effect (e.g., "This will permanently delete team folder 'Project X' (ID: 13646676387)").
- Wait for explicit user confirmation before proceeding.
- High-impact operations require extra caution. Actions such as removing members (
wipe_data), permanently deleting team folders, revoking device sessions, or modifying admin permissions must include a summary of irreversible consequences and require confirmation. - Prefer reversible actions. Use archive over permanent delete, suspend over remove, and always confirm
wipe_dataandkeep_accountflags with the user before member removal.
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:
{".tag": "email", "email": "user@company.com"}{".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"},
"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": ""}
}
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:
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": "..."
}
Member File Access
Privacy-sensitive admin capability. Accessing another member's files, shared folders, or file requests is a privileged operation that exposes personal and organizational data. Only use when the user explicitly requests it with a clear business justification (e.g., offboarding, compliance investigation, data recovery). Confirm the target member and scope with the user before executing. Do not browse member files proactively.
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://api.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))
EOF
List Member's Shared Folders
python3 <<'EOF'
import urllib.request, os, json
data = json.dumps({}).encode()
req = urllib.request.Request('https://api.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))
EOF
List Member's File Requests
python3 <<'EOF'
import urllib.request, os, json
data = json.dumps({}).encode()
req = urllib.request.Request('https://api.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://api.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://api.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://api.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, member removal) may be async; check corresponding job_status endpoints
- Select-User Header: Use
Dropbox-API-Select-Userwith team_member_id to access user-level endpoints (files, sharing) on behalf of members - System-Managed Groups: Groups like "Everyone at..." are system-managed and cannot be modified or deleted
- V2 Endpoints: Use V2 versions of endpoints (e.g.,
members/list_v2,members/get_info_v2) for enhanced responses with roles information - Deprecated Endpoints: The reports endpoints (
team/reports/get_activity,get_devices,get_membership,get_storage) are deprecated - 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"
}
}
Resources
常见问题
- 使用什么认证方式?
- OAuth 由 Maton 网关托管。你只需以 Bearer 方式提供 Maton API 密钥,网关在向 api.dropboxapi.com 代理请求时会自动注入 Dropbox 的 OAuth 令牌。若存在多个连接,可通过 Maton-Connection 头指定目标账号。
- 写入操作可以直接执行吗?
- 不可以。任何创建、更新、删除以及成员文件访问操作,都必须由用户用具体标识符确认后才能执行;默认应先通过读取或列表接口确认目标资源。
- 能否访问某个团队成员的文件?
- 可以,通过 Dropbox-API-Select-User 机制实现,但仅在用户明确提出并说明业务理由时使用——成员文件访问属于隐私敏感且高影响的操作。
- 支持哪些 API 端点?
- 仅代理 SKILL.md 中 API 参考列出的端点,不应自行拼凑任意路径;按文档使用对应的 POST 端点与 JSON 请求体。
相关技能
通过托管 OAuth 的代理调用 WhatsApp Business API,发送消息、管理模板与媒体。
通过托管 OAuth 网关调用 Box API,实现文件、文件夹与协作的读取与管理。
Google Business Profile API integration with managed OAuth. Read and manage business accounts and locations, business hours and attributes, reviews, photos, local posts, verification status, and performance metrics. Use this skill when users want to audit or update a business listing on Google.
Dropbox (dropbox.com). Use this skill for ANY Dropbox request — reading, creating, updating, and deleting data. Whenever a task involves Dropbox, use this sk...
通过托管 OAuth 网关调用 Square API 接口,内置连接管理能力。