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.
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.
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"
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.
Use format=720 for a video output or format=mp3 for audio. Both work with the same /shorts/ URL; pick the format per request.
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.
A Short may not offer every quality, private or removed videos fail, each request creates one job, and normal format and duration pricing applies.
Use a single Shorts URL and one output format for each request.
Store the returned job id so your application can poll the matching progress URL.
Check terminal success and a non-empty download_url before handing the result to another service.
format=720 returns an MP4 video file of the Short.
format=mp3 returns a 320 kbps MP3 audio file.
Each URL creates one job. Enumerate playlist videos in your application first.
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.
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"
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 });
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")})
Use a server-side API key for account jobs and keep it out of browser code.
Get an API keyReview the supported video format values, duration rules, and job response contract.
Read the YouTube to MP4 guideA playlist is not expanded into multiple jobs. List its videos in your app and submit them individually.
Read the playlist workflowDownload YAML or JSON specs and inspect downloader, progress, and subtitle endpoints.
Read docsKeep button, card, widget, and REST paths reachable for existing users and migrations.
View resourcesYes. The download endpoint accepts the full YouTube /shorts/VIDEO_ID URL as it is, without converting it to a watch URL.
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.
No. Each request creates one video job. Enumerate individual video URLs before submitting a playlist workflow.
Poll the job until progress reaches 1000, then use download_url only when success is 1 or true and the URL is non-empty.