NezhaGateNezhaGate
POST https://nezhagate.com/v1/chat/completions

Claude Opus 5(Anthropic)の対話 API です。適応型思考を備え、複雑な推論、ソフトウェアエンジニアリング、エージェントのオーケストレーションを得意とします。思考の強度は low から max までの 5 段階で調整でき、画像入力、ツール呼び出し、プロンプトキャッシュに対応しています。OpenAI 互換 API と Anthropic ネイティブ API の両方で提供しているため、Claude Code からそのまま接続できます。

📥 コンテキスト長(最大入力):約 200K トークン。

Playground で試す →

クイックスタート

2 ステップで動きます:まずリクエストを送信し、次にストリーミングで回答を受け取ります。YOUR_API_KEY をご自身のキーに置き換えれば、下のコマンドはそのまま実行できます。エンドポイントは OpenAI の Chat Completions と同じなので、既存の OpenAI のコードは base_url と model を変えるだけで使えます。

ステップ 1 · リクエストを送信

curl
curl https://nezhagate.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "claude-opus-5", "messages": [{"role": "user", "content": "光合成を一文で説明してください"}]}'

レスポンス(HTTP 200)

JSON
{
  "id": "chatcmpl-7f3c9a1e2b4d6f8a",
  "object": "chat.completion",
  "created": 1791281400,
  "model": "claude-opus-5",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "光合成とは、植物が日光を使って二酸化炭素と水から糖をつくり、酸素を放出するしくみです。"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 18,
    "completion_tokens": 42,
    "total_tokens": 60
  }
}

message.content が回答、usage はこのリクエストで課金されるトークン数です。プロンプトキャッシュの課金方法は、下の「プロンプトキャッシュ」をご覧ください。

ステップ 2 · ストリーミングで受け取る(推奨)

curl
curl -N https://nezhagate.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "claude-opus-5", "stream": true, "messages": [{"role": "user", "content": "光合成を一文で説明してください"}]}'

ストリームは標準的な SSE です。各チャンクの本文は choices[0].delta.content に入り、最後のチャンクに usage が付き、data: [DONE] で終わります。回答が長い場合や思考モデルでは、ストリーミングを使ってください。ストリーミングしないリクエストは約 10 分で切断されます。

Python(OpenAI SDK)

Python
from openai import OpenAI

client = OpenAI(base_url="https://nezhagate.com/v1", api_key="YOUR_API_KEY")

# 1. 一問一答
resp = client.chat.completions.create(
    model="claude-opus-5",
    messages=[{"role": "user", "content": "光合成を一文で説明してください"}],
)
print(resp.choices[0].message.content)

# 2. ストリーミング
stream = client.chat.completions.create(
    model="claude-opus-5",
    messages=[{"role": "user", "content": "光合成を一文で説明してください"}],
    stream=True,
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Anthropic SDK(ネイティブ API)でも呼び出せます

Python · Anthropic SDK
import anthropic

client = anthropic.Anthropic(base_url="https://nezhagate.com/anthropic", api_key="YOUR_API_KEY")
msg = client.messages.create(
    model="claude-opus-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "光合成を一文で説明してください"}],
)
print(next(b.text for b in msg.content if b.type == "text"))

Anthropic SDK の base_url は /anthropic までを指定します。/v1/messages は SDK が自動で付け加えます。キーは上と同じものです。

認証

Header
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json

コンソールで API Key を作成すると利用を開始できます。

仕様早見表

コンテキストウィンドウ~200K トークン
入力テキスト、画像
思考適応型思考(既定でオン)。強度は reasoning_effort で設定します
ツール呼び出し対応(OpenAI の tools 形式)
ウェブ検索対応(web_search: true。検索自体は無料)
エンドポイント/v1/chat/completions · /anthropic/v1/messages
ストリーミング対応(stream: true、SSE)
課金方法トークン単位:入力、出力(思考を含む)、キャッシュヒットをそれぞれの料金で課金し、失敗は課金されません

リクエストパラメータ

POST /v1/chat/completions のリクエスト本文(JSON)で、OpenAI の Chat Completions と同じです。よく使うパラメータと、このモデルでの実際の動作は次のとおりです:

パラメータ種別必須説明
modelstringはいモデル ID:claude-opus-5。
messagesarrayはい会話のメッセージの配列です。各メッセージは role(system / user / assistant / tool)と content を持ちます。content は文字列、または text と image_url のパーツからなる配列です(画像入力については下記を参照)。複数ターンの対話では、これまでの履歴をすべて順番どおりに送ってください。
streambooleanいいえtrue にすると SSE でストリーミングし、最後のチャンクに usage が付きます。既定は false です。
max_tokensintegerいいえ出力の上限で、思考トークンも含みます。小さすぎると、モデルが回答を書く前に上限を使い切ることがあり、その場合ゲートウェイは 400 max_tokens_too_small を返し、課金はしません(512 以上を推奨)。一部のモデルでは、小さすぎる値は回答を最後まで書ける下限まで自動で引き上げられます。その場合も、課金は実際の使用量の分だけです。
temperature / top_pnumberいいえこの世代の Claude はサンプリングパラメータに対応しなくなりました。ゲートウェイが temperature、top_p、top_k を取り除き(エラーにはなりません)、モデルは既定の方法でサンプリングします。
reasoning_effortstringいいえ思考の強度:low / medium / high / xhigh / max。Claude の output_config.effort に変換して渡します。minimal と none は low として扱われます。claude-opus-5-high のようにモデル ID で指定することもできます。
thinkingobjectいいえ{"type": "disabled"} で思考をオフにします。従来の {"type": "enabled", "budget_tokens": N} という書き方は、最も近い思考の強度に変換されます。
tools / tool_choicearray / stringいいえOpenAI 標準形式の関数呼び出しです。モデルが関数を呼び出すときは finish_reason: "tool_calls" と tool_calls を返します。詳しくは下記をご覧ください。
web_searchbooleanいいえtrue にすると、まずウェブ検索を行い、その結果を参考資料としてモデルに渡します。詳しくは下記をご覧ください。

そのほかの OpenAI のパラメータ(stop、seed、user など)は送ったとおりモデルに渡されます。反映されるかどうかはモデルによります。

料金

トークン単位で課金します。下の表は 100 万トークンあたりの最新の料金です。プロンプトキャッシュに書き込まれたトークンはキャッシュ書き込み料金、キャッシュヒットした分はキャッシュヒット料金で課金されます。課金されるのは成功したリクエストの実際の使用量だけです。1 クレジット = $0.005 です。

種類USD / 100 万トークンクレジット / 100 万トークン
入力$4.00800
出力(思考を含む)$20.004000
キャッシュヒット$0.4080
キャッシュ書き込み$5.001000

たとえば、入力 2,000 トークン、出力 1,000 トークン(思考を含む)のリクエストは約 $0.028 です。

思考

適応型思考で、既定でオンです。質問ごとにどれだけ考えるかをモデルが判断します。reasoning_effort には low / medium / high / xhigh / max を指定でき、Claude の output_config.effort に変換して渡します。claude-opus-5-high のようにモデル ID の末尾に付けて指定することもでき、claude-opus-5 として課金されます。

思考の要約を受け取るには、ネイティブ API(/anthropic)を使い、リクエストに "thinking": {"type": "adaptive", "display": "summarized"} を含めてください。思考の強度は "output_config": {"effort": "high"} のように指定します。

このモデルは思考をオフにできます。"thinking": {"type": "disabled"} を送ってください。

思考トークンは出力トークンとして数えられ、出力料金で課金されます。

プロンプトキャッシュ

マーカーを付けなくても、長いプロンプトは自動でキャッシュに書き込まれることがあり(キャッシュ書き込み料金で課金)、その後、同じ先頭部分が繰り返されるとキャッシュヒット料金で課金されます。ネイティブ API(/anthropic)では、システムプロンプトやメッセージのブロックに "cache_control": {"type": "ephemeral"} を付けて、キャッシュする位置を自分で指定できます。Claude Code はこれを自動で行います。

ネイティブ API では、キャッシュのトークン数を usage.cache_creation_input_tokens(書き込み)と usage.cache_read_input_tokens(ヒット)で返し、課金はこの数値に基づきます。

画像入力

content の配列に image_url のパーツを入れます。推奨は base64 の data URI(data:image/png;base64,...)で、どの回線でも読み込めます。公開されている画像のリンクは回線側でダウンロードする必要があり、まれに取得できない、またはタイムアウトする回線があります。画像はモデル提供元の規則に従って入力トークンに換算されます。

curl
curl https://nezhagate.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "claude-opus-5", "messages": [{"role": "user", "content": [{"type": "text", "text": "この画像には何が写っていますか"}, {"type": "image_url", "image_url": {"url": "data:image/png;base64,iVBORw0KGgo..."}}]}]}'

ツール呼び出し(Function Calling)

tools に JSON Schema で関数を記述します。モデルが関数を呼び出すと判断したときは finish_reason: "tool_calls" を返し、message.tool_calls に関数名と引数(JSON 文字列)が入ります。

curl
curl https://nezhagate.com/v1/chat/completions \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "claude-opus-5", "messages": [{"role": "user", "content": "上海の今の天気はどうですか"}], "tools": [{"type": "function", "function": {"name": "get_weather", "description": "Current weather of a city", "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]}}}]}'

関数を実行したら、その結果を role: "tool" のメッセージとして、対応する tool_call_id を付けて会話に追加し、もう一度リクエストを送ってください。モデルはそれをもとに最終的な回答を返します。tool_choice には auto、none、required、または特定の関数を指定できます。

Anthropic ネイティブ API(/anthropic)

  • エンドポイントは https://nezhagate.com/anthropic/v1/messages で、リクエストとレスポンスは Anthropic の Messages 形式です。ストリーミングのイベント、ツール呼び出し(tool_use / tool_result)、画像ブロックはすべて Anthropic と同じなので、Anthropic SDK や Claude Code をそのまま使えます。
  • 認証には x-api-key: YOUR_API_KEY を使います(Authorization: Bearer も使えます)。キーは /v1 と同じものです。anthropic-version と anthropic-beta ヘッダーは送ったとおりに転送されます。max_tokens は必須です。
  • ここで使えるのは Claude モデルだけで、ほかのモデルを指定すると 404 not_found_error が返ります。このほか、POST /anthropic/v1/messages/count_tokens(トークン数の計算、無料)と GET /anthropic/v1/models も使えます。
  • 思考の要約:"thinking": {"type": "adaptive", "display": "summarized"}。思考の強度:"output_config": {"effort": "high"}(low から max まで)。temperature、top_p、top_k は取り除かれます。
  • エラーは Anthropic の形式 {"type": "error", "error": {"type": ..., "message": ...}} で返ります。残高が足りないときは 402 billing_error になります。
  • このエンドポイントでは、ウェブ検索は既定でオフです(Claude Code が毎ターン繰り返し送る先頭部分を変えてしまい、キャッシュが効かなくなるのを防ぐためです)。オンにするには x-web-search: 1 ヘッダーを付けてください。
curl
curl https://nezhagate.com/anthropic/v1/messages \
  -H "x-api-key: YOUR_API_KEY" \
  -H "anthropic-version: 2023-06-01" \
  -H "Content-Type: application/json" \
  -d '{"model": "claude-opus-5", "max_tokens": 1024, "messages": [{"role": "user", "content": "光合成を一文で説明してください"}]}'

Claude Code で使う →

回線と安定性

  • どのモデルも複数の回線で提供しています。ある回線がエラーになったり、タイムアウトしたり、混み合っていたりすると、ゲートウェイは内容を返し始める前に次の回線へ自動で切り替えます。再試行する必要はなく、二重に課金されることもありません。
  • ストリーミングは、出力が始まった後は回線を切り替えません。途中で切れた場合は、切れるまでに生成された分が課金されます(課金と返金 を参照)。
  • すべての回線が混み合っているときは、ゲートウェイが Retry-After 付きで 429 を返します。その秒数だけ待ってから再試行してください。失敗したリクエストは課金されません。各モデルの状態は サービス状態 で確認できます。

エラーと返金

エラーは error オブジェクト(message、type、code、param)で返ります。判定には HTTP ステータスコードと code を使い、message の文面では判定しないでください。失敗したリクエストは課金されません。完全な一覧は エラーコード をご覧ください。

HTTPcode原因対処
400invalid_messages / invalid_role / invalid_max_tokens対話リクエストの messages がない・空・形式が正しくない、role が許可された値ではない、または max_tokens が正の整数ではありません。param が該当するフィールドを示します。param が示すフィールドを直してください。
400model_not_foundモデル ID のつづりが違う・model がない・そのモデルをこのエンドポイントでは使えない(たとえば対話モデルで画像のエンドポイントを呼び出した)のいずれかです。GET /v1/models または API リファレンス にあるモデル ID を使ってください。
400max_tokens_too_small推論モデルが max_tokens をすべて思考に使い切り、回答を書けませんでした(ストリーミングしない対話)。max_tokens を増やしてから再試行してください。
4xxinvalid_requestモデル提供元がリクエストを拒否しました(コンテキストが長すぎる、対応していないパラメータがあるなど)。ステータスコードと message はモデル提供元が返したまま渡され、code はモデル提供元の値です。message の内容に沿ってリクエストを変更してください。
401invalid_api_keyキーが存在しない・削除された・無効化されているか、アカウントが停止されています。コンソールの「API Keys」ページでキーを確認してください。
402insufficient_quotaこのリクエストの分を確保するだけの残高がありません。ゲートウェイはまずリクエストにかかりうる最大の費用を確保するため、同時に多くの呼び出しを送ったときにも起こることがあります。一度に多くの呼び出しを送った直後なら、数秒待って再試行してください。そうでなければチャージしてください。
403permission_deniedそのモデルがキーのモデル許可リストに入っていません。許可リストにあるモデルを使うか、コンソールで許可リストを変更してください。
429rate_limit_exceededこのキーに設定した 1 分あたりのリクエスト数の上限を超えました(直近 60 秒で数えます)。Retry-After ヘッダーは付きません。数秒待ってから再試行するか、コンソールでこのキーの上限を引き上げてください。
429rate_limit_exceededこのモデルのすべての回線が混み合っていて、リクエストは送られませんでした。対話エンドポイントでのみ発生し、画像と動画のタスクは拒否されずに順番待ちになります。OpenAI 互換のエンドポイントでは Retry-After が付きます。Retry-After の秒数だけ待ってから再試行してください。
502upstream_timeout回線がタイムアウトしました(最初のトークンがなかなか返ってこない場合を含みます)。再試行してください。長い回答には stream: true を使ってください。
502upstream_unavailable回線でエラーが起きたか、一時的に利用できません。しばらくしてから再試行してください。
502upstream_busyモデル提供元がレート制限をかけています。モデル提供元の 429 をそのまま 429 として返すことはなく、代わりにこの 502 を返します。しばらくしてから再試行してください。
502empty_completionモデル提供元が空の内容を返しました。リクエストの内容に対する判定ではありません。再試行してください。
503model_maintenanceモデルのメンテナンス中で、リクエストを受け付けていません。その間、別のモデルが代わりに回答することもありません。メンテナンスが終わってから再試行してください。状況は サービス状態 で確認できます。

ストリーミングで出力が始まった後にエラーが起きても、ステータスコードは変わりません。エラーは error を含むデータ行としてストリーム内に届くか、ストリームが(data: [DONE] なしで)そのまま終わります。いずれの場合も、途中で切れたものとして扱ってください。