TTS API リファレンス
Shisa TTS の HTTP API は 2 つのエンドポイントを公開しています。1 つは音声を生成するもの、もう 1 つは利用可能な音声を一覧取得するものです。どちらも標準のベアラートークンで認証します。ストリーミング音声を WebSocket で受け取る場合は、WebSocket ストリーミングを参照してください。
Authorization: Bearer YOUR_API_KEY
エンドポイント
音声生成
POST https://api.shisa.ai/tts
テキストを音声に変換します。リクエストされた形式のバイナリ音声データを返します。
音声一覧
GET https://api.shisa.ai/tts/voices
現在アクティブなすべての音声について、メタデータ、対応形式、サンプルレート、ストリーミング対応状況を含むvoices配列を持つオブジェクトを返します。カタログについては音声を参照してください。
リクエストパラメータ
POST /tts エンドポイントのパラメータ。JSON ボディとして送信します。
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
voice_id | string | 必須 | 使用する音声の UUID。利用可能な ID は GET /tts/voices から取得します。 |
text | string | 必須 | 音声に変換するテキスト。デフォルト上限: 5,000 Unicode文字。 |
format | string | 必須 | 出力音声形式。選択した音声がサポートしている必要があります。mp3、wav、ogg、pcm、flac のいずれか。 |
stream | boolean | 任意 | true の場合、リアルタイム再生用にチャンク化されたストリームとして音声を返します。音声のstreamingがtrueで、かつ選択した形式がそのプロバイダーでストリーミング対応している必要があります。デフォルトはfalse。 |
sample_rate | integer | 任意 | 省略または0でデフォルトの24,000 Hz。複数のサンプルレートを掲載する音声でのみ、0以外の値を指定します。Qwen系音声のogg形式では上書きを指定できません。 |
temperature | number | 任意 | プロバイダー固有の変化量制御。現在はQwen系音声で有効です(Qwenのデフォルト: 0.5)。他の音声では省略してください。 |
レスポンス
POST /tts — バイナリ音声
成功時、APIは適切なContent-Typeヘッダー(MP3の場合はaudio/mpeg)付きの生バイナリ音声データを返します。レスポンスボディをそのままファイルに保存してください。
# The response is binary audio data — save directly to file
curl -s -X POST "https://api.shisa.ai/tts" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"voice_id": "61ba1141-60aa-4bc3-a3b3-be1ec20700b3", "format": "mp3", "text": "テスト"}' \
--output speech.mp3
GET /tts/voices — JSON
利用可能な音声オブジェクトの配列を含むオブジェクトを返します。
{
"voices": [
{
"id": "e3362c0a-7677-4cd8-b122-91fb093305c9",
"description": "Young male Japanese voice...",
"language": "Japanese & English",
"gender": "Male",
"formats": ["mp3", "ogg", "pcm"],
"sample_rates": [8000, 16000, 22050, 24000, 32000, 44100, 48000],
"streaming": true
}
]
}
音声オブジェクトのフィールド:
| フィールド | 型 | 説明 |
|---|---|---|
id | string (uuid) | リクエストで voice_id として使用する UUID。 |
description | string | 人間が読める音声の説明。 |
language | string | 対応言語。 |
gender | string | 音声の性別(Male、Female、Neutral)。 |
formats | array | 対応する出力音声形式。 |
sample_rates | array | 対応する出力サンプルレート(Hz)。 |
streaming | boolean | 音声のプロバイダーが少なくとも1つの形式でリアルタイムストリーミングに対応しているかどうか。すべてのformats値がストリーミング可能という意味ではありません。 |
エラーハンドリング
エラーは次の形式の JSON で返されます。
{
"context": ["..."],
"code": 104,
"name": "ErrAuthenticationFailed",
"error": "Authentication error: Invalid token"
}
エラーコード
| ステータス | 原因 | 対処方法 |
|---|---|---|
400 | パラメータの欠落または不正 | voice_id、text、format フィールドを確認してください。 |
400 | 音声に対応していない形式 | 音声の formats 配列に記載された形式を使用してください。 |
400 | プロバイダーと形式の組み合わせがストリーミング非対応 | streamをfalseにするか、ストリーミング対応の形式を選択してください。 |
400 | サポートされていないサンプルレート | sample_rateを省略するか、音声が設定可能なレートを選択してください。 |
400 | テキストが設定上限を超過 | テキストを短くしてください。デフォルト上限は5,000文字です。 |
401 | API キーが無効または未設定 | Authorization: Bearer ヘッダーを確認してください。 |
403 | サービスへのアクセスを拒否 | 選択した音声の背後にあるプロバイダーを、このキーでは利用できません。 |
404 | TTSサービス/プロバイダーが未登録 | サービス提供状況を確認するか、サポートにお問い合わせください。 |
429 | レート制限超過 | 指数バックオフで待機してリトライしてください。 |
500 | 内部サーバーエラー | リクエストをリトライするか、サポートに連絡してください。 |
警告
リクエストされたformatが選択した音声のformats配列に含まれていない場合も400が返されます。さらに、streaming: trueはすべての対応形式をストリーミングできることを保証しません。プロバイダーと形式の組み合わせが非対応の場合、stream: trueは400を返します。