Skip to main content
Use imports when the file lives on the internet and you do not have a local copy to upload. Framelane copies the file into your workspace storage and returns a source_url you can use in renders and tasks — the same CDN URL shape as POST /v1/uploads. For files on your machine, use Uploading media instead.

How it works

POST /v1/imports  →  processing  →  GET /v1/imports/{id} or asset.ready webhook  →  use source_url
Imports run asynchronously. The API returns immediately with status: processing. When the file is in storage and metadata is ready (for video/audio), you receive an asset.ready webhook or can poll until status is ready.

Import flow

1. Start an import

curl -X POST https://api.framelane.io/v1/imports \
  -H "Authorization: Bearer $FRAMELANE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.dropbox.com/s/abc123/clip.mp4?dl=0"
  }'
Response (202 Accepted):
{
  "id": "import_01J8QR2K5VKDGN2T4FBM3CZYX7",
  "status": "processing",
  "source_url": null,
  "created_at": "2026-05-29T08:00:00Z"
}
Optional filename hints the desired extension when the remote URL does not include one.

2. Wait for completion

Poll the import:
curl https://api.framelane.io/v1/imports/import_01J8QR2K5VKDGN2T4FBM3CZYX7 \
  -H "Authorization: Bearer $FRAMELANE_API_KEY"
When ready:
{
  "id": "import_01J8QR2K5VKDGN2T4FBM3CZYX7",
  "status": "ready",
  "source_url": "https://cdn-user.framelane.io/uploads/ws_01J.../a1b2c3.mp4",
  "error": null
}
Or subscribe to webhooks and handle asset.ready — same event as after a direct upload.

3. Use source_url in your job

{
  "type": "video",
  "id": "clip1",
  "source_url": "https://cdn-user.framelane.io/uploads/ws_01J.../a1b2c3.mp4"
}
For Transloadit imports (public URLs and cloud share links), Framelane reads duration and dimensions from Transloadit’s assembly metadata when the import completes — no separate ffprobe step. asset.ready usually fires as soon as the import finishes. For YouTube imports (Oxylabs), metadata is extracted the same way as direct uploads (async probe after the file lands in GCS). You can submit a render immediately; if metadata is not ready yet, the job stays queued until it is.

Supported sources

Framelane routes each URL to the appropriate backend automatically.
SourceExampleBackend
Direct HTTPS file URLhttps://cdn.example.com/clip.mp4Transloadit
Dropbox share linkhttps://www.dropbox.com/s/...Transloadit
Google Drive share linkhttps://drive.google.com/file/d/...Transloadit
Google Docs export linkhttps://docs.google.com/...Transloadit
OneDrive share linkhttps://onedrive.live.com/...Transloadit
YouTubehttps://www.youtube.com/watch?v=..., https://youtu.be/...Oxylabs (direct to GCS)
Transloadit fetches the remote file and stores it in your workspace bucket. Share links from Dropbox, Google Drive, and OneDrive are resolved to the actual file, not an HTML preview page.

YouTube (Oxylabs)

YouTube cannot be imported through Transloadit. For YouTube URLs, Framelane uses the Oxylabs YouTube Downloader, which downloads the video and uploads it directly to Framelane GCS storage — bytes never pass through the Framelane API server.
curl -X POST https://api.framelane.io/v1/imports \
  -H "Authorization: Bearer $FRAMELANE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  }'
YouTube imports default to 720p video when available. Oxylabs supports videos up to 12 hours; download jobs time out after 1 hour.
You are responsible for ensuring you have the right to download and process content from any URL you submit, including YouTube videos.

Choosing upload vs import

SituationEndpoint
File on disk / in your appPOST /v1/uploads
Public HTTPS URL or cloud share linkPOST /v1/imports
YouTube URLPOST /v1/imports
File already on your own CDNPass that URL directly as source_url in renders/tasks (no import)

Errors

Code / statusCause
422 invalid_requestURL is not HTTPS, malformed, or unsupported
422 invalid_sourceRemote URL unreachable or not a downloadable file
import status: failedTransloadit assembly error or Oxylabs download failed — see error on GET /v1/imports/{id}
asset_not_readyImport finished but metadata probe still running — retry render or wait for asset.ready
401Missing or invalid API key