Back to all posts

Product Update: Async Download API (v2) for Long Videos

Jonathan Geiger
product-updatedownload-apiyoutubetiktokinstagramfacebookdeveloper-tools

TL;DR: The synchronous download endpoints are great for short clips but time out on long videos. So we added a v2 async download API: you submit a job, get a jobId back immediately, then poll until it's ready and download from the URL. It works for YouTube, TikTok, Instagram, and Facebook, downloads at up to 720p and 2 GB per file, and is billed 1 credit per minute of video. Read the docs.

Why v2

The existing download endpoints (/youtube/download, /tiktok/download, /instagram/download) return the download URL in a single request. That's perfect for short videos. But a long podcast, stream, or lecture can take too long to fetch inside one HTTP request, so the call times out before it finishes.

v2 fixes that by making the download a job you poll, instead of one long-running request. The heavy lifting happens in the background, and your request returns in milliseconds.

How it works

Three steps:

  1. Submit a download job. You get a jobId back right away.
  2. Poll the job until its status is ready.
  3. Download from the temporary URL in the ready response.

1. Start a job

curl -X POST "https://api.socialkit.dev/v2/youtube/download?access_key=YOUR_KEY&url=https://youtube.com/watch?v=VIDEO_ID&quality=720p"
{
  "success": true,
  "data": {
    "jobId": "6a5b42b474b3bc25582a1051",
    "status": "queued",
    "statusUrl": "/v2/downloads/6a5b42b474b3bc25582a1051"
  }
}

2. Poll until ready

curl "https://api.socialkit.dev/v2/downloads/6a5b42b474b3bc25582a1051?access_key=YOUR_KEY"

While it's working you'll see status: "processing". When it's done:

{
  "success": true,
  "data": {
    "status": "ready",
    "downloadUrl": "https://socialkit-downloads.s3.amazonaws.com/...",
    "expiresIn": 3600,
    "durationSeconds": 1631,
    "fileSizeMB": "117.05 MB",
    "creditsCost": 28,
    "title": "Video Title",
    "thumbnail": "https://i.ytimg.com/vi/.../maxresdefault.jpg"
  }
}

The downloadUrl is valid for an hour. Fetch it and you're done.

The same shape you already know

The request looks just like the v1 download call, only the path changes to /v2/{platform}/download. So platform is one of youtube, tiktok, instagram, facebook, and you can pass the same url, quality, format, and country params.

Limits and pricing

  • Quality: up to 720p (higher requests are clamped to 720p).
  • File size: up to 2 GB per download.
  • Formats: mp4 and m4a everywhere; mp3, webm, avi, ogg, wav where transcoding is available.
  • Credits: 1 per minute of video (minimum 1), charged once when the job completes. Failed jobs are not charged.

Try it

If you're pulling long-form content, switch those calls to v2 and stop worrying about timeouts.