Korean captions: language ko does not choose the style
Setting language to ko on a caption job does not switch the style. The default is black-outline; a Latin style rejects Hangul with a 400. What to send instead.

A common assumption is that language: "ko" on a caption job makes the output Korean-styled. It does not. In Video captions, language tells the speech step what to expect. It never selects the visual style, and the font and look come only from the style field (read 2026-10-07).
What each field does
| Field | Effect | Does not do |
|---|---|---|
language: "ko" | Hints the speech language to transcription | Pick a font or style |
style | Chooses the visual look and font family | Change the language heard |
No style | Uses black-outline, which handles Hangul | Switch by language |
| A Latin style (the 400 case) | Applies a Latin-only font | Render Hangul; returns 400 |
A safe Korean request
Send the language hint and choose a style that is documented for Hangul, or omit style and accept the default. The job is $0.20 for a video up to 60 seconds.
curl -X POST https://api.sume.com/v1/video-captions \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: ko-caps-001" \
-d '{"video_url": "https://media.sume.com/artifacts/example/ko.mp4", "language": "ko", "style": "black-outline"}'When you get a 400
- The error is about the style and the text script, not about
language. Remove the Latin style or switch to a Hangul-capable one. - If you send
wordsorcueswith Hangul text, the same rule applies: the style must support the characters. - Do not retry the same body. A 400 on a style mismatch repeats until the body changes.
Sources
Related posts
More in Developers
- Let browsers start Sume jobs through your server, not with your key
Browsers must never hold a Sume API key. A server route authenticates the user, checks the input, derives an Idempotency-Key and returns only the status URL.
- List every Format run: no GET /v1/format-runs, page per Format
GET /v1/format-runs does not exist. List runs per Format with limit, next_cursor and has_more, or keep your own index of the data.id you stored at create.
- List Sume image models that take references or masks with jq
New image models land weekly. One curl and one jq filter on GET /v1/images/models show which ids accept input_references, mask_url or background, and how many.
- List Sume TTS Router models and prices in Python: one GET
GET /v1/tts-router/models returns five Sonic ids with per-character price and constraints. A short Python script prints each model's price per 1,000 characters.
Written by Sume