Transcription pour apps et produits SaaS
Ajoutez notes vocales, comptes rendus de réunion, sous-titres ou audio consultable à votre produit avec une API REST asynchrone : envoyer, lancer une tâche, recevoir le webhook, stocker les segments.
Obtenir une clé API Démarrage rapide Langues prises en charge
Le flux en production
- Votre backend appelle
POST /uploadpour le fichier de l’utilisateur et renvoie le formulaire signé au client, ou l’envoie lui-même (jusqu’à 100 Mio). - Lancez la tâche avec le
fileUrlrenvoyé commeaudio_urlet votrewebhook_url. - Vérifiez la signature du webhook, dédoublonnez sur
X-KolWrite-Delivery-Id, puis appelezGET /transcribe/{jobId}siresult_omittedvaut true. - Stockez les
segments(texte, temps, locuteurs) et affichez-les ; exportezsrtoutxtà la demande.
Requête de la tâche :
{
"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>"
}
Vérifier les webhooks
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));
}
Les livraisons arrivent au moins une fois et sont relancées en cas d’échec. GET /transcribe/{jobId} reste la source de vérité.
Choisir le modèle à chaque tâche
| Besoin produit | Réglage | Pourquoi |
|---|---|---|
| Audio propre, gros volume, petit coût | model: "base" | 0,40 crédit (0,48 US$) par heure |
| Par défaut pour les fichiers des utilisateurs | model: "oracle" | Qualité production, traduction possible |
| Transcription dans une autre langue | Modèle Oracle + translate_to | Une tâche, texte traduit |
| Qui a dit quoi | include_diarization: true | Inclus dans le prix |
| Sous-titres | output_format: "srt" | Prêt pour les lecteurs vidéo |
Limites à prévoir
- Envoi Base64 en ligne : 4 Mio de média décodé. Envoi signé : 100 Mio.
- Le formulaire signé expire après 60 minutes ; l’URL de lecture après 24 heures.
- Les tâches sont asynchrones : affichez la progression avec
PENDINGetIN_PROGRESS. channel_speaker_separationne se combine pas avec la diarisation.
Questions et réponses
Existe-t-il un SDK ?
L’API est en HTTPS et JSON simples ; n’importe quel client HTTP convient. Le fichier OpenAPI 3.1 sur /openapi.json fonctionne avec les générateurs de code.
Comment éviter de traiter deux fois un webhook ?
Dédoublonnez sur X-KolWrite-Delivery-Id ; les nouvelles tentatives réutilisent cet identifiant.
Comment l’usage est-il facturé ?
À la seconde d’audio, au tarif en crédits du modèle, sans minimum. 1 crédit vaut 1,20 US$.