SubDownload API
  • 🏠 الرئيسية
  • 🛠 Skills
  • ⚡ تكامل MCP
  • 📚 الأدلة والشروحات
  • 📘 مرجع الواجهة
  • 💳 الدعم والفوترة
  • 🤖 LLMS.txt
روابط خارجية
  • 🔑 احصل على مفتاح API
  • 📋 مواصفة OpenAPI
  • ⚡ خادم MCP
ℹ️وثائق المطورين تُنشر بالإنجليزية. الشريط الجانبي يتبع اللغة المختارة.

مرجع الواجهة

Base URL: https://api.subdownload.com · Auth: Authorization: Bearer sk_live_xxx

نقاط النهاية

GET /v1/verify free
التحقّق من صحة مفتاح API. يُرجع معلومات الرمز والمستخدم. لا يستهلك أرصدة.

الطلب

curl -H "Authorization: Bearer sk_live_xxx" \
  https://api.subdownload.com/v1/verify

الاستجابة 200

{
  "valid": true,
  "token": { "name": "My App", "prefix": "sk_live_abc", "monthly_quota": 0, "used_quota": 120 },
  "user": { "id": 42, "email": "[email protected]", "plan": "free", "credits_remaining": 148 }
}
GET /v1/youtube/transcript 1 credit
جلب النص / الترجمات لفيديو YouTube. يقبل ID الفيديو أو أي URL صالح (watch، youtu.be، shorts).

المعامِلات

الاسمالنوعمطلوب؟الوصف
video_idstringمطلوبID من 11 حرفًا أو URL YouTube كامل. الاسم البديل: video_url.
langstringاختياريرموز اللغات المفضّلة مفصولة بفواصل (مثلًا en,zh,ja).

الطلب

curl -H "Authorization: Bearer sk_live_xxx" \
  "https://api.subdownload.com/v1/youtube/transcript?video_id=dQw4w9WgXcQ&lang=en"

الاستجابة 200

{
  "data": {
    "video_id": "dQw4w9WgXcQ",
    "language": "en",
    "segments": [
      { "text": "We're no strangers to love", "start": 0.0, "duration": 3.5 }
    ],
    "text": "We're no strangers to love...",
    "meta": { "title": "...", "author": "...", "thumbnail": "..." }
  },
  "credits_used": 1,
  "credits_remaining": 148
}

الأخطاء

400 video_id مفقود · 404 بدون ترجمات · 402 نفاد الأرصدة

GET /v1/youtube/search 1 credit
البحث في YouTube عن فيديوهات أو قنوات مطابقة لكلمة مفتاحية.

المعامِلات

الاسمالنوعمطلوب؟الوصف
qstringمطلوباستعلام البحث (1-200 حرفًا).
typestringاختياريvideo (افتراضي) أو channel.
limitintegerاختياري1-50 نتيجة (افتراضي 20).

الطلب

curl -H "Authorization: Bearer sk_live_xxx" \
  "https://api.subdownload.com/v1/youtube/search?q=rust+tutorial&limit=5"
GET /v1/youtube/channel/resolve free
حلّ أي إشارة إلى قناة (@handle، URL، أو UC… ID) إلى معلومات قناة قانونية.

المعامِلات

الاسمالنوعمطلوب؟الوصف
inputstringمطلوب@handle، URL القناة، URL الفيديو أو UC… ID.
GET /v1/youtube/channel/search 1 credit
البحث داخل فيديوهات قناة محدّدة.

المعامِلات

الاسمالنوعمطلوب؟الوصف
channelstringمطلوب@handle، URL أو UC… ID (الاسم البديل: channel_id).
qstringمطلوباستعلام البحث.
limitintegerاختياري1-50 (افتراضي 30).
GET /v1/youtube/channel/latest free
جلب أحدث ~15 فيديو لقناة عبر RSS. سريع ومجاني.

المعامِلات

الاسمالنوعمطلوب؟الوصف
channelstringمطلوب@handle، URL أو UC… ID (الاسم البديل: channel_id).
GET /v1/youtube/channel/videos 1 credit/page
سرد كل الفيديوهات التي رفعتها قناة، مقسّم ~100 لكل صفحة.

المعامِلات

الاسمالنوعمطلوب؟الوصف
channelstringالصفحة الأولى@handle، URL أو UC… ID (الاسم البديل: channel_id).
continuationstringالصفحات التاليةالرمز المُعاد من الاستدعاء السابق.
ملاحظة: مرّر channel أو continuation، لا كليهما.
GET /v1/youtube/playlist/videos 1 credit/page
سرد فيديوهات قائمة تشغيل YouTube مع تقسيم الصفحات.

المعامِلات

الاسمالنوعمطلوب؟الوصف
playliststringالصفحة الأولىURL أو ID قائمة التشغيل (PL…، UU…، LL…، FL…، OL…).
continuationstringالصفحات التاليةالرمز من الاستجابة السابقة.

التفريغ الصوتي بالذكاء الاصطناعي (ASR)

شغّل Whisper على فيديوهات بدون ترجمات. غير متزامن: POST ينشئ مهمة، ثم استطلع GET حتى status=done. 5 نقاط، تُخصم فقط عند النجاح — إعادة تشغيل ASR على فيديو سبق دفعه مجانية.

POST /v1/youtube/asr 5 نقاط عند done
يبدأ تفريغًا صوتيًا غير متزامن باستخدام Whisper. يُرجع task_id وتلميحات ETA لضبط وتيرة الاستطلاع.

نص الطلب (JSON)

الاسمالنوعمطلوب؟الوصف
video_urlstringمطلوبرابط YouTube (watch / youtu.be / shorts / embed).
langstringاختياريتلميح اللغة (en، ar…). اتركه فارغًا للكشف التلقائي.

الطلب

curl -X POST -H "Authorization: Bearer sk_live_xxx"   -H "Content-Type: application/json"   -d '{"video_url":"https://youtu.be/dQw4w9WgXcQ"}'   https://api.subdownload.com/v1/youtube/asr

الاستجابة 202

{
  "task_id": "task_01HX...",
  "status": "queued",
  "from_cache": false,
  "queue_position": 2,
  "estimated_wait_seconds": 61,
  "next_poll_after_seconds": 15,
  "poll_url": "/v1/youtube/asr/task_01HX..."
}
التزم بـ next_poll_after_seconds بين كل استطلاع. عند إصابة الكاش يُعاد status=done مباشرة مع segments مضمّنة.
GET /v1/youtube/asr/{task_id} مجاني
استطلاع مهمة ASR. مجاني — بلا نقاط ولا حصة توكن. فقط المنشئ يستطيع القراءة.

الحالات: queued · downloading · transcribing · done · failed · cancelled. segments نهائية فقط عند status=done.

Library (مكتبة المستخدم)

تخزين لكل مستخدم لنصوص ASR المحفوظة وملخصات الذكاء الاصطناعي. القراءات مجانية؛ الكتابات تستهلك وحدة حصة توكن واحدة. لا تُخصم نقاط المستخدم.

GET /v1/library مجاني
يسرد العناصر التي حفظها المستخدم في Library (نصوص ASR + ملخصات).

المعامِلات

الاسمالنوعمطلوب؟الوصف
favoritestringاختياري1 أو true لإرجاع المفضلة فقط.
qstringاختياريتطابق جزئي في العنوان/المؤلف.
tagstringاختياريتصفية بالوسم.
limitintegerاختياري1–100 (افتراضي 20).
offsetintegerاختياريإزاحة الصفحات.
GET /v1/library/{id} مجاني
يجلب بيانات عنصر Library واحد. استخدم has_asr / has_summary لتقرير أي endpoint محتوى تستدعي بعدها.
GET /v1/library/{id}/transcript مجاني
يُرجع segments ASR والنص المدمج. 404 إذا لم يوجد ASR مكتمل.
GET /v1/library/{id}/summary مجاني
يُرجع نص الملخص المحفوظ. استخدم ?locale= لاختيار من اللغات المحفوظة (افتراضيًا Accept-Language ثم en). 404 عند عدم وجود ملخص لـ (video_id, locale).
POST /v1/library مجاني (وحدة حصة توكن واحدة)
kind=asr يضع علامة أن النص محفوظ (segments موجودة أصلاً في جدول ASR). kind=summary يرفع نص ملخص مُولَّد مسبقًا إلى جدول summaries ويضع has_summary=true. Upsert حسب (video_id, locale).

نص الطلب (JSON)

الاسمالنوعمطلوب؟الوصف
video_idstringمطلوبمعرّف فيديو YouTube.
kindstringمطلوبasr أو summary.
title / author / thumbnail / video_url / language / tagstringاختياريبيانات وصفية للعرض/التصفية.
localestringفي وضع summarylocale الملخص (افتراضيًا Accept-Language ثم en).
textstringعند kind=summaryنص الملخص المراد حفظه.
modelstringاختياريمعرّف LLM (مثل claude-opus-4).
DELETE /v1/library/{id} مجاني
حذف ناعم لعنصر Library. POST /v1/library لاحق لنفس الفيديو يستعيد الصف بدل إنشاء تكرار.

مكتبات SDK الرسمية

استخدم مكتبات العميل الرسمية للتكامل السريع:

اللغةالمستودع
Pythonapi-sdk/python
JavaScriptapi-sdk/javascript
Goapi-sdk/go
Javaapi-sdk/java
Kotlinapi-sdk/kotlin
Rustapi-sdk/rust

→ الشيفرة الكاملة: github.com/SubDownload/api-sdk

→ للفوترة وحدود المعدل ورموز الأخطاء راجع الدعم والفوترة.