token 認証で叩ける、81 の言語・地域・692 音声対応の読み上げ API
提供条件
token ヘッダーにアクセストークン(64 文字)を付けて送信します(取得方法)標準 TTS API を利用するには アクセストークン(64 文字) が必要です。アカウント登録後、設定ページから取得できます。
取り扱い注意: アクセストークンは他人と共有しないでください。第三者があなたになりすまして利用できてしまいます。漏洩した場合は設定ページから再発行できます。
このページのサンプルでは環境変数 ONDOKU_TOKEN にトークンが入っている前提で書いています。
| ヘッダー | 値 |
|---|---|
Content-Type | application/json |
token | アクセストークン(64 文字) |
4 項目とも必須です。1 つでも欠けると HTTP 400 になります。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
voice | string | 必須 | 音声 ID(例: ja-JP-NanamiNeural)。音声リストを参照 |
text | string | 必須 | 読み上げるテキスト(空文字は不可) |
speed | number | 必須 | 速度(有効範囲: 0.3 〜 4.0、例: 1.0)。範囲外は既定値 1.0 として処理されます |
pitch | number | 必須 | ピッチ(有効範囲: -20 〜 20、例: 0.0)。範囲外は既定値 0 として処理されます |
成功時は application/json で生成音声の URL と履歴 ID が返ります。MP3 バイナリは url にアクセスして取得してください。
{
"text": "こんにちは、音読さんです。",
"url": "https://storage.googleapis.com/ondoku3/voice/...",
"pk": 12345,
"share": 1
}
| フィールド | 型 | 説明 |
|---|---|---|
text | string | 読み上げに使用されたテキスト |
url | string | 生成された音声ファイルの URL。クエリ文字列を除いた URL が返る |
pk | number | 生成履歴(Sentence)の ID |
share | number | 共有可否フラグ。通常は 1、一部のエラー用音声では 0 |
失敗時は多くの場合 JSON で {"error": "..."} が返ります。レート制限時のみ reset_in が追加されます。
HTTP エラーにならない案内レスポンス: 月間利用文字数が不足している場合など、一部の経路では HTTP 200 のまま上記と同じ形の JSON が返り、url には案内音声の URL が入ります。HTTP ステータスだけで成功判定せず、返却された text / url の内容も確認してください。
curl -X POST https://ondoku3.com/text_to_speech_api/ \
-H "Content-Type: application/json" \
-H "token: $ONDOKU_TOKEN" \
-d '{
"voice": "ja-JP-NanamiNeural",
"text": "こんにちは、音読さんです。",
"speed": 1.0,
"pitch": 0.0
}' \
| tee response.json
curl -L "$(jq -r .url response.json)" -o output.mp3
import os
import requests
resp = requests.post(
"https://ondoku3.com/text_to_speech_api/",
headers={
"Content-Type": "application/json",
"token": os.environ["ONDOKU_TOKEN"],
},
json={
"voice": "ja-JP-NanamiNeural",
"text": "こんにちは、音読さんです。",
"speed": 1.0,
"pitch": 0.0,
},
timeout=60,
)
resp.raise_for_status()
data = resp.json()
mp3 = requests.get(data["url"], timeout=60).content
with open("output.mp3", "wb") as f:
f.write(mp3)
print(f"saved: output.mp3 ({len(mp3)} bytes), pk={data['pk']}")
import { writeFile } from "node:fs/promises";
const token = process.env.ONDOKU_TOKEN!;
const res = await fetch("https://ondoku3.com/text_to_speech_api/", {
method: "POST",
headers: {
"Content-Type": "application/json",
token,
},
body: JSON.stringify({
voice: "ja-JP-NanamiNeural",
text: "こんにちは、音読さんです。",
speed: 1.0,
pitch: 0.0,
}),
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
type StandardTTSResponse = {
text: string;
url: string;
pk: number;
share: number;
};
const data = (await res.json()) as StandardTTSResponse;
const audioRes = await fetch(data.url);
if (!audioRes.ok) throw new Error(`audio HTTP ${audioRes.status}: ${await audioRes.text()}`);
const buf = Buffer.from(await audioRes.arrayBuffer());
await writeFile("output.mp3", buf);
console.log(`saved: output.mp3 (${buf.byteLength} bytes), pk=${data.pk}`);
| HTTP | 例 | 原因 |
|---|---|---|
| 200 | {"text": "...", "url": "...", "pk": ..., "share": ...} | 文字数不足などの案内音声 JSON。url の音声内容を確認 |
| 400 | Token does not exists | token ヘッダー未指定 / 64 文字でない |
| 400 | Token does not match | 無効なトークン |
| 400 | voice parameter is required | voice 未指定 / 文字列でない |
| 400 | Unsupported voice requested. | 音声リストにない voice |
| 400 | Please set "voice", "speed", "pitch", "text" | 必須の 4 項目のどれかが欠けている |
| 400 | "speed" and "pitch" must be finite numbers | speed / pitch が NaN・Infinity |
| 429 | Rate limit exceeded | 60 秒 / 30 リクエスト超過(接続元 IP 単位) |
| 500 | Internal server error | サーバー側エラー(時間を置いて再試行) |
プラン詳細・価格は 料金ページ を参照してください。
| HTTP | 対応 |
|---|---|
| 429 (Rate limit) | レスポンスの reset_in 秒、または最低 2 秒待ってから再試行 |
| 5xx | exponential backoff(1 秒 → 2 秒 → 4 秒 → 8 秒、最大 3 回) |
| 4xx(400 等。認証エラーも 400) | リトライしない。リクエスト内容を修正してください |
| ネットワークタイムアウト | 2 〜 3 回までリトライ。同じテキスト・voice なら同じ音声が返ります |
以下の用途での利用を禁止します:
詳細は 利用規約 を確認してください。
音読さんの公式 API は、API ごとに次の月間稼働率を SLA として提供します。この節の定義(数え方・停止に含めないもの・下回った場合の扱い)は両 API に共通です。
| API | エンドポイント | SLA(月間稼働率) |
|---|---|---|
| 標準 TTS API | POST /text_to_speech_api/ | 99.0% |
| Advanced TTS API(Beta) | POST /api/advanced-tts/GET /api/advanced-tts/jobs/{job_id}/ | 98.0% |
SLA の対象は稼働率のみで、応答時間は含みません。
status が failed)は停止に数えません互換性を壊す変更(項目の削除・型や意味の変更・エンドポイントの廃止など)は、実施の 30 日前にこの節で告知します。項目や声の追加など互換を保つ主な変更も、実施後にこの節に記録します(事前告知はしません)。緊急のセキュリティ対応は例外です。
| 日付 | 内容 |
|---|---|
| 2026-10-02 | 互換性を壊す変更は 30 日前にこの節で告知するルールを開始。SLA 節に Advanced TTS API(Beta 版、月間稼働率 98.0%)を追加 |
| 2026-10-01 | 公式 API として SLA(月間稼働率 99.0%)を設定 |
不具合や予期しない挙動を確認したら、まず以下を試してください:
{"voice":"ja-JP-NanamiNeural","text":"テスト","speed":1.0,"pitch":0.0} で 200 が返るか上記で解消しない場合は お問い合わせ からご連絡ください。再現に必要な以下の情報を添えていただけるとスムーズです:
仕様の変更について: API 仕様の変更は 変更履歴 に記載します。互換性を壊す変更は実施の 30 日前に告知します。