翻訳 API リファレンス
Shisa 翻訳 API は、単一の multipart/form-data リクエストで、ソース言語とターゲット言語の間でテキストを翻訳します。このページでは、エンドポイント、そのフォームフィールド、非ストリーミングレスポンス、ストリーミング形式について説明します。
エンドポイント
POST https://api.shisa.ai/translate/
Authorization ヘッダーで、そのままの shsk: トークンを使って認証します。
Authorization: shsk:YOUR_API_KEY
翻訳では翻訳専用の認証ヘッダーを使用します。トークンは そのまま 送信します — 他の Shisa サービスとは異なり、Bearer プレフィックスは 付けません。トークンが欠落または不正な形式の場合は 401 エラーが返されます。完全な規約については 認証 を参照してください。
リクエストボディは multipart/form-data です — 以下のフィールドは JSON ではなくフォームフィールドとして送信します。
リクエストフィールド
| Field | Type | Required | 説明 |
|---|---|---|---|
text | string | Required | 翻訳するテキスト。 |
source_lang | string | Required | ソース言語コード(例: ja)。 |
target_lang | string | Required | ターゲット言語コード(例: en)。 |
stream | string | Optional | 単一の JSON レスポンスの場合は "false"(デフォルト)、Server-Sent Events の場合は "true"。 |
非ストリーミングレスポンス
stream=false(デフォルト)の場合、API は OpenAI スタイルの JSON オブジェクトを返します。翻訳されたテキストは choices[0].message.content にあります。
{
"id": "trans_20f537a6-da14-4c98-8ee3-063319c45072",
"object": "translation.completion",
"created": 1768299459,
"model": "shisa-ai/chotto",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "お腹が空いた。"
},
"finish_reason": "stop"
}
],
"transcription": "I am hungry",
"source_lang": "en",
"target_lang": "ja",
"balance": {
"free": 1000,
"premium": 0
},
"usage": {
"prompt_tokens": 3,
"completion_tokens": 1,
"total_tokens": 4
}
}
| Field | 説明 |
|---|---|
id | 翻訳の一意の識別子。trans_ のプレフィックスが付きます。 |
object | オブジェクトタイプ。非ストリーミングレスポンスの場合は translation.completion です。 |
created | 翻訳が作成された時刻の Unix タイムスタンプ(秒)。 |
model | 翻訳を生成したモデル — shisa-ai/chotto。 |
choices | 翻訳の選択肢の配列。各エントリには index、role と content を持つ message、finish_reason があります。 |
choices[0].message.content | 翻訳されたテキスト。 |
transcription | 翻訳された元のソーステキスト。 |
source_lang | 翻訳に使用されたソース言語コード。 |
target_lang | 翻訳に使用されたターゲット言語コード。 |
balance | 残りのクレジット残高。free と premium のトークン数を含みます。 |
usage | トークンの集計: prompt_tokens、completion_tokens、total_tokens。 |
ストリーミングレスポンス
リアルタイム配信のために翻訳を Server-Sent Events として受け取るには stream=true を設定します。
curl -X POST "https://api.shisa.ai/translate/" \
-H "Authorization: shsk:YOUR_API_KEY" \
-F "text=I am hungry" \
-F "source_lang=en" \
-F "target_lang=ja" \
-F "stream=true"
各チャンクは data: イベントで、そのオブジェクトは translation.completion.chunk であり、部分的なテキストを choices[0].delta.content に持ちます。最後のチャンクは finish_reason を "stop" に設定し、usage を含み、その後に data: [DONE] ターミネーターが続きます。
data: {"id": "trans_446d7397-...", "object": "translation.completion.chunk", "choices": [{"delta": {"content": ""}, "index": 0}]}
data: {"id": "trans_fe190f5d-...", "object": "translation.completion.chunk", "choices": [{"delta": {"content": "お"}, "index": 0}]}
data: {"id": "trans_71bbdcec-...", "object": "translation.completion.chunk", "choices": [{"delta": {"content": "腹が"}, "index": 0}]}
data: {"id": "trans_7c2d47d7-...", "object": "translation.completion.chunk", "choices": [{"delta": {"content": "空いた"}, "index": 0}]}
data: {"id": "trans_99e10e01-...", "object": "translation.completion.chunk", "choices": [{"delta": {"content": "。"}, "index": 0}]}
data: {"id": "trans_0a0396bd-...", "choices": [{"delta": {}, "index": 0, "finish_reason": "stop"}], "usage": {...}}
data: [DONE]