ガイド
モデルとテキストのエンドポイント
利用可能なモデルの照会とテキスト対話(ストリーミングを含む)のリクエスト・レスポンス仕様
モデルとテキストのエンドポイント
モデルカタログとテキスト対話はいずれも同じプラットフォーム API Key を使用します。共通の取り決め(ベースアドレス、認証、レート制限、リトライ)は認証と基本仕様を参照してください。
モデル一覧の照会
/v1/models認証方式
Authorization: Bearer <API_KEY>。
リクエストパラメータ
リクエストボディはありません。リクエストヘッダーに API Key を付与するだけで構いません。
リクエスト例
このステップではリクエストボディは不要で、リクエストヘッダーに API Key を付けるだけで構いません。
返される data[].id が、以降のすべての呼び出しで使用するモデル ID です。
リクエスト
curl "https://locopalai.com/v1/models" \
-H "Authorization: Bearer $LOCOPAL_API_KEY"レスポンスパラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
object | string | 固定で list |
success | boolean | 照会成功時に true |
data | array | 現在の Key で呼び出し可能なモデル一覧 |
data[].id | string | モデル ID。リクエスト送信時にそのまま記入する |
data[].object | string | 固定で model |
data[].created | integer | カタログの登録時刻(Unix 秒) |
data[].owned_by | string | モデル提供元の識別子。参考情報 |
data[].supported_endpoint_types | string[] | このモデルで利用可能なエンドポイント種別 |
objectとsuccessはトップレベルのフィールドで、data[]の内部にはありません。objectは固定でlist、successは成功時にtrueです。リクエストの成功判定は HTTP ステータスコードを基準とし、successは補助的にのみ使用してください。
レスポンスボディ
{
"data": [
{
"id": "doubao-seedance-2.0",
"object": "model",
"created": 1626777600,
"owned_by": "doubaovideo",
"supported_endpoint_types": ["openai"]
},
{
"id": "claude-sonnet-4-5-20250929",
"object": "model",
"created": 1626777600,
"owned_by": "claude",
"supported_endpoint_types": ["anthropic", "openai"]
}
],
"object": "list",
"success": true
}"data": [] が返された場合は、現在の Key が属する呼び出しグループに利用可能なモデルがないことを示します。まずグループ設定を確認するか、プラットフォームサポートに連絡してください。ページに表示される名称に変えてリトライしないでください。モデルカタログは権限やプラットフォームの可用性によって変化するため、サービス起動時、ユーザーがモデルを選択した時、または「モデル利用不可」を受け取った時に 1 回更新することを推奨します。
エラーレスポンス
| HTTP | レスポンス | 説明 |
|---|---|---|
401 | {"error":{"code":"","message":"Invalid token (request id: ...)","type":"new_api_error"}} | API Key の欠落、誤り、失効 |
500 | {"error":{"message":"...","type":"new_api_error"}} | カタログ照会の失敗。リクエスト識別子を保持してリトライする |
テキスト対話
/v1/chat/completions認証方式
Authorization: Bearer <API_KEY>。
リクエストボディ · application/json
| パラメータ | 型 | 必須 | 説明 |
|---|---|---|---|
model | string | 必須 | /v1/models が返すテキストモデル ID |
messages | array | 必須 | 時系列順に並んだメッセージ |
messages[].role | string | 必須 | system、user、assistant のいずれか |
messages[].content | string | 必須 | 現在のメッセージ内容 |
stream | boolean | 任意 | true の場合は SSE によるストリーミングで返し、[DONE] を読むと終了する |
temperature | number | 任意 | サポートの有無は現在のモデルの実際の能力に準じる |
max_tokens | integer | 任意 | サポートの有無は現在のモデルの実際の能力に準じる |
リクエスト例
model には /v1/models が返す id を必ず記述し、ページ上の表示名は使用しないでください。
stream を true にすると SSE で逐次返され、[DONE] を読むと終了します。
右側には 3 言語の等価な書き方を示しています。タブを切り替えて見比べてください。
curl -X POST "https://locopalai.com/v1/chat/completions" \
-H "Authorization: Bearer $LOCOPAL_API_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"model": "从 /v1/models 选择的文本模型 ID",
"messages": [{ "role": "user", "content": "只回复两个字:你好" }],
"stream": false
}
JSONレスポンスパラメータ
| パラメータ | 型 | 説明 |
|---|---|---|
id | string | 今回のレスポンス識別子。調査と突合に使用する |
object | string | 非ストリーミング時は chat.completion |
created | integer | レスポンス時刻(Unix 秒) |
model | string | 今回のリクエストで使用したモデル ID |
choices | array | 結果一覧 |
choices[].index | integer | 結果の番号 |
choices[].message.role | string | 固定で assistant |
choices[].message.content | string | 生成されたテキスト |
choices[].finish_reason | string | 終了理由。length は長さで打ち切られたことを示す |
usage.prompt_tokens | integer | 入力使用量 |
usage.completion_tokens | integer | 出力使用量 |
usage.total_tokens | integer | 合計使用量 |
choices[].message.refusal | string / null | モデルが内容を拒否した場合の説明。通常の回答ではたいてい null |
choices[].message.annotations | array | モデルによる付加的な注釈。空の場合がある |
usage には今回の課金の詳細な使用量フィールド(キャッシュヒット、入力/出力の内訳など)が含まれる場合があります。実際の返却に準じてください。一部のチャネルは latency_checkpoint、routing、system_fingerprint などの拡張フィールドも返します。クライアントは認識しないフィールドを無視し、固定のフィールド全集として解析しないでください。
レスポンスボディ
{
"id": "msg_011CevNtsfivFKb6YP3WcL7A",
"model": "claude-haiku-4-5-20251001",
"object": "chat.completion",
"created": 1789071575,
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "你好" },
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 20587,
"completion_tokens": 6,
"total_tokens": 20593
}
}ストリーミングレスポンス(リクエストボディに "stream": true を追加し、レスポンスは text/event-stream):
data: {"choices":[{"delta":{"content":"这是"}}]}
data: {"choices":[{"delta":{"content":"模型输出"}}]}
data: [DONE]クライアントは [DONE] まで読み取り続ける必要があります。ストリーミングレスポンスが中間層でキャッシュされたり、重複した内容に結合されたりしないようにしてください。最後のデータブロックは usage のみを含む場合があり、その際 choices は空になることがあります。
推論モデルは空のコンテンツを返す場合がある
一部の推論モデルは出力クォータを優先的に非公開の推論に使用します。実測では、gpt-5-nano を max_tokens を非常に小さくしてリクエストすると、HTTP は 200 を返しますが、message.content は空で finish_reason は length、usage.completion_tokens_details.reasoning_tokens は出力上限と等しくなります。このような場合はクォータを増やすか、推論を行わないテキストモデルに切り替えてください。空文字列をモデルの故障やエンドポイントの失敗とみなしてはいけません。
サーバー側の例
const response = await fetch('https://locopalai.com/v1/chat/completions', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.LOCOPAL_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: '从 /v1/models 选择的模型 ID',
messages: [{ role: 'user', content: '写一条产品简介。' }],
}),
})
if (!response.ok) throw new Error(await response.text())
const data = await response.json()API Key をブラウザのコードに含めないでください。フロントエンドのリクエストはまず自社の業務バックエンドに送り、バックエンドから転送してください。
エラーレスポンス
{
"error": {
"code": "model_not_found",
"message": "No available channel for model xxx under group xxx (distributor) (request id: ...)",
"type": "new_api_error"
}
}| HTTP | レスポンス / 原因 | 対応 |
|---|---|---|
400 | {"error":{"code":"","message":"Model name not specified, model name cannot be empty (request id: ...)","type":"new_api_error"}} | リクエストボディに model がない |
401 | Invalid token | API Key の欠落、誤り、失効 |
503 | {"error":{"code":"model_not_found","message":"No available channel for model ..."}} | 現在のグループにこのモデルの利用可能なチャネルがない。同種のモデルに変更するか、プラットフォームサポートに連絡する |
429 | リクエスト頻度の制限 | バックオフしてリトライする |
完全な説明はエラーコードとトラブルシューティングを参照してください。
