| name | dropbox |
| description | Upload, download, and manage files in Dropbox with automatic OAuth token refresh. |
| homepage | https://www.dropbox.com/developers |
| metadata | {"clawdbot":{"emoji":"📦","requires":{"env":["DROPBOX_APP_KEY","DROPBOX_APP_SECRET"]}}} |
Dropbox
Upload, download, list, and search files in Dropbox. Supports automatic token refresh.
Initial Setup (One-Time)
1. Create a Dropbox App
- Go to https://www.dropbox.com/developers/apps
- Click "Create app"
- Choose "Scoped access"
- Choose "Full Dropbox" (or "App folder" for limited access)
- Name your app
- Note the App key and App secret
2. Set Permissions
In the app settings under "Permissions", enable:
files.metadata.read
files.metadata.write
files.content.read
files.content.write
account_info.read
Click "Submit" to save.
3. Run OAuth Flow
Generate the authorization URL:
import urllib.parse
APP_KEY = "your_app_key"
params = {
"client_id": APP_KEY,
"response_type": "code",
"token_access_type": "offline"
}
auth_url = "https://www.dropbox.com/oauth2/authorize?" + urllib.parse.urlencode(params)
print(auth_url)
Give the URL to the user. They will:
- Open it in a browser
- Authorize the app
- Receive an authorization code
4. Exchange Code for Tokens
curl -X POST "https://api.dropboxapi.com/oauth2/token" \
-d "code=AUTHORIZATION_CODE" \
-d "grant_type=authorization_code" \
-d "client_id=APP_KEY" \
-d "client_secret=APP_SECRET"
Response includes:
access_token — Short-lived (~4 hours)
refresh_token — Long-lived (never expires unless revoked)
5. Save Credentials
Create ~/.config/atlas/dropbox.env:
DROPBOX_APP_KEY=your_app_key
DROPBOX_APP_SECRET=your_app_secret
DROPBOX_ACCESS_TOKEN=sl.u.xxx...
DROPBOX_REFRESH_TOKEN=xxx...
Usage
dropbox.py account
dropbox.py ls "/path/to/folder"
dropbox.py search "query"
dropbox.py download "/path/to/file.pdf"
dropbox.py upload local_file.pdf "/Dropbox/path/remote_file.pdf"
Token Refresh
The script automatically handles token refresh:
- On 401 Unauthorized, it uses the refresh token to get a new access token
- Updates
dropbox.env with the new access token
- Retries the original request
Manual refresh (if needed):
curl -X POST "https://api.dropboxapi.com/oauth2/token" \
-d "grant_type=refresh_token" \
-d "refresh_token=REFRESH_TOKEN" \
-d "client_id=APP_KEY" \
-d "client_secret=APP_SECRET"
Token Lifecycle
| Token | Lifetime | Storage |
|---|
| Access Token | ~4 hours | Updated automatically |
| Refresh Token | Never expires* | Keep secure, don't share |
*Refresh tokens only expire if explicitly revoked or app access is removed.
Troubleshooting
401 Unauthorized on refresh:
- App may have been disconnected — re-run OAuth flow from step 3
403 Forbidden:
- Check app permissions in Dropbox console
Path errors:
- Dropbox paths start with
/ and are case-insensitive
- Use forward slashes even on Windows
API Reference