KolWrite-API-Dokumentation
Authentifizieren Sie sich mit Ihrem API-Schlüssel, starten Sie einen Auftrag und rufen Sie das Ergebnis ab: Transkripte mit Wortzeitstempeln und Sprecherlabels als JSON, TXT oder SRT.
Authentifizierung
Alle API-Anfragen müssen mit Ihrem eigenen API-Schlüssel authentifiziert werden. Geben Sie ihn in den Anfrage-Headern an:
x-api-key: YOUR_API_KEY
Ihre API-Schlüssel können Sie in der KolWrite-Konsole erstellen und verwalten, sobald Sie ein Konto angelegt haben.
Schnellstart
Einfache Beispiele für den schnellen Einstieg.
1. Transkription starten
Senden Sie einen POST-Request mit der URL der gewünschten Audiodatei an den Endpunkt `/transcribe`.
Anfrage:
POST https://app.kolwrite.com/transcribe
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"audio_url": "https://salford.figshare.com/ndownloader/files/14630270"
}
Antwort:
Die API gibt eine `jobId` zurück, über die Sie anschließend das Transkript abrufen.
{
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57"
}
2. Transkriptionsergebnis abrufen
Send a GET request bis the `/transcribe/{jobId}` endpoint using the `jobId` received from the previous step.
Anfrage:
GET https://app.kolwrite.com/transcribe/34c63d45-4cb5-473b-bc60-25c175e69c57
x-api-key: YOUR_API_KEY
Antwort (Beispiel):
Sobald der Auftragsstatus COMPLETEDlautet, enthält die Antwort die Details der Transkription.
{
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57",
"status": "COMPLETED",
"result": {
"language": "en",
"segments": [
{
"start": 0.5,
"end": 3.2,
"text": "Hello everyone, welcome to today's meeting.",
"speaker": "Speaker 1",
"words": [
{
"start": 0.5,
"end": 0.8,
"word": "Hello"
},
{
"start": 0.9,
"end": 1.4,
"word": "everyone"
},
{
"start": 1.5,
"end": 1.9,
"word": "welcome"
}
]
}
]
}
}
Modelle und Nutzungs-Credits
Abgerechnet wird sekundengenau in Nutzungs-Credits, ohne Mindestbetrag. Im Checkout, auf Belegen und in Steuerdokumenten steht die tatsächliche Währung, in der Sie bezahlt haben.
1 Credit ist die API-Abrechnungseinheit. In der API-Konsole wurde sie früher als $1.00 angegeben.
Berechtigte israelische Rechnungskonten kaufen Nutzungs-Credits in ILS zu einem Nettopreis von ILS 3.60 pro Credit vor MwSt. Der Checkout zeigt vor der Zahlung die Nutzungs-Credits, den Nettobetrag, die MwSt. und den endgültigen Gesamtbetrag in ILS an. Andere Konten kaufen Nutzungs-Credits in USD zu USD 1.20 pro Credit, sofern keine gesonderten Bestellbedingungen gelten.
| Modell | API-Wert | Credits / Stunde | Am besten geeignet für |
|---|---|---|---|
| Base | base | 0.40 | Günstige Transkription, Wortzeitstempel und Sprechertrennung |
| Oracle Mini | oracle_mini | 0.80 | Schnelle Oracle-Transkription mit Diarisierung, Kanaltrennung und optionaler Übersetzung in alle unterstützten Zielsprachen; die günstigste Oracle-Option mit Übersetzung |
| Oracle | oracle | 1.20 | Transkription für den Produktivbetrieb und mehrsprachige Workflows |
| Oracle Pro | oracle_pro | 1.40 | Premium-Produktionsqualität |
| Oracle Max | oracle_max | 3.00 | Höchste Qualität für schwieriges oder geschäftskritisches Audio |
| Core | core | 1.00 | Allzweck-Transkription (Legacy) |
| Edge | edge | 1.20 | Transkription mit höherer Genauigkeit (Legacy) |
Zusätze: Reguläre Sprecher-Diarisierung und standard -Kanaltrennung sind inbegriffen. Die Pro-Sprecher-Diarisierung kostet zusätzlich 0.20 Credits pro Audiostunde. overlap
-Kanaltrennung wird zum Satz des gewählten Modells abgerechnet, und zwar für den größeren Wert aus Aufnahmedauer und der über die physischen Kanäle erkannten Gesamtsprechzeit; bei keinem der beiden Kanalmodi fällt ein Diarisierungs-Aufschlag an. Oracle Mini aktiviert die Zeitstempel-Ausrichtung automatisch, wenn Sprecher-Diarisierung oder Kanaltrennung gewählt ist.
API-Endpunkte
POST /upload
Laden Sie eine lokale Audio- oder Videodatei hoch und übergeben Sie die zurückgegebene fileUrl als audio_url in POST /transcribe. Nutzen Sie für kleine Dateien den Inline-Base64-Upload und für größere Dateien den direkten Upload in den Speicher.
Inline-Base64-Upload (bis zu 4 MiB)
Für Dateien bis zu 4 MiB (4,194,304 Bytes), senden Sie die Mediendaten als Base64 in einer einzigen API-Anfrage.
POST /upload
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"filename": "clip.mp3",
"contentType": "audio/mpeg",
"content": "<base64-encoded media bytes>"
}
contentType ist optional und wird bei Auslassung aus dem Dateinamen abgeleitet. Senden Sie die rohen Base64-Mediendaten in content, ohne das Präfix data:...;base64, . Das Limit von 4 MiB gilt für die decodierte Mediendatei.
Die Antwort enthält fileUrl. Verwenden Sie diesen Wert als audio_url beim Erstellen des Transkriptionsauftrags.
Direkter Upload in den Speicher (bis zu 100 MiB)
Für größere Dateien fordern Sie ein signiertes Formular für unseren S3-kompatiblen Speicher an, laden die Datei direkt hoch und erstellen dann den Transkriptionsauftrag. Maximale Upload-Größe: 100 MiB (104,857,600 Bytes). Das signierte Formular gilt 60 Minuten lang. Die zurückgegebene Lese-URL bleibt 24 Stunden gültig, was dem Transkriptionsdienst ausreicht, um die Mediendatei abzurufen.
1. Signiertes Upload-Formular anfordern
POST /upload
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"filename": "meeting.mp3",
"contentType": "audio/mpeg"
}
contentType ist optional und wird bei Auslassung aus dem Dateinamen abgeleitet. Die API gibt zurück uploadUrl, uploadFields, fileUrl und uploadExpiresIn.
Verwenden Sie uploadUrl , um die Datei in unseren S3-kompatiblen Speicher hochzuladen. Verwenden Sie dann fileUrl als audio_url beim Erstellen des Transkriptionsauftrags.
2. Datei direkt in den Speicher hochladen
// upload is the JSON response from POST /upload
const form = new FormData();
for (const [name, value] of Object.entries(upload.uploadFields)) {
form.append(name, value);
}
form.append('file', file, file.name);
await fetch(upload.uploadUrl, { method: 'POST', body: form });
Übergeben Sie die Felder genau so, wie Sie sie erhalten haben. Fügen Sie dem POST an den Speicher keinen eigenen Authorization-Header hinzu.
3. Transkriptionsauftrag anlegen
POST /transcribe
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"audio_url": "<fileUrl returned by POST /upload>",
"model": "oracle"
}
POST /transcribe
Übergibt eine Audiodatei zur asynchronen Transkription, optional mit Sprecher-Diarisierung.
Parameter des Anfrage-Bodys
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| audio_url | string | Erforderlich | Die öffentlich erreichbare URL der Audio- oder Videodatei, die transkribiert werden soll. |
| language | string | Optional | Sprachcode als Hinweis (z. B. „he“, „en“, „es“). Ohne Angabe wird die Sprache automatisch erkannt. Default: "auto" |
| translate_to | string | Optional | Das Sprachkürzel für die Zielsprache der Übersetzung (z. B. „en“, „es“, „fr“). Ist dieser Wert gesetzt, wird der Text in dieser Sprache ausgegeben. Hinweis: Dieser Parameter wird nur von der Oracle-Modellfamilie unterstützt. |
| word_timestamps | boolean | Optional | Steuert, ob in JSON oder SRT Zeitstempel für einzelne Wörter ausgegeben werden, sofern das gewählte Modell Wortausrichtung unterstützt. Bei Sprecher-Diarisierung und Kanaltrennung schaltet Oracle Mini die Ausrichtung automatisch ein; eine einfache Oracle-Mini-Transkription liefert Zeitstempel auf Segmentebene. Auf die TXT-Ausgabe hat das keinen Einfluss. Standard: true |
| model | string | Optional | Legt fest, welches Transkriptionsmodell verwendet wird: Aktuelle Modelle: • base: Günstige Transkription mit Wortzeitstempeln und optionaler Diarisierung, 0.40 Credits/Stunde• oracle_mini: Günstigste Oracle-Stufe mit Übersetzung und optionaler Sprecherverarbeitung, 0.80 Credits/Stunde• oracle: Oracle-Stufe für den Produktivbetrieb, 1.20 Credits/Stunde• oracle_pro: Oracle-Premiumstufe, 1.40 Credits/Stunde• oracle_max: Oracle-Stufe mit maximaler Qualität, 3.00 Credits/StundeLegacy-Modelle: • core: Schnelleres Legacy-Modell, 1.00 Credits/Stunde
• edge: Genaueres Legacy-Modell, 1.20 Credits/StundeDefault: "core" |
| output_format | string | Optional | Das gewünschte Format der Transkriptionsausgabe: • json: Detaillierte Ausgabe mit Segmenten und Zeitstempeln• txt: Transkription als reiner Text• srt: Untertitelformat SubRipDefault: "json" |
| include_diarization | boolean | Optional | Schaltet die Sprecher-Diarisierung ein, um verschiedene Sprecher im Audio zu unterscheiden. Ist diese Option aktiv, erhalten die Segmente entsprechende Sprecherlabels. Oracle Mini aktiviert dafür automatisch den Zeitstempel-Abgleich. Standard: false |
| pro_diarization | boolean | Optional | Aktiviert das Premium-Modell zur Sprecher-Diarisierung. Das sorgt besonders bei schwierigem Audio für höhere Genauigkeit und kostet 0.20 Credits extra pro Audiostunde. Oracle Mini schaltet in diesem Modus automatisch die Zeitstempel-Ausrichtung zu. Standard: false |
| num_speakers | integer | Optional | Die erwartete Anzahl der Sprecher in der Aufnahme. Wird nur berücksichtigt, wenn
include_diarization true ist. Ohne Angabe erkennt das System die Sprecherzahl automatisch.Standard: auto |
| channel_speaker_separation | string | Optional | Trennt eine Stereo- oder Mehrkanaldatei, angegeben in audio_url nach physischer Audiospur. Verwenden Sie standard für Sprecher im Wechsel oder overlap für überlappende Sprache. Kann nicht mit der Diarisierung kombiniert werden. Oracle Mini aktiviert die Zeitstempel-Ausrichtung für beide Kanalmodi automatisch.Default: "off" |
| channel_labels | object | Optional | Optionale, nullbasierte Zuordnung der Kanalindizes, zum Beispiel {"0":"Agent","1":"Customer"}. Die Labels werden bei jedem Segment und jedem Wort zurückgegeben. |
| webhook_url | string | Optional | Öffentliche HTTPS-URL, an die ein POST gesendet wird, sobald der Transkriptionsauftrag fertig ist oder fehlschlägt. Geben Sie einen beliebigen 2xx -Status zurück, um die Zustellung zu bestätigen. |
| webhook_secret | string | Optional | Optionales Secret zum Signieren der Webhook-Payloads. Der Signatur-Header hat das Format sha256=<hex digest>. |
Beispielanfrage (mit Diarisierung):
{
"audio_url": "https://salford.figshare.com/ndownloader/files/14630270",
"word_timestamps": true,
"model": "edge",
"output_format": "json",
"include_diarization": true,
"num_speakers": 2
}
Antwort:
Gibt ein Objekt mit der `jobId` des gesendeten Transkriptionsauftrags zurück.
{
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57"
}
GET /transcribe/{jobId}
Ruft Status und Ergebnis eines bestimmten Transkriptionsauftrags ab.
Pfadparameter
| Parameter | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
| jobId | string | Erforderlich | Die ID des Transkriptionsauftrags aus der Antwort von POST /transcribe. |
Antwort-Body
| Feld | Typ | Beschreibung |
|---|---|---|
| jobId | string | Die ID des angefragten Transkriptionsauftrags. |
| status | string | Aktueller Auftragsstatus: PENDING, IN_PROGRESS, COMPLETED, oder FAILED |
| result | object | string | Das fertige Transkript (nur enthalten, wenn der Status COMPLETED lautet). Der genaue Aufbau richtet sich nach dem gewählten output_format. |
| error | string | Fehlermeldung (nur vorhanden, wenn der Status FAILED ist). |
Beispielantwort (JSON-Ausgabe mit Sprecher-Diarisierung):
{
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57",
"status": "COMPLETED",
"result": {
"language": "en",
"segments": [
{
"start": 0.5,
"end": 3.2,
"text": "Hello everyone, welcome to today's meeting.",
"speaker": "Speaker 1",
"words": [
{
"start": 0.5,
"end": 0.8,
"word": "Hello"
},
{
"start": 0.9,
"end": 1.4,
"word": "everyone"
}
]
},
{
"start": 4.1,
"end": 6.8,
"text": "Thank you. Let's begin with the quarterly review.",
"speaker": "Speaker 2",
"words": [
{
"start": 4.1,
"end": 4.5,
"word": "Thank"
},
{
"start": 4.6,
"end": 4.9,
"word": "you"
}
]
}
]
}
}
Sprecher-Diarisierung
Die Sprecher-Diarisierung erkennt und trennt verschiedene Sprecher in einer Audioaufnahme. Ist sie aktiviert, analysiert KolWrite die Aufnahme, erkennt Sprecherwechsel und versieht jeden Abschnitt mit dem passenden Label.
Sprecher-Diarisierung und Kanaltrennung stehen bei allen aufgeführten Modellen zur Verfügung. Bei Oracle Mini wird automatisch die Zeitstempel-Ausrichtung aktiviert, sobald Sie einen Sprechermodus wählen.
So aktivieren Sie die Diarisierung
Um die Sprecher-Diarisierung zu aktivieren, setzen Sie den Parameter include_diarization auf true in Ihrer Transkriptionsanfrage:
{
"audio_url": "https://example.com/meeting-audio.mp3",
"include_diarization": true,
"num_speakers": 3
}
Optimierung der Sprecheranzahl
Geben Sie für beste Ergebnisse die erwartete Anzahl der Sprecher mit dem Parameter num_speakers an. Wenn Sie die genaue Zahl nicht kennen, können Sie:
- Parameter weglassen (wird automatisch erkannt)
- Geben Sie als ungefähren Bereich Ihren besten Schätzwert an
Pro-Diarisierung
Um Sprecher vor allem bei schwieriger Akustik genauer zu erkennen, können Sie die Pro-Diarisierung aktivieren. Das kostet zusätzlich 0.20 Credits pro Audiostunde.
Um sie zu nutzen, setzen Sie den Parameter pro_diarization auf true. Dieser Parameter lässt sich kombinieren mit include_diarization.
{
"audio_url": "https://example.com/panel-discussion.mp3",
"include_diarization": true,
"pro_diarization": true
}
Sprechertrennung nach Kanälen
Bei der Kanaltrennung wird jede physische Audiospur einzeln transkribiert. Zurückgegebene Segmente und Wörter erhalten dabei die jeweiligen physischen Felder channel und speaker. Voraussetzung sind zwei bis acht Kanäle in der audio_url ; sie kann nicht mit der regulären oder der Pro-Diarisierung kombiniert werden. Oracle Mini aktiviert die Zeitstempel-Ausrichtung für beide Kanalmodi automatisch.
Verwenden Sie standard , wenn Sprecher sich abwechseln; abgerechnet wird ein einziger Audiosatz des gewählten Modells. Verwenden Sie overlap , wenn sich Sprecher überschneiden können; abgerechnet wird der Satz des gewählten Modells für den größeren Wert aus Aufnahmedauer und der über die physischen Kanäle erkannten Gesamtsprechzeit.
{
"audio_url": "https://example.com/stereo-call.wav",
"model": "oracle",
"channel_speaker_separation": "overlap",
"channel_labels": {"0": "Agent", "1": "Customer"}
}
Webhooks bei Abschluss
Setzen Sie webhook_url , um transcription.completed und transcription.failed zu erhalten. Fehlgeschlagene Zustellungen werden wiederholt, aber Clients sollten weiterhin GET /transcribe/{jobId} als maßgebliche Quelle unterstützen.
{
"audio_url": "https://example.com/meeting-audio.mp3",
"output_format": "json",
"webhook_url": "https://example.com/kolwrite-webhook",
"webhook_secret": "replace-with-your-secret"
}
Jede Zustellung enthält X-KolWrite-Event, X-KolWrite-Job-Id, X-KolWrite-Delivery-Id und X-KolWrite-Timestamp. Ereignisse werden mindestens einmal zugestellt. Da Wiederholungen dieselbe Zustellungs-ID nutzen, sollten Sie Duplikate herausfiltern anhand von X-KolWrite-Delivery-Id. Ist ein Secret hinterlegt, berechnen Sie HMAC-SHA256 über timestamp + "." + raw_request_body und vergleichen Sie es mit X-KolWrite-Signature.
{
"event": "transcription.completed",
"jobId": "34c63d45-4cb5-473b-bc60-25c175e69c57",
"status": "COMPLETED",
"createdAt": "2026-07-10T09:30:00+00:00",
"model": "base",
"output_format": "json",
"result_available": true,
"result_omitted": false,
"result_size_bytes": 12480,
"result": { "language": "en", "segments": [] }
}
Bei output_format: "json", ist im Webhook das Feld result ein JSON-Objekt. TXT- und SRT-Ergebnisse werden als Strings geliefert.
Bei großen Ergebnissen kann result_omitted auf truegesetzt sein; rufen Sie das vollständige Ergebnis ab über GET /transcribe/{jobId}. Fehlgeschlagene Ereignisse enthalten ein Feld error mit der Fehlermeldung.
Ausgabeformat mit Diarisierung
Wenn die Diarisierung aktiviert ist, enthält jedes Segment der JSON-Ausgabe ein Feld speaker , das den Sprecher kennzeichnet (z. B. „Speaker 1“, „Speaker 2“ usw.).
Ausgabeformate
JSON-Format
Detaillierte Ausgabe mit Segmenten, Zeitstempeln und optionalen Daten auf Wortebene.
TXT-Format
Transkript als reiner Text mit Sprecherlabels (bei aktivierter Diarisierung).
SRT-Format
Das Untertitelformat SubRip mit Zeitstempeln, nutzbar in Videoplayern und Untertitel-Editoren.
Standardmäßig sind Wortzeitstempel aktiv. Die SRT-Datei enthält dann einen Untertitelblock (Cue) pro Wort, wobei jeweils der gesamte Abschnittstext eingeblendet und das gerade gesprochene Wort hervorgehoben wird. Wenn Sie word_timestamps auf false setzen, wird nur ein Block pro Abschnitt erzeugt. WebVTT wird nicht ausgegeben. Bei Bedarf können Sie die SRT-Datei mit ffmpeg konvertieren.
Dienststatus
Sehen Sie sich die öffentliche Statusseite der KolWrite-API an, um Live-Verfügbarkeit, Verfügbarkeitsverlauf und Störungen auf Dienstebene einzusehen.
GET /health benötigt keinen API-Schlüssel und gibt den aktuellen Status von API, Auftragsannahme und Transkriptionsverarbeitung zurück. Eine Antwort 200 bedeutet, dass der Dienst betriebsbereit oder eingeschränkt ist; eine Antwort 503 bedeutet, dass der aktuelle Status unbekannt oder nicht verfügbar ist. Beide Antworten enthalten Statusdetails als JSON.
GET /health/history?period=24h gibt einen kompakten Verfügbarkeitsverlauf zurück. Unterstützte Zeiträume sind 24h, 7d und 30d.
Statuscodes
| Status | Beschreibung |
|---|---|
| PENDING | Der Auftrag befindet sich in der Warteschlange. |
| IN_PROGRESS | Der Auftrag wird gerade von unserem Transkriptionsdienst verarbeitet. |
| COMPLETED | Der Auftrag ist erfolgreich abgeschlossen. Die Ergebnisse stehen in der Antwort. |
| FAILED | Der Auftrag konnte nicht verarbeitet werden. Details stehen in der Fehlermeldung. |