Voice Go API
With the Voice Go API you can voice text and transcribe audio and video directly from your own app, phone system or CMS. It uses the same voices and quota as the studio; one HTTP request returns an MP3/WAV audio file or a timestamped transcript.
Getting started
All requests are made over HTTPS to the base URL below. Request bodies are JSON (multipart/form-data when uploading a file for transcription); the text-to-speech response is the audio file itself.
https://www.voicego.net/api/v1Authentication
Send your API key in the Authorization header with every request. Keys start with vg_live_. The X-API-Key header is also accepted.
Authorization: Bearer vg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxText to speech
POST/api/v1/tts
Voices the text with the chosen voice and returns the audio file. Each successful request deducts the text's character count from your monthly quota.
Parameters
| Name | Type | Description |
|---|---|---|
textrequired | string | Text to voice. Up to 2500 characters per request. Split longer texts at sentence boundaries. |
voicerequired | string | Voice ID, e.g. yeliz, kemal. See GET /voices for the full list. |
formatoptional | string | Output format: mp3 (default), wav (44.1 kHz, 16-bit, mono) or wav_8k (8 kHz, 16-bit, mono — for phone systems). |
speedoptional | number | Speaking rate between 0.5 and 2. Default 1. |
emotionoptional | string | Tone of voice (HD voices only): warm, cheerful, excited, calm, serious, sad. |
instructionoptional | string | Free-text reading instruction (HD voices only), up to 160 characters. E.g. "smiling, in a reassuring tone". |
curl -X POST https://www.voicego.net/api/v1/tts \
-H "Authorization: Bearer $VOICEGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "Şirketimizi aradığınız için teşekkür ederiz.",
"voice": "yeliz",
"format": "wav_8k"
}' \
--output anons.wavResponse
A successful response is the audio file itself with status 200 (Content-Type: audio/mpeg or audio/wav). Response headers:
X-Characters— Characters deducted from your quota for this requestX-Quota-Limit · X-Quota-Used · X-Quota-Remaining— Monthly quota, usage this month and remaining characters
List voices
GET/api/v1/voices
Returns the voices you can use. HD voices with expressive: true support emotions, instructions and tags.
curl https://www.voicego.net/api/v1/voices -H "Authorization: Bearer $VOICEGO_API_KEY"{
"voices": [
{
"id": "yeliz",
"name": "Yeliz",
"names": { "en": "Amelia", "es": "Julia" },
"gender": "female",
"language": "tr-TR",
"quality": "hd",
"expressive": true
}
]
}| ID | Name | Gender | Quality |
|---|---|---|---|
| aylin | Evelyn | Female | HD · expressive |
| batu | Batu | Male | HD · expressive |
| buse | Buse | Female | HD · expressive |
| cihan | Cihan | Male | HD · expressive |
| damla-su | Damla Su | Female | HD · expressive |
| efe | Efe | Male | HD · expressive |
| egemen | Egemen | Male | HD · expressive |
| ela | Ela | Female | HD · expressive |
| eren | Eren | Male | HD · expressive |
| esra | Esra | Female | HD · expressive |
| eylul | Eylül | Female | HD · expressive |
| ezgi | Scarlett | Female | HD · expressive |
| fatih | Benjamin | Male | HD · expressive |
| gorkem | Logan | Male | HD · expressive |
| ismail | William | Male | HD · expressive |
| kemal | Theodore | Male | HD · expressive |
| koray | Koray | Male | HD · expressive |
| kuzey | Kuzey | Male | HD · expressive |
| kubra | Kübra | Female | Standard |
| mehmet | Mehmet | Male | Standard |
| mina | Mina | Female | Standard |
| nesrin | Nesrin | Female | Standard |
| oguz | Oğuz | Male | HD · expressive |
| ozan | Ozan | Male | HD · expressive |
| pinar | Pınar | Female | HD · expressive |
| polat | Polat | Male | Standard |
| riza | Rıza | Male | HD · expressive |
| selen | Selen | Female | HD · expressive |
| sevgi | Sevgi | Female | HD · expressive |
| sinan | Sinan | Male | HD · expressive |
| sude | Sude | Female | HD · expressive |
| sule | Harper | Female | HD · expressive |
| yagmur | Chloe | Female | HD · expressive |
| yavuz | Yavuz | Male | HD · expressive |
| yeliz | Amelia | Female | HD · expressive |
Transcription (speech to text)
POST/api/v1/transcribe
Transcribes an audio or video recording, separates speakers and gives the start and end time of each segment. Each successful request deducts the recording's duration (in seconds, rounded up) from your monthly transcription time.
You can send the file in two ways: upload files up to 4 MB directly as "file" with multipart/form-data; for larger files, pass a downloadable https address of the file as "url" in a JSON body (e.g. a signed, expiring link from your storage). Common audio and video formats such as MP3, WAV, M4A, OGG, FLAC, MP4, MOV and WEBM are supported.
Parameters
| Name | Type | Description |
|---|---|---|
fileoptional | file | Audio or video file (multipart/form-data), up to 4 MB. Either "file" or "url" is required. |
urloptional | string | Downloadable https address of the file (JSON body). Use this for large recordings. |
languageoptional | string | Language of the recording, e.g. tr, en, de (ISO 639-1). Detected automatically if omitted; specifying it improves accuracy. |
diarizeoptional | boolean | Separate speakers (true/false). Default true. |
speakersoptional | integer | Number of speakers in the recording (1–32). Specifying it improves speaker separation. |
audio_eventsoptional | boolean | Mark sounds such as laughter, applause or music in the text, e.g. (laughter). Default false. |
formatoptional | string | Response format: json (default), txt (plain text with time and speaker labels) or srt (subtitle file). |
# 4 MB'a kadar dosya: doğrudan yükleme
curl -X POST https://www.voicego.net/api/v1/transcribe \
-H "Authorization: Bearer $VOICEGO_API_KEY" \
-F "file=@gorusme.mp3" \
-F "language=tr" \
-F "speakers=2"
# Büyük dosya: indirilebilir adres, SRT altyazı olarak
curl -X POST https://www.voicego.net/api/v1/transcribe \
-H "Authorization: Bearer $VOICEGO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://depo.ornek.com/egitim-videosu.mp4",
"language": "tr",
"format": "srt"
}' \
--output altyazi.srtResponse
Response in json format; with txt and srt the response is the text file itself. Response headers:
X-Billed-Seconds— Seconds deducted from your transcription time for this requestX-Transcription-Limit-Seconds · X-Transcription-Used-Seconds · X-Transcription-Remaining-Seconds— Monthly transcription time, usage this month and remaining time (seconds)
{
"text": "Merhaba, Voice Go'ya hoş geldiniz. Teşekkürler, sizi dinliyorum.",
"language": "tur",
"duration_seconds": 6.84,
"billed_seconds": 7,
"speakers": ["speaker_1", "speaker_2"],
"segments": [
{ "speaker": "speaker_1", "start": 0.12, "end": 2.9, "text": "Merhaba, Voice Go'ya hoş geldiniz." },
{ "speaker": "speaker_2", "start": 3.4, "end": 6.7, "text": "Teşekkürler, sizi dinliyorum." }
]
}A request is accepted as long as you have time remaining, and the whole recording is transcribed; if it is longer than your remaining time, the difference is also counted. Long recordings can take a few minutes; set your client timeout to at least 5 minutes.
Usage and quota
GET/api/v1/usage
Returns your monthly character quota, transcription time, your usage and when the quota resets. Quotas are shared with the studio and reset on the 1st of each month (UTC).
{
"characters": { "limit": 500000, "used": 128450, "remaining": 371550 },
"transcription_seconds": { "limit": 36000, "used": 5420, "remaining": 30580 },
"period": { "resets_at": "2026-11-01T00:00:00.000Z" }
}Inline tags
With HD voices you can add tags inside the text for pauses, whispers, laughter and more. On voices that don't support them, tags are removed without being read.
[pause]Short pause[whispers]Whisper[laughs]Laugh[long pause]Long pause[sighs]Sigh[laughs harder]Laugh out loud[giggles]Giggle[shouts]Shout[crying]Crying[mischievously]Mischievous[clears throat]Clear throat[gasps]Gasp[exhales]Breath[coughs]Cough[yawns]Yawn"text": "Kampanyamız başladı! [pause] Detaylar için bire basın."Error codes
Errors are returned as JSON: { "error": { "code": "...", "message": "..." } }.
{
"error": {
"code": "quota_exceeded",
"message": "Your monthly character quota has been used up."
}
}| Code | HTTP | Meaning |
|---|---|---|
| missing_api_key | 401 | No Authorization header. |
| invalid_api_key | 401 | The key is invalid or revoked. |
| invalid_request | 400 | The body isn't JSON or a parameter is invalid. |
| text_too_long | 400 | Text exceeds 2500 characters. |
| unknown_voice | 400 | Voice ID not found. |
| no_quota | 402 | No quota has been assigned to the account yet. |
| quota_exceeded | 402 | Monthly quota used up. |
| rate_limited | 429 | Too many requests; wait for the time in the Retry-After header. |
| generation_failed | 502 | Audio couldn't be generated; retry the request. |
| missing_audio | 400 | No file (file) or address (url) was sent for transcription. |
| invalid_url | 400 | The address isn't https or the file couldn't be downloaded from it. |
| unsupported_audio | 400 | The file couldn't be read as audio or video. |
| file_too_large | 413 | The uploaded file exceeds 4 MB; send it with url instead. |
| audio_too_long | 413 | The recording is too long or large for a single request. |
| no_speech | 422 | No speech found in the recording (not counted towards usage). |
| transcription_failed | 502 | The recording couldn't be transcribed; retry the request. |
| service_unavailable | 503 | The service is temporarily unavailable. |
Limits
- Up to 2500 characters per request.
- Up to 60 text-to-speech and 10 transcription requests per minute per key. Exceeding it returns 429.
- Direct uploads for transcription are limited to 4 MB; send larger files with url.
- A monthly character quota and transcription time are assigned to your account; studio and API usage share the same quota.
- Contact your account manager to increase your quota.
Security
- Use your API key only on the server side; never put it in browser or mobile app code.
- If you think your key has leaked, tell us; we'll revoke it immediately and issue a new one.
- Keys are stored only as encrypted hashes; nobody, including us, can see your key.
- The text and recordings you send are processed only to generate audio and transcripts, and are never used to train AI models.
- Recordings sent for transcription and their transcripts are not stored on Voice Go servers; the result is only returned to you.
Contact us for API access
Tell us about your volume and integration needs, and we'll set up your key and quota together.
Request a Demo