Auf einen Blick
Authorization: Bearer und die Basis https://api.uttera.ai/v1; jede Antwort enthält ihre Kostenaufschlüsselung. Neu hier? Beginnen Sie mit dem Quickstart.Springe zu: Sicherheit · Transkribieren (STT) · Sprache (TTS) · Streaming · Übersetzen · Stimme analysieren · Zusammenfassen
Sicherheit
Transkripte, Übersetzungen und Zusammenfassungen werden aus Audio erzeugt, das wir nicht kontrollieren: Ihr Kunde erzeugt es oder es kommt von ihm. Jeder kann versuchen, befehlsförmige Sätze in eine Aufnahme einzuschmuggeln, damit sie in Ihrem System ausgeführt werden.
Wir härten die Zusammenfassung gegen diese Art von Manipulation, aber keine Verteidigung ist vollständig. Wenn Sie unsere Ausgabe an einen Agenten, ein CRM oder irgendeine Automatisierung mit Berechtigungen weitergeben, behandeln Sie sie als nicht vertrauenswürdigen Text: führen Sie sie nicht aus, lesen Sie sie nicht als Befehle und validieren Sie sie, bevor Sie darauf reagieren.
Und was ein Sprecher in einer Aufnahme behauptet, ist keine bewiesene Tatsache, auch wenn es in der Zusammenfassung landet.
Transkribieren
POST /v1/audio/transcriptions
Verwandelt eine Aufnahme in Text. Erkennt die Sprache von selbst.
Sie können diesen Dienst direkt nutzen, ohne Code zu schreiben, auf der Seite Studio: die Karte Audio transkribieren.
| Parameter | Typ | Beschreibung |
|---|---|---|
file | file | Erforderlich. Das Audio. |
model | text | whisper-1 |
language | text | ISO-Code. Wenn weggelassen, wird sie erkannt. |
prompt | text | Kontext zur Hilfe bei Eigennamen oder Fachjargon. |
response_format | text | json · text · verbose_json · srt · vtt |
extras | text (query) | sentiment · profile · diarize, kommagetrennt |
temperature | number | 0 bis 1. Standardwert 0. |
extras | query | ?extras=sentiment fügt in derselben Anfrage eine Tonanalyse hinzu. |
Die Antwort trägt den Header X-Audio-Duration mit den genauen Sekunden, die
berechnet wurden.
Text zu Sprache
POST /v1/audio/speech
Sie können diesen Dienst direkt nutzen, ohne Code zu schreiben, auf der
Seite Studio: die Karten Text zu digitaler Stimme
(tts-1) und Text zu geklonter Stimme (tts-1-hd).
| Parameter | Typ | Beschreibung |
|---|---|---|
input | text | Erforderlich. Was gesagt werden soll. |
model | text | tts-1 Standardstimme · tts-1-hd hochwertige Stimme. Siehe die drei Stimmen. |
voice | text | Name aus dem Katalog. Siehe Stimmen. |
response_format | text | mp3 · wav · opus · flac · pcm |
speed | number | Geschwindigkeit. 1.0 ist normal. |
language | text | Lesesprache. Wenn weggelassen, legt die Stimme sie fest. Siehe wie sie gewählt wird. |
cache | boolean | false hält diese Anfrage aus dem Cache heraus: nichts wird gelesen und nichts geschrieben. Siehe unten. |
curl -X POST https://api.uttera.ai/v1/audio/speech \
-H "Authorization: Bearer $UTTERA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"tts-1","input":"Your order ships tomorrow.","voice":"nova","response_format":"mp3"}' \
--output voice.mp3
gustaria wird betont
gus-ta-ria; gustaría wird betont gus-ta-rí-a.
Wir fügen sie bewusst nicht für Sie hinzu: esta und está, papa und papá, termino und terminó sind verschiedene Wörter. Ein automatischer Korrektor läge bei vielen richtig und würde, wenn er bei einem falsch läge, ändern, was Sie uns zu sagen gebeten haben. Wir lesen Ihren Text lieber so, wie er geschrieben ist.
Welche Sprache gelesen wird, und wer entscheidet
Die Sprache legt nicht die Klangfarbe fest: sie wählt die Regeln, nach denen Text zu Klang wird. Sie falsch zu setzen klingt nicht “akzentuiert”, es klingt kaputt. Ein spanischer Text, mit englischen Regeln gelesen, kommt buchstäblich so heraus:
Mi Gasteria reservar una mesa para dues personas
Deshalb wird sie in drei Schritten aufgelöst, und Sie müssen selten darüber nachdenken:
| Reihenfolge | Woher sie kommt |
|---|---|
| 1 | Die language, die Sie senden. Gewinnt immer. |
| 2 | Die Sprache der Stimme. Jede Katalogstimme spricht ihre eigene,
und /v1/audio/voices veröffentlicht sie. Fordern Sie
alloy an und sie liest Englisch; fordern Sie dora an und sie liest Spanisch. |
| 3 | Der Server-Standard, Englisch. Er erreicht nur Stimmen ohne eigene Sprache: geklonte und mehrsprachige, die sprechen, worum sie gebeten werden. |
/v1/audio/speech hat kein Feld language — das ist unsere Erweiterung — also
sendet Ihr Code es nicht, und Schritt 2 tut das Richtige: die Stimme, die Sie wählen, entscheidet die
Sprache.Wann es sich lohnt zu senden: bei einer geklonten oder mehrsprachigen Stimme (sie haben keine eigene Sprache), oder wenn Sie bewusst möchten, dass eine Stimme eine andere Sprache als ihre eigene liest.
Das Stimmmuster: was hochladen
Eine Stimme zu klonen braucht ein Referenzmuster. Was am besten funktioniert:
| Empfohlen | Warum |
|---|---|
| 6 bis 12 Sekunden | Unter 6 verlieren Sie tonale Tiefe. Über 12 wird es nicht proportional besser und fügt nur Latenz hinzu. |
| Ein vollständiger Satz, mit natürlicher Intonation | Das Modell erfasst, wie diese Stimme steigt und fällt, und es muss sehen, wie das geschieht. |
| Kein Hintergrundgeräusch | Das machen die meisten falsch. Musik, Raum- hall oder Klimaanlage kontaminieren die Ausgabestimme und tauchen in allem auf, was Sie danach erzeugen. |
Zu der Frage, wessen Stimme Sie klonen dürfen — die für den meisten Ärger sorgt — siehe den Rechtsrahmen: eine Stimme ist geschützt, und öffentliches Material ist keine Erlaubnis.
Drei Stimmen, nicht zwei
Dieselbe Route liefert drei verschiedene Dinge, und was entscheidet, welches, ist was Sie senden:
| Was Sie senden | Was Sie bekommen | Tarif |
|---|---|---|
tts-1, oder nichts | Standardstimme. Unser eigener Katalog, schnell und günstig. | Alle |
tts-1-hd | Hochwertige Stimme. Derselbe Katalog, Premium-Engine. | Kostenpflichtig |
tts-1-hd + ein Stimmmuster | Klonen. Ihre Stimme, auf der Premium-Engine. | Kostenpflichtig |
Das Muster wird als custom_voice_file in einem Multipart-Formular gesendet; ohne
es geht die Anfrage als JSON. Das ist der ganze Unterschied zwischen dem Anfordern einer Katalogstimme
in hoher Qualität und dem Klonen einer solchen.
tts-1 die
vernünftige Wahl.Sie sprechen nicht dieselben Sprachen
Es ist der Unterschied, der die Leute am meisten überrascht, und er liegt nicht in der Klangfarbe:
| Sprachen | Katalogstimmen | |
|---|---|---|
tts-1 · Standard | 9: Spanisch, Englisch (und britisch), Französisch, Italienisch, Portugiesisch, Hindi, Japanisch und Chinesisch | Viele, und jede an ihre Sprache gebunden |
tts-1-hd · hohe Qualität | Rund 30: neben den obigen Deutsch, Russisch, Polnisch, Niederländisch, die nordischen Sprachen, Griechisch, Türkisch, Arabisch, Koreanisch und mehrere südostasiatische, unter anderem | Wenige, aber jede spricht alle 30 |
Der Grund ist, dass es Engines unterschiedlicher Natur sind. Die Standard-Engine hat einen festen Stimmenkatalog, jede für ihre Sprache trainiert. Die hochwertige geht von einem Muster aus — deshalb kann sie klonen — und dieselbe Stimme liest jede der Sprachen, die sie kennt.
Mit tts-1-hd muss die Sprache nicht angegeben werden: sie wird
aus dem Text erschlossen. Mit tts-1 spielt sie eine Rolle, weil die gewählte Stimme sie
festlegt.
Zeilenumbrüche kosten Geld
Sprache wird pro erzeugter Sekunde abgerechnet, nicht pro Zeichen. Und ein Zeilenumbruch lässt die Engine eine Pause einfügen. Also kostet derselbe Text je nach Formatierung unterschiedlich, und es lohnt sich, das zu wissen, bevor die Rechnung Sie überrascht.
Gemessen mit demselben Satz achtmal wiederholt, wobei nur das dazwischen geändert wurde:
| Zwischen Sätzen | Dauer | Gegenüber einem Leerzeichen |
|---|---|---|
| Leerzeichen · 2 Leerzeichen · 4 Leerzeichen | 12,2 s | — |
| Komma · Semikolon · Doppelpunkt · Auslassungspunkte · Gedankenstrich | 12,1–12,3 s | — |
| Zeilenumbruch | 21,4 s | +75 % |
| 2 Umbrüche · 3 Umbrüche | 21,4 s | +75 % |
Leerzeichen bewirken nichts. Weder zwei noch vier. Auch Satzzeichen nicht: ein Komma, ein Punkt oder ein Gedankenstrich klingen, was die Uhr betrifft, wie ein Leerzeichen.
Nur der Zeilenumbruch erzeugt eine Pause, und jeder kostet 1,31 s (0,028 Credits).
Mehr Umbrüche verlängern die Pause nicht. Einer, zwei oder drei sind genau gleich. Sie taugen nicht dazu, eine längere Wartezeit zu erbitten.
In einem echten Text ist der Unterschied nicht klein. La canción del pirata gibt mit seinen ~96 Zeilen allein 126 Sekunden für Pausen aus: etwas mehr als die Hälfte dessen, was das Synthetisieren des Ganzen kostet.
Wenn Sie die Pausen nicht möchten, entfernen Sie die Zeilenumbrüche, bevor Sie den Text senden: dieselben Wörter als ein durchlaufender Absatz kosten fast die Hälfte. Und wenn Sie sie doch möchten, wissen Sie jetzt, was sie wert sind.
Warum die Kette eine andere Zahl ergibt
Wenn Sie eine Audiodatei transkribieren und dann übersetzen, werden Sie sehen, dass die Sprache für die Übersetzung erheblich weniger kostet als die ursprüngliche Synthese desselben Textes. Es ist kein Abrechnungsfehler: die Erkennung gibt einen durchlaufenden Absatz zurück, ohne die Zeilenumbrüche des Originals. Dieser flache Text wird ohne Pausen synthetisiert und dauert deshalb — und kostet — weniger.
Anders gesagt: Zeilenumbrüche überstehen die Reise durchs Audio nicht. Wenn es Ihnen wichtig ist, sie zu behalten, bewahren Sie den Ausgangstext auf; aus dem Transkript lassen sie sich nicht wiederherstellen.
X-Cache: HIT.
Der Cache ist pro Knoten. Da Anfragen über mehrere verteilt werden, treffen die ersten Wiederholungen eines Textes vielleicht nicht: jeder Knoten füllt ihn beim ersten Mal, wenn er an der Reihe ist. Danach trifft es.
Den Cache abschalten, Anfrage für Anfrage
Manche Arbeit darf das Audio nicht einmal für eine Stunde auf fremder Platte liegen haben: medizinisches Diktat, juristische Notizen, eine persönliche Nachricht. Sie können den Cache selbst abschalten, bei jeder Anfrage, ohne uns um etwas zu bitten und ohne Ihr Konto zu ändern. Das Audio wird trotzdem erzeugt und Ihnen ausgeliefert; was nicht geschieht, ist, dass irgendetwas auf die Platte geschrieben oder von ihr gelesen wird.
Drei gleichwertige Wege, je nachdem, welcher Ihnen am besten passt:
# 1) Im JSON-Body
-d '{"model":"tts-1","input":"Private notes","voice":"nova","cache":false}'
# 2) Als Formularfeld (akzeptiert 0 / false / no / off)
-F input="Private notes" -F voice=nova -F cache=false
# 3) Mit dem guten alten HTTP-Header, ohne den Body anzufassen
-H "Cache-Control: no-cache"
Die Antwort sagt Ihnen stets, was getan wurde, damit Sie uns nicht beim Wort nehmen müssen:
X-Cache | Was geschah |
|---|---|
HIT | Aus dem Cache bedient. Kostet 10 %. |
MISS | Erzeugt und für die nächste Stunde gespeichert. |
BYPASS | Sie haben ohne Cache angefordert: erzeugt und nichts gespeichert. |
ADHOC | Stimme spontan geklont. Nie gecacht, ob Sie es verlangen oder nicht. |
DISABLED | Der Cache ist auf dem Server abgeschaltet. |
Streaming: es hören, während es erzeugt wird
POST /v1/audio/speech/stream
Der normale Sprach-Endpunkt gibt Ihnen die Datei, wenn sie fertig ist. Dieser reicht sie Ihnen schon während der Erzeugung weiter, in Stücken, sodass der erste Ton fast sofort herauskommt, statt auf das letzte Wort zu warten.
Wenn Sie ein Telefonsystem bauen, einen Assistenten, der antwortet, oder irgendetwas, bei dem am anderen Ende eine Person wartet, ist das der Unterschied zwischen einem Gespräch und einer Warteschlange.
/v1/audio/speech | /v1/audio/speech/stream | |
|---|---|---|
| Gibt zurück | Die vollständige Datei | audio/wav in Stücken (Transfer-Encoding: chunked) |
| Formate | mp3 · wav · opus · flac · pcm | nur wav |
| Cache | Ja, eine Stunde zu 10 % | Nein: Es gibt keine Datei zum Speichern |
| Geklonte Stimme | Ja | Ja |
| Preis | Derselbe: pro Sekunde erzeugtem Audio | |
curl -N -X POST https://api.uttera.ai/v1/audio/speech/stream \
-H "Authorization: Bearer $UTTERA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"tts-1","input":"Your order ships tomorrow.","voice":"nova","language":"en"}' \
--output - | aplay
Das -N von curl ist wichtig: Ohne es puffert curl die Antwort, und Sie
verlieren genau das, wofür Sie gekommen sind.
Übersetzen
The 50 languages you can write in: these are what translation accepts as INPUT.
sqAlbanianarArabicazAzerbaijanieuBasquebnBengalibgBulgariancaCatalanzh-HansChinese (Simplified)zh-HantChinese (Traditional)csCzechdaDanishnlDutchenEnglisheoEsperantoetEstonianfiFinnishfrFrenchglGaliciandeGermanelGreekheHebrewhiHindihuHungarianidIndonesiangaIrishitItalianjaJapanesekoKoreankyKyrgyzlvLatvianltLithuanianmsMalaynbNorwegian BokmålfaPersianplPolishptPortuguesept-BRPortuguese (Brazil)roRomanianruRussianskSlovakslSlovenianesSpanishswSwahilisvSwedishtlTagalogthThaitrTurkishukUkrainianurUrduviVietnamese
And the 9 that can come back SPOKEN: for the rest, translation comes back as text. If you ask for audio in one without a voice, the request is rejected with 422 before spending anything.
zhChineseenEnglishen-gbEnglish (British)frFrenchhiHindiitItalianjaJapaneseptPortugueseesSpanish
POST /v1/translate
Die vollständige Kette: Sie transkribiert das Audio, übersetzt den Text und synthetisiert ihn in der Zielsprache. Sie akzeptiert Audio- oder Texteingabe, aber nicht Text zu Text: Wenn Text hineingeht, muss die Ausgabe Audio enthalten.
Sie können diesen Dienst direkt, ohne Code zu schreiben, auf der Studio-Seite nutzen: die Karte Eine Aufnahme übersetzen.
| Parameter | Typ | Beschreibung |
|---|---|---|
file | Datei | Das Ausgangsaudio. |
target | query | Erforderlich. Zielsprache. |
source | query | Ausgangssprache. Standardmäßig erkannt. |
response | query | both Text und Audio · text nur Text · audio nur Audio |
voice | query | Ausgabestimme, aus dem Standardkatalog. Wird ignoriert, wenn Sie preserve_voice anfordern. |
preserve_voice | query | 1, um zu transponieren: Die Übersetzung wird in der Stimme des ursprünglichen Sprechers gesprochen, aus derselben Aufnahme geklont. Erfordert Audioeingabe und einen kostenpflichtigen Tarif. |
speed | query | Lesegeschwindigkeit des zurückgegebenen Audios. 1,0 ist normal; 0,25 bis 4,0. Da Sprache pro erzeugter Sekunde abgerechnet wird, ändert das auch den Preis. |
format | query | Format des zurückgegebenen Audios: mp3 (Standard) · wav · opus · flac · pcm. Es wird mit der Standardstimme synthetisiert, daher kommt pcm mit 24.000 Hz heraus. |
curl -X POST "https://api.uttera.ai/v1/translate?target=en&response=both" \
-H "Authorization: Bearer $UTTERA_API_KEY" \
-F file=@recording.mp3
Sie gibt source_text zurück, den übersetzten text und
audio in base64 mit seinem audio_format. Außerdem
source_language: Wenn Sie source nicht angegeben haben, trägt dieses
Feld die von uns erkannte Sprache, nicht das Wort auto. Es lohnt sich, es zu
lesen.
source an.
Das ist stets zuverlässiger, als es der Erkennung zu überlassen.422 abgelehnt, bevor etwas ausgegeben wird, und gibt die gültige Liste zurück.
Verwenden Sie response=text für die übrigen.
Es ist eine Einschränkung der Engine, die diese Kette verwendet, nicht des Produkts: Die hochwertige Stimme spricht rund 30 Sprachen. Wenn Sie Audio in einer der anderen brauchen, sagen Sie es uns.
Die Stimme transponieren
Mit preserve_voice=1 wird die Übersetzung nicht in einer unserer Katalogstimmen
gelesen: Sie wird in der eigenen Stimme des Sprechers gelesen. Dieselbe Aufnahme erledigt
beide Aufgaben, Transkription und Klonen, sodass es nichts weiter hochzuladen gibt.
curl -X POST "https://api.uttera.ai/v1/translate?target=en&response=both&preserve_voice=1" \
-H "Authorization: Bearer $UTTERA_API_KEY" \
-F file=@recording.mp3
Die Antwort trägt preserved_voice: true und voice: "original".
Prüfen Sie es: So wissen Sie, ohne das Audio anzuhören, welches der beiden Produkte Ihnen
geliefert wurde — denn sie kosten nicht dasselbe.
Im Inneren besteht der vollständige Ablauf aus drei Stufen bei einer einzigen Ihrer Anfragen:
| Stufe | Was passiert | Abgerechnet |
|---|---|---|
| 1. Transkribieren | Ihre Aufnahme durchläuft die Spracherkennung. | Pro Sekunde Eingangsaudio. |
| 2. Übersetzen | Der Text wird in die Zielsprache übersetzt. | Im Kettenzuschlag enthalten. |
| 3. Sprechen | Der übersetzte Text wird unter Klonen der Stimme derselben Aufnahme synthetisiert. | Pro Sekunde erzeugtem Audio, zum Tarif der geklonten Stimme. |
/v1/audio/speech. Die Seite Studio
zeigt Ihnen die geschätzten Kosten, bevor Sie es ausführen, mit bereits angehaktem Kästchen.preserve_voice mit 422 abgelehnt: Es
gibt keine Stimme zum Transponieren. Und wenn Ihr Tarif kein Klonen umfasst, mit 403
und dem Namen des Parameters, den Sie weglassen müssen.
Die geklonte Stimme wird nicht gespeichert. Sie wird für diese eine Anfrage im Speicher abgeleitet und verschwindet mit ihr, genau wie beim Adhoc-Klonen.
Die Stimme analysieren
Drei Endpunkte über dasselbe Audio, jeder mit seinem eigenen Preis.
Sie können diese Analysen direkt, ohne Code zu schreiben, auf der Studio-Seite nutzen: Es sind Kästchen auf der Karte Audio transkribieren, angehakt über demselben Audio.
| Endpunkt | Was er tut |
|---|---|
POST /v1/audio/sentiment | Emotionaler Ton der Aufnahme. |
POST /v1/audio/profile | Sprecherprofil: geschätzte Altersspanne und Geschlecht. |
POST /v1/audio/diarize | Wer wann spricht, mit Zeitstempeln pro Sprecher. |
curl -X POST https://api.uttera.ai/v1/audio/diarize \
-H "Authorization: Bearer $UTTERA_API_KEY" \
-F file=@recording.mp3
Entitäten und Schwärzung personenbezogener Daten
Zwei Vorgänge über den Text einer Transkription, nicht über das Audio. Deshalb laufen sie nach dem Transkribieren, nicht parallel zur Stimmanalyse.
| Vorgang | Was er tut | Tarif |
|---|---|---|
Entitäten · entities | Erkennt und klassifiziert, was im Text vorkommt: Personen, Organisationen, Orte, Daten, Beträge, E-Mails, Telefonnummern, Kennungen. | Developer oder höher |
Schwärzung · redact | Gibt die Transkription mit maskierten personenbezogenen Daten zurück. Erkennt einen Namen einmal und verdeckt ihn an jeder Stelle. | Professional oder höher |
Die Entitäten stammen von einem Modell, das mit der Sprache arbeitet, nicht von einer Wortliste. Die Schwärzung geht einen Schritt weiter: Zu dem, was das Modell markiert, fügt sie Validatoren hinzu, welche die Form jedes Datums prüfen, bevor sie es verdecken — die Prüfziffer einer spanischen DNI/NIE, die Modulo-97-Prüfung einer IBAN, den Luhn-Algorithmus einer Kartennummer —, um keine Zahl zu maskieren, die nur wie eine Karte aussieht, und keine durchzulassen, die es ist.
Sie werden auf zwei Arten angefordert: als Extra einer Transkription
(?extras=entities,redact) oder innerhalb einer Zusammenfassung.
Berechnet wird pro Textzeichen; die Einzelheiten stehen in der
Koeffiziententabelle.
redact anfordern, wird der Text maskiert, bevor er das
zusammenfassende Modell erreicht: Die Zusammenfassung, die zurückgegebene Transkription und der
PDF-Bericht erben bereits den geschwärzten Text. Und mit redact enthält die Antwort
nicht die Entitätenliste — die echten Namen zurückzugeben hieße, genau das preiszugeben,
was man bezahlt hat, um es zu verbergen —; wenn Sie die Liste möchten, fordern Sie
entities an.Eine Aufnahme zusammenfassen
POST /v1/summarize Startup und höher
Sie transkribiert, analysiert den Ton, erstellt ein Sprecherprofil, trennt die Sprecher und erzeugt aus alldem eine strukturierte Zusammenfassung. Die vier zugrunde liegenden Dienste laufen parallel, sodass die Wartezeit die des langsamsten ist, nicht die Summe.
Sie können diesen Dienst direkt, ohne Code zu schreiben, auf der Studio-Seite nutzen: Es ist ein weiteres Kästchen auf der Karte Audio transkribieren.
| Parameter | Typ | Beschreibung |
|---|---|---|
file | Datei | Erforderlich. Die Aufnahme. |
exclude | query | Deaktiviert Anreicherungen: ?exclude=emotion,profile,diarize |
language | query | Sprache der Zusammenfassung. Standardmäßig Spanisch. |
entities | query | Mit ?entities=1 wird die Entitätenliste hinzugefügt. ?report=pdf erzwingt sie. Developer und höher |
redact | query | Mit ?redact=1 wird die PII vor dem Zusammenfassen geschwärzt. Professional und höher |
chapters | query | Mit ?chapters=1 werden Kapitel mit Zeitmarke hinzugefügt. Erfordert response_format=verbose_json. Developer und höher |
mode | query | Mit ?mode=intelligence wird die Intelligence-Analyse aktiviert: sie klassifiziert, strukturiert und extrahiert den Beweisgraphen. Professional und höher |
report_schema | query | Erzwingt den Berichtstyp (acta, comercial, legal, entrevista, incidente… oder einen eigenen), statt den Klassifikator wählen zu lassen. |
report_prompt | query | Passt Ton oder Rahmung des Berichts in natürlicher Sprache an. |
report | query | Mit ?report=pdf wird der Bericht zusätzlich als signiertes PDF (in report.pdf_base64) zurückgegeben, das ein Dritter prüfen kann. |
async | query | Mit ?async=1 wird der Auftrag im Hintergrund verarbeitet: die Anfrage gibt 202 mit einer job_id zurück, und Sie holen ihn später ab. Für die langen Analysen. Siehe Asynchroner Modus. |
webhook | query | Nur mit async=1: eine https-URL, an die wir das Ergebnis signiert ausliefern, sobald es fertig ist. Optional; ohne sie holen Sie das Ergebnis selbst mit GET /v1/jobs/<id> ab. |
Sie gibt summary, transcript, enrichment und einen
usage-Block mit den nach Stufen aufgeschlüsselten Credits zurück — mit einer
ner-Zeile, wenn Sie Entitäten oder Schwärzung angefordert haben. Je nach Anforderung
bringt sie zusätzlich entities, die redacted-Markierung oder das
chapters-Array.
usage den Wert
reasoning_tokens: den Teil von output_tokens, der
Nachdenken war und nicht Text der Zusammenfassung. Er ist in der Abrechnung
enthalten — wie bei den Reasoning-APIs von OpenAI oder Anthropic —, doch wir
weisen ihn gesondert aus, damit Sie sehen, welcher Anteil Ihrer Ausgabe
Nachdenken war, und nicht annehmen, dass Sie alles für die sichtbare
Zusammenfassung zahlen: diese entspricht output_tokens − reasoning_tokens.
Es ist eine Schätzung der Aufteilung; abgerechnet wird output_tokens.warnings-Array heraus,
und diese Stufe wird nicht berechnet.Kapitel
Mit ?chapters=1 bringt die Zusammenfassung zusätzlich ein
chapters-Array. Jedes Kapitel trägt start (die Sekunde, in der es
beginnt), title und summary — damit Sie durch eine lange Aufnahme
springen können, ohne sie ganz anzuhören.
Sie werden im selben Durchgang wie die Zusammenfassung berechnet: Es ist kein zweiter Aufruf des Modells, und das Transkript wird nicht erneut gesendet, sodass ihre Kosten ein paar zusätzliche Ausgabe-Tokens sind, ohne eigenen Koeffizienten.
verbose_json an — fügen Sie response_format=verbose_json zur Anfrage
hinzu —: Daher stammen die Sekunden jedes Kapitels. Fehlen sie, kommt die Zusammenfassung
trotzdem heraus, und warnings meldet es mit chapters_unavailable.Verifizierbarer Bericht
Mit ?mode=intelligence wird die Zusammenfassung zu einem überprüfbaren
Bericht: sie klassifiziert die Aufnahme, gliedert sie in Abschnitte und extrahiert einen
Beweisgraphen, der jede Aussage an ihr Zitat, ihren Sprecher und ihre Minute verankert;
mit ?report=pdf kommt sie als signiertes PDF. Es ist der unverwechselbare Dienst von
Uttera und wird vollständig —was es ist, wie die Verankerung funktioniert, Parameter und
Beispiele— in seinem eigenen Kapitel erklärt:
Verifizierbarer Bericht.
Asynchroner Modus
Die tiefgreifendsten Audio-Analysen dauern länger, als eine einzelne HTTP-Verbindung halten
kann. Genau dafür ist der asynchrone Modus da: Sie fügen Ihrer
/v1/summarize-Anfrage ?async=1 hinzu und erhalten, statt zu warten,
sofort eine job_id. Der Auftrag läuft im Hintergrund, und Sie holen das Ergebnis
per Abfrage ab, oder wir liefern es an einen Webhook. Es funktioniert mit allen
Optionen, die Sie bereits kennen (mode=intelligence, report=pdf,
redact, language, chapters…): sie werden bei der
Verarbeitung unverändert erneut angewendet.
1. Auftrag absenden. Wie eine normale Zusammenfassung, aber mit
async=1:
curl -X POST "https://api.uttera.ai/v1/summarize?mode=intelligence&report=pdf&async=1" \
-H "Authorization: Bearer $UTTERA_API_KEY" \
-F "file=@besprechung.mp3"
Antwort 202 Accepted:
{ "job_id": "9e7220186fa76062295e767ea856e9b7",
"status": "queued",
"poll": "/v1/jobs/9e7220186fa76062295e767ea856e9b7" }
2. Abholen. Fragen Sie GET /v1/jobs/<job_id> mit demselben
Schlüssel ab:
curl "https://api.uttera.ai/v1/jobs/9e7220186fa76062295e767ea856e9b7" \
-H "Authorization: Bearer $UTTERA_API_KEY"
| Während der Verarbeitung | {"job_id":"…","status":"queued"} oder "running". Fragen Sie in ein paar Sekunden erneut ab. |
|---|---|
| Wenn fertig | Gibt das vollständige Ergebnis zurück — denselben Rumpf, den Ihnen der synchrone Aufruf gegeben hätte (summary, transcript, usage und je nach Anforderung evidence_graph, report, redacted…). |
| Bei Fehler | {"status":"error","error":"…"}. |
GET Ihnen
das Ergebnis zum ersten Mal erfolgreich übergibt, löschen wir es. Ein zweiter GET
derselben job_id gibt 410 Gone zurück. Speichern Sie es beim Empfang
selbst.Webhook (optional). Wenn Sie in Schritt 1 &webhook=https://ihr-server/uttera
hinzufügen, machen wir, sobald der Auftrag fertig ist, einen POST an diese URL mit
dem Ergebnis im Rumpf. Wir wiederholen nach 1 Min, 5 Min, 30 Min, 2 Std und 6 Std; sind
sie erschöpft, wartet das Ergebnis weiter beim GET bis zu den 24 Stunden. Eine
erfolgreiche Zustellung (eine 2xx-Antwort) zählt als Abholung und löscht das
Ergebnis.
Jeder Webhook-POST ist signiert, damit Sie prüfen können, dass er von uns
stammt:
X-Uttera-Job | die job_id. |
X-Uttera-Signature | sha256=<Signatur>, ein HMAC-SHA256 des exakten Rumpfs. |
Der Signierschlüssel wird aus Ihrem API-Schlüssel abgeleitet (er reist nie mit): er
ist HMAC-SHA256(ihr_api_schlüssel, "uttera-webhook-v1") in Hexadezimal. Zum
Prüfen: berechnen Sie diesen Schlüssel, bilden Sie HMAC-SHA256(schlüssel,
empfangener_rumpf) und vergleichen Sie es mit der Signatur im Header.
# den Webhook prüfen (Python)
import hmac, hashlib
secret = hmac.new(API_KEY.encode(), b"uttera-webhook-v1", hashlib.sha256).hexdigest()
erwartet = "sha256=" + hmac.new(bytes.fromhex(secret), rumpf_bytes, hashlib.sha256).hexdigest()
assert hmac.compare_digest(erwartet, header_X_Uttera_Signature)
POST …?async=1
429 zurück, bis einer fertig ist. Die Abrechnung ist dieselbe wie synchron:
berechnet wird bei der Verarbeitung des Auftrags, mit der aufgeschlüsselten
usage im Ergebnis.Tokens bei Ihrem LLM sparen
Das ist die Nutzung der Zusammenfassung, die die wenigsten sehen und die am meisten Geld spart. Wenn Sie möchten, dass ein Sprachmodell eines anderen Anbieters — Claude, GPT, Gemini, welches auch immer — mit dem arbeitet, was in einem Anruf gesagt wurde, ist der teure Weg, ihm das ganze Transkript zu senden. Der günstige ist, ihm die Zusammenfassung zu senden.
Gemessen an einer echten 70-minütigen Aufnahme abwechslungsreicher Prosa, gezählt mit
dem o200k_base-Tokenizer:
| Was Sie dem LLM senden | Wörter | Tokens |
|---|---|---|
| Vollständiges Transkript | 10.429 | 15.410 |
| Strukturierte Zusammenfassung | 294 – 422 | 484 – 673 |
Es ist als Spanne angegeben, weil die Zusammenfassung nicht deterministisch ist: Dieselbe Aufnahme, zweimal ausgeführt, ergab 484 und 673 Tokens. Zwischen 20- und 30-mal weniger Eingabe-Tokens, und die Ersparnis wächst mit der Dauer: Das Transkript wächst geradlinig mit den Minuten der Aufnahme, die Zusammenfassung nicht — sie bleibt bei ein paar hundert Tokens. Bei einer kurzen Aufnahme macht es keinen Unterschied; bei einem Archiv von Anrufen ist es der Unterschied zwischen einer LLM-Rechnung, die Sie zahlen können, und einer, die Sie nicht zahlen können.
Die Antwort liefert summary und transcript im selben Aufruf,
sodass Sie nicht im Voraus wählen oder doppelt zahlen müssen: Sie entscheiden in Ihrem Code,
welches der beiden zum LLM hochgeht.
Es gibt ein vollständiges, ausführbares Beispiel — hier zusammenfassen, nur die Zusammenfassung an das LLM senden und die eingesparten Tokens zählen — in uttera-examples/llm-tokens.