Trascrizione per app e prodotti SaaS
Integra nel tuo prodotto note vocali, trascrizioni di riunioni, sottotitoli o ricerca nell’audio tramite un’API REST asincrona: carichi il file, avvii l’elaborazione, ricevi il webhook e salvi i segmenti di testo.
Come funziona in produzione
- Il tuo backend chiama
POST /uploadper il file dell’utente e passa il form firmato al client per l’invio, oppure carica direttamente il file fino a 100 MiB. - Avvia la trascrizione passando il
fileUrlappena ottenuto nel campoaudio_url, insieme al tuowebhook_url. - Controlla la firma del webhook, scarta gli eventuali duplicati usando
X-KolWrite-Delivery-Ide, seresult_omittedè true, richiamaGET /transcribe/{jobId}per recuperare i dati. - Salva i
segments(con testo, tempi e interlocutori) per poi mostrarli, ed esporta i filesrtotxtquando vengono richiesti.
Esempio di richiesta:
{
"audio_url": "<fileUrl from POST /upload>",
"model": "oracle",
"language": "auto",
"include_diarization": true,
"output_format": "json",
"webhook_url": "https://api.example.com/hooks/kolwrite",
"webhook_secret": "<random secret>"
}
Verifica dei webhook
import crypto from "node:crypto";
// Express-style handler; rawBody is the exact request body as received.
export function verifyKolWrite(req, rawBody, secret) {
const timestamp = req.headers["x-kolwrite-timestamp"];
const expected = "sha256=" + crypto.createHmac("sha256", secret)
.update(timestamp + "." + rawBody).digest("hex");
const given = req.headers["x-kolwrite-signature"] || "";
return given.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(given), Buffer.from(expected));
}
L’invio del webhook è garantito almeno una volta, con nuovi tentativi automatici in caso di errore. Usa sempre GET /transcribe/{jobId} come riferimento principale per lo stato del lavoro.
Scegliere il modello in base al lavoro
| Caso d’uso | Impostazione | Perché |
|---|---|---|
| Grandi volumi di audio pulito a basso costo | model: "base" | 0,40 crediti (0,48 US$) all’ora |
| Scelta standard per i file caricati dagli utenti | model: "oracle" | Qualità da produzione, con traduzione disponibile |
| Trascrizione tradotta in un’altra lingua | Modello Oracle + translate_to | Un’unica chiamata, testo già tradotto |
| Riconoscimento di chi parla | include_diarization: true | Incluso nel prezzo |
| Sottotitoli | output_format: "srt" | Pronti per i player video |
Limiti da tenere presenti in fase di progettazione
- Caricamento Base64 inline: 4 MiB di file decodificato. Caricamento firmato: 100 MiB.
- Il modulo di caricamento firmato scade dopo 60 minuti, l'URL di lettura dopo 24 ore.
- I job sono asincroni. Mostra l'avanzamento a partire dagli stati
PENDINGeIN_PROGRESS. - Non è possibile usare
channel_speaker_separationinsieme alla diarizzazione.
Domande e risposte
C'è un SDK?
L’API funziona con normali chiamate HTTPS e JSON, quindi puoi usare qualsiasi client HTTP. Se usi un generatore di codice, trovi il file OpenAPI 3.1 su /openapi.json.
Come evito di elaborare due volte lo stesso webhook?
Filtra i duplicati controllando l'header X-KolWrite-Delivery-Id. I tentativi di reinvio mantengono lo stesso ID.
Come funziona la fatturazione?
Paghi al secondo di audio in base alla tariffa in crediti del modello, senza importo minimo. 1 credito costa 1,20 US$.