Text to speech in Korean: send Hangul text with language ko

For Korean text to speech, send the script in Hangul with the language set to ko. How Sume's TTS API reads Korean, checks the voice, and bills it.

5 min readSume
All posts

To get text to speech in Korean, send the script written in Hangul and set the language to Korean (ko) explicitly. With the Sume API that is one POST /v1/tts-1.0/generate request carrying a Hangul transcript, a voice, and language: "ko". It runs as a job and returns the Korean speech as a Sume-hosted audio file.

The request fields come from the TTS schema in the Sume API reference, the OpenAPI document behind the API reference docs, read on 2026-09-27. Checks described as current behavior are read from Sume's code, and the price from the code behind API pricing. For the request in general, see Text to speech API; to burn the Korean words onto a video afterwards, see Korean subtitles API.

How do I send a Korean text to speech request?

Put the Korean script in transcript, 1 to 20,000 characters, and name the language with its BCP-47 / ISO-639 code, ko. Pick the voice with the avatar_id or avatar_handle of an avatar whose voice is ready, or with a Sume voice.id you already hold: a voice UUID or a Voices library id (voi_ plus 32 hex characters).

The default async mode answers at once with status_url and result_url. As the Jobs and results docs describe, poll status_url until terminal is true, then read result_url; completed results expose the audio as media.sume.com artifacts.

curl -X POST https://api.sume.com/v1/tts-1.0/generate \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: tts-ko-welcome-001" \
  -d '{
    "transcript": "안녕하세요. 오늘은 새 기능을 소개합니다.",
    "voice": { "id": "voi_0123456789abcdef0123456789abcdef" },
    "language": "ko",
    "output_format": { "container": "wav", "encoding": "pcm_s16le", "sample_rate": 44100 }
  }'

What happens if I leave out the language?

Omitted, language defaults to English at the provider, and Sume infers ko only as a fallback, from a Hangul-only transcript. In the current code that fallback counts characters and returns ko only when Hangul characters outnumber Latin letters, so a script crowded with English product names or URLs can fall back to English. Send language: "ko" with every Korean script.

The reverse mistake is refused. In the current code, language: "ko" with no Hangul syllable in the transcript fails with 400 tts_language_script_mismatch, so romanized Korean such as annyeonghaseyo is rejected. The error message asks you to check the original text and its encoding before retrying: Hangul garbled by a wrong encoding can lose every syllable, and then it fails the same way.

Which voice should read Korean?

The API reference publishes no list of Korean voices. What Sume checks is the voice's language. In the current code, when Sume has a primary language on record for the voice and it isn't Korean, the submit fails with 409 tts_voice_language_mismatch, and the message warns that pronunciation may sound unnatural. No job or charge has been created at that point.

  • To keep that voice anyway, resend the same request and Idempotency-Key with confirm_language_mismatch: true. Translate a video's voiceover by API walks through this double-check.
  • In the current code, a voice with no language on record is not checked, and an avatar's own voice is cloned with its language set to English. Listen to one short Korean line before you send a long script.

How is Korean text to speech billed?

Text to speech costs $0.0475 per 1,000 characters, plus a 5.5% agent fee by default. Usage counts transcript characters, spaces and punctuation included, and Korean has no rate of its own: in the current code the billed character count, like the result's character_count, is the transcript's length, where a Hangul syllable such as 한 is one character. Synthesized audio longer than 1,200 seconds fails with tts_duration_exceeded, and no credits are captured.

Why was my Korean TTS request refused?

Four checks can stop a Korean request. The first three answer at submit; the last fails the job without capturing credits.

From the TTS request schema in the Sume API reference and Sume's current code, read 2026-09-27.
ResponseCauseFix
400 tts_language_script_mismatchlanguage: "ko" with no Hangul syllable in transcript (current code).Send the script in Hangul and check its encoding.
409 tts_voice_language_mismatchThe voice's primary language on record is not Korean (current code).Pick another voice, or resend with confirm_language_mismatch: true.
400 with invalid_voice_idvoice.id is neither a voice UUID nor a voi_ library id.Copy the id verbatim, or send avatar_id or avatar_handle.
Job fails with tts_duration_exceededThe synthesized audio runs past 1,200 seconds.Split the script; no credits are captured.

Sources

Related posts

More in Models

All Models posts

Written by Sume