The ZenTransfer API gives developers programmatic access to file records in a ZenTransfer account. It is designed for building custom integrations, newsroom ingest pipelines, and any workflow that needs to pull file data from ZenTransfer into another system on a schedule or in response to a query.
For event-driven workflows — where you want an action to fire the moment a file arrives — the Zapier integration is the recommended approach. ZenTransfer pushes events to Zapier immediately on file arrival. The API is for scenarios where polling or on-demand retrieval is the appropriate pattern.
Authentication
The API uses OAuth 2.0 client credentials. Find your Client ID and Client Secret in the ZenTransfer dashboard.
Request a bearer token:
POST /oauth/token
Content-Type: application/json
{
"client_id": "your_client_id",
"client_secret": "your_client_secret"
}
Response:
{
"access_token": "your_bearer_token",
"token_type": "Bearer",
"expires_in": 3600
}
Include the token in the Authorization header on all subsequent requests.
Retrieving files
GET /api/files
Authorization: Bearer <your_bearer_token>
Returns a paginated list of file records. Use the following parameters to control the response:
| Parameter | Type | Description |
|---|---|---|
o | integer | Offset — starting position in the result set |
l | integer | Limit — number of records to return per request |
since | ISO datetime | Return only files created after this timestamp |
Example — fetch the 20 most recent files created after a specific time:
GET /api/files?since=2026-03-01T12:00:00Z&o=0&l=20
Authorization: Bearer <your_bearer_token>
File object
Each record in the response array contains:
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier for the file |
name | string | Original filename as uploaded |
mime_type | string | MIME type (e.g. image/jpeg, image/raw) |
size | integer | File size in bytes |
created | ISO datetime | When the file was created in ZenTransfer |
modified | ISO datetime | Last modification timestamp |
url | string | URL to access the full file |
thumbnail_url | string | URL to access a thumbnail version |
The response may include additional fields. Only the documented fields above are stable — build integrations against these and ignore undocumented fields, which may change.
Incremental sync pattern
For an integration that needs to stay in sync with new arrivals without missing any files and without re-fetching everything each time:
- On the first run, fetch all files and store the
createdtimestamp of the most recent record - On each subsequent run, pass that timestamp as the
sinceparameter — you receive only files created after your last sync point - Update the stored timestamp to the most recent
createdvalue in the new response
This pattern keeps polling efficient even as the total file count grows.
Keep polling intervals reasonable. ZenTransfer currently does not enforce rate limits, but this will change. For instant notifications rather than periodic polling, use Zapier.
Use cases
Newsroom and agency ingest pipelines — a backend service polls the ZenTransfer API every 30 seconds, retrieves new files since the last poll, fetches each file, and writes it into the newsroom media asset management system. The photographer's camera upload triggers the delivery chain automatically.
Custom dashboards and monitoring tools — a web app authenticates with the API, retrieves recent file records, and displays them in a custom interface. Useful for organisations that want to build their own delivery monitoring view on top of ZenTransfer data.
Backup and archiving scripts — a scheduled script calls the API with a since parameter, downloads new files, and writes them to a local NAS, a cold cloud storage tier, or a custom archive system.
Analytics and reporting — file records include timestamps and metadata. An analytics tool can query the API to measure delivery volume, latency distributions, or file type breakdowns over time.
SDK and client libraries
ZenTransfer does not currently provide an official SDK. The API is a standard REST/JSON interface accessible from any HTTP client — curl, Python's requests library, Node's fetch, or any other HTTP client in any language.
From $3.75 per month
Camera-to-cloud delivery for photojournalists. No laptop required.
