Japanese TTS API for product and course narration — Audra
Japanese TTS pipelines live or die on reading hints: kanji with several readings, mixed kana/romaji, and number counters. Five ja Essential presets handle narration-grade Japanese behind the same OpenAI-compatible endpoint your English pipeline already uses.
Japanese voice slugs on Essential
- sora — clear neutral read, default for corporate narration
- nezumi and kumo — characterful reads for storytelling channels
- gongitsune and tebukuro — classic-literature-flavored presets
- All ja slugs on /voices; A/B on /compare
Japanese-specific pitfalls
- Kanji readings: proper nouns and names need furigana-style hints or a lexicon entry for batch safety
- Long vowels and small kana (ゃゅょ) are handled correctly — but romaji mixed into kanji text reads oddly; normalize first
- Numbers + counters (本, 人, 円) take context readings; spot-check pricing and quantities in samples
- Sentence-final particles shape tone — pick the slug after testing your actual script register, not demo text
Example request in Japanese (ja-JP)
curl
curl https://audratalks.com/v2/speech \
-H "Authorization: Bearer sk-live-YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"audra-essential","text":"\u7b2c\u4e09\u8ab2\u3078\u3088\u3046\u3053\u305d\u3002\u3053\u306e\u7ae0\u3067\u306f\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u30ad\u30e5\u30fc\u306e\u4ed5\u7d44\u307f\u3068\u3088\u304f\u3042\u308b\u554f\u984c\u3092\u6271\u3044\u307e\u3059\u3002","voice":"sora","language":"ja-JP","format":"mp3"}' \
--output out.mp3
Python
import requests
r = requests.post(
"https://audratalks.com/v2/speech",
headers={"Authorization": "Bearer sk-live-YOUR_KEY"},
json={
"model": "audra-essential",
"text": '第三課へようこそ。この章ではレンダリングキューの仕組みとよくある問題を扱います。',
"voice": "sora",
"language": "ja-JP",
"format": "mp3",
},
timeout=120,
)
r.raise_for_status()
open("out.mp3", "wb").write(r.content)
JavaScript
import { writeFile } from "node:fs/promises";
const res = await fetch("https://audratalks.com/v2/speech", {
method: "POST",
headers: {
Authorization: "Bearer sk-live-YOUR_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "audra-essential",
text: '第三課へようこそ。この章ではレンダリングキューの仕組みとよくある問題を扱います。',
voice: "sora",
language: "ja-JP",
format: "mp3",
}),
});
if (!res.ok) throw new Error(await res.text());
await writeFile("out.mp3", Buffer.from(await res.arrayBuffer()));
Render a real chapter through sora — API key at /dashboard with 25k free characters.
FAQ
How do I force a specific kanji reading?
Add an account lexicon entry (/docs) mapping the term to kana, or rewrite the phrase in kana for that occurrence.
Does the ja set cost extra?
No — Japanese is one of the ten Essential languages at $25/1M characters before engine multipliers.
Can I mix Japanese and English product names in one script?
Yes, but test each name — readings of Latin script depend on context; a lexicon entry pins recurring brand names.
Voice previews: /voices. Long serialized content: one chapter per jobs request over 50k characters.