token 認証で叩ける、81 の言語・地域・692 音声対応の読み上げ API
API 利用にあたっての重要事項
これらを理解した上でご利用ください。
標準 TTS API を利用するには アクセストークン(64 文字) が必要です。アカウント登録後、設定ページから取得できます。
取り扱い注意: アクセストークンは他人と共有しないでください。第三者があなたになりすまして利用できてしまいます。漏洩した場合は設定ページから再発行できます。
このページのサンプルでは環境変数 ONDOKU_TOKEN にトークンが入っている前提で書いています。
| ヘッダー | 値 |
|---|---|
Content-Type | application/json |
token | アクセストークン(64 文字) |
| フィールド | 型 | 説明 |
|---|---|---|
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 | "speed" and "pitch" must be finite numbers | speed / pitch が NaN・Infinity |
| 429 | Rate limit exceeded | 60 秒 / 30 リクエスト超過 |
| 500 | Internal server error | サーバー側エラー(時間を置いて再試行) |
プラン詳細・価格は 料金ページ を参照してください。
| HTTP | 対応 |
|---|---|
| 429 (Rate limit) | retry_after 秒、または最低 2 秒待ってから再試行 |
| 5xx | exponential backoff(1 秒 → 2 秒 → 4 秒 → 8 秒、最大 3 回) |
| 4xx(400・401 等) | リトライしない。リクエスト内容を修正してください |
| ネットワークタイムアウト | 2 〜 3 回までリトライ。同じテキスト・voice なら同じ音声が返ります |
以下の用途での利用を禁止します:
詳細は 利用規約 を確認してください。
不具合や予期しない挙動を確認したら、まず以下を試してください:
{"voice":"ja-JP-NanamiNeural","text":"テスト","speed":1.0,"pitch":0.0} で 200 が返るか上記で解消しない場合は お問い合わせ からご連絡ください。再現に必要な以下の情報を添えていただけるとスムーズです:
変更履歴について: このページは API 仕様の変更があった際に更新します。大きな変更は 音読さんトップ 等でアナウンスする場合がありますが、軽微な変更はサイレントに行われることがあります(重要事項に記載の通り)。