API DocsTranskription

Transkription

Audiodateien transkribieren, optional mit Sprechererkennung und Meeting-Notizen. Status abfragen und Dokumente exportieren.

Auf dieser Seite

Lade eine Audiodatei hoch, erhalte eine Job-ID und hole dir das Transkript, sobald es fertig ist. Große Dateien laufen asynchron: der Upload antwortet sofort mit 202.

Zwei Modi: transcript liefert nur den Text. meeting erzeugt zusätzlich einen Titel und Zusammenfassungen, wie in der Meeting-Ansicht der App.

POST legt den Auftrag an und antwortet, bevor die Erkennung fertig ist. Frage GET mit der Job-ID ab, bis status completed oder failed ist.

Anmeldung per Authorization: Bearer DEIN-API-SCHLÜSSEL oder per angemeldeter Sitzung. Ein Schlüssel handelt als die Person, der er gehört.
Starte mit zwei Sekunden Abstand und erhöhe bis höchstens dreißig Sekunden. Solange status processing oder pending ist, ist das Transkript noch nicht da.
ParameterTypeDescription
id
uuidUUID des Auftrags. id und job_id sind dieselbe Kennung.
mode
"transcript" | "meeting"transcript (nur Text) oder meeting (Text plus Notizen).
status
"processing" | "pending" | "completed" | "failed"processing, pending, completed oder failed.
text
string | nullDas fertige Transkript. Bei Anonymisierung der geschwärzte Text, nie die Rohfassung.
segments
array | nullAbschnitte mit Zeit und optionalem Sprecher. Nur wenn angefordert und nicht anonymisiert.
summaries
arrayNur im meeting-Modus: vorbereitete Notizen je Vorlage.
1curl "https://app.anymize.ai/api/v1/transcriptions" \
2 -H "Authorization: Bearer YOUR_API_KEY"

Auftrag anlegen

Eine Datei hochladen und die Erkennung starten. Die Antwort ist 202 mit der Job-ID.

Audiodatei hochladen und Transkription starten

multipart/form-data mit der Datei und optionalen Schaltern. Das Transkript holst du später über GET.

POST/api/v1/transcriptions

Request: multipart/form-data

Body

ParameterTypeDescription
filerequired
FileDie Audio-Datei. MP3, WAV, M4A, OGG, WEBM.
mode
"transcript" | "meeting"transcript oder meeting. Vorgabe transcript.
speaker_detection
booleanSprechererkennung. Vorgabe an bei meeting, sonst aus.
timestamps
booleanAbschnitte mit Millisekunden. Bei Sprechererkennung immer an.
language
stringISO-639-1, oder weglassen bzw. auto für Erkennung nach der Transkription.
prompt
stringKurzer Hinweis an die Erkennung, höchstens 1000 Zeichen.
context_bias
stringKommagetrennte Begriffe, damit Namen richtig geschrieben werden. Höchstens 100 Tokens.
anonymize
booleanDanach durch die Anonymisierung schicken. Unterstützt de, en, fr, es, it.
202Accepted
{
  "id": "11111111-1111-4111-8111-111111111111",
  "job_id": "11111111-1111-4111-8111-111111111111",
  "status": "processing",
  "mode": "transcript",
  "title": "standup.m4a",
  "filename": "standup.m4a",
  "message": "Audio submitted for transcription. Poll GET /api/v1/transcriptions/:id until status is completed or failed."
}
401UNAUTHORIZEDKein gültiger Schlüssel und keine Sitzung.
400NO_FILEIm Formular fehlt das Feld file.
400INVALID_FORMATKein unterstütztes Audioformat.
400FILE_TOO_LARGEDie Datei überschreitet das Limit des gewählten Modus.
429RATE_LIMITZu viele Uploads in dieser Minute.
1curl -X POST "https://app.anymize.ai/api/v1/transcriptions" \
2 -H "Authorization: Bearer YOUR_API_KEY" \
3 -F "file=@standup.m4a" \
4 -F "mode=transcript" \
5 -F "language=de"
Meeting-Uploads dürfen bis 250 MB groß sein, reine Transkripte bis 100 MB.

Auftrag abrufen

Status, Text, Abschnitte und bei Meetings die Notizen. Audio-Bytes sind nicht enthalten.

Ein Transkriptionsauftrag

Liefert den aktuellen Stand. Poll, bis status completed oder failed ist. text ist null, solange es läuft.

GET/api/v1/transcriptions/:id
200Completed transcript
{
  "id": "11111111-1111-4111-8111-111111111111",
  "job_id": "11111111-1111-4111-8111-111111111111",
  "status": "completed",
  "mode": "transcript",
  "title": "standup.m4a",
  "filename": "standup.m4a",
  "language": "de",
  "words": 12,
  "duration_ms": 18400,
  "has_audio": true,
  "speaker_detection": false,
  "anonymize": false,
  "anonymization_applied": false,
  "text": "Guten Morgen. Lasst uns mit dem Stand-up beginnen.",
  "segments": [
    {
      "start_ms": 0,
      "end_ms": 18400,
      "speaker": "",
      "text": "Guten Morgen. Lasst uns mit dem Stand-up beginnen."
    }
  ],
  "created_at": "2026-09-11T08: 15: 00.000Z"
}
200Completed meeting
{
  "id": "11111111-1111-4111-8111-111111111111",
  "job_id": "11111111-1111-4111-8111-111111111111",
  "status": "completed",
  "mode": "meeting",
  "title": "Q3 Planung",
  "filename": "meeting.wav",
  "language": "de",
  "words": 842,
  "duration_ms": 3120000,
  "has_audio": true,
  "speaker_detection": true,
  "anonymize": false,
  "anonymization_applied": false,
  "text": "(((Speaker 1))) Guten Morgen. (((Speaker 2))) Danke, dass ihr da seid.",
  "segments": [
    {
      "start_ms": 0,
      "end_ms": 2100,
      "speaker": "Speaker 1",
      "text": "Guten Morgen."
    },
    {
      "start_ms": 2200,
      "end_ms": 5400,
      "speaker": "Speaker 2",
      "text": "Danke, dass ihr da seid."
    }
  ],
  "summaries": [
    {
      "template_key": "general",
      "title": null,
      "content": "Stand-up zur Q3-Planung. Naechster Schritt: Budget bis Freitag.",
      "status": "completed",
      "locale": "de"
    }
  ],
  "created_at": "2026-09-11T08: 15: 00.000Z"
}
401UNAUTHORIZEDKein gültiger Schlüssel und keine Sitzung.
404NOT_FOUNDKein Audio-Auftrag mit dieser ID, oder er gehört dir nicht.
1curl "https://app.anymize.ai/api/v1/transcriptions/11111111-1111-4111-8111-111111111111" \
2 -H "Authorization: Bearer YOUR_API_KEY"
Die Aufnahme streamt über GET /api/v1/jobs/:id/audio, nicht über diese Antwort.
processing und pending heißen: noch kein Text. failed heißt: der Auftrag ist durch, ohne Ergebnis.

Aufträge listen

Deine Audio-Transkriptionen, ohne den vollen Text. Den holst du per GET auf die einzelne ID.

Transkriptionen auflisten

Nur Audio-Jobs. Filtern nach mode und status. Ohne Text und ohne Segmente, damit die Liste klein bleibt.

GET/api/v1/transcriptions

Query

ParameterTypeDescription
mode
"transcript" | "meeting"Nur transcript (kind input oder live) oder nur meeting.
status
stringprocessing, pending, completed oder failed.
limit
integerAnzahl pro Seite, höchstens 100.
offset
integerOffset für die nächste Seite.
200OK
{
  "data": [
    {
      "id": "11111111-1111-4111-8111-111111111111",
      "job_id": "11111111-1111-4111-8111-111111111111",
      "status": "completed",
      "mode": "transcript",
      "title": "standup.m4a",
      "filename": "standup.m4a",
      "language": "de",
      "words": 12,
      "created_at": "2026-09-11T08: 15: 00.000Z"
    }
  ],
  "total": 1
}
401UNAUTHORIZEDKein gültiger Schlüssel und keine Sitzung.
1curl "https://app.anymize.ai/api/v1/transcriptions?mode=transcript&limit=20" \
2 -H "Authorization: Bearer YOUR_API_KEY"

Modi und Grenzen

Welchen Modus du wählst, entscheidet, was nach der Erkennung passiert, nicht die Qualität des Texts.

transcript speichert nur den Text. Keine automatischen Notizen, kein Meeting-Titel.

meeting erkennt Sprecher standardmäßig, vergibt einen Titel und erzeugt die Standard-Zusammenfassung.

Formate: MP3, WAV, M4A, OGG, WEBM. Transkripte bis 100 MB, Meetings bis 250 MB. Rate Limit: 50 Uploads pro Minute.

anonymize=true schickt denselben Auftrag durch die Pipeline. GET liefert dann den geschwärzten Text, keine Original-Segmente.
1curl -X POST "https://app.anymize.ai/api/v1/transcriptions" \
2 -H "Authorization: Bearer YOUR_API_KEY" \
3 -F "file=@meeting.wav" \
4 -F "mode=meeting" \
5 -F "speaker_detection=true" \
6 -F "timestamps=true"

Alias /api/transcribe

Der ältere Endpunkt bleibt. Er startet dieselbe Engine und antwortet mit der historischen 202-Form, damit bestehende Clients weiter /api/status/:id pollen.

Legacy-Upload, gleiche Engine

Nur API-Schlüssel, kein Session-Cookie. Dieselben Formularfelder wie POST /api/v1/transcriptions, inklusive mode.

POST/api/transcribe

Request: multipart/form-data

Body

ParameterTypeDescription
filerequired
FileDie Audio-Datei. MP3, WAV, M4A, OGG, WEBM.
mode
"transcript" | "meeting"transcript oder meeting. Vorgabe transcript.
speaker_detection
booleanSprechererkennung. Vorgabe an bei meeting, sonst aus.
timestamps
booleanAbschnitte mit Millisekunden. Bei Sprechererkennung immer an.
language
stringISO-639-1, oder weglassen bzw. auto für Erkennung nach der Transkription.
prompt
stringKurzer Hinweis an die Erkennung, höchstens 1000 Zeichen.
context_bias
stringKommagetrennte Begriffe, damit Namen richtig geschrieben werden. Höchstens 100 Tokens.
anonymize
booleanDanach durch die Anonymisierung schicken. Unterstützt de, en, fr, es, it.
202Accepted
{
  "job_id": "11111111-1111-4111-8111-111111111111",
  "status": "processing",
  "message": "Audio submitted for transcription. Use /api/status/{job_id} to check status."
}
1curl -X POST https://app.anymize.ai/api/transcribe \
2 -H "Authorization: Bearer YOUR_API_KEY" \
3 -F "file=@standup.mp3" \
4 -F "language=de"
Die Job-ID aus job_id gilt für GET /api/status/:id und für GET /api/v1/transcriptions/:id.

Job Status

Endpunkt

Frage den aktuellen Status eines asynchronen Jobs ab.

GET/api/status/{jobId}

Parameter

ParameterTypeDescription
jobIdrequired
stringDie Job-ID, die du beim Erstellen des Jobs erhalten hast.

Status-Werte

Ein Job durchläuft folgende Zustände:

processingDer Job wird gerade verarbeitet.
completedDer Job ist abgeschlossen — Ergebnis verfügbar.
failedDer Job ist fehlgeschlagen. Die Antwort enthält den Status, aber keine separaten Fehlerdetails.

Status: Verarbeitung

200Antwort während der Verarbeitung
{
  "job_id": "11111111-1111-4111-8111-111111111111",
  "status": "processing"
}

Status: Abgeschlossen

Bei abgeschlossenem Job enthält die Antwort das Ergebnis.

200Antwort bei abgeschlossenem Job
{
  "job_id": "11111111-1111-4111-8111-111111111111",
  "status": "completed",
  "anonymized_text_raw": "Max [[Person-A1B2C3]] lives in [[Location-D4E5F6]].",
  "original_text": "Max Mustermann lives in Berlin.",
  "metadata": {
    "filename": "document.pdf",
    "language": "en",
    "words": 6
  }
}

Status: Fehlgeschlagen

200Antwort bei fehlgeschlagenem Job
{
  "job_id": "11111111-1111-4111-8111-111111111111",
  "status": "failed"
}

Polling-Strategie

Frage den Status in regelmäßigen Abständen ab, bis der Job fertig ist.

Tipp

Starte mit 2 Sekunden Intervall und erhöhe exponentiell bis maximal 30 Sekunden.
1# Poll every 3 seconds until completed
2while true; do
3 RESULT=$(curl -s https://app.anymize.ai/api/status/11111111-1111-4111-8111-111111111111 \
4 -H "Authorization: Bearer YOUR_API_KEY")
5 STATUS=$(echo $RESULT | jq -r '.status')
6 echo "Status: $STATUS"
7 if [ "$STATUS" = "completed" ] || [ "$STATUS" = "failed" ]; then
8 echo $RESULT | jq .
9 break
10 fi
11 sleep 3
12done

Dokument Export

Endpunkt

Exportiere abgeschlossene Transkriptionen in verschiedenen Formaten.

GET/api/v1/jobs/{jobId}/export

Parameter

Gib Job-ID, Format und optional eine Variante an.

ParameterTypeDescription
jobIdrequired
stringDie Job-ID der abgeschlossenen Transkription.
format
stringAusgabeformat: pdf oder txt. docx liefert HTTP 501.
textType
stringVariante des Exports (z.B. anonymisiert oder original).

Verfügbare Formate

pdfPDF — Formatiertes Dokument mit Layout und Metadaten.
txtTXT — Reiner Text ohne Formatierung.

Response-Header

Der Download enthält passende Content-Type- und Content-Disposition-Header.

200Beispiel Response-Header
Content-Type: application/pdf
Content-Disposition: attachment; filename="document_anonymized.pdf"
Content-Length: 245832

Export-Varianten

Wähle zwischen der originalen und der anonymisierten Version.

Tipp

Nutze die anonymisierte Variante für die Weitergabe an Dritte.

Beispiel-Requests

Export als PDF
1curl -OJ https://app.anymize.ai/api/v1/jobs/11111111-1111-4111-8111-111111111111/export?format=pdf \
2 -H "Authorization: Bearer YOUR_API_KEY"

Fehlerfälle

DOCX liefert 501. Nicht gefundene Jobs liefern 404, nicht abgeschlossene Jobs 400.

501DOCX nicht verfügbar (HTTP 501)
{
  "error": "DOCX export not yet implemented"
}
404Not Found
{
  "error": "Job not found"
}
Transcription API Dokumentation | anymize