YouTube Shorts Download API

Send a /shorts/ video URL to the download endpoint and create a single MP4 or MP3 job. Poll its progress URL and use the returned file only when the job succeeds.

First request

GET

Use the shared API host unless the dashboard shows an account-specific hostname.

curl --get "https://p.savenow.to/ajax/download.php" \
  --data-urlencode "url=https://www.youtube.com/shorts/VIDEO_ID" \
  --data "format=720" \
  --data "apikey=YOUR_API_KEY"

Pass the Shorts URL directly

Send the complete https://www.youtube.com/shorts/VIDEO_ID URL in the normal download url parameter. The endpoint accepts this URL shape without converting it to a watch URL.

Choose MP4 or MP3

Use format=720 for a video output or format=mp3 for audio. Both work with the same /shorts/ URL; pick the format per request.

Poll the job you just created

The response includes an id and progress_url. Poll that job until progress reaches 1000. Download only when success is 1 or true and the current response has a non-empty download_url.

Account for source and duration limits

A Short may not offer every quality, private or removed videos fail, each request creates one job, and normal format and duration pricing applies.

Feature details

Create and finish one Shorts job

Submit one video

Use a single Shorts URL and one output format for each request.

Keep the response id

Store the returned job id so your application can poll the matching progress URL.

Validate the file response

Check terminal success and a non-empty download_url before handing the result to another service.

What to expect

MP4

format=720 returns an MP4 video file of the Short.

MP3

format=mp3 returns a 320 kbps MP3 audio file.

No playlist expansion

Each URL creates one job. Enumerate playlist videos in your application first.

Parameters

url Required Pass the full YouTube /shorts/VIDEO_ID URL.
format=720 Video output Returns an MP4 file of the Short.
format=mp3 Audio output Returns a 320 kbps MP3 of the Short.
apikey Required for account API jobs Keep the dashboard API key on your server when creating a metered API job.
id / progress_url Job response Track this job until it reaches a successful terminal response with download_url.

Request examples

cURL Shorts MP4 request

bash
curl --get "https://p.savenow.to/ajax/download.php" --data-urlencode "url=https://www.youtube.com/shorts/VIDEO_ID" --data "format=720" --data "apikey=YOUR_API_KEY"

Node.js Shorts MP3 request

javascript
const apiKey = process.env.VDA_API_KEY;
if (!apiKey) throw new Error('Set VDA_API_KEY on the server.');

const params = new URLSearchParams({
  url: 'https://www.youtube.com/shorts/VIDEO_ID',
  format: 'mp3',
  apikey: apiKey,
});
const response = await fetch('https://p.savenow.to/ajax/download.php?' + params);
if (!response.ok) throw new Error('Download request failed: ' + response.status);
const job = await response.json();
if (!job.success || !job.id) throw new Error(job.message || 'The Shorts job was not accepted.');
console.log({ id: job.id, progressUrl: job.progress_url });

Python Shorts MP4 request

python
import os
import requests

response = requests.get(
    "https://p.savenow.to/ajax/download.php",
    params={
        "url": "https://www.youtube.com/shorts/VIDEO_ID",
        "format": "720",
        "apikey": os.environ["VDA_API_KEY"],
    },
    timeout=30,
)
response.raise_for_status()
job = response.json()
if not job.get("success") or not job.get("id"):
    raise RuntimeError(job.get("message") or "The Shorts job was not accepted.")
print({"id": job["id"], "progress_url": job.get("progress_url")})

Important details

Get an API key

Use a server-side API key for account jobs and keep it out of browser code.

Get an API key

Read the playlist limit

A playlist is not expanded into multiple jobs. List its videos in your app and submit them individually.

Read the playlist workflow

Related guides

Continue building

OpenAPI docs

Download YAML or JSON specs and inspect downloader, progress, and subtitle endpoints.

Read docs

Embed resources

Keep button, card, widget, and REST paths reachable for existing users and migrations.

View resources

Common questions

Can I send a /shorts/ URL directly?

Yes. The download endpoint accepts the full YouTube /shorts/VIDEO_ID URL as it is, without converting it to a watch URL.

Can I get MP4 and MP3 from a Short?

Yes. Use format=720 (or another video format) for MP4 and format=mp3 for a 320 kbps MP3. Available qualities depend on the source video.

Does one request process a Shorts playlist?

No. Each request creates one video job. Enumerate individual video URLs before submitting a playlist workflow.

When should my app use download_url?

Poll the job until progress reaches 1000, then use download_url only when success is 1 or true and the URL is non-empty.