一、概要
当サイトでは OpenAI Chat Completions(/v1/chat/completions) 形式の互換インターフェースを提供しています。OpenAI公式SDKやOpenAI互換クライアントですでに動作しているコードであれば、リクエスト先を当サイトのゲートウェイのOpenAI入口に変更し、api_key をサイト内で発行した sk- キーに置き換えるだけで、その他の呼び出し方法を変更することなくご利用いただけます。
現在利用可能なGPTシリーズのモデルは、モデルプラットフォームに準拠しています(例:gpt-5.5、gpt-5.6-sol、gpt-5.6-terra、gpt-5.6-luna など)。詳細なリストと単価は GET /v1/models からご確認ください。
二、インターフェースアドレス
| メソッド | パス | 説明 |
|---|---|---|
| POST | /v1/chat/completions | チャット補完(非ストリーミング / ストリーミング)、リクエストボディはOpenAIの仕様に準拠 |
| GET | /v1/models | モデルと単価のリスト(認証不要) |
ゲートウェイアドレス:https://www.relay-api.com。OpenAI互換で呼び出す場合は、リクエストを POST https://www.relay-api.com/v1 へ送信してください(パスはそのまま指定してください)。
三、認証方式
Authorization: Bearer sk-あなたのキー
「ユーザーセンター → APIキー」から sk- で始まるキーを作成してください。OpenAI公式と同じ認証ヘッダーを使用するため、SDKが自動的に Authorization ヘッダーを付与します。
四、クイックスタート
4.1 curl(非ストリーミング)
curl -X POST https://www.relay-api.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-あなたのキー" \
-d '{
"model": "gpt-5.5",
"messages": [
{"role": "system", "content": "あなたは親切なアシスタントです。"},
{"role": "user", "content": "自己紹介を3文でしてください"}
],
"temperature": 0.7,
"max_tokens": 512
}'
4.2 OpenAI SDK(Python)
from openai import OpenAI
client = OpenAI(
base_url="https://www.relay-api.com/v1",
api_key="sk-あなたのキー",
)
resp = client.chat.completions.create(
model="gpt-5.5",
messages=[{"role": "user", "content": "こんにちは"}],
)
print(resp.choices[0].message.content)
base_url を上記のOpenAI入口に設定し、api_key を書き換えるだけで、その他の呼び出し方法は公式SDKと全く同じです。
五、リクエストパラメータ
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
| model | string | はい | モデルスラグ(例:gpt-5.5) |
| messages | array | はい | メッセージリスト、要素は {role, content}。roleは system / user / assistant を指定 |
| temperature | number | いいえ | サンプリング温度、デフォルトは 1.0 |
| top_p | number | いいえ | 核サンプリング、デフォルトは 1.0 |
| max_tokens | int | いいえ | 最大出力トークン数 |
| stream | bool | いいえ | ストリーミングの有無、デフォルトは false |
| stop | string / array | いいえ | 停止シーケンス |
| presence_penalty / frequency_penalty | number | いいえ | 繰り返しペナルティ、範囲 -2~2 |
六、レスポンス構造
{
"id": "chatcmpl-123456",
"object": "chat.completion",
"created": 1710000000,
"model": "gpt-5.5",
"choices": [
{
"index": 0,
"message": {"role": "assistant", "content": "こんにちは!お会いできて光栄です。"},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 18,
"completion_tokens": 12,
"total_tokens": 30
}
}
| フィールド | 説明 |
|---|---|
| id | 今回の補完処理の一意ID |
| choices[].message | アシスタントの回答(contentがテキスト内容) |
| choices[].finish_reason | 終了理由:stop / length / content_filter |
| usage.prompt_tokens | 入力トークン数(課金基準) |
| usage.completion_tokens | 出力トークン数(課金基準) |
| usage.total_tokens | 総トークン数 |
七、ストリーミング出力
リクエストボディに "stream": true を追加するとSSEストリームが返されます。各 data: 行が1つのチャンクとなります:
data: {"id": "chatcmpl-123456", "object": "chat.completion.chunk", "choices": [{"index": 0, "delta": {"role": "assistant"}, "finish_reason": null}]}
data: {"id": "chatcmpl-123456", "object": "chat.completion.chunk", "choices": [{"index": 0, "delta": {"content": "こんにちは"}, "finish_reason": null}]}
data: {"id": "chatcmpl-123456", "object": "chat.completion.chunk", "choices": [{"index": 0, "delta": {}, "finish_reason": "stop"}]}
data: [DONE]
クライアント側で各チャンクの choices[0].delta.content を結合することで完全な回答が得られます。[DONE] を受信するとストリーム終了です。OpenAI SDKで stream=True を指定した場合、これらのイベントは自動的に処理されます。
八、一般的なエラーコード
| HTTPステータス | 意味 | 推奨される対応 |
|---|---|---|
| 400 | リクエストパラメータが不正(モデルが存在しない、messagesが空など) | リクエストボディのフィールドを確認 |
| 401 | APIキーが無効または未指定 | Authorizationヘッダーとキーの形式を確認 |
| 403 | キーが停止中、残高不足、または権限不足 | チャージまたはキーの権限を確認 |
| 404 | パスまたはモデルが存在しない | base_urlとmodel名を再確認 |
| 429 | レート制限超過 | 指数バックオフでリトライ |
| 500 | サーバー内部エラー | 時間を置いてリトライ、継続する場合はサポートへ連絡 |
エラーレスポンスは一律で {"code": ステータスコード, "message": "エラー内容", "data": null} 構造となります。
九、互換性についての補足
- OpenAI SDK(Python / Node.js等)を
base_urlカスタム設定で接続可能です。 - OpenAI互換の各種クライアント(LobeChat、ChatBox、NextChat、One API等)でカスタムAPIアドレスを設定可能です。
- モデル名は
GET /v1/modelsで返されるスラグを使用してください。
Base URL について:当サイトは /v1beta/models/... と /v1beta/v1beta/models/...(および /v1/... と /v1/v1/...)を併用可能です。そのため、クライアント側が /v1 や /v1beta を自動補完する場合でも呼び出しに影響はありません。Base URLはドメインルート、または /v1beta を含むアドレスのどちらでも利用可能です。モデルIDはコントロールパネルの「トークン」ページ右上「モデルID」からコピーしてご確認ください。
