01
未宣言のパラメータは捨てられず拒否されます
messages、tools、tool_choice、response_format、max_tokens、temperature、top_p はモデルの宣言済みフィールドに対応します。それ以外はモデルのスキーマへ転送され、宣言がなければ 400 です。沈黙が答えになることはありません。
導入ガイド
ここのテキストモデルは、あなたの SDK がすでに話しているプロトコルを話します。Chat Completions、ステートレスな Responses サブセット、Anthropic Messages、Google generateContent。面白いのは、対象モデルが宣言していないパラメータがどうなるかです。

解決する課題
典型的な失敗は 500 ではありません。ゲートウェイが受け取り、捨て、何も言わなかったパラメータです。結果としてモデルはあなたの temperature も、ツール定義も、レスポンス形式もなしに走り、出力は「壊れている」ではなく「少し残念」に見えます。
01
messages、tools、tool_choice、response_format、max_tokens、temperature、top_p はモデルの宣言済みフィールドに対応します。それ以外はモデルのスキーマへ転送され、宣言がなければ 400 です。沈黙が答えになることはありません。
02
/v1 では本文が OpenAI や Anthropic のエラーオブジェクトで、/api/v1 の {code, msg, data, request_id} 封筒ではありません。両方の面を使うなら両方を扱ってください。
03
stream: true は data: [DONE] で終わる chat.completion.chunk を返します。課金は実測使用量に従うため、途中で中断したストリームも無料にはなりません。
実装方針
base_url と api_key を変え、model 文字列を GET /v1/models の値に置き換え、すでにあるテストを走らせます。あるパラメータで 400 が返るなら、選んだモデルはそれを最初から備えていなかったということです。黙って捨てる実装では得られない情報です。
OpenAI 互換クライアントならどれでも動きます。変えるのは Base URL と model 値だけです。
POST /v1/chat/completions
from openai import OpenAI
client = OpenAI(
base_url="https://api.spicyapi.ai/v1",
api_key=os.environ["SPICY_API_KEY"],
)
stream = client.chat.completions.create(
model="<publisher>/<model>/chat", # exact value from GET /v1/models
messages=[{"role": "user", "content": "Summarise these notes in three bullets."}],
temperature=0.7,
stream=True,
)
for chunk in stream:
print(chunk.choices[0].delta.content or "", end="")text/event-stream
data: {"object":"chat.completion.chunk","choices":[{"delta":{"content":"- "}}]}
data: {"object":"chat.completion.chunk","choices":[{"delta":{"content":"Ships"}}]}
data: [DONE]契約
| フィールド / ヘッダー | 値・上限 |
|---|---|
| POST /v1/chat/completions | chat.completion · SSE with stream: true |
| GET /v1/models | every callable model value |
| Authorization: Bearer · x-api-key · x-goog-api-key | accepted on /v1 |
| undeclared parameter | 400 · never silently dropped |
横にスワイプして全項目を確認できます。
導入
向き不向き
裏付け
/v1/chat/completions、/v1/responses、/v1/messages、/v1beta/models/{model}:generateContent はすべて同じキーで認証します。Authorization: Bearer、x-api-key、x-goog-api-key は、それぞれの SDK が期待する場所で受け付けられます。
GET /v1/models は、/v1 と /api/v1 のすべての操作が受け付ける識別子をそのまま返し、提供元は owned_by に入ります。価格はアカウント固有のため /api/v1/models 側にあり、公開されません。
互換レイヤーはネイティブ面と同じ認証、レート制限、入力検証、価格計算、資金保留を使います。違うのは封筒だけです。
公開前に
よくある質問
モデル
各リンクはそのモデルシリーズのページに移動します。入力、上限、コンテンツ方針、単位あたりの現在価格をそこで確認できます。
次に
既存の OpenAI・Anthropic・Google クライアントをそのまま向ける。何がそのまま通り、何を意図的に拒否し、テキストはどう課金されるか。