curl --request POST \
--url https://api.goenhance.ai/api/v1/audio/generations \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"model": "gemini-3-8-flash-lite-tts",
"text": "Welcome to GoEnhance. <short pause> Let's build something great today.",
"voice": "Kore",
"style": "warm and upbeat"
}
EOFimport requests
url = "https://api.goenhance.ai/api/v1/audio/generations"
payload = {
"model": "gemini-3-8-flash-lite-tts",
"text": "Welcome to GoEnhance. <short pause> Let's build something great today.",
"voice": "Kore",
"style": "warm and upbeat"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'gemini-3-8-flash-lite-tts',
text: 'Welcome to GoEnhance. <short pause> Let\'s build something great today.',
voice: 'Kore',
style: 'warm and upbeat'
})
};
fetch('https://api.goenhance.ai/api/v1/audio/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.goenhance.ai/api/v1/audio/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'gemini-3-8-flash-lite-tts',
'text' => 'Welcome to GoEnhance. <short pause> Let\'s build something great today.',
'voice' => 'Kore',
'style' => 'warm and upbeat'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.goenhance.ai/api/v1/audio/generations"
payload := strings.NewReader("{\n \"model\": \"gemini-3-8-flash-lite-tts\",\n \"text\": \"Welcome to GoEnhance. <short pause> Let's build something great today.\",\n \"voice\": \"Kore\",\n \"style\": \"warm and upbeat\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.goenhance.ai/api/v1/audio/generations")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"gemini-3-8-flash-lite-tts\",\n \"text\": \"Welcome to GoEnhance. <short pause> Let's build something great today.\",\n \"voice\": \"Kore\",\n \"style\": \"warm and upbeat\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goenhance.ai/api/v1/audio/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"gemini-3-8-flash-lite-tts\",\n \"text\": \"Welcome to GoEnhance. <short pause> Let's build something great today.\",\n \"voice\": \"Kore\",\n \"style\": \"warm and upbeat\"\n}"
response = http.request(request)
puts response.read_body{
"code": 0,
"msg": "Success",
"data": {
"img_uuid": "c12b656c-747a-44fd-9c80-add79b0c52d5",
"cost": 1.75
}
}Gemini 3.8 Flash-Lite TTS
Google’s fast, cost-efficient text-to-speech for high-volume read-aloud and voice agents, with the same voices and style control as Flash TTS and 100+ languages (detected automatically). Turns text into speech and returns a WAV URL (24 kHz, mono).
The text is read verbatim — put delivery directions such as tone or pace in style, not in the text, or they will be read aloud. Short vocal events and pauses can go inline in angle brackets, e.g. Wait... <short pause> did you hear that? <sigh>.
Pricing — billed by text length, not by audio duration:
| Unit | Tokens | USD |
|---|---|---|
| every 200 characters (rounded up) | 1.75 | $0.035 |
A 350-character request is billed as 2 units (3.5 tokens = $0.07). Anything from 1 to 200 characters costs 1 unit.
Returns an img_uuid; poll GET /api/v1/jobs/detail (or use custom_callback_url) to get the generated audio. The result arrives as a json array item with type: "audio" and a WAV URL in value.
curl --request POST \
--url https://api.goenhance.ai/api/v1/audio/generations \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"model": "gemini-3-8-flash-lite-tts",
"text": "Welcome to GoEnhance. <short pause> Let's build something great today.",
"voice": "Kore",
"style": "warm and upbeat"
}
EOFimport requests
url = "https://api.goenhance.ai/api/v1/audio/generations"
payload = {
"model": "gemini-3-8-flash-lite-tts",
"text": "Welcome to GoEnhance. <short pause> Let's build something great today.",
"voice": "Kore",
"style": "warm and upbeat"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'gemini-3-8-flash-lite-tts',
text: 'Welcome to GoEnhance. <short pause> Let\'s build something great today.',
voice: 'Kore',
style: 'warm and upbeat'
})
};
fetch('https://api.goenhance.ai/api/v1/audio/generations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.goenhance.ai/api/v1/audio/generations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'gemini-3-8-flash-lite-tts',
'text' => 'Welcome to GoEnhance. <short pause> Let\'s build something great today.',
'voice' => 'Kore',
'style' => 'warm and upbeat'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.goenhance.ai/api/v1/audio/generations"
payload := strings.NewReader("{\n \"model\": \"gemini-3-8-flash-lite-tts\",\n \"text\": \"Welcome to GoEnhance. <short pause> Let's build something great today.\",\n \"voice\": \"Kore\",\n \"style\": \"warm and upbeat\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.goenhance.ai/api/v1/audio/generations")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"gemini-3-8-flash-lite-tts\",\n \"text\": \"Welcome to GoEnhance. <short pause> Let's build something great today.\",\n \"voice\": \"Kore\",\n \"style\": \"warm and upbeat\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.goenhance.ai/api/v1/audio/generations")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"gemini-3-8-flash-lite-tts\",\n \"text\": \"Welcome to GoEnhance. <short pause> Let's build something great today.\",\n \"voice\": \"Kore\",\n \"style\": \"warm and upbeat\"\n}"
response = http.request(request)
puts response.read_body{
"code": 0,
"msg": "Success",
"data": {
"img_uuid": "c12b656c-747a-44fd-9c80-add79b0c52d5",
"cost": 1.75
}
}Headers
Body
Model name. Must be gemini-3-8-flash-lite-tts.
gemini-3-8-flash-lite-tts Text to synthesize, read verbatim. Required. Max 4000 characters. Billing is based on this length. A single request can produce about 8 minutes of audio; very slow styles on long texts can hit that limit, in which case the task fails and is refunded — split the text into shorter parts.
1 - 4000Voice. Optional — defaults to Kore. One of the 30 prebuilt voices (case-insensitive): Kore, Zephyr, Puck, Charon, Fenrir, Leda, Orus, Aoede, Callirrhoe, Autonoe, Enceladus, Iapetus, Umbriel, Algieba, Despina, Erinome, Algenib, Rasalgethi, Laomedeia, Achernar, Alnilam, Schedar, Gacrux, Pulcherrima, Achird, Zubenelgenubi, Vindemiatrix, Sadachbia, Sadaltager, Sulafat — or a voice id from the Gemini voice library, such as en-us-advisor-1 (browse the full library in Google AI Studio). All voices can speak any supported language.
Optional. A short natural-language description of the delivery for the whole text — tone, emotion, pace or volume, e.g. warm and upbeat, whispered urgently, speaking slowly and calmly. Leave it out for a natural read. There is no speed parameter; describe the pace here instead. Slower styles produce longer audio for the same text.
500Optional. A publicly accessible HTTPS URL. When the task status changes (processing / success / failed), GoEnhance sends a POST request to this URL. The request body is identical to the response of GET /api/v1/jobs/detail. If your server does not respond with HTTP 200, the notification is retried up to 3 times, with a 3-second timeout per attempt.
"https://your-server.com/goenhance/callback"
