NEWYou can now narrate your PowerPoint decks in one click.
REST API · v1

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.

API access is enabled for business customers by their account manager. Contact us to request a key.Request API access

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.

Base URL
https://www.voicego.net/api/v1

Authentication

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_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Text 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

NameTypeDescription
textrequiredstringText to voice. Up to 2500 characters per request. Split longer texts at sentence boundaries.
voicerequiredstringVoice ID, e.g. yeliz, kemal. See GET /voices for the full list.
formatoptionalstringOutput format: mp3 (default), wav (44.1 kHz, 16-bit, mono) or wav_8k (8 kHz, 16-bit, mono — for phone systems).
speedoptionalnumberSpeaking rate between 0.5 and 2. Default 1.
emotionoptionalstringTone of voice (HD voices only): warm, cheerful, excited, calm, serious, sad.
instructionoptionalstringFree-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.wav

Response

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 request
  • X-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"
200 OK
{
  "voices": [
    {
      "id": "yeliz",
      "name": "Yeliz",
      "names": { "en": "Amelia", "es": "Julia" },
      "gender": "female",
      "language": "tr-TR",
      "quality": "hd",
      "expressive": true
    }
  ]
}
IDNameGenderQuality
aylinEvelynFemaleHD · expressive
batuBatuMaleHD · expressive
buseBuseFemaleHD · expressive
cihanCihanMaleHD · expressive
damla-suDamla SuFemaleHD · expressive
efeEfeMaleHD · expressive
egemenEgemenMaleHD · expressive
elaElaFemaleHD · expressive
erenErenMaleHD · expressive
esraEsraFemaleHD · expressive
eylulEylülFemaleHD · expressive
ezgiScarlettFemaleHD · expressive
fatihBenjaminMaleHD · expressive
gorkemLoganMaleHD · expressive
ismailWilliamMaleHD · expressive
kemalTheodoreMaleHD · expressive
korayKorayMaleHD · expressive
kuzeyKuzeyMaleHD · expressive
kubraKübraFemaleStandard
mehmetMehmetMaleStandard
minaMinaFemaleStandard
nesrinNesrinFemaleStandard
oguzOğuzMaleHD · expressive
ozanOzanMaleHD · expressive
pinarPınarFemaleHD · expressive
polatPolatMaleStandard
rizaRızaMaleHD · expressive
selenSelenFemaleHD · expressive
sevgiSevgiFemaleHD · expressive
sinanSinanMaleHD · expressive
sudeSudeFemaleHD · expressive
suleHarperFemaleHD · expressive
yagmurChloeFemaleHD · expressive
yavuzYavuzMaleHD · expressive
yelizAmeliaFemaleHD · 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

NameTypeDescription
fileoptionalfileAudio or video file (multipart/form-data), up to 4 MB. Either "file" or "url" is required.
urloptionalstringDownloadable https address of the file (JSON body). Use this for large recordings.
languageoptionalstringLanguage of the recording, e.g. tr, en, de (ISO 639-1). Detected automatically if omitted; specifying it improves accuracy.
diarizeoptionalbooleanSeparate speakers (true/false). Default true.
speakersoptionalintegerNumber of speakers in the recording (1–32). Specifying it improves speaker separation.
audio_eventsoptionalbooleanMark sounds such as laughter, applause or music in the text, e.g. (laughter). Default false.
formatoptionalstringResponse 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.srt

Response

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 request
  • X-Transcription-Limit-Seconds · X-Transcription-Used-Seconds · X-Transcription-Remaining-Seconds — Monthly transcription time, usage this month and remaining time (seconds)
200 OK · format=json
{
  "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).

200 OK
{
  "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": "..." } }.

402
{
  "error": {
    "code": "quota_exceeded",
    "message": "Your monthly character quota has been used up."
  }
}
CodeHTTPMeaning
missing_api_key401No Authorization header.
invalid_api_key401The key is invalid or revoked.
invalid_request400The body isn't JSON or a parameter is invalid.
text_too_long400Text exceeds 2500 characters.
unknown_voice400Voice ID not found.
no_quota402No quota has been assigned to the account yet.
quota_exceeded402Monthly quota used up.
rate_limited429Too many requests; wait for the time in the Retry-After header.
generation_failed502Audio couldn't be generated; retry the request.
missing_audio400No file (file) or address (url) was sent for transcription.
invalid_url400The address isn't https or the file couldn't be downloaded from it.
unsupported_audio400The file couldn't be read as audio or video.
file_too_large413The uploaded file exceeds 4 MB; send it with url instead.
audio_too_long413The recording is too long or large for a single request.
no_speech422No speech found in the recording (not counted towards usage).
transcription_failed502The recording couldn't be transcribed; retry the request.
service_unavailable503The 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