Claude Sonnet 5は2026年6月30日にリリースされた、Anthropicの中でも特にエージェント用途に向いたSonnetモデルです。ツール利用やコーディングタスクではOpus 4.8に近い性能を発揮しつつ、より低コストで利用できます。本記事では、Claude Sonnet 5 APIを実装で使うために、APIキーの取得、curl/Pythonでの呼び出し、レスポンス処理、適応的思考、400エラーの回避、ストリーミング、トークンカウントまでを順に確認します。
また、リクエストをApidogで管理すると、curlコマンドをシェル履歴に散らばらせず、環境変数、自動テスト、再利用可能なコレクションとして整理できます。Messages APIをすでに使っている場合、基本的なリクエスト形式は同じです。モデルIDはclaude-sonnet-5です。
始める前に必要なもの
Claude Sonnet 5 APIを呼び出すには、以下を用意します。
- Anthropicアカウント
- Claudeプラットフォームコンソールで発行したAPIキー
- モデルID:
claude-sonnet-5 - HTTPリクエストを送信する環境
- 簡単な検証: curl
- 継続的なテストやチーム共有: Apidog
Sonnet 5は、Anthropicの直接APIに加えて、Amazon Bedrock、Google Cloud Vertex AI、プレビュー版のMicrosoft Foundryでも利用できます。本記事ではAnthropicの直接APIを使います。リクエストボディの考え方はプラットフォーム間でほぼ同じで、主に認証方式とエンドポイントホストが変わります。
APIキーを取得する
Claudeプラットフォームコンソールにサインインし、「APIキー」セクションで新しいキーを作成します。
取得したキーは一度しか表示されないため、安全な場所に保存してください。ソースコードにハードコードしたり、Gitにコミットしたりしないでください。環境変数として設定します。
export ANTHROPIC_API_KEY="sk-ant-..."
ZDR契約を利用している場合、Sonnet 5はゼロデータ保持をサポートしているため、APIインターフェース側で追加の変更は不要です。
最初のリクエストを送る
Sonnet 5 APIはAnthropicのMessagesエンドポイントを使います。最小構成のcurlリクエストは次のとおりです。
curl https://api.anthropic.com/v1/messages \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"messages": [
{"role": "user", "content": "Write a haiku about API testing."}
]
}'
Python SDKでは次のように呼び出します。
import os
from anthropic import Anthropic
client = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])
message = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[
{"role": "user", "content": "Write a haiku about API testing."}
],
)
print(message.content[0].text)
実装時に特に重要なのは次の2つです。
-
model:claude-sonnet-5を指定する -
max_tokens: 出力全体の上限を指定する
Sonnet 5では、max_tokensがSonnet 4.6と異なる影響を持つ場合があります。特に適応的思考がデフォルトで有効になる点に注意してください。
レスポンスを処理する
成功するとHTTP 200が返り、レスポンスは次のようなJSONになります。
{
"id": "msg_01ABC...",
"type": "message",
"role": "assistant",
"model": "claude-sonnet-5",
"content": [
{"type": "text", "text": "Assertions green,\nendpoints answer on the first try,\nship the merge tonight."}
],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 18,
"output_tokens": 27
}
}
実装では、以下のフィールドを必ず確認します。
-
content- 配列です。
- テキストは
typeが"text"のブロックに入ります。 - ツール利用や思考が有効な場合、他のブロックタイプも混在する可能性があります。
-
content[0]が常に最終回答だと仮定せず、配列を走査してください。
-
stop_reason-
end_turn: 正常終了 -
max_tokens: 上限に達して切り詰め -
refusal: モデルによる拒否
-
-
usage-
input_tokensとoutput_tokensを確認できます。 - 課金や予算管理に使います。
- Sonnet 5では新しいトークナイザーにより、同じテキストでもSonnet 4.6よりトークン数が増える可能性があります。
-
Pythonで安全にテキストだけを取り出すなら、次のようにブロックを走査します。
texts = []
for block in message.content:
if block.type == "text":
texts.append(block.text)
print("\n".join(texts))
refusalをエラーとして扱わない
Sonnet 5は、リアルタイムのサイバーセキュリティ保護機能を備えたSonnetティアモデルです。リクエストが禁止または高リスクのサイバーセキュリティ関連トピックに触れる場合、モデルが拒否することがあります。
この場合、HTTPステータスは200のままで、stop_reasonに"refusal"が入ります。
{
"stop_reason": "refusal"
}
実装上は、HTTPエラーではなく通常レスポンスの一種として処理してください。リトライキューに入れるのではなく、UIやログで「モデルが拒否した」状態として扱うのが適切です。
適応的思考はデフォルトで有効
Sonnet 5では、適応的思考がデフォルトで有効です。
Sonnet 4.6では、thinkingフィールドを指定しなければ思考は行われませんでした。一方、Sonnet 5ではthinkingフィールドを省略しても、適応的思考が有効になります。
重要なのは、思考トークンもmax_tokensに含まれることです。
つまり、Sonnet 4.6で問題なく使えていたmax_tokensの値でも、Sonnet 5では可視テキストが途中で切れる可能性があります。
思考を無効化する
思考を使わず、出力だけを厳密に制御したい場合は、次のように指定します。
message = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
thinking={"type": "disabled"},
messages=[
{"role": "user", "content": "Return only the JSON, no reasoning."}
],
)
適応的思考の強度を指定する
適応的思考を使う場合は、手動でトークン予算を指定するのではなく、effortパラメータを使います。
effortは次の値をサポートします。
lowmediumhighxhigh
effortが高いほど、より深い思考とより多くのトークン消費につながります。
Anthropicの説明は適応的思考ページで確認できます。Sonnet 5では、従来のbudget_tokensではなく、{"type": "adaptive"}形式を使う点に注意してください。
400エラーを返す3つの変更点
Sonnet 4.6以前から移行する場合、以前は動いていたリクエストがSonnet 5では400を返すことがあります。特に次の3点を確認してください。
1. 手動の拡張思考は削除された
次の指定は400になります。
{
"thinking": {
"type": "enabled",
"budget_tokens": 4096
}
}
代わりに、適応的思考とeffortパラメータを使います。
2. サンプリングパラメータは指定しない
次のようなパラメータをデフォルト以外の値にすると400になります。
temperaturetop_ptop_k
削除するか、デフォルトのままにしてください。出力の方向性は、システムプロンプトやユーザープロンプトで制御します。
3. アシスタントメッセージの事前入力は使えない
アシスタント応答の先頭を事前入力する形式はサポートされません。Sonnet 5では400を返します。
出力形式を固定したい場合は、次の方法を使います。
- 構造化出力
output_config.format- システムプロンプトでの明示的な形式指定
Sonnet 4.6で動作していたその他の機能は、多くの場合Sonnet 5でも同じリクエスト・レスポンス形式で動作します。より詳細な移行については、Claude Sonnet 4.6 APIガイドも参考になります。
大量出力ではストリーミングを使う
Sonnet 5は最大128,000トークンの出力をサポートします。長い文章、仕様書生成、コード生成、適応的思考を含むタスクでは、通常の同期レスポンスを待つよりもストリーミングを使う方が実装しやすくなります。
ストリーミングを使うと、生成されたテキストを順次受け取れます。
with client.messages.stream(
model="claude-sonnet-5",
max_tokens=8000,
messages=[
{"role": "user", "content": "Draft an OpenAPI 3.1 spec for a bookstore checkout API."}
],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
ストリーミングイベントの形式はSonnet 4.6と同じです。既存のストリームハンドラを使っている場合、多くのケースでそのまま利用できます。
新しいトークナイザーでトークンを再計算する
Sonnet 5は新しいトークナイザーを使います。同じ入力テキストでも、Sonnet 4.6より約30%多く、つまり約1.3倍のトークンになる可能性があります。
これはAPIのリクエスト形式の変更ではありません。ただし、予算、課金、max_tokens設計には影響します。
確認すべきポイントは次のとおりです。
-
usage.input_tokensとusage.output_tokensが以前より増える可能性がある - Sonnet 4.6のトークン見積もりを再利用しない
- 1,000,000トークンのコンテキストに入るテキスト量が平均的に少なくなる
-
max_tokensが小さいと出力が切り詰められやすい - トークン単価が同じでも、同等テキストのリクエストコストが上がる可能性がある
送信前にcount-tokensエンドポイントを使うと、Sonnet 5での実際のトークン数を確認できます。
count = client.messages.count_tokens(
model="claude-sonnet-5",
messages=[
{"role": "user", "content": "Estimate the tokens for this prompt on Sonnet 5."}
],
)
print(count.input_tokens)
詳細はAnthropicのトークンカウントページを参照してください。
エラー、レート制限、費用を処理する
Sonnet 5 APIでは標準的なHTTPセマンティクスが適用されます。
| ステータス | 意味 | 対応 |
|---|---|---|
| 200 | 成功 |
stop_reasonを確認する |
| 400 | 不正なリクエスト | 非対応パラメータや移行漏れを確認する |
| 401 | APIキー不正または不足 |
x-api-keyを確認する |
| 429 | レート制限 |
retry-afterヘッダーを読んで待機する |
注意点として、refusalはHTTPエラーではありません。HTTP 200として返るため、エラーリトライ処理に流さないようにしてください。
料金は、導入期間として2026年8月31日までは以下です。
- 入力: 100万トークンあたり2ドル
- 出力: 100万トークンあたり10ドル
その後は以下に移行します。
- 入力: 100万トークンあたり3ドル
- 出力: 100万トークンあたり15ドル
トークン単価はSonnet 4.6と同じでも、新しいトークナイザーにより同等テキストでのトークン数が増える可能性があります。コスト見積もりでは、実ワークロードをcount-tokensで測定してください。
詳細な費用と制限については、Claude APIコストの内訳とClaude APIレート制限ガイドを参照してください。Sonnet 5ではPriority Tierは利用できません。
ApidogでSonnet 5 APIをテスト・整理する
curlで最初の動作確認ができたら、リクエストを再利用可能な形に整理します。Apidogを使うと、同じリクエストを環境変数、自動テスト、モック、コレクションとして管理できます。
1. HTTPリクエストを作成する
Apidogで新しいHTTPリクエストを作成します。
- Method:
POST - URL:
https://api.anthropic.com/v1/messages
ヘッダーを追加します。
anthropic-version: 2023-06-01
content-type: application/json
x-api-key: {{ANTHROPIC_API_KEY}}
ボディには次のようなJSONを設定します。
{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": "Write a haiku about API testing."
}
]
}
2. APIキーを環境変数に保存する
Apidogで環境を作成します。例:
Anthropic ProductionAnthropic Staging
環境変数としてANTHROPIC_API_KEYを追加し、x-api-keyヘッダーでは次のように参照します。
x-api-key: {{ANTHROPIC_API_KEY}}
これにより、キーをリクエスト本文から分離でき、環境切り替えも容易になります。
3. コレクションに保存する
Sonnet 5関連のリクエストを1つのコレクションにまとめます。
例:
- 通常のMessages呼び出し
- ストリーミング呼び出し
- ツール呼び出し
- トークンカウント
- エラーケース検証
チームで共有する場合、curlスニペットを個別にコピーするよりも、既知の正常なリクエストをコレクションとして共有する方が安全です。
4. 自動テストを追加する
リクエストにアサーションを追加し、レスポンスの変化を検出します。
最低限、次の項目を確認すると実用的です。
- ステータスコードが
200 -
modelがclaude-sonnet-5 -
stop_reasonが存在する -
stop_reasonがmax_tokensではない -
usage.output_tokensが0より大きい
特にstop_reason != "max_tokens"のチェックは、適応的思考や新トークナイザーの影響で出力が切り詰められる問題を早期に検出できます。
5. モックを使ってクライアント実装を進める
Apidogのスマートモックを使うと、Messages API形式のレスポンスを返すモックを作成できます。
これにより、実際のトークンを消費せずに次をテストできます。
- フロントエンド表示
- APIクライアントのパース処理
- エラー処理
-
stop_reason別の分岐 - ストリーミングパーサー
Postmanから移行する場合は、2026年におけるPostmanなしでのAPIテストも参考になります。CLIでCIに組み込みたい場合は、Apidog CLI完全ガイドを参照してください。
FAQ
Claude Sonnet 5のモデルIDは何ですか?
claude-sonnet-5です。日付サフィックスはありません。Messages APIのmodelフィールドで指定します。
Sonnet 4.6から移行する場合、多くのケースではモデルIDを変更したうえで、次の3点を確認します。
- 適応的思考がデフォルトで有効
- サンプリングパラメータが使えない
- 手動の思考予算が使えない
モデルの概要はClaude Sonnet 5とは何かを参照してください。
Sonnet 5でmax_tokensの出力が途切れるのはなぜですか?
適応的思考がデフォルトで有効であり、思考トークンもmax_tokensに含まれるためです。
対処方法は次のいずれかです。
-
max_tokensを増やす - 思考を使わない場合は
thinking: {"type": "disabled"}を設定する -
count-tokensで事前にトークン数を見積もる
新しいトークナイザーにより、同じテキストでも約30%多くのトークンになる可能性がある点にも注意してください。
Sonnet 4.6から移行するには何を変更すればよいですか?
主に次の3点です。
-
temperature、top_p、top_kのデフォルト以外の指定を削除する -
thinking: {type: "enabled", budget_tokens: N}を削除する - アシスタントメッセージの事前入力を削除する
これらはSonnet 5では400を返します。ストリーミングや基本的なレスポンス形式は同じです。
Opusも利用している場合は、Opus 4.8 APIガイドも参考になります。
refusalはエラーとして捕捉すべきですか?
いいえ。refusalはHTTPエラーではありません。
サイバーセキュリティ関連の拒否は、HTTP 200とstop_reason: "refusal"で返ります。失敗したリクエストとして再試行するのではなく、通常レスポンスの停止理由として処理してください。
Sonnet 5 APIの費用はいくらですか?
導入価格は2026年8月31日まで次のとおりです。
- 入力: 100万トークンあたり2ドル
- 出力: 100万トークンあたり10ドル
その後は次の価格になります。
- 入力: 100万トークンあたり3ドル
- 出力: 100万トークンあたり15ドル
トークン単価はSonnet 4.6と同じでも、新しいトークナイザーにより同等テキストでのトークン数が増える可能性があります。実際の費用は、トークンカウントで測定してください。

Top comments (0)