7. Upload links (BigLoader) — let your users upload

Telegram bots and many integrations can't relay big files. An upload link is a short-lived, one-time URL you send to an end user: they open it in any browser, the file goes straight to storage, and — if you pinned an operation — it is processed automatically and billed exactly like a normal /jobs/api submit.

Prefer clicking? The panel's Upload links page (/upload-links) does the same thing and lets you download both the source and the result.

Create a link

curl -s https://mp.dvocorp.com/api/v1/upload-sessions/api \
  -H 'X-Api-Key: ca_live_...' -H 'Content-Type: application/json' \
  -d '{
    "service_slug": "clipconvert",
    "operation_key": "compress",
    "params": { "level": "medium" },
    "expires_in_seconds": 3600,
    "max_file_size_bytes": 2147483648,
    "allowed_mime_types": ["video/mp4", "video/quicktime"],
    "callback_url": "https://my-bot.example.com/hooks/bigloader",
    "delete_after_processing": true,
    "metadata": { "telegram_user_id": "123456" }
  }'
{
  "id": "<session_id>",
  "upload_url": "https://mp.dvocorp.com/u/<TOKEN>",
  "expires_at": "2026-07-22T13:00:00Z",
  "status": "created",
  "estimated_cost": 3,
  "callback_secret": "<shown once — use it to verify callbacks>"
}

Send upload_url to your user. That's it.

Options:

Get the result

Poll:

curl -s https://mp.dvocorp.com/api/v1/upload-sessions/<session_id> -H 'X-Api-Key: ca_live_...'
{
  "id": "...",
  "status": "processing",
  "file": { "filename": "movie.mp4", "size_bytes": 2147483648, "url": "https://.../movie.mp4" },
  "uploaded_ip": "203.0.113.7",
  "jobs": [ { "id": "...", "operation_key": "compress", "status": "processing" } ],
  "estimated_cost": 3,
  "error": null
}

Statuses: created → uploading → uploaded → processing → done, plus failed and expired. done means every job finished and at least one succeeded — the per-job statuses tell the rest. Results are at jobs[].result.output_url.

GET https://mp.dvocorp.com/api/v1/upload-sessions lists your recent sessions; DELETE https://mp.dvocorp.com/api/v1/upload-sessions/{id} removes the files and cancels and refunds any in-flight jobs.

Or set callback_url and receive webhooks:

Each callback carries:

X-BigLoader-Event:     processing.completed
X-BigLoader-Signature: HMAC_SHA256(callback_secret, raw_request_body)   # hex

Verify by recomputing the HMAC over the raw body. Delivery is best-effort — polling always works as a fallback.

Limits

Env knobs: UPLOAD_BRIDGE_TTL_SEC, UPLOAD_BRIDGE_MAX_TTL_SEC, UPLOAD_BRIDGE_IP_RPM, UPLOAD_BRIDGE_PAGE_BASE_URL.