{"id":"793c8b61-0de2-420f-99a1-2aea8456565f","entityType":"agent","slug":"clawhub-byungkyu-dropbox-api","name":"Dropbox","canonicalUrl":"https://www.xpersona.co/agent/clawhub-byungkyu-dropbox-api","canonicalPath":"/agent/clawhub-byungkyu-dropbox-api","generatedAt":"2026-10-09T09:36:35.731Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"description":"Dropbox API integration with managed OAuth. Files, folders, search, metadata, and cloud storage. Use this skill when users want to manage files and folders in Dropbox, search content, or work with file metadata. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Requires network access and valid Maton API key. Skill: Dropbox Owner: byungkyu Summary: Dropbox API integration with managed OAuth. Files, folders, search, metadata, and cloud storage. Use this skill when users want to manage files and folders in Dropbox, search content, or work with file metadata. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Requires network access and valid Maton API key. Tags: latest:1.0.2 Ver","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 3.1K downloads reported by the source. Last updated 4/15/2026.","installCommand":"clawhub skill install kn75240wq8bnv2qm2xgry748jd80b9r0:dropbox-api","sourceUrl":"https://clawhub.ai/byungkyu/dropbox-api","homepage":"https://clawhub.ai/byungkyu/dropbox-api","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/byungkyu/dropbox-api","kind":"source"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Dropbox API integration with managed OAuth. Files, folders, search, metadata, and cloud storage. Use this skill when users want to manage files and folders in D"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No protocol or capability metadata is available."},"protocols":[],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":0,"capabilityMatrix":{"rows":[],"flattenedTokens":""}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"stars":null,"forks":null,"downloads":3110,"packageName":null,"latestVersion":"1.0.2","tractionLabel":"3.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-02-28T17:59:01.116Z","emptyReason":null},"lastUpdatedAt":"2026-04-15T00:45:39.800Z","lastCrawledAt":"2026-02-28T17:59:01.116Z","lastIndexedAt":null,"nextCrawlAt":"2026-03-01T17:59:01.116Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.2","createdAt":"2026-02-10T20:23:51.056Z","changelog":"- Added new metadata field in SKILL.md under \"metadata\", including a \"clawdbot\" section with an emoji and environment variable requirements. - No code changes were detected; this update is documentation/metadata only. - Skill functionality and usage remain unchanged.","fileCount":3,"zipByteSize":5767},{"version":"1.0.1","createdAt":"2026-02-10T20:10:07.700Z","changelog":"Version 1.0.1 of the dropbox-api skill - No file changes were detected in this release. - No updates, new features, or bug fixes introduced.","fileCount":3,"zipByteSize":5724},{"version":"1.0.0","createdAt":"2026-02-10T02:14:52.647Z","changelog":"- Major update: Migrated Dropbox skill to a managed API gateway solution by Maton. - Replaced custom implementation with proxy endpoints at https://gateway.maton.ai, requiring a Maton API key for authentication. - All CLI, MCP server, and SwiftyDropbox SDK-specific content removed in favor of HTTP API usage with ready-to-run Python code snippets. - Added instructions for OAuth connection management through Maton’s connection dashboard. - Provided clear API reference, example requests, and details on connection headers for multi-account usage. - Updated documentation to focus on API integration, eliminating local build/setup steps and rclone sections.","fileCount":null,"zipByteSize":null}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install kn75240wq8bnv2qm2xgry748jd80b9r0:dropbox-api","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-dropbox-api/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-dropbox-api/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-dropbox-api/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-dropbox-api/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-dropbox-api/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-dropbox-api/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":[]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-09T09:36:35.731Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-dropbox-api/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-dropbox-api/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-dropbox-api/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-byungkyu-dropbox-api/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":null},"readme":"Skill: Dropbox\n\nOwner: byungkyu\n\nSummary: Dropbox API integration with managed OAuth. Files, folders, search, metadata, and cloud storage.\nUse this skill when users want to manage files and folders in Dropbox, search content, or work with file metadata.\nFor other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).\nRequires network access and valid Maton API key.\n\nTags: latest:1.0.2\n\nVersion history:\n\nv1.0.2 | 2026-02-10T20:23:51.056Z | user\n\n- Added new metadata field in SKILL.md under \"metadata\", including a \"clawdbot\" section with an emoji and environment variable requirements.\n- No code changes were detected; this update is documentation/metadata only.\n- Skill functionality and usage remain unchanged.\n\nv1.0.1 | 2026-02-10T20:10:07.700Z | user\n\nVersion 1.0.1 of the dropbox-api skill\n\n- No file changes were detected in this release.\n- No updates, new features, or bug fixes introduced.\n\nv1.0.0 | 2026-02-10T02:14:52.647Z | user\n\n- Major update: Migrated Dropbox skill to a managed API gateway solution by Maton.\n- Replaced custom implementation with proxy endpoints at https://gateway.maton.ai, requiring a Maton API key for authentication.\n- All CLI, MCP server, and SwiftyDropbox SDK-specific content removed in favor of HTTP API usage with ready-to-run Python code snippets.\n- Added instructions for OAuth connection management through Maton’s connection dashboard.\n- Provided clear API reference, example requests, and details on connection headers for multi-account usage.\n- Updated documentation to focus on API integration, eliminating local build/setup steps and rclone sections.\n\nArchive index:\n\nArchive v1.0.2: 3 files, 5767 bytes\n\nFiles: LICENSE.txt (1072b), SKILL.md (17256b), _meta.json (130b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: dropbox\ndescription: |\n  Dropbox API integration with managed OAuth. Files, folders, search, metadata, and cloud storage.\n  Use this skill when users want to manage files and folders in Dropbox, search content, or work with file metadata.\n  For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).\n  Requires network access and valid Maton API key.\nmetadata:\n  author: maton\n  version: \"1.0\"\n  clawdbot:\n    emoji: 🧠\n    requires:\n      env:\n        - MATON_API_KEY\n---\n\n# Dropbox\n\nAccess the Dropbox API with managed OAuth authentication. Manage files and folders, search content, retrieve metadata, and work with file revisions.\n\n## Quick Start\n\n```bash\n# List files in root folder\npython <<'EOF'\nimport urllib.request, os, json\ndata = json.dumps({\"path\": \"\"}).encode()\nreq = urllib.request.Request('https://gateway.maton.ai/dropbox/2/files/list_folder', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application/json')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n## Base URL\n\n```\nhttps://gateway.maton.ai/dropbox/2/{endpoint}\n```\n\nThe gateway proxies requests to `api.dropboxapi.com` and automatically injects your OAuth token.\n\n**Important:** Dropbox API v2 uses POST for all endpoints with JSON request bodies.\n\n## Authentication\n\nAll requests require the Maton API key in the Authorization header:\n\n```\nAuthorization: Bearer $MATON_API_KEY\n```\n\n**Environment Variable:** Set your API key as `MATON_API_KEY`:\n\n```bash\nexport MATON_API_KEY=\"YOUR_API_KEY\"\n```\n\n### Getting Your API Key\n\n1. Sign in or create an account at [maton.ai](https://maton.ai)\n2. Go to [maton.ai/settings](https://maton.ai/settings)\n3. Copy your API key\n\n## Connection Management\n\nManage your Dropbox OAuth connections at `https://ctrl.maton.ai`.\n\n### List Connections\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections?app=dropbox&status=ACTIVE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Create Connection\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'app': 'dropbox'}).encode()\nreq = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application/json')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Get Connection\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n**Response:**\n```json\n{\n  \"connection\": {\n    \"connection_id\": \"1efbb655-88e9-4a23-ad3b-f3e19cbff279\",\n    \"status\": \"ACTIVE\",\n    \"creation_time\": \"2026-02-09T23:34:49.818074Z\",\n    \"last_updated_time\": \"2026-02-09T23:37:09.697559Z\",\n    \"url\": \"https://connect.maton.ai/?session_token=...\",\n    \"app\": \"dropbox\",\n    \"metadata\": {}\n  }\n}\n```\n\nOpen the returned `url` in a browser to complete OAuth authorization.\n\n### Delete Connection\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Specifying Connection\n\nIf you have multiple Dropbox connections, specify which one to use with the `Maton-Connection` header:\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\ndata = json.dumps({\"path\": \"\"}).encode()\nreq = urllib.request.Request('https://gateway.maton.ai/dropbox/2/files/list_folder', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application/json')\nreq.add_header('Maton-Connection', '1efbb655-88e9-4a23-ad3b-f3e19cbff279')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\nIf omitted, the gateway uses the default (oldest) active connection.\n\n## API Reference\n\n### Users\n\n#### Get Current Account\n\n```bash\nPOST /dropbox/2/users/get_current_account\nContent-Type: application/json\n\nnull\n```\n\n**Response:**\n```json\n{\n  \"account_id\": \"dbid:AAA-AdT84WzkyLw5s590DbYF1nGomiAoO8I\",\n  \"name\": {\n    \"given_name\": \"John\",\n    \"surname\": \"Doe\",\n    \"familiar_name\": \"John\",\n    \"display_name\": \"John Doe\",\n    \"abbreviated_name\": \"JD\"\n  },\n  \"email\": \"john@example.com\",\n  \"email_verified\": true,\n  \"disabled\": false,\n  \"country\": \"US\",\n  \"locale\": \"en\",\n  \"account_type\": {\n    \".tag\": \"basic\"\n  },\n  \"root_info\": {\n    \".tag\": \"user\",\n    \"root_namespace_id\": \"11989877987\",\n    \"home_namespace_id\": \"11989877987\"\n  }\n}\n```\n\n#### Get Space Usage\n\n```bash\nPOST /dropbox/2/users/get_space_usage\nContent-Type: application/json\n\nnull\n```\n\n**Response:**\n```json\n{\n  \"used\": 538371,\n  \"allocation\": {\n    \".tag\": \"individual\",\n    \"allocated\": 2147483648\n  }\n}\n```\n\n### Files and Folders\n\n#### List Folder\n\n```bash\nPOST /dropbox/2/files/list_folder\nContent-Type: application/json\n\n{\n  \"path\": \"\",\n  \"recursive\": false,\n  \"include_deleted\": false,\n  \"include_has_explicit_shared_members\": false\n}\n```\n\nUse empty string `\"\"` for the root folder.\n\n**Optional Parameters:**\n- `recursive` - Include contents of subdirectories (default: false)\n- `include_deleted` - Include deleted files (default: false)\n- `include_media_info` - Include media info for photos/videos\n- `limit` - Maximum entries per response (1-2000)\n\n**Response:**\n```json\n{\n  \"entries\": [\n    {\n      \".tag\": \"file\",\n      \"name\": \"document.pdf\",\n      \"path_lower\": \"/document.pdf\",\n      \"path_display\": \"/document.pdf\",\n      \"id\": \"id:Awe3Av8A8YYAAAAAAAAABQ\",\n      \"client_modified\": \"2026-02-09T19:58:12Z\",\n      \"server_modified\": \"2026-02-09T19:58:13Z\",\n      \"rev\": \"016311c063b4f8700000002caa704e3\",\n      \"size\": 538371,\n      \"is_downloadable\": true,\n      \"content_hash\": \"6542845d7b65ffc5358ebaa6981d991bab9fda194afa48bd727fcbe9e4a3158b\"\n    },\n    {\n      \".tag\": \"folder\",\n      \"name\": \"Documents\",\n      \"path_lower\": \"/documents\",\n      \"path_display\": \"/Documents\",\n      \"id\": \"id:Awe3Av8A8YYAAAAAAAAABw\"\n    }\n  ],\n  \"cursor\": \"AAVqv-MUYFlM98b1QpFK6YaYC8L1s39lWjqbeqgWu4un...\",\n  \"has_more\": false\n}\n```\n\n#### Continue Listing Folder\n\n```bash\nPOST /dropbox/2/files/list_folder/continue\nContent-Type: application/json\n\n{\n  \"cursor\": \"AAVqv-MUYFlM98b1QpFK6YaYC8L1s39lWjqbeqgWu4un...\"\n}\n```\n\nUse when `has_more` is true in the previous response.\n\n#### Get Metadata\n\n```bash\nPOST /dropbox/2/files/get_metadata\nContent-Type: application/json\n\n{\n  \"path\": \"/document.pdf\",\n  \"include_media_info\": false,\n  \"include_deleted\": false,\n  \"include_has_explicit_shared_members\": false\n}\n```\n\n**Response:**\n```json\n{\n  \".tag\": \"file\",\n  \"name\": \"document.pdf\",\n  \"path_lower\": \"/document.pdf\",\n  \"path_display\": \"/document.pdf\",\n  \"id\": \"id:Awe3Av8A8YYAAAAAAAAABQ\",\n  \"client_modified\": \"2026-02-09T19:58:12Z\",\n  \"server_modified\": \"2026-02-09T19:58:13Z\",\n  \"rev\": \"016311c063b4f8700000002caa704e3\",\n  \"size\": 538371,\n  \"is_downloadable\": true,\n  \"content_hash\": \"6542845d7b65ffc5358ebaa6981d991bab9fda194afa48bd727fcbe9e4a3158b\"\n}\n```\n\n#### Create Folder\n\n```bash\nPOST /dropbox/2/files/create_folder_v2\nContent-Type: application/json\n\n{\n  \"path\": \"/New Folder\",\n  \"autorename\": false\n}\n```\n\n**Response:**\n```json\n{\n  \"metadata\": {\n    \"name\": \"New Folder\",\n    \"path_lower\": \"/new folder\",\n    \"path_display\": \"/New Folder\",\n    \"id\": \"id:Awe3Av8A8YYAAAAAAAAABw\"\n  }\n}\n```\n\n#### Copy File or Folder\n\n```bash\nPOST /dropbox/2/files/copy_v2\nContent-Type: application/json\n\n{\n  \"from_path\": \"/source/file.pdf\",\n  \"to_path\": \"/destination/file.pdf\",\n  \"autorename\": false\n}\n```\n\n**Response:**\n```json\n{\n  \"metadata\": {\n    \".tag\": \"file\",\n    \"name\": \"file.pdf\",\n    \"path_lower\": \"/destination/file.pdf\",\n    \"path_display\": \"/destination/file.pdf\",\n    \"id\": \"id:Awe3Av8A8YYAAAAAAAAACA\"\n  }\n}\n```\n\n#### Move File or Folder\n\n```bash\nPOST /dropbox/2/files/move_v2\nContent-Type: application/json\n\n{\n  \"from_path\": \"/old/location/file.pdf\",\n  \"to_path\": \"/new/location/file.pdf\",\n  \"autorename\": false\n}\n```\n\n**Response:**\n```json\n{\n  \"metadata\": {\n    \".tag\": \"file\",\n    \"name\": \"file.pdf\",\n    \"path_lower\": \"/new/location/file.pdf\",\n    \"path_display\": \"/new/location/file.pdf\",\n    \"id\": \"id:Awe3Av8A8YYAAAAAAAAACA\"\n  }\n}\n```\n\n#### Delete File or Folder\n\n```bash\nPOST /dropbox/2/files/delete_v2\nContent-Type: application/json\n\n{\n  \"path\": \"/file-to-delete.pdf\"\n}\n```\n\n**Response:**\n```json\n{\n  \"metadata\": {\n    \".tag\": \"file\",\n    \"name\": \"file-to-delete.pdf\",\n    \"path_lower\": \"/file-to-delete.pdf\",\n    \"path_display\": \"/file-to-delete.pdf\",\n    \"id\": \"id:Awe3Av8A8YYAAAAAAAAABQ\"\n  }\n}\n```\n\n#### Get Temporary Download Link\n\n```bash\nPOST /dropbox/2/files/get_temporary_link\nContent-Type: application/json\n\n{\n  \"path\": \"/document.pdf\"\n}\n```\n\n**Response:**\n```json\n{\n  \"metadata\": {\n    \"name\": \"document.pdf\",\n    \"path_lower\": \"/document.pdf\",\n    \"path_display\": \"/document.pdf\",\n    \"id\": \"id:Awe3Av8A8YYAAAAAAAAABQ\",\n    \"size\": 538371,\n    \"is_downloadable\": true\n  },\n  \"link\": \"https://uc785ee484c03b6556c091ea4491.dl.dropboxusercontent.com/cd/0/get/...\"\n}\n```\n\nThe link is valid for 4 hours.\n\n### Search\n\n#### Search Files\n\n```bash\nPOST /dropbox/2/files/search_v2\nContent-Type: application/json\n\n{\n  \"query\": \"document\",\n  \"options\": {\n    \"path\": \"\",\n    \"max_results\": 100,\n    \"file_status\": \"active\",\n    \"filename_only\": false\n  }\n}\n```\n\n**Response:**\n```json\n{\n  \"has_more\": false,\n  \"matches\": [\n    {\n      \"highlight_spans\": [],\n      \"match_type\": {\n        \".tag\": \"filename\"\n      },\n      \"metadata\": {\n        \".tag\": \"metadata\",\n        \"metadata\": {\n          \".tag\": \"file\",\n          \"name\": \"document.pdf\",\n          \"path_display\": \"/document.pdf\",\n          \"path_lower\": \"/document.pdf\",\n          \"id\": \"id:Awe3Av8A8YYAAAAAAAAABw\"\n        }\n      }\n    }\n  ]\n}\n```\n\n#### Continue Search\n\n```bash\nPOST /dropbox/2/files/search/continue_v2\nContent-Type: application/json\n\n{\n  \"cursor\": \"...\"\n}\n```\n\n### File Revisions\n\n#### List Revisions\n\n```bash\nPOST /dropbox/2/files/list_revisions\nContent-Type: application/json\n\n{\n  \"path\": \"/document.pdf\",\n  \"mode\": \"path\",\n  \"limit\": 10\n}\n```\n\n**Response:**\n```json\n{\n  \"is_deleted\": false,\n  \"entries\": [\n    {\n      \"name\": \"document.pdf\",\n      \"path_lower\": \"/document.pdf\",\n      \"path_display\": \"/document.pdf\",\n      \"id\": \"id:Awe3Av8A8YYAAAAAAAAABQ\",\n      \"client_modified\": \"2026-02-09T19:58:12Z\",\n      \"server_modified\": \"2026-02-09T19:58:13Z\",\n      \"rev\": \"016311c063b4f8700000002caa704e3\",\n      \"size\": 538371,\n      \"is_downloadable\": true\n    }\n  ],\n  \"has_more\": false\n}\n```\n\n#### Restore File\n\n```bash\nPOST /dropbox/2/files/restore\nContent-Type: application/json\n\n{\n  \"path\": \"/document.pdf\",\n  \"rev\": \"016311c063b4f8700000002caa704e3\"\n}\n```\n\n### Tags\n\n#### Get Tags\n\n```bash\nPOST /dropbox/2/files/tags/get\nContent-Type: application/json\n\n{\n  \"paths\": [\"/document.pdf\", \"/folder\"]\n}\n```\n\n**Response:**\n```json\n{\n  \"paths_to_tags\": [\n    {\n      \"path\": \"/document.pdf\",\n      \"tags\": [\n        {\n          \".tag\": \"user_generated_tag\",\n          \"tag_text\": \"important\"\n        }\n      ]\n    },\n    {\n      \"path\": \"/folder\",\n      \"tags\": []\n    }\n  ]\n}\n```\n\n#### Add Tag\n\n```bash\nPOST /dropbox/2/files/tags/add\nContent-Type: application/json\n\n{\n  \"path\": \"/document.pdf\",\n  \"tag_text\": \"important\"\n}\n```\n\nReturns `null` on success.\n\n**Note:** Tag text must match pattern `[\\w]+` (alphanumeric and underscores only, no hyphens or spaces).\n\n#### Remove Tag\n\n```bash\nPOST /dropbox/2/files/tags/remove\nContent-Type: application/json\n\n{\n  \"path\": \"/document.pdf\",\n  \"tag_text\": \"important\"\n}\n```\n\nReturns `null` on success.\n\n### Batch Operations\n\n#### Delete Batch\n\n```bash\nPOST /dropbox/2/files/delete_batch\nContent-Type: application/json\n\n{\n  \"entries\": [\n    {\"path\": \"/file1.pdf\"},\n    {\"path\": \"/file2.pdf\"}\n  ]\n}\n```\n\nReturns async job ID. Check status with `/files/delete_batch/check`.\n\n#### Copy Batch\n\n```bash\nPOST /dropbox/2/files/copy_batch_v2\nContent-Type: application/json\n\n{\n  \"entries\": [\n    {\"from_path\": \"/source/file1.pdf\", \"to_path\": \"/dest/file1.pdf\"},\n    {\"from_path\": \"/source/file2.pdf\", \"to_path\": \"/dest/file2.pdf\"}\n  ],\n  \"autorename\": false\n}\n```\n\n#### Move Batch\n\n```bash\nPOST /dropbox/2/files/move_batch_v2\nContent-Type: application/json\n\n{\n  \"entries\": [\n    {\"from_path\": \"/old/file1.pdf\", \"to_path\": \"/new/file1.pdf\"},\n    {\"from_path\": \"/old/file2.pdf\", \"to_path\": \"/new/file2.pdf\"}\n  ],\n  \"autorename\": false\n}\n```\n\n## Pagination\n\nDropbox uses cursor-based pagination. When `has_more` is true, use the `/continue` endpoint with the returned cursor.\n\n```python\nimport os\nimport requests\n\nheaders = {\n    'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}',\n    'Content-Type': 'application/json'\n}\n\n# Initial request\nresponse = requests.post(\n    'https://gateway.maton.ai/dropbox/2/files/list_folder',\n    headers=headers,\n    json={'path': '', 'limit': 100}\n)\nresult = response.json()\nall_entries = result['entries']\n\n# Continue while has_more is True\nwhile result.get('has_more'):\n    response = requests.post(\n        'https://gateway.maton.ai/dropbox/2/files/list_folder/continue',\n        headers=headers,\n        json={'cursor': result['cursor']}\n    )\n    result = response.json()\n    all_entries.extend(result['entries'])\n\nprint(f\"Total entries: {len(all_entries)}\")\n```\n\n## Code Examples\n\n### JavaScript\n\n```javascript\nconst response = await fetch(\n  'https://gateway.maton.ai/dropbox/2/files/list_folder',\n  {\n    method: 'POST',\n    headers: {\n      'Authorization': `Bearer ${process.env.MATON_API_KEY}`,\n      'Content-Type': 'application/json'\n    },\n    body: JSON.stringify({ path: '' })\n  }\n);\nconst data = await response.json();\nconsole.log(data.entries);\n```\n\n### Python\n\n```python\nimport os\nimport requests\n\nresponse = requests.post(\n    'https://gateway.maton.ai/dropbox/2/files/list_folder',\n    headers={\n        'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}',\n        'Content-Type': 'application/json'\n    },\n    json={'path': ''}\n)\ndata = response.json()\nprint(data['entries'])\n```\n\n### Python (Create Folder and Search)\n\n```python\nimport os\nimport requests\n\nheaders = {\n    'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}',\n    'Content-Type': 'application/json'\n}\n\n# Create folder\nresponse = requests.post(\n    'https://gateway.maton.ai/dropbox/2/files/create_folder_v2',\n    headers=headers,\n    json={'path': '/My New Folder', 'autorename': False}\n)\nfolder = response.json()\nprint(f\"Created folder: {folder['metadata']['path_display']}\")\n\n# Search for files\nresponse = requests.post(\n    'https://gateway.maton.ai/dropbox/2/files/search_v2',\n    headers=headers,\n    json={'query': 'document'}\n)\nresults = response.json()\nprint(f\"Found {len(results['matches'])} matches\")\n```\n\n## Notes\n\n- All Dropbox API v2 endpoints use HTTP POST method\n- Request bodies are JSON (not form-urlencoded)\n- Use empty string `\"\"` for the root folder path\n- Paths are case-insensitive but case-preserving\n- File IDs (e.g., `id:Awe3Av8A8YYAAAAAAAAABQ`) persist even when files are moved or renamed\n- Tag text must match pattern `[\\w]+` (alphanumeric and underscores only)\n- Temporary download links expire after 4 hours\n- Rate limits are generous and per-user\n- IMPORTANT: When piping curl output to `jq` or other commands, environment variables like `$MATON_API_KEY` may not expand correctly in some shell environments\n\n## Error Handling\n\n| Status | Meaning |\n|--------|---------|\n| 400 | Missing Dropbox connection or bad request |\n| 401 | Invalid or missing Maton API key |\n| 404 | Resource not found |\n| 409 | Conflict (path doesn't exist, already exists, etc.) |\n| 429 | Rate limited |\n| 4xx/5xx | Passthrough error from Dropbox API |\n\nError responses include details:\n```json\n{\n  \"error_summary\": \"path/not_found/...\",\n  \"error\": {\n    \".tag\": \"path\",\n    \"path\": {\n      \".tag\": \"not_found\"\n    }\n  }\n}\n```\n\n### Troubleshooting: Invalid API Key\n\n**When you receive an \"Invalid API key\" error, ALWAYS follow these steps before concluding there is an issue:**\n\n1. Check that the `MATON_API_KEY` environment variable is set:\n\n```bash\necho $MATON_API_KEY\n```\n\n2. Verify the API key is valid by listing connections:\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n## Resources\n\n- [Dropbox HTTP API Overview](https://www.dropbox.com/developers/documentation/http/overview)\n- [Dropbox Developer Portal](https://www.dropbox.com/developers)\n- [Dropbox API Explorer](https://dropbox.github.io/dropbox-api-v2-explorer/)\n- [DBX File Access Guide](https://developers.dropbox.com/dbx-file-access-guide)\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn75240wq8bnv2qm2xgry748jd80b9r0\",\n  \"slug\": \"dropbox-api\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1770755031056\n}\n\nFile v1.0.2:LICENSE.txt\n\nThe MIT License (MIT)\n\nCopyright (c) 2026 Maton\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\nArchive v1.0.1: 3 files, 5724 bytes\n\nFiles: LICENSE.txt (1072b), SKILL.md (17179b), _meta.json (130b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: dropbox\ndescription: |\n  Dropbox API integration with managed OAuth. Files, folders, search, metadata, and cloud storage.\n  Use this skill when users want to manage files and folders in Dropbox, search content, or work with file metadata.\n  For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).\n  Requires network access and valid Maton API key.\nmetadata:\n  author: maton\n  version: \"1.0\"\n---\n\n# Dropbox\n\nAccess the Dropbox API with managed OAuth authentication. Manage files and folders, search content, retrieve metadata, and work with file revisions.\n\n## Quick Start\n\n```bash\n# List files in root folder\npython <<'EOF'\nimport urllib.request, os, json\ndata = json.dumps({\"path\": \"\"}).encode()\nreq = urllib.request.Request('https://gateway.maton.ai/dropbox/2/files/list_folder', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application/json')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n## Base URL\n\n```\nhttps://gateway.maton.ai/dropbox/2/{endpoint}\n```\n\nThe gateway proxies requests to `api.dropboxapi.com` and automatically injects your OAuth token.\n\n**Important:** Dropbox API v2 uses POST for all endpoints with JSON request bodies.\n\n## Authentication\n\nAll requests require the Maton API key in the Authorization header:\n\n```\nAuthorization: Bearer $MATON_API_KEY\n```\n\n**Environment Variable:** Set your API key as `MATON_API_KEY`:\n\n```bash\nexport MATON_API_KEY=\"YOUR_API_KEY\"\n```\n\n### Getting Your API Key\n\n1. Sign in or create an account at [maton.ai](https://maton.ai)\n2. Go to [maton.ai/settings](https://maton.ai/settings)\n3. Copy your API key\n\n## Connection Management\n\nManage your Dropbox OAuth connections at `https://ctrl.maton.ai`.\n\n### List Connections\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections?app=dropbox&status=ACTIVE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Create Connection\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'app': 'dropbox'}).encode()\nreq = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application/json')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Get Connection\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n**Response:**\n```json\n{\n  \"connection\": {\n    \"connection_id\": \"1efbb655-88e9-4a23-ad3b-f3e19cbff279\",\n    \"status\": \"ACTIVE\",\n    \"creation_time\": \"2026-02-09T23:34:49.818074Z\",\n    \"last_updated_time\": \"2026-02-09T23:37:09.697559Z\",\n    \"url\": \"https://connect.maton.ai/?session_token=...\",\n    \"app\": \"dropbox\",\n    \"metadata\": {}\n  }\n}\n```\n\nOpen the returned `url` in a browser to complete OAuth authorization.\n\n### Delete Connection\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Specifying Connection\n\nIf you have multiple Dropbox connections, specify which one to use with the `Maton-Connection` header:\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\ndata = json.dumps({\"path\": \"\"}).encode()\nreq = urllib.request.Request('https://gateway.maton.ai/dropbox/2/files/list_folder', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application/json')\nreq.add_header('Maton-Connection', '1efbb655-88e9-4a23-ad3b-f3e19cbff279')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\nIf omitted, the gateway uses the default (oldest) active connection.\n\n## API Reference\n\n### Users\n\n#### Get Current Account\n\n```bash\nPOST /dropbox/2/users/get_current_account\nContent-Type: application/json\n\nnull\n```\n\n**Response:**\n```json\n{\n  \"account_id\": \"dbid:AAA-AdT84WzkyLw5s590DbYF1nGomiAoO8I\",\n  \"name\": {\n    \"given_name\": \"John\",\n    \"surname\": \"Doe\",\n    \"familiar_name\": \"John\",\n    \"display_name\": \"John Doe\",\n    \"abbreviated_name\": \"JD\"\n  },\n  \"email\": \"john@example.com\",\n  \"email_verified\": true,\n  \"disabled\": false,\n  \"country\": \"US\",\n  \"locale\": \"en\",\n  \"account_type\": {\n    \".tag\": \"basic\"\n  },\n  \"root_info\": {\n    \".tag\": \"user\",\n    \"root_namespace_id\": \"11989877987\",\n    \"home_namespace_id\": \"11989877987\"\n  }\n}\n```\n\n#### Get Space Usage\n\n```bash\nPOST /dropbox/2/users/get_space_usage\nContent-Type: application/json\n\nnull\n```\n\n**Response:**\n```json\n{\n  \"used\": 538371,\n  \"allocation\": {\n    \".tag\": \"individual\",\n    \"allocated\": 2147483648\n  }\n}\n```\n\n### Files and Folders\n\n#### List Folder\n\n```bash\nPOST /dropbox/2/files/list_folder\nContent-Type: application/json\n\n{\n  \"path\": \"\",\n  \"recursive\": false,\n  \"include_deleted\": false,\n  \"include_has_explicit_shared_members\": false\n}\n```\n\nUse empty string `\"\"` for the root folder.\n\n**Optional Parameters:**\n- `recursive` - Include contents of subdirectories (default: false)\n- `include_deleted` - Include deleted files (default: false)\n- `include_media_info` - Include media info for photos/videos\n- `limit` - Maximum entries per response (1-2000)\n\n**Response:**\n```json\n{\n  \"entries\": [\n    {\n      \".tag\": \"file\",\n      \"name\": \"document.pdf\",\n      \"path_lower\": \"/document.pdf\",\n      \"path_display\": \"/document.pdf\",\n      \"id\": \"id:Awe3Av8A8YYAAAAAAAAABQ\",\n      \"client_modified\": \"2026-02-09T19:58:12Z\",\n      \"server_modified\": \"2026-02-09T19:58:13Z\",\n      \"rev\": \"016311c063b4f8700000002caa704e3\",\n      \"size\": 538371,\n      \"is_downloadable\": true,\n      \"content_hash\": \"6542845d7b65ffc5358ebaa6981d991bab9fda194afa48bd727fcbe9e4a3158b\"\n    },\n    {\n      \".tag\": \"folder\",\n      \"name\": \"Documents\",\n      \"path_lower\": \"/documents\",\n      \"path_display\": \"/Documents\",\n      \"id\": \"id:Awe3Av8A8YYAAAAAAAAABw\"\n    }\n  ],\n  \"cursor\": \"AAVqv-MUYFlM98b1QpFK6YaYC8L1s39lWjqbeqgWu4un...\",\n  \"has_more\": false\n}\n```\n\n#### Continue Listing Folder\n\n```bash\nPOST /dropbox/2/files/list_folder/continue\nContent-Type: application/json\n\n{\n  \"cursor\": \"AAVqv-MUYFlM98b1QpFK6YaYC8L1s39lWjqbeqgWu4un...\"\n}\n```\n\nUse when `has_more` is true in the previous response.\n\n#### Get Metadata\n\n```bash\nPOST /dropbox/2/files/get_metadata\nContent-Type: application/json\n\n{\n  \"path\": \"/document.pdf\",\n  \"include_media_info\": false,\n  \"include_deleted\": false,\n  \"include_has_explicit_shared_members\": false\n}\n```\n\n**Response:**\n```json\n{\n  \".tag\": \"file\",\n  \"name\": \"document.pdf\",\n  \"path_lower\": \"/document.pdf\",\n  \"path_display\": \"/document.pdf\",\n  \"id\": \"id:Awe3Av8A8YYAAAAAAAAABQ\",\n  \"client_modified\": \"2026-02-09T19:58:12Z\",\n  \"server_modified\": \"2026-02-09T19:58:13Z\",\n  \"rev\": \"016311c063b4f8700000002caa704e3\",\n  \"size\": 538371,\n  \"is_downloadable\": true,\n  \"content_hash\": \"6542845d7b65ffc5358ebaa6981d991bab9fda194afa48bd727fcbe9e4a3158b\"\n}\n```\n\n#### Create Folder\n\n```bash\nPOST /dropbox/2/files/create_folder_v2\nContent-Type: application/json\n\n{\n  \"path\": \"/New Folder\",\n  \"autorename\": false\n}\n```\n\n**Response:**\n```json\n{\n  \"metadata\": {\n    \"name\": \"New Folder\",\n    \"path_lower\": \"/new folder\",\n    \"path_display\": \"/New Folder\",\n    \"id\": \"id:Awe3Av8A8YYAAAAAAAAABw\"\n  }\n}\n```\n\n#### Copy File or Folder\n\n```bash\nPOST /dropbox/2/files/copy_v2\nContent-Type: application/json\n\n{\n  \"from_path\": \"/source/file.pdf\",\n  \"to_path\": \"/destination/file.pdf\",\n  \"autorename\": false\n}\n```\n\n**Response:**\n```json\n{\n  \"metadata\": {\n    \".tag\": \"file\",\n    \"name\": \"file.pdf\",\n    \"path_lower\": \"/destination/file.pdf\",\n    \"path_display\": \"/destination/file.pdf\",\n    \"id\": \"id:Awe3Av8A8YYAAAAAAAAACA\"\n  }\n}\n```\n\n#### Move File or Folder\n\n```bash\nPOST /dropbox/2/files/move_v2\nContent-Type: application/json\n\n{\n  \"from_path\": \"/old/location/file.pdf\",\n  \"to_path\": \"/new/location/file.pdf\",\n  \"autorename\": false\n}\n```\n\n**Response:**\n```json\n{\n  \"metadata\": {\n    \".tag\": \"file\",\n    \"name\": \"file.pdf\",\n    \"path_lower\": \"/new/location/file.pdf\",\n    \"path_display\": \"/new/location/file.pdf\",\n    \"id\": \"id:Awe3Av8A8YYAAAAAAAAACA\"\n  }\n}\n```\n\n#### Delete File or Folder\n\n```bash\nPOST /dropbox/2/files/delete_v2\nContent-Type: application/json\n\n{\n  \"path\": \"/file-to-delete.pdf\"\n}\n```\n\n**Response:**\n```json\n{\n  \"metadata\": {\n    \".tag\": \"file\",\n    \"name\": \"file-to-delete.pdf\",\n    \"path_lower\": \"/file-to-delete.pdf\",\n    \"path_display\": \"/file-to-delete.pdf\",\n    \"id\": \"id:Awe3Av8A8YYAAAAAAAAABQ\"\n  }\n}\n```\n\n#### Get Temporary Download Link\n\n```bash\nPOST /dropbox/2/files/get_temporary_link\nContent-Type: application/json\n\n{\n  \"path\": \"/document.pdf\"\n}\n```\n\n**Response:**\n```json\n{\n  \"metadata\": {\n    \"name\": \"document.pdf\",\n    \"path_lower\": \"/document.pdf\",\n    \"path_display\": \"/document.pdf\",\n    \"id\": \"id:Awe3Av8A8YYAAAAAAAAABQ\",\n    \"size\": 538371,\n    \"is_downloadable\": true\n  },\n  \"link\": \"https://uc785ee484c03b6556c091ea4491.dl.dropboxusercontent.com/cd/0/get/...\"\n}\n```\n\nThe link is valid for 4 hours.\n\n### Search\n\n#### Search Files\n\n```bash\nPOST /dropbox/2/files/search_v2\nContent-Type: application/json\n\n{\n  \"query\": \"document\",\n  \"options\": {\n    \"path\": \"\",\n    \"max_results\": 100,\n    \"file_status\": \"active\",\n    \"filename_only\": false\n  }\n}\n```\n\n**Response:**\n```json\n{\n  \"has_more\": false,\n  \"matches\": [\n    {\n      \"highlight_spans\": [],\n      \"match_type\": {\n        \".tag\": \"filename\"\n      },\n      \"metadata\": {\n        \".tag\": \"metadata\",\n        \"metadata\": {\n          \".tag\": \"file\",\n          \"name\": \"document.pdf\",\n          \"path_display\": \"/document.pdf\",\n          \"path_lower\": \"/document.pdf\",\n          \"id\": \"id:Awe3Av8A8YYAAAAAAAAABw\"\n        }\n      }\n    }\n  ]\n}\n```\n\n#### Continue Search\n\n```bash\nPOST /dropbox/2/files/search/continue_v2\nContent-Type: application/json\n\n{\n  \"cursor\": \"...\"\n}\n```\n\n### File Revisions\n\n#### List Revisions\n\n```bash\nPOST /dropbox/2/files/list_revisions\nContent-Type: application/json\n\n{\n  \"path\": \"/document.pdf\",\n  \"mode\": \"path\",\n  \"limit\": 10\n}\n```\n\n**Response:**\n```json\n{\n  \"is_deleted\": false,\n  \"entries\": [\n    {\n      \"name\": \"document.pdf\",\n      \"path_lower\": \"/document.pdf\",\n      \"path_display\": \"/document.pdf\",\n      \"id\": \"id:Awe3Av8A8YYAAAAAAAAABQ\",\n      \"client_modified\": \"2026-02-09T19:58:12Z\",\n      \"server_modified\": \"2026-02-09T19:58:13Z\",\n      \"rev\": \"016311c063b4f8700000002caa704e3\",\n      \"size\": 538371,\n      \"is_downloadable\": true\n    }\n  ],\n  \"has_more\": false\n}\n```\n\n#### Restore File\n\n```bash\nPOST /dropbox/2/files/restore\nContent-Type: application/json\n\n{\n  \"path\": \"/document.pdf\",\n  \"rev\": \"016311c063b4f8700000002caa704e3\"\n}\n```\n\n### Tags\n\n#### Get Tags\n\n```bash\nPOST /dropbox/2/files/tags/get\nContent-Type: application/json\n\n{\n  \"paths\": [\"/document.pdf\", \"/folder\"]\n}\n```\n\n**Response:**\n```json\n{\n  \"paths_to_tags\": [\n    {\n      \"path\": \"/document.pdf\",\n      \"tags\": [\n        {\n          \".tag\": \"user_generated_tag\",\n          \"tag_text\": \"important\"\n        }\n      ]\n    },\n    {\n      \"path\": \"/folder\",\n      \"tags\": []\n    }\n  ]\n}\n```\n\n#### Add Tag\n\n```bash\nPOST /dropbox/2/files/tags/add\nContent-Type: application/json\n\n{\n  \"path\": \"/document.pdf\",\n  \"tag_text\": \"important\"\n}\n```\n\nReturns `null` on success.\n\n**Note:** Tag text must match pattern `[\\w]+` (alphanumeric and underscores only, no hyphens or spaces).\n\n#### Remove Tag\n\n```bash\nPOST /dropbox/2/files/tags/remove\nContent-Type: application/json\n\n{\n  \"path\": \"/document.pdf\",\n  \"tag_text\": \"important\"\n}\n```\n\nReturns `null` on success.\n\n### Batch Operations\n\n#### Delete Batch\n\n```bash\nPOST /dropbox/2/files/delete_batch\nContent-Type: application/json\n\n{\n  \"entries\": [\n    {\"path\": \"/file1.pdf\"},\n    {\"path\": \"/file2.pdf\"}\n  ]\n}\n```\n\nReturns async job ID. Check status with `/files/delete_batch/check`.\n\n#### Copy Batch\n\n```bash\nPOST /dropbox/2/files/copy_batch_v2\nContent-Type: application/json\n\n{\n  \"entries\": [\n    {\"from_path\": \"/source/file1.pdf\", \"to_path\": \"/dest/file1.pdf\"},\n    {\"from_path\": \"/source/file2.pdf\", \"to_path\": \"/dest/file2.pdf\"}\n  ],\n  \"autorename\": false\n}\n```\n\n#### Move Batch\n\n```bash\nPOST /dropbox/2/files/move_batch_v2\nContent-Type: application/json\n\n{\n  \"entries\": [\n    {\"from_path\": \"/old/file1.pdf\", \"to_path\": \"/new/file1.pdf\"},\n    {\"from_path\": \"/old/file2.pdf\", \"to_path\": \"/new/file2.pdf\"}\n  ],\n  \"autorename\": false\n}\n```\n\n## Pagination\n\nDropbox uses cursor-based pagination. When `has_more` is true, use the `/continue` endpoint with the returned cursor.\n\n```python\nimport os\nimport requests\n\nheaders = {\n    'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}',\n    'Content-Type': 'application/json'\n}\n\n# Initial request\nresponse = requests.post(\n    'https://gateway.maton.ai/dropbox/2/files/list_folder',\n    headers=headers,\n    json={'path': '', 'limit': 100}\n)\nresult = response.json()\nall_entries = result['entries']\n\n# Continue while has_more is True\nwhile result.get('has_more'):\n    response = requests.post(\n        'https://gateway.maton.ai/dropbox/2/files/list_folder/continue',\n        headers=headers,\n        json={'cursor': result['cursor']}\n    )\n    result = response.json()\n    all_entries.extend(result['entries'])\n\nprint(f\"Total entries: {len(all_entries)}\")\n```\n\n## Code Examples\n\n### JavaScript\n\n```javascript\nconst response = await fetch(\n  'https://gateway.maton.ai/dropbox/2/files/list_folder',\n  {\n    method: 'POST',\n    headers: {\n      'Authorization': `Bearer ${process.env.MATON_API_KEY}`,\n      'Content-Type': 'application/json'\n    },\n    body: JSON.stringify({ path: '' })\n  }\n);\nconst data = await response.json();\nconsole.log(data.entries);\n```\n\n### Python\n\n```python\nimport os\nimport requests\n\nresponse = requests.post(\n    'https://gateway.maton.ai/dropbox/2/files/list_folder',\n    headers={\n        'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}',\n        'Content-Type': 'application/json'\n    },\n    json={'path': ''}\n)\ndata = response.json()\nprint(data['entries'])\n```\n\n### Python (Create Folder and Search)\n\n```python\nimport os\nimport requests\n\nheaders = {\n    'Authorization': f'Bearer {os.environ[\"MATON_API_KEY\"]}',\n    'Content-Type': 'application/json'\n}\n\n# Create folder\nresponse = requests.post(\n    'https://gateway.maton.ai/dropbox/2/files/create_folder_v2',\n    headers=headers,\n    json={'path': '/My New Folder', 'autorename': False}\n)\nfolder = response.json()\nprint(f\"Created folder: {folder['metadata']['path_display']}\")\n\n# Search for files\nresponse = requests.post(\n    'https://gateway.maton.ai/dropbox/2/files/search_v2',\n    headers=headers,\n    json={'query': 'document'}\n)\nresults = response.json()\nprint(f\"Found {len(results['matches'])} matches\")\n```\n\n## Notes\n\n- All Dropbox API v2 endpoints use HTTP POST method\n- Request bodies are JSON (not form-urlencoded)\n- Use empty string `\"\"` for the root folder path\n- Paths are case-insensitive but case-preserving\n- File IDs (e.g., `id:Awe3Av8A8YYAAAAAAAAABQ`) persist even when files are moved or renamed\n- Tag text must match pattern `[\\w]+` (alphanumeric and underscores only)\n- Temporary download links expire after 4 hours\n- Rate limits are generous and per-user\n- IMPORTANT: When piping curl output to `jq` or other commands, environment variables like `$MATON_API_KEY` may not expand correctly in some shell environments\n\n## Error Handling\n\n| Status | Meaning |\n|--------|---------|\n| 400 | Missing Dropbox connection or bad request |\n| 401 | Invalid or missing Maton API key |\n| 404 | Resource not found |\n| 409 | Conflict (path doesn't exist, already exists, etc.) |\n| 429 | Rate limited |\n| 4xx/5xx | Passthrough error from Dropbox API |\n\nError responses include details:\n```json\n{\n  \"error_summary\": \"path/not_found/...\",\n  \"error\": {\n    \".tag\": \"path\",\n    \"path\": {\n      \".tag\": \"not_found\"\n    }\n  }\n}\n```\n\n### Troubleshooting: Invalid API Key\n\n**When you receive an \"Invalid API key\" error, ALWAYS follow these steps before concluding there is an issue:**\n\n1. Check that the `MATON_API_KEY` environment variable is set:\n\n```bash\necho $MATON_API_KEY\n```\n\n2. Verify the API key is valid by listing connections:\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n## Resources\n\n- [Dropbox HTTP API Overview](https://www.dropbox.com/developers/documentation/http/overview)\n- [Dropbox Developer Portal](https://www.dropbox.com/developers)\n- [Dropbox API Explorer](https://dropbox.github.io/dropbox-api-v2-explorer/)\n- [DBX File Access Guide](https://developers.dropbox.com/dbx-file-access-guide)\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn75240wq8bnv2qm2xgry748jd80b9r0\",\n  \"slug\": \"dropbox-api\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1770754207700\n}\n\nFile v1.0.1:LICENSE.txt\n\nThe MIT License (MIT)\n\nCopyright (c) 2026 Maton\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","readmeExcerpt":"Skill: Dropbox Owner: byungkyu Summary: Dropbox API integration with managed OAuth. Files, folders, search, metadata, and cloud storage. Use this skill when users want to manage files and folders in Dropbox, search content, or work with file metadata. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Requires network access and valid Maton API key. Tags: latest:1.0.2 Ver","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# List files in root folder\npython <<'EOF'\nimport urllib.request, os, json\ndata = json.dumps({\"path\": \"\"}).encode()\nreq = urllib.request.Request('https://gateway.maton.ai/dropbox/2/files/list_folder', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application/json')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF"},{"language":"text","snippet":"https://gateway.maton.ai/dropbox/2/{endpoint}"},{"language":"text","snippet":"Authorization: Bearer $MATON_API_KEY"},{"language":"bash","snippet":"export MATON_API_KEY=\"YOUR_API_KEY\""},{"language":"bash","snippet":"python <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections?app=dropbox&status=ACTIVE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF"},{"language":"bash","snippet":"python <<'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'app': 'dropbox'}).encode()\nreq = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application/json')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: dropbox\ndescription: |\n  Dropbox API integration with managed OAuth. Files, folders, search, metadata, and cloud storage.\n  Use this skill when users want to manage files and folders in Dropbox, search content, or work with file metadata.\n  For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway).\n  Requires network access and valid Maton API key.\nmetadata:\n  author: maton\n  version: \"1.0\"\n  clawdbot:\n    emoji: 🧠\n    requires:\n      env:\n        - MATON_API_KEY\n---\n\n# Dropbox\n\nAccess the Dropbox API with managed OAuth authentication. Manage files and folders, search content, retrieve metadata, and work with file revisions.\n\n## Quick Start\n\n```bash\n# List files in root folder\npython <<'EOF'\nimport urllib.request, os, json\ndata = json.dumps({\"path\": \"\"}).encode()\nreq = urllib.request.Request('https://gateway.maton.ai/dropbox/2/files/list_folder', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application/json')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n## Base URL\n\n```\nhttps://gateway.maton.ai/dropbox/2/{endpoint}\n```\n\nThe gateway proxies requests to `api.dropboxapi.com` and automatically injects your OAuth token.\n\n**Important:** Dropbox API v2 uses POST for all endpoints with JSON request bodies.\n\n## Authentication\n\nAll requests require the Maton API key in the Authorization header:\n\n```\nAuthorization: Bearer $MATON_API_KEY\n```\n\n**Environment Variable:** Set your API key as `MATON_API_KEY`:\n\n```bash\nexport MATON_API_KEY=\"YOUR_API_KEY\"\n```\n\n### Getting Your API Key\n\n1. Sign in or create an account at [maton.ai](https://maton.ai)\n2. Go to [maton.ai/settings](https://maton.ai/settings)\n3. Copy your API key\n\n## Connection Management\n\nManage your Dropbox OAuth connections at `https://ctrl.maton.ai`.\n\n### List Connections\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections?app=dropbox&status=ACTIVE')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Create Connection\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\ndata = json.dumps({'app': 'dropbox'}).encode()\nreq = urllib.request.Request('https://ctrl.maton.ai/connections', data=data, method='POST')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nreq.add_header('Content-Type', 'application/json')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n### Get Connection\n\n```bash\npython <<'EOF'\nimport urllib.request, os, json\nreq = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')\nreq.add_header('Authorization', f'Bearer {os.environ[\"MATON_API_KEY\"]}')\nprint(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))\nEOF\n```\n\n**Response:**\n```json\n{\n  \"connection\": {\n    \"connection_id\":"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn75240wq8bnv2qm2xgry748jd80b9r0\",\n  \"slug\": \"dropbox-api\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1770755031056\n}"},{"path":"LICENSE.txt","content":"The MIT License (MIT)\n\nCopyright (c) 2026 Maton\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Dropbox API integration with managed OAuth. Files, folders, search, metadata, and cloud storage. Use this skill when users want to manage files and folders in Dropbox, search content, or work with file metadata. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Requires network access and valid Maton API key. Skill: Dropbox Owner: byungkyu Summary: Dropbox API integration with managed OAuth. Files, folders, search, metadata, and cloud storage. Use this skill when users want to manage files and folders in Dropbox, search content, or work with file metadata. For other third party apps, use the api-gateway skill (https://clawhub.ai/byungkyu/api-gateway). Requires network access and valid Maton API key. Tags: latest:1.0.2 Ver","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":947,"uniquenessScore":49,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-04-15T00:45:39.800Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"agent-directory","verified":false,"confidence":"low","updatedAt":"2026-10-09T09:36:35.731Z","emptyReason":"No close protocol neighbors were found."},"items":[],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[]}}}