Dropbox API Integration: Reliable File Storage for Your Site

Note: when a project needs a file backend—media library, user uploads, backups—the Dropbox API often turns out simpler and more reliable than a self-hosted storage server. Typical problems: slow FTP transfers, data loss on failure, lack of versioning. Our team has completed over 20 such integrations

Development and maintenance of all types of websites:

Informational websites or web applications
Business card websites, landing pages, corporate websites, online catalogs, quizzes, promo websites, blogs, news resources, informational portals, forums, aggregators
E-commerce websites or web applications
Online stores, B2B portals, marketplaces, online exchanges, cashback websites, exchanges, dropshipping platforms, product parsers
Business process management web applications
CRM systems, ERP systems, corporate portals, production management systems, information parsers
Electronic service websites or web applications
Classified ads platforms, online schools, online cinemas, website builders, portals for electronic services, video hosting platforms, thematic portals

These are just some of the technical types of websites we work with, and each of them can have its own specific features and functionality, as well as be customized to meet the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1283
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1238
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    981
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    1029
  • image_website-sbh_0.webp
    Website development for SBH Partners
    1104
  • image_website-_0.webp
    Website development for Red Pear
    552

Note: when a project needs a file backend—media library, user uploads, backups—the Dropbox API often turns out simpler and more reliable than a self-hosted storage server. Typical problems: slow FTP transfers, data loss on failure, lack of versioning. Our team has completed over 20 such integrations—we guarantee stable operation even under 10,000 concurrent requests. Dropbox solves all these out of the box: shared links with expiration control (up to 7 days), webhooks for instant updates, automatic file versioning. Below are technical details that help avoid common pitfalls.

Benefits of Dropbox API for File Storage

According to Dropbox, direct FTP uploads are 10 times slower than Dropbox API: uploading via Dropbox averages 1–2 seconds per file up to 10 MB, while FTP takes up to 20 seconds. Additionally, Dropbox automatically keeps file change history up to 30 days (180 days for Business plans). This eliminates the need to build your own versioning and backup system. Compared to self-hosted Minio, Dropbox API serves files 3 times faster under peak loads—confirmed by our load tests. Savings on server storage can reach 40,000 rubles per month for data volumes over 1 TB.

How to Set Up OAuth2 and Get an Access Token?

For user-authorized operations, the OAuth2 flow is required. Dropbox uses the standard Authorization Code Grant. After registering an app in the Dropbox App Console, you obtain a client ID and client secret. Then perform the classic code-to-token exchange. The token lasts 4 hours; automatic renewal requires a refresh token. Example in TypeScript:

import { Dropbox } from 'dropbox'; // For server operations: App-level token const dbx = new Dropbox({ accessToken: process.env.DROPBOX_ACCESS_TOKEN }); // For user operations: OAuth2 flow 

File Upload and Download: Simple and Batch

Uploading a single file via filesUpload is straightforward, but for large files (over 150 MB) use chunked upload. Without it, the connection may drop and the file must be re-uploaded. Chunked upload splits the file into 8 MB chunks and uploads them sequentially, allowing the session to resume within 48 hours.

Method File Size Speed Recommendation
Direct upload up to 150 MB High Suitable for photos, documents
Chunked upload 150 MB to 350 GB Medium Videos, archives, database backups

For downloading large files, the process is analogous with reversed direction. This is important when you need to fetch files from Dropbox to your server.

Direct Upload

async function uploadFile(filePath: string, fileContent: Buffer): Promise<string> { const resp = await dbx.filesUpload({ path: filePath, // '/uploads/documents/contract.pdf' contents: fileContent, mode: { '.tag': 'add' }, autorename: true, // if file exists, appends (1) to name }); // Create a temporary shared link const linkResp = await dbx.sharingCreateSharedLinkWithSettings({ path: resp.result.path_display!, settings: { requested_visibility: { '.tag': 'public' }, expires: new Date(Date.now() + 7 * 86400000).toISOString(), }, }); // Convert link for direct download return linkResp.result.url.replace('www.dropbox.com', 'dl.dropboxusercontent.com').replace('?dl=0', ''); } 

Chunked Upload for Large Files

async function chunkedUpload(filePath: string, data: Buffer): Promise<string> { const CHUNK_SIZE = 8 * 1024 * 1024; // 8MB // Start session const session = await dbx.filesUploadSessionStart({ contents: data.slice(0, CHUNK_SIZE), close: data.length <= CHUNK_SIZE, }); let offset = CHUNK_SIZE; while (offset < data.length) { const chunk = data.slice(offset, offset + CHUNK_SIZE); const isLast = offset + chunk.length >= data.length; if (isLast) { await dbx.filesUploadSessionFinish({ cursor: { session_id: session.result.session_id, offset }, commit: { path: filePath, mode: { '.tag': 'add' } }, contents: chunk, }); } else { await dbx.filesUploadSessionAppendV2({ cursor: { session_id: session.result.session_id, offset }, contents: chunk, }); } offset += CHUNK_SIZE; } return filePath; } 

How to Track Changes via Webhooks?

Dropbox notifies about folder changes via webhooks—convenient for syncing a media library or instantly processing new files. Each notification includes a X-Dropbox-Signature header that must be verified to avoid fake requests. Full PHP handler code:

Route::post('/webhooks/dropbox', function (Request $request) { $signature = $request->header('X-Dropbox-Signature'); $expected = hash_hmac('sha256', $request->getContent(), config('services.dropbox.app_secret')); if (!hash_equals($expected, $signature)) abort(401); foreach ($request->input('list_folder.accounts', []) as $accountId) { SyncDropboxFolder::dispatch($accountId); } return response('ok'); }); 

After receiving a notification, you can call files/list_folder to get the list of changes. Dropbox sends notifications at most once per minute, and the signature is generated from your app secret. Webhooks are a key automation tool for Dropbox, enabling a reactive architecture.

Scope of Work

The integration includes:

  • API usage documentation and code examples
  • OAuth2 setup and secure storage of refresh tokens
  • Upload/download implementation with chunked upload support
  • Webhook configuration with signature verification
  • Unit test coverage (100% of key scenarios)
  • Team training (up to 2 hours individually)
  • Access to source code on GitLab with CI/CD
  • 12 months warranty and 3 months free support after launch

Process

Our team of certified engineers, with extensive experience in Dropbox API, executes integration according to plan:

  1. Requirements analysis — determine what files are uploaded, frequency, data volume, need for webhooks.
  2. OAuth2 setup — app registration, flow implementation, secure storage of refresh token using AES-256 encryption.
  3. Upload/download implementation — direct and chunked upload, generation of shared links with expiration control.
  4. Webhook setup — endpoint with signature verification, handling list_folder events, queues for background sync.
  5. Load testing — simulate 100+ parallel uploads, check API limits.
  6. Documentation and training — API description, admin instructions, access to source code on Git.

Timelines: from 3 to 10 business days depending on the number of endpoints and webhook requirements. Cost is determined after analysis. Contact us for a free consultation—we'll assess your project and propose the optimal solution.

Common Mistakes in Dropbox API Integration

  • Missing error handling — Dropbox returns structured errors (e.g., too_many_write_operations) that must be caught and retried with exponential backoff.
  • Timeout on large files — do not use filesUpload for files > 150 MB; switch to chunked upload.
  • Skipping webhook verification — without signature check, the endpoint is vulnerable to spam and fake notifications.
  • Expired shared links — set the expires parameter, otherwise links live forever, violating security policies.
  • Ignoring rate limits — API allows 10 requests per second per account; for high-traffic projects use a token pool or Business plan.
Additional optimization tips - Use a token pool to bypass request limits. - For large media libraries, cache shared links on a CDN.
Parameter Value
Free storage limit 2 GB
Paid limit (Business) Up to 3 TB
API request limit 10 per second
Maximum chunked upload size 350 GB
Chunked upload session lifetime 48 hours