公式 Anthropic /v1/messages プロトコルです。フィールドは公式 API と完全に一致し、既存の Anthropic SDK コードをほぼ変更なしで移行できます。
エンドポイント
POST https://relay.4aicode.com/v1/messages
リクエスト
POST /v1/messages HTTP/1.1
Host: relay.4aicode.com
Authorization: Bearer sk-4ai-xxxxxxxxxxxxxxxx
anthropic-version: 2023-06-01
content-type: application/json
{
"model": "claude-sonnet-4-6",
"max_tokens": 1024,
"stream": true,
"messages": [
{ "role": "user", "content": "Say hi" }
]
}
必須
| フィールド | 説明 |
|---|---|
model | Claude モデル(Sonnet / Haiku / Opus 系)またはサポートされる gpt-* モデル |
max_tokens | 生成する最大トークン数 |
messages | 会話配列 |
/v1/messages は model に対応する上流サービスにルーティングし、claude-* と gpt-* の両方をサポートします。Claude Code など Anthropic Messages プロトコルのクライアントは、このエンドポイント経由でこれらのモデルにアクセスできます。
よく使うオプションフィールド
| フィールド | 説明 |
|---|---|
stream | true で SSE を有効化 |
system | システムプロンプト |
temperature | 0~1 |
tools | 関数呼び出し |
stop_sequences | 停止シーケンス |
ストリーミング応答
stream: true のとき、エンドポイントは text/event-stream を返し、イベント列は公式 API と一致します。
event: message_start
event: content_block_start
event: content_block_delta
event: content_block_stop
event: message_delta
event: message_stop
中継はどの段階でも SSE をバッファしないため、初回バイトまでの時間は直接接続とほぼ同じです。
非ストリーミング応答
{
"id": "msg_xxxx",
"type": "message",
"role": "assistant",
"content": [{ "type": "text", "text": "Hi!" }],
"model": "claude-sonnet-4-6",
"stop_reason": "end_turn",
"usage": { "input_tokens": 8, "output_tokens": 3 }
}
usage は課金に使用されます(詳細は クォータ)。
ChatGPT モデル
Claude Code で ChatGPT モデルを使うには、サポートされる gpt-* モデルに設定するだけです。
export ANTHROPIC_BASE_URL=https://relay.4aicode.com
export ANTHROPIC_AUTH_TOKEN=sk-4ai-xxxxxxxxxxxxxxxx
export ANTHROPIC_DEFAULT_OPUS_MODEL=gpt-5.6-terra
export ANTHROPIC_DEFAULT_OPUS_MODEL_NAME="4AICode GPT 5.6 Terra"
export ANTHROPIC_DEFAULT_OPUS_MODEL_SUPPORTED_CAPABILITIES=effort,xhigh_effort,thinking,adaptive_thinking,interleaved_thinking
export ANTHROPIC_MODEL=opus
export ANTHROPIC_DEFAULT_HAIKU_MODEL=gpt-5.4-mini
export CLAUDE_CODE_EFFORT_LEVEL=xhigh
claude --effort xhigh
ANTHROPIC_DEFAULT_OPUS_MODEL により Claude Code は中継に gpt-5.6-terra をリクエストします。CLAUDE_CODE_EFFORT_LEVEL=xhigh は Anthropic の output_config.effort を OpenAI Responses の reasoning.effort=xhigh にマップします。
サポートモデルは /v1/chat/completions と同じ:gpt-6-astra、gpt-6-sol、gpt-6.1-sol、gpt-6.1-terra、gpt-6-luna、gpt-5.6-sol、gpt-5.6-terra、gpt-5.6-luna、gpt-5.5、gpt-5.4、gpt-5.4-mini、gpt-5.3-codex。
エラー
| HTTP | 意味 |
|---|---|
| 400 | 無効なフィールド(max_tokens 欠落、存在しない model など) |
| 401 | 無効なトークン |
| 403 | チーム停止 |
| 429 | レート制限またはクォータ超過 |
| 502 | 上流 Claude の不安定;リクエストを再試行 |
| 503 | 上流サービスが一時的に利用不可;詳細は サービスのクールダウンとリトライ |
503 の例:
{
"code": "no_account_available",
"message": "all accounts cooling down, retry in 60s"
}
完全な例(Python)
from anthropic import Anthropic
client = Anthropic(
base_url="https://relay.4aicode.com",
api_key="sk-4ai-xxxxxxxxxxxxxxxx",
)
with client.messages.stream(
model="claude-sonnet-4-6",
max_tokens=512,
messages=[{"role": "user", "content": "Introduce yourself in one sentence"}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)