Zum Inhalt springen

Sprache und Modellkatalog ​

GET /v1/chat/catalog liefert öffentliche Modelle, Stimmen und aktuelle Preise. Text nutzt POST /v1/chat/completions, Sprache die folgenden Endpunkte.

Modelle und Preise ​

Aktueller Modellkatalog · Preise in Credits

Modellkatalog wird geladen…

Spracherkennung ​

POST /v1/chat/transcribe akzeptiert { "audio": "data:audio/webm;base64,..." } oder reines Base64, maximal 10 MB nach Dekodierung. Zurückgegeben werden text und language.

Sprachsynthese ​

Aktueller Modellkatalog · Preise in Credits

Modellkatalog wird geladen…

Klappen Sie ein Modell auf, um Namen, IDs und Sprachen seiner aktivierten Stimmen zu sehen. Deaktivierte Stimmen fehlen im Katalog und können nicht für neue Synthesen verwendet werden. Das Deaktivieren eines Modells schließt alle zugehörigen Stimmen aus. Beim erneuten Aktivieren bleiben individuelle Einstellungen erhalten. Ist die Standardstimme oder ihr Modell deaktiviert, wird eine andere aktivierte Stimme gewählt. Aktualisieren lädt den aktuellen Stand.

POST /v1/chat/speech akzeptiert { "text": "Hello", "voice": "speech-light:af_bella" }, bis zu 2.000 Zeichen. Ohne voice wird die Standardstimme verwendet. Nutzen Sie voices[].id; modelId verweist auf Sprachmodell und Tarif. Chat- und Sprachmodelle sind unabhängig.

Die Antwort enthält audio (data:audio/mpeg;base64,...), voice und billing: { model, credits, characters, price, unit: "1000_characters" }. Alle Stimmen, auch Speech Pro, liefern MP3. Verwenden Sie audio als src eines Audioelements oder dekodieren Sie Base64 nach dem Komma und speichern Sie es als .mp3. Ein Python-Beispiel ist verfügbar.

Streaming-Audio ​

Senden Sie "stream": true an denselben Endpunkt. Speech Standard, Speech Light, Speech Pro und Speech Expressive unterstützen Streaming; siehe speechModels[].streaming. Ohne den Parameter oder bei false erhalten Sie JSON.

json
{ "text": "Hello. How was your day?", "voice": "speech-pro:Ashley", "stream": true }

Die Antwort ist ein kontinuierlicher MP3-Binärstream mit Content-Type: audio/mpeg, kein JSON, Base64 oder SSE. Der Proxy leitet eintreffendes Audio weiter; Speech Pro wird schrittweise in MP3 umgewandelt. Dies garantiert nicht die Generierungslatenz des Modells. Der Text wird als eine Anfrage ohne automatische Satzaufteilung gesendet.

Mit curl und FFmpeg können Sie bereits während des Empfangs abspielen:

bash
curl --fail --no-buffer https://api.coldstart.win/v1/chat/speech \
  -H "Authorization: Bearer $COLDSTART_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello. How was your day?","voice":"speech-pro:Ashley","stream":true}' \
  | ffplay -nodisp -autoexit -f mp3 -i pipe:0

Ein Anrufclient muss die Daten fortlaufend einem persistenten MP3-Decoder zuführen. Verwenden Sie im Browser response.body.getReader(); blob(), arrayBuffer() und json() warten auf die vollständige Antwort. Netzwerk-Chunks sind beliebige Bytebereiche, keine eigenständigen MP3-Dateien. Brechen Sie fetch und Reader bei Unterbrechung oder Auflegen ab. Browser benötigen weiterhin die übliche Benutzerinteraktion zur Wiedergabe.

Header: X-Speech-Voice (URL-kodierte öffentliche ID), X-Speech-Credits, X-Speech-Characters, X-Speech-Usage-Id. Der Credit-Wert ist die anfängliche Abbuchung; erfolgreiche Anfragen kosten dasselbe wie ohne Streaming. Fehler oder Verbindungsabbruch vor Abschluss der Serververarbeitung führen zu Erstattung und Fehlerstatus. Ein Abbruch nach Abschluss storniert keine bereits erfolgreiche Abrechnung.

Vor Audiobeginn werden Fehler als HTTP-Status und JSON geliefert. Danach beendet ein Fehler die Verbindung abrupt. Verwerfen Sie unvollständige Ausgaben und prüfen Sie die endgültige Abrechnung im Nutzungsverlauf. HTTP 200 oder der erste Chunk beweisen keinen erfolgreichen Abschluss. Zusätzliche Proxys müssen Pufferung und Kompression dieser Route deaktivieren. Die API sendet X-Accel-Buffering: no und Cache-Control: no-store, no-transform.

Bei ausdrücklicher Ablehnung durch die Inhaltsrichtlinie liefern beide Modi vor Audiobeginn 400 content_policy_violation und erstatten die Kosten. Senden Sie denselben Text nicht automatisch erneut, sondern passen Sie ihn an die Richtlinie an. Streaming hebt Inhaltsbeschränkungen nicht auf.

Sprachanfragen sind unabhängig. Geben Sie die gewünschte öffentliche Stimmen-ID ausdrücklich an. Normale Antworten enthalten Audio-data-URI und Abrechnung als JSON, Streaming liefert Audiobytes.

Sprachkosten = abrechenbare Zeichen des normalisierten Texts × Modellpreis / 1.000, auf acht Nachkommastellen aufgerundet. Speech Light, Pro und Expressive zählen UTF-16-Codeeinheiten (😀 zählt als zwei), Standard zählt Unicode-Codepunkte. speechModels[].characterCounting und billing.character_counting nennen die Regel (utf16_code_units oder unicode_codepoints); billing.characters ist die berechnete Menge. Formatierung und Regieanweisungen werden vor Synthese und Zählung entfernt. Fehlgeschlagene oder leere Synthesen werden erstattet. Jede Synthese kostet Credits, erneutes Abspielen zurückgegebenen Audios nicht. Die Konsole speichert Audio während der aktuellen Seitensitzung nach Nachricht und Stimme zwischen.