SubDownload API
  • 🏠 Start
  • 🛠 Skills
  • ⚡ MCP-Integration
  • 📚 Anleitungen
  • 📘 API-Referenz
  • 💳 Support & Abrechnung
  • 🤖 LLMS.txt
Extern
  • 🔑 API-Schlüssel holen
  • 📋 OpenAPI-Spezifikation
  • ⚡ MCP-Server
ℹ️Entwicklerdokumentation wird auf Englisch veröffentlicht. Die Seitenleiste folgt deiner ausgewählten Sprache.

API-Referenz

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

Endpunkte

GET /v1/verify free
Prüft, ob ein API-Key gültig ist. Liefert Token- und Benutzerinfos. Verbraucht keine Credits.

Request

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

Antwort 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
Transkript / Untertitel für ein YouTube-Video abrufen. Akzeptiert Video-ID oder jede gültige YouTube-URL (watch, youtu.be, shorts).

Parameter

NameTypPflichtBeschreibung
video_idstringPFLICHT11-stellige Video-ID oder vollständige YouTube-URL. Alias: video_url.
langstringoptionalBevorzugte Sprachcodes, kommagetrennt (z. B. en,zh,ja).

Request

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

Antwort 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
}

Fehler

400 fehlende video_id · 404 keine Untertitel · 402 Credits aufgebraucht

GET /v1/youtube/search 1 credit
Durchsucht YouTube nach Videos oder Kanälen, die zu einem Keyword passen.

Parameter

NameTypPflichtBeschreibung
qstringPFLICHTSuchanfrage (1-200 Zeichen).
typestringoptionalvideo (Standard) oder channel.
limitintegeroptional1-50 Ergebnisse (Standard 20).

Request

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
Löst jede Kanal-Referenz (@handle, URL oder UC…-ID) in kanonische Kanal-Info auf.

Parameter

NameTypPflichtBeschreibung
inputstringPFLICHT@handle, Kanal-URL, Video-URL oder UC…-ID.
GET /v1/youtube/channel/search 1 credit
Sucht innerhalb der Videos eines bestimmten Kanals.

Parameter

NameTypPflichtBeschreibung
channelstringPFLICHT@handle, URL oder UC…-ID (Alias: channel_id).
qstringPFLICHTSuchanfrage.
limitintegeroptional1-50 (Standard 30).
GET /v1/youtube/channel/latest free
Ruft die neuesten ~15 Videos eines Kanals per RSS ab. Schnell und kostenlos.

Parameter

NameTypPflichtBeschreibung
channelstringPFLICHT@handle, URL oder UC…-ID (Alias: channel_id).
GET /v1/youtube/channel/videos 1 credit/page
Listet alle von einem Kanal hochgeladenen Videos, paginiert ~100 pro Seite.

Parameter

NameTypPflichtBeschreibung
channelstringerste Seite@handle, URL oder UC…-ID (Alias: channel_id).
continuationstringFolgeseitenToken aus dem vorherigen Aufruf.
Hinweis: Entweder channel oder continuation angeben, nicht beides.
GET /v1/youtube/playlist/videos 1 credit/page
Listet Videos in einer YouTube-Playlist mit Paginierung.

Parameter

NameTypPflichtBeschreibung
playliststringerste SeitePlaylist-URL oder -ID (PL…, UU…, LL…, FL…, OL…).
continuationstringFolgeseitenToken aus der vorherigen Antwort.

KI-Transkription (ASR)

Whisper für Videos ohne Untertitel. Asynchron: POST erstellt einen Task, danach via GET bis status=done pollen. 5 Credits, nur bei erfolgreichem Abschluss abgebucht — ein erneuter ASR-Lauf für dasselbe Video ist kostenlos.

POST /v1/youtube/asr 5 Credits bei done
Startet eine asynchrone KI-Whisper-Transkription. Liefert task_id plus ETA-Hinweise, damit Sie das Polling richtig takten.

Body (JSON)

NameTypPflichtBeschreibung
video_urlstringERFORDERLICHYouTube-URL (watch / youtu.be / shorts / embed).
langstringoptionalSprachhinweis (en, de…). Auslassen für automatische Erkennung.

Request

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

Antwort 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..."
}
Halten Sie sich an next_poll_after_seconds zwischen Polls. Bei Cache-Treffer wird status=done sofort mit eingebetteten Segments zurückgegeben.
GET /v1/youtube/asr/{task_id} kostenlos
Pollt einen ASR-Task. Kostenlos — kein Credit- und Token-Quota-Verbrauch. Nur der Ersteller kann lesen.

Status: queued · downloading · transcribing · done · failed · cancelled. Nur bei status=done sind die Segments endgültig.

Library (Benutzerspeicher)

Pro-Benutzer-Speicher für gespeicherte Transkripte und KI-Zusammenfassungen. Lesezugriffe kostenlos; Schreibzugriffe verbrauchen eine Token-Quota-Einheit. Keine Nutzer-Credits.

GET /v1/library kostenlos
Listet Einträge, die der Benutzer in seiner Library gespeichert hat (Transkripte + Zusammenfassungen).

Parameter

NameTypPflichtBeschreibung
favoritestringoptional1 oder true für nur Favoriten.
qstringoptionalTeilstring-Suche über Titel/Autor.
tagstringoptionalFilter nach Tag.
limitintegeroptional1–100 (Standard 20).
offsetintegeroptionalPaginierungs-Offset.
GET /v1/library/{id} kostenlos
Einzelnes Library-Eintrag-Metadaten. has_asr / has_summary zeigen, welcher Content-Endpoint als Nächstes aufgerufen werden sollte.
GET /v1/library/{id}/transcript kostenlos
Gibt die ASR-Segments und den verbundenen Text für einen Library-Eintrag zurück. 404, wenn kein abgeschlossenes ASR existiert.
GET /v1/library/{id}/summary kostenlos
Gibt den gespeicherten Zusammenfassungstext zurück. Mit ?locale= aus mehreren Locales wählen (Standard: Accept-Language, dann en). 404, wenn für (video_id, locale) keine Zusammenfassung existiert.
POST /v1/library kostenlos (1 Token-Quota)
kind=asr markiert ein gespeichertes Transkript (Segments liegen bereits in der ASR-Tabelle). kind=summary lädt einen vorgenerierten Zusammenfassungstext in die summaries-Tabelle und setzt has_summary=true. Upsert auf (video_id, locale).

Body (JSON)

NameTypPflichtBeschreibung
video_idstringERFORDERLICHYouTube-Video-ID.
kindstringERFORDERLICHasr oder summary.
title / author / thumbnail / video_url / language / tagstringoptionalMetadaten für Anzeige / Filter.
localestringSummary-ModusLocale der Zusammenfassung (Standard: Accept-Language, dann en).
textstringbei kind=summaryZu persistierender Zusammenfassungstext.
modelstringoptionalLLM-Identifier (z. B. claude-opus-4).
DELETE /v1/library/{id} kostenlos
Soft-Delete eines Library-Eintrags. Ein erneuter POST /v1/library für dasselbe Video stellt die Zeile wieder her, statt ein Duplikat anzulegen.

Offizielle SDKs

Mit unseren offiziellen Client-Bibliotheken schnell integrieren:

SpracheRepository
Pythonapi-sdk/python
JavaScriptapi-sdk/javascript
Goapi-sdk/go
Javaapi-sdk/java
Kotlinapi-sdk/kotlin
Rustapi-sdk/rust

→ Vollständiger Code: github.com/SubDownload/api-sdk

→ Für Abrechnung, Rate-Limits und Fehlercodes siehe Support & Abrechnung.