# dropbox-sdk-python: the official Dropbox API v2 client for Python

> The official Dropbox SDK for Python wraps the API v2 endpoints in typed calls and ships a file_transfer layer for parallel, retried uploads and downloads. Two floors matter before you write a line against it: Python 3.11 or newer, and SDK version 12.0.2 or newer, since older versions stopped talking to the API servers in January 2026.

**dropbox/dropbox-sdk-python** — The Official Dropbox API V2 SDK for Python

- Repository: https://github.com/dropbox/dropbox-sdk-python
- Website: https://www.dropbox.com/developers
- Stars: 985 · Forks: 334
- Language: Python
- License: MIT
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/dropbox-dropbox-sdk-python

## The January 2026 certificate change that broke old clients

The first thing the README does is warn you about a version, and the warning is unusually blunt. Use version 12.0.2 or newer of this SDK for compatibility with the Dropbox API servers. Older versions stopped working in January 2026, and the project links a blog post about the API server certificate changes that caused it. This is the sort of breakage that is easy to miss and expensive to diagnose, because an old client does not raise an error about certificates, it simply stops working against a server that has changed how it presents itself. The related floor is Python itself. The SDK requires Python 3.11 or newer, and the README explains that earlier versions, including Python 2.7 and Python 3.4 through 3.10, are not supported because they have reached end of life and are no longer maintained upstream. So there are two numbers to check before anything else: your interpreter version and your SDK version.

## Installing the client and creating an app in the Developer Console

Installation from PyPI is one command:

```bash
pip install dropbox
```

To work from source, clone the repository and install it in place:

```bash
git clone git://github.com/dropbox/dropbox-sdk-python.git
cd dropbox-sdk-python
pip install .
```

Before any of that produces a working call, you need an application. The README's instruction is to create an app via the Developer Console, and the OAuth guide is linked for the details of that flow. The two steps are separate on purpose: the SDK is a client library, while the app you create in the console is what carries the permissions, the credentials and the redirect configuration your program will use. Documentation is published on Read the Docs, and the README points you at the examples directory as the faster route for basic functionality. Help is split in two as well. If you find a bug, the contributing document explains how to report it, and for anything that is not specific to the SDK, Dropbox Support is the address.

## file_transfer wraps the files methods with retries and parallelism

The module worth knowing about is dropbox.file_transfer, and it exists because the generated files_* methods on their own are thin. The README says to use it when copying Dropbox files to or from local storage and you want retry, progress, validation, byte and file targets, stream and file sources, and optional parallel ranged transfers around the generated files_* methods. The shape of the code is a small object graph rather than a pile of keyword arguments:

```python
import dropbox
from dropbox import files
from dropbox.file_transfer import (
    DownloadOptions,
    File,
    FileUpload,
    Uploader,
    UploadOptions,
    Downloader,
)

dbx = dropbox.Dropbox("YOUR_ACCESS_TOKEN")

Downloader(dbx).download(
    "/large-file.bin",
    File("large-file.bin"),
    DownloadOptions(parallel_downloads=4),
)

Uploader(dbx).upload(
    FileUpload("large-file.bin"),
    files.CommitInfo("/large-file.bin", mode=files.WriteMode.overwrite),
    UploadOptions(parallel_uploads=4),
)
```

Two details are worth pausing on. The download and upload are symmetric, with the same options object on each side, and parallelism is expressed as a count rather than a boolean, so four means four. The commit mode is explicit at WriteMode.overwrite, which tells you the default behaviour is not something you want to inherit by accident when you start writing production code.

## OAuth on the command line, in three flavours

The examples directory covers OAuth with three separate scripts, and the differences between them are the difference between the three flows you are likely to need. Commandline OAuth Basic shows a simple command line flow with no redirect. Commandline OAuth Scopes does the same but with scopes, which is what you want as soon as your app needs to act on a user's files rather than just on their account. Commandline OAuth PKCE uses PKCE, the flow designed for applications that cannot safely hold a client secret. Each is a single readable file rather than a framework, which is the right shape for a starting point, since the interesting decisions are about the flow, not about the SDK. A reader picking this up for the first time should probably read the basic one, then the scoped one, and treat PKCE as the default choice for anything that is not a confidential server side client.

## A client surface generated from a specification

The repository layout explains how the SDK stays in step with the API. There is a spec directory, a generator directory and a generate_base_client.py script at the root, and the runtime dependencies are requests and stone, with the project metadata pinning stone to the 3.5 series below version 4. The picture that emerges is that much of the client surface is produced from a specification rather than typed out by hand, which is the only sane way to keep hundreds of endpoint methods consistent. The build itself is driven by setuptools with setuptools-scm for the version number, and the version file is written to dropbox/_version.py. The development configuration is equally conventional: ruff with a line length of 100 targeting Python 3.11, a pytest configuration that keeps the virtual environments and the stone checkout out of test discovery, tox for environments, and codecov for coverage. The package is published on PyPI as dropbox.

## Example scripts that handle the chores worth automating

The bundled examples are worth more than most tutorials, because they are the shapes people actually build. Updown is a sample application that uploads the contents of your Downloads folder to Dropbox, which is the shortest path to a working end to end call. Reliable file transfer downloads and uploads files with retry, progress and content validation helpers, and it is the example to read before you decide whether to use the file_transfer module or the plain methods. Backup and Restore is a sample application that shows how to back up a file and restore previous versions if the file was modified or corrupted in any way, which is the case where the API's version history does the work for you rather than your own backup job. The repository also carries an UPGRADING.md, which is the file to read when you move between major versions of the SDK, and a CONTRIBUTING.md that covers how to report a problem.

## Where the SDK stops and the vendor boundary begins

The limits of this package are the limits of its vendor. Everything the SDK exposes is an endpoint of the Dropbox API, so there is no portable subset: a codebase that has to talk to several storage providers needs a different design, and this SDK will not get you there, though the request layer it builds on would sit underneath one. The OAuth story, the app console and the server behaviour are all owned by Dropbox, so a change on their side surfaces as a behaviour change in your program, which is exactly what happened in January 2026. On the licensing side the SDK is MIT, with the LICENSE file in the repository, so using it in a commercial product carries no copyleft condition. On the practical side, the Python 3.11 floor rules out a chunk of older production estates, the file_transfer layer is an optional convenience over generated methods rather than a required part of the protocol, and the README does not document rate limits or quota behaviour, so those are things to look up in the API documentation before you design a batch job around them.

## Conclusion

Adopt dropbox-sdk-python if Dropbox is where your data lives and you want typed endpoints, a maintained transfer layer and working OAuth examples rather than a hand-rolled HTTP client. Skip it if you need one codebase across several storage providers, if you are still on Python 3.10, or if you cannot pin to SDK 12.0.2 or newer. Before you start, read UPGRADING.md for the moves between major versions, confirm your app in the Developer Console has the scopes your calls need, and decide early whether the file_transfer module or the plain files_* methods fit your size and retry requirements.

## FAQ

### Which version of the Dropbox Python SDK still works with the API servers?

Version 12.0.2 or newer. The README states that older versions stopped working in January 2026, and links a blog post about the API server certificate changes behind it.

### What Python versions does dropbox-sdk-python support?

Python 3.11 or newer. Python 2.7 and Python 3.4 through 3.10 are not supported, because those versions have reached end of life and are no longer maintained upstream.

### How do I install the Dropbox SDK for Python?

Run pip install dropbox, or clone git://github.com/dropbox/dropbox-sdk-python.git, change into the dropbox-sdk-python directory and run pip install . from source. You also need to create an app in the Developer Console before your calls will be authorised.

### What does the file_transfer module add to the generated methods?

It adds retry, progress reporting, content validation, byte and file targets, stream and file sources, and optional parallel ranged transfers around the generated files_* methods, with parallel_downloads and parallel_uploads options.

## Sources

- [dropbox/dropbox-sdk-python on GitHub](https://github.com/dropbox/dropbox-sdk-python)
- [License: MIT](https://github.com/dropbox/dropbox-sdk-python/blob/main/LICENSE)
- [Project website](https://www.dropbox.com/developers)
- [README](https://github.com/dropbox/dropbox-sdk-python/blob/main/README.md)
- [Releases](https://github.com/dropbox/dropbox-sdk-python/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/dropbox-dropbox-sdk-python
