Dropbox has moved the /get_temporary_upload_link endpoint from preview to production-ready status. Developers can now use the API to request pre-signed upload URLs for pushing content into Dropbox.

The standard /upload endpoint works well when the machine connecting to Dropbox is the one holding the file. But for client-server architectures where a backend service manages all Dropbox interaction, it forces an inefficient flow: the client uploads to an intermediate location on the server, and the server then re-uploads the same content to Dropbox. That doubles network traffic and adds storage overhead on the server.

With temporary upload links, that round trip disappears. The flow becomes:

  1. The client asks the server for an upload URL.
  2. The server calls Dropbox to obtain a one-time pre-signed URL and returns it to the client.
  3. The client uploads the file directly to Dropbox via that URL.

This cuts out the server as a middleman for file transfer, reducing latency and saving bandwidth and temporary storage. The design still keeps OAuth credentials centralized on the server, so you don't sacrifice security for the performance gain.

Using the API With the DBX Python SDK

The following snippets illustrate the server and client sides of the temporary upload link pattern in Python.

Server side — request a temporary upload link and hand it to the client:

import dropbox
from dropbox.files import CommitInfo, WriteMode
# Receive a request from the client to get an upload URL
 
dbx = dropbox.Dropbox()
commit_info = CommitInfo(path=, mode=WriteMode.overwrite)
temp_link = dbx.files_get_temporary_upload_link(commit_info=commit_info)
print(temp_link.link)
 
# send upload url to client

Client side — use the received URL to upload the file directly:

import requests
 
# Request an upload url from the server
 
data = open('', 'rb').read()
res = requests.post(url='', data=data, headers={'Content-Type': 'application/octet-stream'})
if (res.status_code == 200):
    print("Success. Content hash: "+res.json()['content-hash'])
elif (res.status_code == 409):
    print("Conflict. The link does not exist or is currently unavailable, the upload failed, or another error happened.")
elif (res.status_code == 410):
    print("Gone. The link is expired or already consumed.")
else:
    print("Other error")

For anything the snippets don't cover, Dropbox's developer documentation and support channels are available for questions.