Skip to content

Sending to Drive and Dropbox

A finished project’s files can go straight into a Google Drive or Dropbox folder: each audio file, video and transcript, in a folder named after the project and the day it finished, under the show’s name for a show’s project (“Podcasts › Acme Weekly › Episode 12 (2026-10-06)”). The zip and the email still come as always.

A connection is a Google Drive or Dropbox login, connected by an owner or admin in account settings (it needs a browser). A destination is a connection plus a folder.

GET /v1/connections (projects:read) the logins; never their credentials
GET /v1/destinations (projects:read)
POST /v1/destinations (destinations:manage) {"connectionId", "name", "target"}
GET /v1/destinations/{id} (projects:read)
PATCH /v1/destinations/{id} (destinations:manage) {"name"}, {"target"}
DELETE /v1/destinations/{id} (destinations:manage) removes it; deliveries keep their record

target is the folder: {"path": "/Podcasts"} on Dropbox, {"folderId": "…", "path": "Podcasts"} on Drive (the folder chosen in Google’s picker); anything else is 400 invalid_target. A name is 1 to 200 characters. Up to 100 destinations per account (409 destination_limit); a connection that isn’t the account’s, or was removed, is 400 unknown_connection.

A connection whose login stopped working shows "status": "needs_reconnect": reconnect it in account settings, and deliveries waiting on it go through.

A connection belongs to the account, not to the person who made it. When that person leaves the team, it keeps working (files still go to its folders) and shows "connectedByFormerMember": true, and the account’s owners get an email listing the logins they connected. If a login is that person’s own, disconnect it and connect one of the team’s; connecting the same login again makes it the reconnecting person’s.

Name the destinations when you create the project, up to 5:

{ "deliveries": ["dst_…"], "files": [{ "fileName": "host.wav" }] }

Leave deliveries out and a show’s project gets the show’s default destinations (defaults.delivery, see Shows and usage). Files are sent when the project completes.

To send a finished project somewhere (again), while its files exist:

POST /v1/projects/{id}/deliveries (projects:write) {"destinations": ["dst_…"]}

A key limited to a show can only use its show’s default destinations (403 show_limited). More than 5 waiting at once is 400 too_many_destinations; a destination that isn’t the account’s is 400 unknown_destination, and one whose connection was removed is 400 connection_removed.

The project’s deliveries lists each one: waiting, sending, delivered (with externalUrl, the folder), failed (with error) or cancelled. The project itself stays completed whatever happens to its deliveries.

  • A busy or unreachable service is tried again, from a minute apart up to an hour, for 24 hours.
  • A login that stopped working marks the connection needs_reconnect and keeps trying, so reconnecting finishes it.
  • A folder that’s gone, or an account out of space, fails it with the reason.
  • Files that are gone (deleted, or past the 30 days without Keep) fail it: files_expired.

A failed delivery’s error.code:

Code
folder_missingThe folder was deleted or moved.
folder_forbiddenThe login can’t write to the folder any more.
storage_fullThe Drive or Dropbox account is out of space.
files_expiredThe project’s files are gone.
timed_out24 hours of tries didn’t get the files there.
connection_removedThe connection was removed from the account.
destination_archivedThe destination was removed.
provider_errorGoogle or Dropbox refused the files for another reason (error.message says what).

POST /v1/deliveries/{id}/retry tries a failed one again, into the folder it made (409 already_retried if it’s already being tried again).

Failures are also emailed to the account’s owners and admins, at most once an hour, listing each one with its id. Anyone can turn these emails off for themselves with deliveryAlerts in PATCH /v1/email-preferences. A test project’s failures aren’t emailed.

  • delivery.succeeded and delivery.failed, with the delivery as data.object.
  • connection.needs_reconnect when a login stops working.
  • project.completed carries outputs: each file with a url that works as long as the files do (30 days, or for good when kept). Every webhook attempt checks the files first: if they’re gone, filesAvailable is false and there are no links.

A test project’s deliveries go through every status without reaching Google or Dropbox.