One API.
Every medium.
Movies, music, short videos and universal social resolution — galleries with 100 images, mixed posts, honest 4K when the source truly has it. One normalized contract for every client you'll ever build.
Every number on this page is fetched live from /api/v1/capabilities — no fake metrics.
Built like a platform, not a scraper
Universal Resolver
Drop any public URL. Platform-specific adapters run first, the universal extractor covers 1,700+ sites, and every image and video comes back in original order.
Multi-Source Engine
Providers are health-tracked, latency-ranked and fail over automatically. You see which provider answered — and which ones were attempted — in every response.
Honest Quality
144p → 2160p labeled from real source pixels. Request 2160p and get a clear fallback report if the source only has 1080p. Quality is never manufactured.
Multi-Media First
A carousel of 100 photos plus 2 videos returns 102 items — counted, typed, dimensioned, with MIME types, durations and quality per item.
Secure by Default
SSRF protection, rate limits, request IDs on every response, normalized error contract. Secrets stay server-side — always.
Portable
Env-driven, Docker-ready, zero cloud lock-in. Move the whole platform to a new VPS without touching application code.
Three steps. Zero guesswork.
If you can copy a link, you can use this API. That's the whole learning curve.
Grab an API key
Sign up and create a key in the dashboard. One click. It's shown once, then masked — store it safely.
Create API keyPaste any media link
YouTube, TikTok, Instagram, Facebook, X, Reddit, SoundCloud, Vimeo, direct files… one endpoint takes them all.
POST /api/v1/download
Receive clean media
Honest quality labels, real metadata, your file ready to fetch. Webhooks ping you the moment it's done.
GET /api/v1/download/{id}/file
Real request you can run right now
curl -X POST https://pappy-api-downloader.duckdns.org/api/v1/download \
-H "Content-Type: application/json" \
-H "X-API-Key: YOUR_KEY" \
-d '{"url":"https://www.youtube.com/watch?v=jNQXAC9IVRw","type":"video","quality":"720p"}'
Then poll /api/v1/download/{jobId} and fetch /api/v1/download/{jobId}/file. Full guide in Docs.
What it speaks (live from the capability registry)
Resolve a URL right now
Production endpoint — the same engine future clients use.
POST /api/v1/social/resolve
Open API Docs