ナビゲーションにスキップ

Claude Messages

1 つの BeatAPI キーで、同じ Anthropic Messages エンドポイントから Claude Fable 5.1、Opus 5.5、Sonnet 5.5、Haiku 5.5 を呼び出せます。

  • 1 つのエンドポイント POST /v1/messages で、現行の Claude モデルすべてを呼び出せます。model を変えるだけで切り替わります。
  • テキストと画像の入力、テキスト出力、ストリーミング、ツール呼び出し、拡張思考、プロンプトキャッシュに対応しています。
  • Anthropic SDK で使えます。base URL を https://direct.beatapi.io(/v1 なし)にし、BeatAPI のキーを使ってください。
  • Claude モデルは Anthropic Messages のみで呼び出します。/v1/responses を呼ぶと 400 が返ります。

テキストリクエストの base URL には https://direct.beatapi.io を推奨します。Cloudflare の 100 秒制限を受けないため、長時間のノンストリーミングリクエストが途中で切れません。https://api.beatapi.io も使え、ネットワークから direct.beatapi.io に届かない場合の代替になります。キー、モデル、価格はどちらも同じです。画像・動画 API は https://api.beatapi.io のみを使います。

POST/v1/messages試してみる

このエンドポイントをテスト画面で開きます。BeatAPI の API キーを入力して送信してください。実際に呼び出され、ご自身の残高から課金されます。

モデル

次の ID のいずれかを model として送ります。それぞれ独立したモデルで、互いのエイリアスではありません。

モデル IDコンテキスト(トークン)最大出力(トークン)位置づけ入力、USD / 100 万トークン出力、USD / 100 万トークン備考
claude-opus-5-51,000,000128,000長時間のエージェントによるコーディングと知識業務向けの Claude Opus。Opus 5 より低価格$2.00$10.00長時間動くエージェント型のコーディングやナレッジワーク向け。
claude-sonnet-5-51,000,000128,000コーディング、推論、専門業務向けの Claude Sonnet 5.5。100 万トークンのコンテキストに対応$1.00$5.00日常的なコーディング、推論、専門的な業務向け。
claude-haiku-5-51,000,000128,000最速の Claude モデル。分類、抽出、ルーティングなど、大量処理や低遅延が求められる業務向け$0.05$0.25最速の Claude。分類、抽出、ルーティングなど大量処理向け。
claude-fable-5-11,000,000128,000高度な推論と長時間のエージェントタスク向けの Claude モデル$5.00$25.00長文の執筆や、文体と構成が最も重要になる仕事向け。
  • 価格は基本ティアで、割引適用後です。長文コンテキストのティア、キャッシュ入力価格、キャッシュ書き込み価格はこの表に含まれません。価格表を参照してください。
  • — はカタログが数値を公開していないことを示します。

このファミリーの旧 ID は引き続き使え、旧モデルにまとめています。

クイックスタート

サーバー側で anthropic パッケージをインストールし、キーは BEATAPI_API_KEY に置いて、ブラウザーのコードには入れないでください。以下はリクエスト例であり、実際のモデル出力の記録ではありません。

回答は content 内の text ブロックから読み取り、続けて stop_reason と usage を確認します。HTTP 200 だけでは回答がタスクを満たす証拠にならないため、内容はアプリケーション側で検証してください。テキストリクエストは直接結果を返すので、/v1/tasks をポーリングする必要はありません。

curl --request POST \
--url https://direct.beatapi.io/v1/messages \
--header "x-api-key: $BEATAPI_API_KEY" \
--header 'anthropic-version: 2023-06-01' \
--header 'Content-Type: application/json' \
--data '{
"model": "claude-sonnet-5-5",
"max_tokens": 1024,
"messages": [
{
"role": "user",
"content": "Design a resilient webhook retry strategy for a payments API."
}
]
}'

エンドポイントと認証

POST https://direct.beatapi.io/v1/messages

x-api-key string 必須

BeatAPI のキー。Authorization: Bearer <BEATAPI_API_KEY> も使えます。

anthropic-version ヘッダー(例:anthropic-version: 2023-06-01)を付けてください。キーは x-api-key、または Authorization: Bearer <key> で送ります。どちらでも動くので、既存の Anthropic クライアントは base URL を変えるだけで使えます。

Claude モデルは Anthropic Messages のみで呼び出します。/v1/responses を呼ぶと 400 が返ります。

リクエストパラメーター

標準の Anthropic Messages フィールドを受け付けます。リクエスト形式が互換であっても、すべてのベータ機能やサーバーツールに対応しているとは限りません。使うオプションは必ずテストしてください。

model string 必須

正確なモデル ID。

指定できる値:claude-fable-5-1, claude-opus-5-5, claude-sonnet-5-5, claude-haiku-5-5

  • まだ使える旧 ID(claude-opus-5、claude-sonnet-5、claude-haiku-4-5-20251001)は旧モデルにあります。
  • キーで GET /v1/models を呼ぶと、そのキーで有効なモデルを確認できます。

max_tokens integer 必須

生成するトークン数の上限。思考も含みます。

  • 必ず明示的に指定してください。省略または 0 の場合は既定の上限が適用され、その値は想定より小さいことがあります。
  • 受け付ける最大値は 1,073,741,823 で、これを超えると 400 bad_request です。上の表にあるモデルの最大出力以下にしてください。
  • max_tokens はリクエストに必要な残高の見積もりにも使われます。実際の出力が短くても、極端に大きな値は 402 insufficient_credits で拒否されることがあります。必要な分だけ指定してください。

messages object[] 必須

会話の内容で、古いメッセージから順に並べます。各メッセージは role(user または assistant)と content を持ちます。content は文字列、またはコンテンツブロックの配列です。

  • よく使うブロックの種類:text、image(base64 または URL)、tool_use(assistant メッセージ内)、tool_result(user メッセージ内)。
  • messages が空または欠けていると 400 bad_request になります。

例

[
{
"role": "user",
"content": [
{ "type": "text", "text": "What is in this image?" },
{ "type": "image", "source": { "type": "base64", "media_type": "image/png", "data": "<base64>" } }
]
}
]

system string | object[] 任意

システムプロンプト。文字列、または text ブロックの配列です。ブロックに cache_control を付けると、長く変わらない先頭部分をキャッシュできます。

例

[
{
"type": "text",
"text": "<long, stable instructions>",
"cache_control": { "type": "ephemeral" }
}
]

stream boolean 任意デフォルト: false

回答をサーバー送信イベントとして返します。下のストリーミングの節を参照してください。

デフォルト:false

stop_sequences string[] 任意

この文字列が出たら生成を止めます。このとき stop_reason は "stop_sequence" になります。

tools object[] 任意

モデルが呼び出せるツール。各ツールは name、description、input_schema(JSON Schema)を持ちます。モデルがツールを呼ぶと stop_reason は "tool_use" になります。ツールを実行し、次のメッセージの tool_result ブロックで結果を返してください。

例

[
{
"name": "get_weather",
"description": "Get the current weather for a city.",
"input_schema": {
"type": "object",
"properties": { "city": { "type": "string" } },
"required": ["city"]
}
}
]

tool_choice object 任意

tools を使うかどうか、どう使うかの指定。

指定できる値:{"type":"auto"}, {"type":"any"}, {"type":"tool","name":"..."}, {"type":"none"}

  • auto はモデルが判断し、any はいずれかのツールを必ず使い、tool は名前を指定したツールを必ず使い、none はツールの使用を禁止します。

例

{ "type": "auto" }
{ "type": "tool", "name": "get_weather" }

thinking object 任意

拡張思考。type でオンとオフを切り替えます。思考トークンは max_tokens に含まれ、出力トークンとして課金されます。

指定できる値:adaptive, enabled, disabled

  • thinking.type は上の値のいずれかです。enabled では thinking.budget_tokens(1,024 以上で max_tokens 未満の整数)も指定します。
  • thinking.display は summarized または omitted です。新しいモデルでは、summarized を指定しないと思考テキストが返らないことがあります。
  • 適応型思考の深さは output_config.effort で指定します。

モデルごとの注意

  • claude-fable-5-1:{"type":"adaptive"} を使い、深さは output_config.effort で指定します。budget_tokens は拒否されます。
  • claude-opus-5-5:{"type":"adaptive"} を使い、深さは output_config.effort で指定します。budget_tokens は拒否されます。
  • claude-sonnet-5-5:{"type":"adaptive"} を使い、深さは output_config.effort で指定します。budget_tokens は拒否されます。

例

{
"thinking": { "type": "adaptive" },
"output_config": { "effort": "high" }
}

output_config.effort string 任意

モデルがどれだけ推論するか。まず high から始め、自分のワークロードで 1 段階下げた場合と上げた場合を比べてください。

指定できる値:low, medium, high, xhigh, max

cache_control object 任意

プロンプトキャッシュ。system、messages、tools のブロックに付けると、そのブロックまでをキャッシュします。リクエストの最上位にも指定できます。ttl は 5m(既定)または 1h です。

指定できる値:{"type":"ephemeral"}

  • キャッシュ読み取り、5 分のキャッシュ書き込み、1 時間のキャッシュ書き込みは別々に計量されます。キャッシュされた先頭部分は、新規の入力ではなくキャッシュ読み取りとして課金されます。
  • ヒットの状況は usage.cache_read_input_tokens と usage.cache_creation_input_tokens で確認できます。

例

{ "type": "ephemeral" }
{ "type": "ephemeral", "ttl": "1h" }

ツール呼び出しのループ

stop_reason が tool_use のときは、返ってきた assistant メッセージをそのまま messages に追加し、ツールを実行して、結果を次の user メッセージの tool_result ブロックで送ります。同じ tools をもう一度送ってください。

{
"max_tokens": 1024,
"messages": [
{ "role": "user", "content": "What is the weather in Paris?" },
{
"role": "assistant",
"content": [
{ "type": "tool_use", "id": "toolu_example", "name": "get_weather", "input": { "city": "Paris" } }
]
},
{
"role": "user",
"content": [
{ "type": "tool_result", "tool_use_id": "toolu_example", "content": "18 C, light rain" }
]
}
]
}

レスポンス

ストリーミングなしの呼び出しは JSON オブジェクトを 1 つ返します。以下は省略した例です。

{
"id": "msg_example",
"type": "message",
"role": "assistant",
"model": "claude-sonnet-5-5",
"content": [
{
"type": "text",
"text": "Retry with exponential backoff and jitter, and make every handler idempotent."
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 19,
"output_tokens": 16
}
}

レスポンスのフィールド

フィールド型説明
idstringメッセージ ID。サポートや請求の照合のため、リクエスト ID と一緒に記録してください。
modelstring実際に回答したモデル。
content[].typestringtext、tool_use、思考テキストが返る場合は thinking。
content[].textstringtext ブロックの回答テキスト。
stop_reasonstringend_turn は回答が完結したこと、max_tokens は max_tokens に達したこと、ほかに stop_sequence、モデルがツールを呼んだ場合は tool_use。
usage.input_tokensintegerキャッシュから供給されなかった入力トークン数。
usage.output_tokensinteger出力トークン数。思考を含みます。
usage.cache_read_input_tokensintegerプロンプトキャッシュから読み取った入力トークン数。
usage.cache_creation_input_tokensintegerプロンプトキャッシュに書き込んだ入力トークン数。

ストリーミング

"stream": true を指定します。レスポンスは Anthropic 形式のサーバー送信イベントのストリームで、Anthropic SDK と互換です。

  • イベントは message_start、ping、content_block_start、content_block_delta、content_block_stop、message_delta、message_stop の順に届きます。
  • テキストは text_delta、ツールの入力は input_json_delta(断片をつないでから解析します)、思考テキストは thinking_delta で届きます。
  • stop_reason と最終的な出力トークン数は message_delta に入っています。
  • レスポンスは text/event-stream です。ストリーミングなしの場合は application/json です。モデルを呼ぶ前に起きた失敗は、ストリームイベントではなく、HTTP ステータス付きの通常の JSON エラーで返されます。
  • 明示的なタイムアウトを設定し、ストリーミングレスポンスを安全に再接続してください。
event: message_start
data: {"type":"message_start","message":{"id":"msg_example","type":"message","role":"assistant","model":"claude-sonnet-5-5","content":[],"stop_reason":null,"usage":{"input_tokens":19,"output_tokens":1}}}
event: ping
data: {"type":"ping"}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":"Retry"}}
event: content_block_delta
data: {"type":"content_block_delta","index":0,"delta":{"type":"text_delta","text":" with backoff"}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"output_tokens":16}}
event: message_stop
data: {"type":"message_stop"}

エラー

エラーまたは症状原因対処
400:messages または model がない、または max_tokens が大きすぎるmessages が空または欠けている、model が空、または max_tokens が 1,073,741,823 を超えています。両方のフィールドを送り、max_tokens を上限内にしてください。
400:/v1/responses を呼んだClaude モデルは OpenAI Responses では提供されません。POST /v1/messages を呼んでください。
400:thinking の設定に関するものモデルがその設定を受け付けません。例:適応型思考のモデルに budget_tokens を送った。上の thinking にあるモデル別の指定に従ってください。
402 insufficient_credits残高がリクエストの価格を下回っています。max_tokens が非常に大きいことが多い原因です。チャージするか、max_tokens を下げてください。
403 forbiddenアカウントが無料クレジットで、モデルが無料リストにない、またはモデルがキーのグループの範囲外です。チャージする、無料モデルを使う、またはグループがそのモデルに届くキーを使ってください。
404 not_foundモデル ID が存在しない、またはこのキーで有効になっていません。GET /v1/models で有効なモデルを確認してください。
429 rate_limit_exceededアカウントまたは無料モデルの上限に達しました。Retry-After だけ待ってから再試行してください。
200 だが stop_reason: "max_tokens" で、回答が短い、または空回答を書く前に max_tokens を使い切りました。思考に使われてしまうことがよくあります。max_tokens を上げるか、output_config.effort を下げてください。

HTTP エラー早見表

認証、ルーティング、レート制限、存在しないモデルの失敗はモデルを呼ぶ前に起き、BeatAPI のエンベロープ(error.code、error.message、retryable、request_id)で返ります。それ以外の失敗は Anthropic の形式 {"type": "error", "error": {"type", "message"}} のままで、コードは error.type、request id は message の末尾にあります。詳しくはエラーを参照してください。

HTTP ステータスエラーコード対応
400bad_request、content_policy_violationリクエストか入力を直してください。そのまま再送しないでください。
401missing_api_key、invalid_api_keyキーを確認してください。再試行しないでください。
402insufficient_creditsチャージするか、キーの上限を上げてください。max_tokens が非常に大きい場合も発生します。
403forbiddenモデルがキーのグループまたは IP 許可リストの範囲外、または無料クレジットでは呼べないモデルです。
404not_foundモデルが存在しません。GET /v1/models で有効なモデルを確認してください。
429rate_limit_exceededRetry-After または retry_after_seconds だけ待ち、バックオフして再試行してください。
500internal_error、temporary_errorバックオフして 1~2 回再試行してください。
503model_unavailable、upstream_timeout、temporary_errorバックオフして再試行するか、別のモデルを使ってください。

全エラーコード表と再試行ポリシーはエラーを参照してください。

注意事項

  • Claude モデルは Anthropic Messages のみで呼び出します。OpenAI Responses では提供されません。
  • 思考トークンは出力トークンとして課金され、max_tokens に含まれます。思考と回答の両方に足りる出力枠を確保してください。
  • キーは信頼できるサーバーだけに置き、レスポンスのリクエスト ID を記録し、再試行は 429、500、503 に限ってください。

認証

AuthorizationBearer

Send your API key as Authorization: Bearer <BEATAPI_API_KEY>.

リクエスト

This endpoint expects an object.
modelenum必須

正確なモデル ID。

まだ使える旧 ID(claude-opus-5、claude-sonnet-5、claude-haiku-4-5-20251001)は旧モデルにあります。

キーで GET /v1/models を呼ぶと、そのキーで有効なモデルを確認できます。

claude-fable-5-1, claude-opus-5-5, claude-sonnet-5-5, claude-haiku-5-5

許可された値:
max_tokensinteger必須

生成するトークン数の上限。思考も含みます。

必ず明示的に指定してください。省略または 0 の場合は既定の上限が適用され、その値は想定より小さいことがあります。

受け付ける最大値は 1,073,741,823 で、これを超えると 400 bad_request です。上の表にあるモデルの最大出力以下にしてください。

max_tokens はリクエストに必要な残高の見積もりにも使われます。実際の出力が短くても、極端に大きな値は 402 insufficient_credits で拒否されることがあります。必要な分だけ指定してください。

messageslist of objects必須

会話の内容で、古いメッセージから順に並べます。各メッセージは role(user または assistant)と content を持ちます。content は文字列、またはコンテンツブロックの配列です。

よく使うブロックの種類:text、image(base64 または URL)、tool_use(assistant メッセージ内)、tool_result(user メッセージ内)。

messages が空または欠けていると 400 bad_request になります。

systemstring or list of objectsオプション

システムプロンプト。文字列、または text ブロックの配列です。ブロックに cache_control を付けると、長く変わらない先頭部分をキャッシュできます。

streambooleanオプションデフォルト値 false

回答をサーバー送信イベントとして返します。下のストリーミングの節を参照してください。

stop_sequenceslist of stringsオプション

この文字列が出たら生成を止めます。このとき stop_reason は "stop_sequence" になります。

toolslist of objectsオプション

モデルが呼び出せるツール。各ツールは name、description、input_schema(JSON Schema)を持ちます。モデルがツールを呼ぶと stop_reason は "tool_use" になります。ツールを実行し、次のメッセージの tool_result ブロックで結果を返してください。

tool_choiceobjectオプション

tools を使うかどうか、どう使うかの指定。

auto はモデルが判断し、any はいずれかのツールを必ず使い、tool は名前を指定したツールを必ず使い、none はツールの使用を禁止します。

{"type":"auto"}, {"type":"any"}, {"type":"tool","name":"..."}, {"type":"none"}

thinkingobjectオプション

拡張思考。type でオンとオフを切り替えます。思考トークンは max_tokens に含まれ、出力トークンとして課金されます。

thinking.type は上の値のいずれかです。enabled では thinking.budget_tokens(1,024 以上で max_tokens 未満の整数)も指定します。

thinking.display は summarized または omitted です。新しいモデルでは、summarized を指定しないと思考テキストが返らないことがあります。

適応型思考の深さは output_config.effort で指定します。

claude-fable-5-1: {"type":"adaptive"} を使い、深さは output_config.effort で指定します。budget_tokens は拒否されます。

claude-opus-5-5: {"type":"adaptive"} を使い、深さは output_config.effort で指定します。budget_tokens は拒否されます。

claude-sonnet-5-5: {"type":"adaptive"} を使い、深さは output_config.effort で指定します。budget_tokens は拒否されます。

adaptive, enabled, disabled

output_configobjectオプション
cache_controlobjectオプション

プロンプトキャッシュ。system、messages、tools のブロックに付けると、そのブロックまでをキャッシュします。リクエストの最上位にも指定できます。ttl は 5m(既定)または 1h です。

キャッシュ読み取り、5 分のキャッシュ書き込み、1 時間のキャッシュ書き込みは別々に計量されます。キャッシュされた先頭部分は、新規の入力ではなくキャッシュ読み取りとして課金されます。

ヒットの状況は usage.cache_read_input_tokens と usage.cache_creation_input_tokens で確認できます。

{"type":"ephemeral"}

レスポンス

ストリーミングなしの呼び出しは JSON オブジェクトを 1 つ返します。以下は省略した例です。

idstringオプション

メッセージ ID。サポートや請求の照合のため、リクエスト ID と一緒に記録してください。

modelstringオプション

実際に回答したモデル。

contentlist of objectsオプション
stop_reasonstringオプション

end_turn は回答が完結したこと、max_tokens は max_tokens に達したこと、ほかに stop_sequence、モデルがツールを呼んだ場合は tool_use。

usageobjectオプション

エラー

400
Bad Request Error
401
Unauthorized Error
402
Payment Required Error
403
Forbidden Error
404
Not Found Error
429
Too Many Requests Error
500
Internal Server Error
503
Service Unavailable Error