Integrazione
API REST di trascrizione – tre chiamate e basta
Carica, fai polling, recupera il risultato. JSON, timestamp per parola, 99 lingue, server propri in Germania.
L'API DeepScript segue il classico schema del job asincrono: invii in POST un file audio o video a `/v1/transcriptions`, ricevi un ID del job e poi fai polling su `/v1/transcriptions/{id}` ogni pochi secondi oppure ti fai notificare tramite webhook. L'autenticazione avviene tramite un header `X-API-KEY`; le chiavi iniziano con `ds_live_` e si generano nella dashboard. La risposta contiene il testo completo, i timestamp per parola con punteggi di confidenza, la lingua rilevata, le etichette dei parlanti e il costo calcolato. I formati di esportazione (TXT, SRT, VTT, JSON) sono disponibili tramite `/v1/transcriptions/{id}/export?format=srt`. La specifica OpenAPI 3.1 completa si trova su `/openapi.json`, un'interfaccia Scalar interattiva su `/docs`.
Visualizza la specifica OpenAPI 3.1Cosa puoi creare
- Carica file audio e video fino a 500 MB (mp3, wav, flac, ogg, m4a, aac, mp4, mkv, webm, mov).
- Timestamp precisi a livello di parola con confidenza per parola – perfetti per sottotitoli e integrazioni con editor.
- Diarizzazione dei parlanti in entrambi i piani, ottimizzazione dei dialetti DACH nel modello Premium.
- Custom Vocabulary per richiesta – nomi di aziende, termini medici e nomi propri vengono riconosciuti correttamente.
- Formati di esportazione su richiesta: TXT, SRT, VTT, JSON. Nessuna ricodifica lato client necessaria.
- Callback webhook su `transcription.completed` – il polling è opzionale, nessun long-polling necessario.
Esempi di codice
# 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"])Configurazione in pochi passaggi
- 1
Genera una chiave API
Genera una chiave nella dashboard in Impostazioni → Sicurezza. La chiave viene mostrata una sola volta e inizia con `ds_live_`. Memorizzala nella tua applicazione come variabile d'ambiente `DEEPSCRIPT_API_KEY`.
- 2
Invia la richiesta di upload
Upload multipart verso POST `/v1/transcriptions` con i campi `file`, `model` (standard/premium) e, facoltativamente, `language` (ISO 639-1) e `vocabularyId`. Ricevi subito un ID del job (HTTP 202).
- 3
Fai polling o attendi il webhook
Chiama GET `/v1/transcriptions/{id}` ogni 2-5 secondi, oppure registra un webhook su `transcription.completed`. Regola pratica: 1 minuto di audio = 5-15 secondi di elaborazione in Standard, un po' di più in Premium.
- 4
Recupera o esporta il risultato
Quando `status: 'completed'`, il campo `result` contiene il testo completo, le parole con timestamp e le etichette dei parlanti. Per l'export SRT/VTT/TXT/JSON: GET `/v1/transcriptions/{id}/export?format=srt`.
Domande frequenti
Quali sono i rate limit?
100 richieste al minuto per chiave API nelle chiamate autenticate, 30/min senza autenticazione. La risposta include gli header `X-RateLimit-Limit`, `X-RateLimit-Remaining` e `X-RateLimit-Reset`. In caso di superamento ricevi un HTTP 429 con header Retry-After.
Supportate le idempotency key?
Sì – invia `Idempotency-Key: <uuid>` come header su POST `/v1/transcriptions`. Chiavi identiche entro 24 ore restituiscono la stessa risposta senza avviare un secondo job. Consigliato per i retry in caso di problemi di rete.
Quale intervallo di polling è consigliato?
Consigliamo 2-5 secondi. Per audio più lunghi (>30 min) ogni 10 secondi è sufficiente. Se preferisci evitare il polling, usa i webhook (`/v1/webhooks`) o lo stream Server-Sent Events su `/v1/transcriptions/{id}/events`.
Cosa succede in caso di job fallito?
Lo stato passa a `failed` e il campo `errorMessage` contiene una stringa Problem Details conforme a RFC 7807. Cause comuni: file troppo corto (<1 s), nessun audio rilevabile, formato non supportato. I job falliti non vengono addebitati.
Esiste un SDK ufficiale?
Per ora forniamo la specifica OpenAPI 3.1 su `/openapi.json` – usa `openapi-generator-cli` o `openapi-typescript` per generare un client tipizzato in qualsiasi linguaggio. SDK ufficiali per TypeScript e Python sono in preparazione.
Pronto a portarlo in produzione?
Crea un account, genera una chiave API e parti. Tre trascrizioni gratuite per provare. Documentazione OpenAPI 3.1 completa su api.deepscript.com/docs.