परिचय
Tunelio API आपको एक ही रिक्वेस्ट में किसी भी YouTube वीडियो या ऑडियो के लिए सीधा डाउनलोड URL देता है — कोई कतार नहीं, कोई polling नहीं, कोई progress webhook नहीं। पूरा API बस दो endpoint है: मेटाडेटा के लिए GET /info, डाउनलोड लिंक के लिए GET /create।
बेस URL: https://tunelio.dev. सभी रिक्वेस्ट TLS 1.2+ का उपयोग करती हैं। जवाब UTF-8 एन्कोडिंग के साथ JSON होते हैं।
मानसिक मॉडल
किसी दिए गए URL के लिए कौन-से फ़ॉर्मैट उपलब्ध हैं यह देखने के लिए /info कॉल करें, फिर चुनी गई क्वालिटी के साथ /create कॉल करें। /create का जवाब एक url रखता है जो हमारे CDN tunnel की ओर इशारा करता है — इसे अपने यूज़र, अपने डाउनलोडर या एक presigned S3 अपलोड को सौंप दें। तीसरा कोई चरण नहीं है।
ऑथेंटिकेशन
सभी रिक्वेस्ट को Authorization हेडर में Bearer टोकन के रूप में भेजी गई एक API key चाहिए।
Authorization: Bearer tnl_8f3a92b1c4d5e6f7a8b9c0d1e2f3a4b5Telegram से साइन इन करें (@TunelioDevBot के साथ एक टैप — कोई ईमेल या पासवर्ड नहीं), फिर Dashboard से अपनी API key बनाएँ। पूरी प्रक्रिया में लगभग 60 सेकंड लगते हैं और किसी भुगतान तरीके की ज़रूरत नहीं होती।
क्विकस्टार्ट
तीन पंक्तियों में अपनी पहली कॉल करें। key को अपनी से और URL को किसी भी YouTube लिंक से बदलें।
curl "https://tunelio.dev/create?quality=720p&url=https://youtu.be/dQw4w9WgXcQ" \
-H "Authorization: Bearer tnl_…"GET /info
एक YouTube URL को रिज़ॉल्व करता है और पूरा मेटाडेटा लौटाता है — शीर्षक, अवधि, थंबनेल, और हर उपलब्ध वीडियो व ऑडियो फ़ॉर्मैट फ़ाइल आकार और आयामों के साथ।
Query पैरामीटर
urlstringrequiredएक YouTube URL: watch?v=, youtu.be/, /shorts/, /embed/, या /live/. इनमें से कोई भी एक जैसा रिज़ॉल्व होता है।आज़माएँ
tunelio.dev/infoGET tunelio.dev/info?url=https://youtu.be/dQw4w9WgXcQजवाब का स्वरूप
titlestringVideo title as published.duration_secondsintegerTotal length in seconds.duration_strstringHuman-readable HH:MM:SS (or MM:SS when < 1h). Zero-padded.thumbnailstring (URL)Highest-resolution thumbnail available.formats[]array<Format>Every video format. See sub-fields below.formats[].qualitystringHuman label: 144p, 240p, 360p, 480p, 720p, 1080p.formats[].file_sizeinteger (bytes)Exact size in bytes.formats[].file_size_strstringHuman-readable size — e.g. "84.50 MB" or "1.20 GB".formats[].widthintegerEncoded frame width in pixels.formats[].heightintegerEncoded frame height in pixels.audioFormatobject<Audio>|nullThe best MP3 audio rendition — single object, or null if no audio track is available.audioFormat.formatstringContainer — currently mp3.audioFormat.file_sizeintegerExact MP3 size in bytes.audioFormat.file_size_strstringHuman-readable MP3 size — e.g. "35.01 MB".लागत
प्रति कॉल 6 क्रेडिट।
GET /create
एक चुने गए फ़ॉर्मैट के लिए एक सीधा, हस्ताक्षरित CDN डाउनलोड URL बनाता है। लिंक उसी जवाब में वापस आता है — न तो कोई job poll करने के लिए, न कोई webhook सुनने के लिए।
Query पैरामीटर
urlstringrequiredYouTube URL — /info जैसे ही फ़ॉर्मैट।qualitystringrequired144p, 240p, 360p, 480p, 720p, 1080p, 2160p (सिर्फ़ Mega), या ऑडियो के लिए mp3 में से एक।आज़माएँ
tunelio.dev/createGET tunelio.dev/create?url=https://youtu.be/dQw4w9WgXcQ&quality=1080pजवाब का स्वरूप
urlstring (URL)Signed CDN tunnel URL. Hand to your user or pipe to storage.filenamestringSuggested filename based on the video title and chosen format.qualitystringEcho of your requested quality — e.g. 1080p or mp3.modestring"video" or "audio".typestring"merge" (video+audio muxed) or "single" (audio-only or pre-muxed).expiresinteger (unix)Timestamp when the signed URL stops working — typically 6 hours out.file_sizeintegerFinal file size in bytes.file_size_strstringHuman-readable size — e.g. "84.50 MB".statusstringAlways "tunnel" on success.लागत
प्रति कॉल 10 क्रेडिट। फ़ाइल आकार चाहे जो हो, लागत वही रहती है — आप रिज़ॉल्यूशन के काम का भुगतान करते हैं, बाइट्स का नहीं।
GET /credits
आपका शेष क्रेडिट बैलेंस और प्रभावी प्लान लौटाता है। कॉल के एक बैच से पहले यह जाँचने के लिए इसका उपयोग करें कि आपके पास कितना बचा है, या अपने ख़ुद के डैशबोर्ड में एक बैलेंस दिखाने के लिए।
कोई query पैरामीटर नहीं — बस आपकी API key। वही Bearer टोकन (या X-API-Key हेडर) जो हर जगह इस्तेमाल होता है, इस कॉल को प्रमाणित करता है।
आज़माएँ
tunelio.dev/creditsGET tunelio.dev/creditsजवाब का स्वरूप
creditsintegerशेष क्रेडिट बैलेंस, एक पूर्णांक के रूप में।planstringआपका प्रभावी प्लान: trial, pro, ultra, या mega। एक समाप्त सशुल्क प्लान trial के रूप में रिपोर्ट करता है।जवाब हेडर
वही बैलेंस जवाब हेडर में भी दिखता है, /info और /create से मेल खाते हुए — काम का अगर आप बॉडी पार्स किए बिना संख्याएँ चाहते हैं:
X-Credits-Remainingintशेष क्रेडिट बैलेंस।X-Credits-Planstrआपके प्रभावी प्लान का नाम।लागत
मुफ़्त। अपना बैलेंस जाँचना कभी क्रेडिट खर्च नहीं करता।
/tunnel
/tunnel वह URL है जो आपको /create से वापस मिलता है। आप इसे कभी अपने कोड से कॉल नहीं करते — आप URL को अपने यूज़र, अपने <a download> टैग, अपने S3 अपलोडर, अपने Telegram बॉट आदि को सौंपते हैं।
यह क्या लौटाता है
असली फ़ाइल — MP4 या MP3 — उपयुक्त Content-Type और Content-Disposition: attachment; filename="…" हेडर के साथ। यह HTTP range रिक्वेस्ट सपोर्ट करता है, इसलिए वीडियो प्लेयर सीक कर सकते हैं और डाउनलोडर फिर से शुरू कर सकते हैं।
ऑथेंटिकेशन
कोई नहीं। URL एक exp टाइमस्टैम्प और एक sig HMAC के साथ स्वयं-हस्ताक्षरित है। expires बीत जाने के बाद, लिंक 410 Gone लौटाता है — एक नए के लिए फिर से /create कॉल करें।
लागत
मुफ़्त। उचित सीमा के भीतर बैंडविड्थ हमारी ओर से है — हम दुरुपयोग को सीमित करते हैं, लेकिन सामान्य उपयोग इसे कभी ट्रिगर नहीं करता।
रेट लिमिट
रेट लिमिट प्रति API key होती हैं, प्रति मिनट रिक्वेस्ट में मापी जाती हैं। वे एक रोलिंग विंडो पर हर 60 सेकंड में रीसेट होती हैं। Ultra और Mega प्लान पर कोई रेट लिमिट नहीं है।
सीमा पार करने पर एक Retry-After हेडर (सेकंड में) के साथ 429 Too Many Requests लौटता है। अगर आप नियमित रूप से ऊपरी सीमा तक पहुँचते हैं, तो क्लाइंट-साइड backoff जोड़ने के बजाय अपग्रेड करें — सीमाएँ इसलिए हैं ताकि आप ग़लती से अपने क्रेडिट न ख़त्म कर लें।
त्रुटियाँ
सभी त्रुटि जवाब एक ही स्वरूप का पालन करते हैं:
{
"error": "invalid_url",
"message": "Provided URL is not a recognised YouTube link."
}स्टेटस कोड
invalid_requestMissing or malformed parameter — usually a bad URL or unknown quality.unauthorizedMissing or invalid Bearer token.insufficient_creditsYour account is out of credits. Top up or upgrade.not_foundVideo does not exist, is private, or was deleted.goneYou called a /tunnel URL after its expires timestamp.rate_limitedPlan rate limit hit. Respect the Retry-After header.server_errorUnexpected on our side. Safe to retry with exponential backoff.upstream_changedYouTube changed something we hadn't patched yet. Usually self-heals within an hour.क्रेडिट और बिलिंग
हर कॉल वीडियो के आकार या अवधि की परवाह किए बिना एक निश्चित संख्या में क्रेडिट खर्च करती है:
GET /info6 creditsGET /create10 credits/tunnel downloadfreeएक सामान्य "info लाएँ, फिर डाउनलोड करें" राउंड-ट्रिप 16 क्रेडिट का होता है। नए अकाउंट 100 मुफ़्त क्रेडिट के साथ शुरू होते हैं। सशुल्क प्लान हर महीने नए क्रेडिट के साथ ताज़ा होते हैं।
विफल रिक्वेस्ट (4xx और 5xx) क्रेडिट खर्च नहीं करतीं — आपसे सिर्फ़ सफल रिज़ॉल्यूशन का बिल लिया जाता है।