Integration
REST-API für Transkription — drei Calls, fertig
Hochladen, pollen, Ergebnis abholen. JSON, Wort-Timestamps, 99 Sprachen, eigene Server in Deutschland.
Die DeepScript-API folgt dem klassischen Async-Job-Muster: Du POSTest eine Audio- oder Videodatei an `/v1/transcriptions`, bekommst eine Job-ID zurück und pollst entweder `/v1/transcriptions/{id}` alle paar Sekunden oder lässt dich per Webhook benachrichtigen. Die Authentifizierung läuft über einen `X-API-KEY`-Header, der API-Key beginnt mit `ds_live_` und wird im Dashboard generiert. Die Response enthält Volltext, Wort-Timestamps mit Confidence-Werten, erkannte Sprache, Sprecher-Labels und die berechneten Kosten. Exportformate (TXT, SRT, VTT, JSON) holst du dir über `/v1/transcriptions/{id}/export?format=srt`. Die vollständige OpenAPI-3.1-Spec liegt unter `/openapi.json`, eine interaktive Scalar-UI unter `/docs`.
OpenAPI 3.1 Spec ansehenWas du bauen kannst
- Audio- und Videodateien bis 500 MB hochladen (mp3, wav, flac, ogg, m4a, aac, mp4, mkv, webm, mov).
- Wort-genaue Timestamps mit Confidence pro Wort — perfekt für Untertitel und Editor-Integrationen.
- Sprecher-Diarisierung in beiden Tiers, DACH-Dialekt-Optimierung im Premium-Modell.
- Custom Vocabulary per Request — Firmennamen, medizinische Begriffe, Eigennamen werden korrekt erkannt.
- Exportformate auf Knopfdruck: TXT, SRT, VTT, JSON. Kein clientseitiges Re-Encoding nötig.
- Webhook-Callbacks bei `transcription.completed` — Polling ist optional, kein Long-Polling nötig.
Code-Beispiele
# Upload an audio file and start a Premium transcription job
curl -X POST https://api.deepscript.com/v1/transcriptions \
-H "X-API-KEY: ds_live_xxx" \
-F "file=@meeting.mp3" \
-F "model=premium" \
-F "language=de"
# Response:
# {
# "id": "8b1f2e4a-9c3d-4f7e-a1b2-1234567890ab",
# "status": "queued",
# "progress": 0,
# "model": "premium",
# "createdAt": "2026-06-09T10:14:22Z"
# }
# Poll until done
curl https://api.deepscript.com/v1/transcriptions/8b1f2e4a-9c3d-4f7e-a1b2-1234567890ab \
-H "X-API-KEY: ds_live_xxx"
# Download as SRT
curl -o meeting.srt \
"https://api.deepscript.com/v1/transcriptions/8b1f2e4a-9c3d-4f7e-a1b2-1234567890ab/export?format=srt" \
-H "X-API-KEY: ds_live_xxx"import { readFile } from "node:fs/promises";
const API_KEY = process.env.DEEPSCRIPT_API_KEY; // "ds_live_xxx"
const BASE = "https://api.deepscript.com/v1";
async function transcribe(filePath) {
const buffer = await readFile(filePath);
const blob = new Blob([buffer], { type: "audio/mpeg" });
const form = new FormData();
form.append("file", blob, "meeting.mp3");
form.append("model", "premium");
form.append("language", "de");
const created = await fetch(`${BASE}/transcriptions`, {
method: "POST",
headers: { "X-API-KEY": API_KEY },
body: form,
}).then((r) => r.json());
// Poll every 3 seconds until done
while (true) {
await new Promise((r) => setTimeout(r, 3000));
const job = await fetch(`${BASE}/transcriptions/${created.id}`, {
headers: { "X-API-KEY": API_KEY },
}).then((r) => r.json());
if (job.status === "completed") return job.result;
if (job.status === "failed") throw new Error(job.errorMessage);
}
}
const result = await transcribe("./meeting.mp3");
console.log(result.text);import os
import time
import requests
API_KEY = os.environ["DEEPSCRIPT_API_KEY"] # "ds_live_xxx"
BASE = "https://api.deepscript.com/v1"
HEADERS = {"X-API-KEY": API_KEY}
def transcribe(path: str) -> dict:
with open(path, "rb") as f:
created = requests.post(
f"{BASE}/transcriptions",
headers=HEADERS,
files={"file": f},
data={"model": "premium", "language": "de"},
timeout=120,
).json()
job_id = created["id"]
while True:
time.sleep(3)
job = requests.get(
f"{BASE}/transcriptions/{job_id}", headers=HEADERS, timeout=30
).json()
if job["status"] == "completed":
return job["result"]
if job["status"] == "failed":
raise RuntimeError(job["errorMessage"])
result = transcribe("meeting.mp3")
print(result["text"])Setup in wenigen Schritten
- 1
API-Key erstellen
Im Dashboard unter Einstellungen → Sicherheit einen Key generieren. Der Key wird nur einmal angezeigt und beginnt mit `ds_live_`. Setze ihn als Environment Variable `DEEPSCRIPT_API_KEY` in deiner Anwendung.
- 2
Upload-Request senden
Multipart-Upload an POST `/v1/transcriptions` mit Feldern `file`, `model` (standard/premium) und optional `language` (ISO 639-1) sowie `vocabularyId`. Du bekommst sofort eine Job-ID zurück (HTTP 202).
- 3
Pollen oder Webhook abwarten
Entweder alle 2-5 Sekunden GET `/v1/transcriptions/{id}` aufrufen, oder einen Webhook auf `transcription.completed` registrieren. Faustregel: 1 Minute Audio = 5-15 Sekunden Verarbeitung in Standard, etwas länger in Premium.
- 4
Ergebnis abrufen oder exportieren
Wenn `status: 'completed'` ist, enthält das `result`-Feld Volltext, Wörter mit Timestamps und Sprecher-Labels. Für SRT/VTT/TXT/JSON-Export: GET `/v1/transcriptions/{id}/export?format=srt`.
Häufige Fragen
Wie hoch sind die Rate Limits?
100 Requests pro Minute pro API-Key bei authentifizierten Calls, 30/min ohne Auth. Die Response enthält die Header `X-RateLimit-Limit`, `X-RateLimit-Remaining` und `X-RateLimit-Reset`. Bei Überschreitung gibt es HTTP 429 mit Retry-After-Header.
Unterstützt ihr Idempotency Keys?
Ja — sende `Idempotency-Key: <uuid>` als Header bei POST `/v1/transcriptions`. Identische Keys innerhalb von 24 Stunden geben dieselbe Response zurück, ohne den Job ein zweites Mal zu starten. Empfohlen für Retries bei Netzwerkproblemen.
Welches Polling-Intervall ist sinnvoll?
Wir empfehlen 2-5 Sekunden. Für längere Audios (>30 Min) reicht alle 10 Sekunden. Wer kein Polling will, nutzt Webhooks (`/v1/webhooks`) oder den Server-Sent-Events-Stream unter `/v1/transcriptions/{id}/events`.
Was passiert bei einem failed Job?
Der Status wechselt auf `failed` und das Feld `errorMessage` enthält einen RFC-7807-konformen Problem-Details-String. Häufige Ursachen: Datei zu kurz (<1 Sek), kein erkennbares Audio, nicht unterstütztes Format. Du wirst für fehlgeschlagene Jobs nicht belastet.
Gibt es ein offizielles SDK?
Aktuell stellen wir die OpenAPI-3.1-Spec unter `/openapi.json` bereit — daraus generierst du dir mit `openapi-generator-cli` oder `openapi-typescript` einen typsicheren Client in jeder Sprache. Offizielle SDKs für TypeScript und Python sind in Vorbereitung.
Bereit, das in Production zu bringen?
Account erstellen, API-Key generieren, los geht's. Drei Transkriptionen kostenlos zum Testen. Vollständige OpenAPI 3.1 Docs unter api.deepscript.com/docs.