Dropvik
REST API · v1

Build on Dropvik

Upload files from your app, script or server, get share links back and react to downloads with signed webhooks. JSON over HTTPS, one API key.

1 · Authenticate

Create a key under Dashboard → API & webhooks and send it as “Authorization: Bearer dvk_…” (or the X-Api-Key header).

2 · Upload

Small files in one request; large files (up to your plan limit) in resumable chunks. The same limits as in the web app apply.

3 · React

Webhooks tell your system when a transfer is live, downloaded, commented on or updated.

Quick start: one request

curl -H "Authorization: Bearer dvk_YOUR_KEY" \
     -F "files[][email protected]" -F "files[][email protected]" \
     -F "title=Quarterly report" -F "retention_days=7" \
     https://dropvik.com/api/v1/upload

Response (201):

{
  "code": "k3x9q2m7tz",
  "status": "active",
  "link": "https://dropvik.com/t/k3x9q2m7tz",
  "file_count": 2,
  "total_size": 48213377,
  "files": [ { "id": 812, "name": "report.pdf", "size": 1204331, "sha256": "…" }, … ]
}

Endpoints

Base URL: https://dropvik.com/api/v1

GET/account

Your plan, storage quota and upload limits.

POST/upload

Upload small files in one multipart request and get the link back.

POST/transfers

Start a chunked upload for large files (returns the file ids and chunk size).

PUT/transfers/{uuid}/chunk/{file}/{index}

Send one chunk as the raw request body.

POST/transfers/{uuid}/complete

Finish the upload: virus scan, storage and e-mail delivery.

GET/transfers/{uuid}/status

Poll a transfer that is still processing.

GET/transfers

List your transfers (filters: status, search; paging: count, page).

GET/transfers/{code}

Details of one transfer including its files.

DELETE/transfers/{code}

Delete a transfer and its files.

Large files: chunked upload

# 1. start
curl -H "Authorization: Bearer dvk_YOUR_KEY" -H "Content-Type: application/json" \
     -d '{"files":[{"name":"film.mov","size":7340032000}],"delivery":"email","recipients":["[email protected]"]}' \
     https://dropvik.com/api/v1/transfers

# 2. every chunk (index 0, 1, 2 … up to total_chunks - 1)
curl -X PUT -H "Authorization: Bearer dvk_YOUR_KEY" -H "Content-Type: application/octet-stream" \
     --data-binary @chunk-0.bin https://dropvik.com/api/v1/transfers/UUID/chunk/FILE_ID/0

# 3. finish
curl -X POST -H "Authorization: Bearer dvk_YOUR_KEY" https://dropvik.com/api/v1/transfers/UUID/complete

Options for both upload methods: title, message, retention_days (1, 3, 7, 30, 365, 0), password, self_destruct, max_downloads, delivery (link | email), recipients[], folder_id.

Webhooks

Set a webhook URL in your dashboard. Every event is a JSON POST with an X-Dropvik-Event header; if you set a secret, the body is signed in X-Dropvik-Signature.

eventtransfer.completed

A transfer finished uploading and is live.

eventtransfer.downloaded

Someone downloaded files from your transfer.

eventtransfer.comment

A recipient left a comment, picks or feedback.

eventtransfer.version

A new version was uploaded to an existing link.

eventfile_request.upload

Files arrived through one of your file request links.

Verifying the signature (PHP):

$body = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $body, $webhookSecret);
if (! hash_equals($expected, $_SERVER['HTTP_X_DROPVIK_SIGNATURE'] ?? '')) {
    http_response_code(401); exit;
}
$event = json_decode($body, true);   // { "event": "transfer.downloaded", "time": "…", "data": { … } }

Gmail & Outlook extension

Our Chrome extension (also works in Edge and Brave) is built on this API: upload large files from the toolbar and insert the download link straight into the e-mail you are writing in Gmail or Outlook on the web.

  1. Download the ZIP and unpack it.
  2. Open chrome://extensions, turn on “Developer mode” and choose “Load unpacked”, then select the unpacked folder.
  3. Click the Dropvik icon → Settings and paste an API key from your dashboard.

Download the extension (ZIP · v1.0.0)

Limits and errors

Errors return a JSON body with an “error” message and the usual HTTP status codes: 401 invalid key, 403 API not enabled, 422 validation or plan limit, 429 too many requests. Depending on your plan, API access is available right away or after a short application in the dashboard.

Ready to integrate?Create a key in your dashboard in under a minute.
Get an API key →