API für Video-Transkription und Notizen
Sende eine Audio- oder Videodatei von deinem Server und erhalte ein Transkript mit Zeitmarken, KI-Notizen und fertige Downloads zurück. Die API nutzt dieselbe Verarbeitung wie die Website und die Chrome-Erweiterung.
- Basis-URL
https://api.video-to-notes.com- Authentifizierung
- API-Schlüssel als Bearer-Token
- Format
- JSON über HTTPS; Dateien gehen über signierte URLs direkt in den Speicher
- Zugang
- In aktiven Basic- und Plus-Tarifen enthalten; nutzt deine Tarifstunden
Schnellstart
Diese Schritte bringen eine Datei von deiner Festplatte zu Transkript und Notizen. Du brauchst einen aktiven Basic- oder Plus-Tarif, ein Terminal und für den Beispiel-Client Python 3.12 oder neuer.
1. API-Schlüssel erstellen
Melde dich auf der Website an (zum Beispiel auf der Preisseite), öffne API-Schlüssel in der Kontoleiste, gib dem Schlüssel einen Namen und lege bei Bedarf ein Ablaufdatum fest. Kopiere den geheimen Schlüssel, sobald er erscheint: Er wird nur einmal angezeigt. Bis zu drei Schlüssel können gleichzeitig aktiv sein.
2. Schlüssel in einer Umgebungsvariable speichern
Halte den Schlüssel aus Quellcode, Kommandozeilenargumenten und Logs heraus. Die Beispiele lesen den Schlüssel aus VTN_API_KEY und die Basis-URL aus VTN_API_BASE.
export VTN_API_BASE="https://api.video-to-notes.com"
read -rs VTN_API_KEY && export VTN_API_KEY # paste the key, press Enter$env:VTN_API_BASE = "https://api.video-to-notes.com"
$env:VTN_API_KEY = Read-Host "API key" -MaskInput3. Konto prüfen
Dieser Aufruf bestätigt, dass der Schlüssel funktioniert, und liefert deinen Tarif, deine verbleibenden Tarifsekunden, die unterstützten Formate und die aktuellen Limits.
# Sends the key through stdin, so it never appears in the process list.
vtn() {
printf 'header = "Authorization: Bearer %s"\n' "$VTN_API_KEY" |
curl -s --config - "$@"
}
vtn "$VTN_API_BASE/api/v1/account"$headers = @{ Authorization = "Bearer $env:VTN_API_KEY" }
Invoke-RestMethod "$env:VTN_API_BASE/api/v1/account" -Headers $headers |
ConvertTo-Json -Depth 54. Eine Datei transkribieren
Lade den Python-Beispiel-Client herunter. Er braucht nur die Standardbibliothek. Er lädt die Datei in Teilen hoch, startet den Auftrag, wartet auf das Ergebnis und speichert jede Ergebnisseite.
python client.py run meeting.mp4 --state meeting.state.json \
--output meeting.jsonl --download meeting-filesUm nur einen Teil einer Aufnahme zu verarbeiten, gib --start und --end in Sekunden ab Dateibeginn an. --audio-language gibt einen Sprachhinweis und --notes-language wählt die Sprache der Notizen. Ohne diese Optionen wird die ganze Datei verarbeitet und die Sprachen werden automatisch erkannt.
python client.py run lecture.webm --state lecture.state.json \
--start 30 --end 3630 --audio-language ru --notes-language enDie Statusdatei speichert die Upload-ID und die Anfrage-Identität, niemals den Schlüssel. Bricht der Befehl ab, starte ihn mit derselben Statusdatei erneut: Er findet denselben Auftrag wieder und dir wird nichts doppelt berechnet. Verwende für jeden neuen Auftrag eine neue Statusdatei.
5. Ergebnisse lesen
meeting.jsonl enthält pro Zeile eine JSON-Ergebnisseite: Transkripttext mit Zeitangaben, Notizen in Markdown, Lücken und Warnungen. meeting-files enthält die Downloads, etwa das Transkript als TXT und die Notizen als Markdown, HTML und PDF. Der Client hat außerdem diese Befehle:
python client.py account
python client.py status JOB_ID
python client.py result JOB_ID --output results.jsonl --download files
python client.py cancel JOB_ID
python client.py resume JOB_IDLieber curl? Der Bash-Schnellstart führt dieselben Schritte für Upload, Auftrag und Ergebnis mit curl und jq aus.
bash quickstart.sh meeting.mp4So funktioniert ein Auftrag
Jede Integration folgt denselben sechs Schritten. Die API-Referenz zeigt jeden Aufruf mit Beispielanfrage und Beispielantwort.
- Konto prüfen.
GET /api/v1/accountliefert deinen Tarif, die verbleibenden Sekunden, die unterstützten Formate und die Limits. - Upload anlegen.
POST /api/v1/uploadsmit der Dateigröße in Bytes und der Dateiendung. Die Antwort nennt die Teilgröße und die Anzahl der Teile. - Teile hochladen. Hole signierte URLs über
POST /api/v1/uploads/{upload_id}/parts, sende jeden Teil per HTTP-PUTdirekt in den Speicher, bewahre jedesETagauf und rufe dannPOST /api/v1/uploads/{upload_id}/completeauf. - Auftrag starten.
POST /api/v1/jobsmit der Upload-ID und einemIdempotency-Key-Header. Der Server prüft die echte Datei, plant die Arbeit und reserviert die Zeit in deinem Tarif. - Status abfragen.
GET /api/v1/jobs/{job_id}, bis der Zustand endgültig ist; warte zwischen den Aufrufen mindestenspoll_after_seconds. - Ergebnis lesen.
GET /api/v1/jobs/{job_id}/resultund folgenext_cursor, bis der Wert null ist. Lade die inartifactsaufgeführten Dateien herunter, bevor ihre Links ablaufen.
Ein Auftrag endet als completed, completed_with_gaps, interrupted, cancelled, failed oder expired. charged_seconds zeigt, wie viel deines Tarifs der Auftrag verbraucht hat.
Best Practices
Diese Gewohnheiten schützen deine Schlüssel, verhindern doppelte Abrechnung und machen lange Aufträge zuverlässig.
Schlüssel geheim halten
- Rufe die API nur von einem Server oder Skript auf, das du kontrollierst. Lege einen Schlüssel niemals in Browser-Code, eine Mobil-App, eine URL oder die Versionsverwaltung.
- Lade den Schlüssel aus einer Umgebungsvariable oder einem Secret-Manager und halte ihn aus Logs, Fehlerberichten und Kommandozeilenargumenten heraus.
- Verwende einen Schlüssel pro Integration mit Ablaufdatum, damit du einen Schlüssel austauschen oder widerrufen kannst, ohne die anderen anzufassen.
- Zum Austauschen erstellst du den neuen Schlüssel, setzt ihn ein und widerrufst dann den alten. Bereits gestartete Aufträge laufen weiter.
- Wenn ein Schlüssel offengelegt worden sein könnte, etwa in einem Chat, einem Ticket oder einem Commit, widerrufe ihn sofort in der Ansicht API-Schlüssel.
Auftragserstellung wiederholbar machen
- Erzeuge für jeden neuen Auftrag einen zufälligen
Idempotency-Key, etwa eine UUID, und speichere ihn mit der Upload-ID, bevor du die Anfrage sendest. - Geht die Antwort verloren, sende dieselbe Anfrage mit demselben Schlüssel erneut. Du erhältst den ursprünglichen Auftrag zurück und zahlst nicht doppelt.
- Verwende einen Schlüssel nie für eine andere Datei oder andere Optionen: Die API antwortet dann mit 409
IDEMPOTENCY_CONFLICT.
Rücksichtsvoll abfragen und Limits beachten
- Warte zwischen Statusabfragen mindestens fünf Sekunden, und länger, wenn
poll_after_secondses verlangt. - Warte bei 429 oder 503 auf den Header
Retry-Afterodererror.retry_after_secondsund wiederhole die Anfrage dann mit etwas zufälliger Verzögerung. - Wiederhole eine Anfrage unverändert nur, wenn
error.retryabletrue ist. Andernfalls korrigiere zuerst die Anfrage. - Ein Konto führt jeweils einen Upload und einen Auftrag gleichzeitig aus. Stelle deine Dateien in eine Warteschlange und sende die nächste, wenn der aktuelle Auftrag fertig ist.
Den Stundenverbrauch steuern
- Prüfe
remaining_seconds, bevor du hochlädst. Ein Auftrag, der mehr Zeit braucht, als du hast, scheitert mitINSUFFICIENT_BALANCE; die API kürzt deine Auswahl nie, damit sie passt. - Sende einen
range, wenn du nur einen Teil einer Aufnahme brauchst. Berechnet wird nur das ausgewählte Audio. - Brich Aufträge ab, die du nicht mehr brauchst. Fertige Teile bleiben verfügbar und nicht genutzte reservierte Zeit wird zurückgegeben.
- Brich Uploads ab, die du nicht verwenden wirst, damit der nächste Upload starten kann.
Vollständige Ergebnisse einsammeln
- Folge
next_cursor, bis der Wert null ist. Eine Seite enthält höchstens 32 Einträge. - Behandle
gap-Einträge als Audio, das nicht verarbeitet werden konnte, nicht als Stille, und prüfe diewarnings. - Lade die Dateien in
artifactsherunter, solange ihre Links gültig sind (bis zu zehn Minuten); rufe die Seite für neue Links erneut ab. - Speichere, was du brauchst: Ergebnisdateien werden etwa 24 Stunden aufbewahrt, die Transkript-Wiederherstellung etwa 48 Stunden.
- Lies die Felder, die du brauchst, und ignoriere den Rest.
Häufige Fragen
Wer kann die API nutzen?
Alle mit einem aktiven Basic- oder Plus-Tarif. Der API-Zugang ist in beiden Tarifen enthalten und kostet nichts extra. Ohne aktiven Tarif werden neue Aufträge mit PLAN_REQUIRED abgelehnt. Siehe Tarife und Preise.
Wie wird die API-Nutzung gezählt?
API-Aufträge nutzen dieselben Tarifstunden wie die Website und die Chrome-Erweiterung. Der Server misst die tatsächliche Länge des ausgewählten Audios; charged_seconds im Auftragsstatus und auf jeder Ergebnisseite zeigt den genauen Wert. Wie fehlendes Audio bei einem Auftrag mit nicht behebbaren Lücken berechnet wird, erklären die Nutzungsbedingungen.
Welche Dateiformate und -größen werden unterstützt?
Video: MP4, M4V, MOV, WebM, MKV, OGV, AVI, WMV, ASF, FLV, MPG, MPEG, VOB, TS, MTS, M2TS, 3GP, 3G2 und MXF. Audio: MP3, M4A, AAC, WAV, FLAC, OGG, OGA, OPUS, WMA, AMR, AIFF, AIF, CAF und AC3. Eine Datei darf bis zu 8 GiB groß sein. Sie muss eine dekodierbare Audiospur enthalten; kopiergeschützte Dateien können nicht gelesen werden.
Welche Sprachen kann ich verwenden?
Standard ist die automatische Erkennung. Du kannst auch einen Hinweis zur Audiosprache geben oder die Sprache der Notizen mit einem von mehr als 60 Sprachcodes wählen, zum Beispiel en, de, es, fr, ja oder zh. Der Kontoaufruf listet alle derzeit akzeptierten Werte.
Wie lange dauert ein Auftrag?
Das hängt von der Länge des ausgewählten Audios und der aktuellen Auslastung ab. Aufträge laufen im Hintergrund, du kannst also eine lange Aufnahme hochladen und später nachsehen. completed_units und total_units im Auftragsstatus zeigen den Fortschritt.
Kann ich die API aus einem Browser oder einer Mobil-App aufrufen?
Nein. Ein API-Schlüssel gibt Zugriff auf deine Tarifstunden und muss deshalb auf einem Server bleiben, den du kontrollierst. Bei einer Web- oder Mobil-App sendest du die Dateien an dein eigenes Backend und rufst die API von dort auf.
Kann ich einen YouTube-Link oder eine andere URL senden?
Nein. Die API verarbeitet Dateien, die du hochlädst; sie lädt keine URLs oder YouTube-Videos herunter.
Gibt es Webhooks oder E-Mail-Benachrichtigungen?
Nein. Frage den Auftragsstatus ab und beachte poll_after_seconds. API-Aufträge senden keine E-Mails.
Was passiert, wenn meine Verbindung abbricht?
Scheitert der Upload eines Teils, hole eine neue signierte URL für diesen Teil und sende ihn erneut, bevor der Upload abläuft. Geht die Antwort auf die Auftragserstellung verloren, wiederhole die Anfrage mit demselben Idempotency-Key und du erhältst denselben Auftrag zurück. Ein laufender Auftrag hängt nicht von deiner Verbindung ab.
Wie lange werden Ergebnisse aufbewahrt?
Ergebnisseiten und Download-Dateien werden etwa 24 Stunden nach Abschluss des Auftrags aufbewahrt, das Transkript lässt sich etwa 48 Stunden lang wiederherstellen. Jede Antwort nennt die genaue Zeit in expires_at; speichere also vorher, was du brauchst.
Was passiert, wenn ich einen Schlüssel widerrufe oder mein Tarif endet?
Das Widerrufen eines Schlüssels stoppt keine bereits gestarteten Aufträge; lies ihre Ergebnisse mit einem anderen Schlüssel. Endet dein Tarif, kann ein gültiger Schlüssel weiterhin Status und Ergebnisse lesen und Aufträge abbrechen, bis die Inhalte ablaufen; neue Uploads, neue Aufträge und das Fortsetzen erfordern aber einen aktiven Tarif.
Was passiert mit meinen hochgeladenen Dateien?
Wir bemühen uns, hochgeladene Quelldateien innerhalb von 24 Stunden nach dem Upload zu löschen. Die Löschung kann länger dauern. Die Datenschutzerklärung erklärt, was wie lange gespeichert wird.
Gibt es ein SDK oder eine OpenAPI-Datei?
Ein SDK-Paket gibt es nicht. Nutze die OpenAPI-3.1-Datei, um einen Client zu generieren oder die API in ein Werkzeug wie Postman oder Insomnia zu importieren, oder beginne mit den Python- und curl-Beispielen.
Welche Ratenlimits gelten?
Ein Konto führt einen Upload und einen Auftrag gleichzeitig aus, kann pro UTC-Tag bis zu 10 Uploads mit zusammen 20 GiB starten, 12 Aufträge pro Minute anlegen und über alle seine Schlüssel 60 weitere Anfragen pro Minute senden. Der Kontoaufruf liefert die Werte, die für dich gelten.
Dateien und Beispiele
Die Beispiele und Vertragsdateien werden mit der Website veröffentlicht und entsprechen der Live-API.
- client.py: Python-3.12+-Beispiel-Client, nur Standardbibliothek
- quickstart.sh: Bash-Beispiel mit curl und jq
- openapi.json: OpenAPI-3.1-Beschreibung aller Endpunkte, mit Beispielen
- paid-api.schema.json: JSON Schema aller Anfragen und Antworten
Hilfe
Etwas unklar oder funktioniert nicht? Schreib uns und nenne die request_id aus der Fehlerantwort, die Uhrzeit und den Endpunkt. Schick uns niemals deinen API-Schlüssel.