Text-to-Speech
POST /v1/audio/speech
Trasforma il testo in voce naturale con un unico endpoint compatibile con OpenAI. Invii JSON e ricevi indietro i byte audio. Per cambiare provider basta modificare model. Nulla viene scritto su disco: l'audio ti torna indietro direttamente in streaming.
Esempio di richiesta
curl https://synthorai.io/v1/audio/speech \
-H "Authorization: Bearer $SYNTHORAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "tts-1",
"input": "Hello from Synthorai.",
"voice": "alloy"
}' \
--output speech.mp3 Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(
api_key="$SYNTHORAI_API_KEY",
base_url="https://synthorai.io/v1",
)
with client.audio.speech.with_streaming_response.create(
model="tts-1",
voice="alloy",
input="Hello from Synthorai.",
) as response:
response.stream_to_file("speech.mp3") Corpo della richiesta
| Parametro | Tipo | Descrizione |
|---|---|---|
model* | string | ID del modello. Uno tra tts-1, tts-1-hd, seed-tts-2.0. |
input* | string | Il testo da sintetizzare. Massimo 4096 caratteri. |
voice | string | Voce con cui parlare. Predefinita alloy. Vedi Voci più sotto. |
response_format | string | Contenitore audio: mp3 (predefinito), opus, wav o pcm. |
speed | number | Velocità di lettura, 0.25–4.0. Predefinita 1.0. |
Modelli supportati
Quale conviene usare?
| Cosa serve | Modelli consigliati |
|---|---|
| Il più economico, sufficiente per la maggior parte delle voci di prodotto | google-tts-standard |
| Contenuti prima di tutto in cinese, oppure se vuoi molte voci tra cui scegliere | qwen3-tts-instruct-flash seed-tts-2.0 |
| Voce di prodotto quotidiana, con equilibrio tra qualità e costo | tts-1 google-tts-neural2 |
| Massima espressività: narrazione, dispositivi companion, voce del brand | tts-1-hd google-tts-chirp3-hd |
| Modello | Prezzo | Ideale per |
|---|---|---|
google-tts-standard | $4 / 1M chars | Notifiche e messaggi vocali ad alto volume, quando conta il costo |
qwen3-tts-instruct-flash | $11.50 / 1M chars | Contenuti in cinese e multilingue; l'upstream riporta il numero di caratteri fatturati |
tts-1 | $15 / 1M chars | Voce di prodotto generica, messaggi vocali, notifiche |
google-tts-neural2 | $16 / 1M chars | Voce quotidiana naturale in molte lingue |
tts-1-hd | $30 / 1M chars | Narrazione, marketing, tutto ciò che gli utenti ascoltano per un po' |
seed-tts-2.0 | $30 / 1M chars | Contenuti in cinese e multilingue; 180+ voci |
google-tts-chirp3-hd | $30 / 1M chars | Le voci più recenti ed espressive di Google |
Tre modelli stanno a $30. Si distinguono per il carattere della voce e la copertura linguistica, non per il prezzo. Provali sui tuoi testi prima di decidere.
Cambiare provider ti costa una riga. Ogni modello qui parla la stessa forma di richiesta e di risposta. Sotto, i provider sono profondamente diversi (autenticazione, formati di streaming, denominazione delle voci). Il gateway assorbe tutto questo, così l'unica cosa che cambi è model.
# Same request, different provider — only the model name changes.
-d '{"model": "tts-1", "input": "...", "voice": "alloy"}'
-d '{"model": "seed-tts-2.0", "input": "...", "voice": "alloy"}' Voci
I modelli OpenAI accettano le voci standard: alloy, echo, fable, onyx, nova, shimmer.
Per seed-tts-2.0 valgono gli stessi sei nomi (vengono mappati su voci equivalenti), e per il controllo totale puoi anche passare direttamente un ID di voce nativo BytePlus, per esempio zh_female_cancan_uranus_bigtts. L'elenco completo delle 180+ voci native si trova nel catalogo voci di BytePlus.
Per qwen3-tts-instruct-flash valgono gli stessi sei nomi, oppure passa una voce nativa Qwen come Cherry, Ethan, Nofish, Jada.
Le voci Google sono legate alla loro fascia di prezzo. Ogni modello Google copre una fascia, e la fascia fa parte del nome della voce. Se passi un id di voce nativo come en-US-Neural2-C devi usare il modello corrispondente, in quell'esempio google-tts-neural2. Le voci di un'altra fascia vengono rifiutate con un 502 anziché fatturate in silenzio alla tariffa sbagliata.
Formati audio
Usa response_format per scegliere il contenitore. Il valore predefinito è mp3: mp3, opus, wav, pcm.
Non tutti i provider supportano ogni contenitore; i valori non supportati ricadono su MP3 invece di fallire.
Fatturazione
Si paga per carattere di input al listino ufficiale del provider, senza ricarico. Un carattere = un ideogramma cinese = una lettera = un segno di punteggiatura = uno spazio. Le richieste fallite non vengono mai addebitate.
L'audio che ricevi non viene conteggiato a parte; si paga solo il testo che invii.
Limiti
- Massimo 4096 caratteri per richiesta. Un input più lungo viene rifiutato prima che venga addebitato qualcosa. Spezzalo lato client e concatena l'audio.
- La velocità di lettura si regola con
speed(0.25–4.0, predefinito 1.0). I valori fuori dall'intervallo del provider vengono riportati entro i limiti, non rifiutati.
Errori
| Risposta | Descrizione |
|---|---|
400 | L'input è vuoto oppure supera i 4096 caratteri. |
401 | Chiave API mancante o non valida. |
402 | Quota insufficiente per questa richiesta. |
502 | Il modello non è disponibile sul tuo account, oppure il provider upstream ha restituito un errore. Non viene addebitato nulla. |
503 | Al momento nessun canale serve questo modello. |