ドキュメント

ドキュメント

Messages API

Claudeファミリー向けのネイティブAnthropic Messages APIです。Anthropic本来のリクエスト形式を送信してください。cache_control、tools、extended thinkingは翻訳せず、そのまま渡されます。

エンドポイント:POST /v1/messages。リクエストとレスポンスはAnthropicのMessages APIと完全に一致するため、Anthropic SDKや同APIに対応するツールは、ベースURLとキーを変更するだけでKunavoを利用できます。

どのエンドポイントを使えばよいですか?

KunavoではClaudeファミリーを2通りの方法で利用できます。料金は同じです。コードがすでに使っているリクエスト形式に合わせて選んでください。

エンドポイント形式次の場合に使用
/v1/chat/completionsOpenAIチャットすでにOpenAI SDKを使っている場合、またはClaudeとGPTで1つのコードパスを共有したい場合。
/v1/messagesAnthropic MessagesAnthropic SDK / Claude Codeを使っている場合、または変換レイヤーを介さずネイティブのcache_control、tools、thinkingを使いたい場合。

認証

ベースURLをhttps://api.kunavo.comに設定してください。Anthropic SDKが/v1/messagesを自動的に追加します。Kunavoキー(sk-kn-...)をAPIキーとして渡してください。このエンドポイントは、x-api-keyヘッダー(Anthropic SDKのデフォルト)またはAuthorization: Bearerのどちらでも受け付けます。

from anthropic import Anthropic

client = Anthropic(
    api_key="sk-kn-...",                  # your Kunavo key
    base_url="https://api.kunavo.com",    # SDK appends /v1/messages
)

msg = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    system="You are a senior staff engineer.",
    messages=[
        {"role": "user", "content": "Pros and cons of event sourcing?"},
    ],
)
print(msg.content[0].text)

プロンプトキャッシュ

ネイティブエンドポイントを使う主な理由はこれです。任意のsystemブロック、メッセージコンテンツブロック、またはツール定義にcache_controlブレークポイントを付けます。マークされたプレフィックスは最初に一度キャッシュへ書き込まれ、同じプレフィックスを共有する後続の呼び出しで再利用されます。

キャッシュ自体にこのエンドポイントは必要ありません。/v1/chat/completionsと/v1/responsesでは、長いプロンプトに対してKunavoがClaudeモデルのブレークポイントを自ら設定します。このエンドポイントが違うのは、ブレークポイントを一切追加しない点です。リクエスト本文は送信したとおりに渡されるため、本文内のブレークポイントはすべて自分で設定したものです。

# Mark a large, stable prefix with cache_control. The first call writes that
# span to cache at 1.25× the input token price; later calls that reuse it read
# it back at ~10%.
msg = client.messages.create(
    model="claude-opus-4-7",
    max_tokens=1024,
    system=[
        {
            "type": "text",
            "text": LONG_STYLE_GUIDE,            # tens of thousands of tokens
            "cache_control": {"type": "ephemeral"},
        },
    ],
    messages=[{"role": "user", "content": "Review this PR against the guide."}],
)
u = msg.usage
print(u.cache_creation_input_tokens, u.cache_read_input_tokens)

KunavoでのClaudeファミリーの料金:

  • cache_read_input_tokens — キャッシュから提供され、入力料金の0.10×で請求されます(90%割引);Claude Fable 5.1では0.025×、Claude Opus 5.5では0.05×。
  • cache_creation_input_tokens — キャッシュに書き込まれ、入力料金の1.25倍で請求されます。Kunavoでは、1時間TTLの書き込みもAnthropicの2倍より低い1.25倍で請求します。
Kunavoはキャッシュを自動的に維持します。同じプロンプトプレフィックスを共有するリクエストは、ユーザー側の設定なしで同じ上流アカウントにルーティングされます。

ストリーミング

stream: trueを設定するか、SDKのstream()ヘルパーを使ってください。KunavoはAnthropicのネイティブイベントストリーム(message_start、content_block_delta、message_delta、message_stop)をそのまま転送します。

with client.messages.stream(
    model="claude-sonnet-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Explain CRDTs in one paragraph."}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)

画像

画像はbase64ソースまたはurlソースとして送信してください。urlソースは、リクエスト本文のうちKunavoが書き換える唯一の部分です。Kunavoがhttps画像をダウンロードするか、data: URIを展開してbase64として転送します。上流はurlソースを無視し、画像が送信されなかったかのように応答するためです。tool_result内の画像も同様に処理されます。上限は1リクエストあたり16枚、画像あたり5 MB、合計20 MBです。取得できない画像がある場合はスキップせず、エラーを返します。

使用量オブジェクト

すべてのレスポンス(およびストリーミングのmessage_delta / message_startイベント)には、ネイティブAnthropicのusageオブジェクトが含まれます。

フィールド意味
input_tokens新規(キャッシュされていない)入力トークン。
cache_read_input_tokensキャッシュから提供されたトークン。入力料金の0.10×で請求されます(Claude Fable 5.1では0.025×、Claude Opus 5.5では0.05×)。
cache_creation_input_tokens今回の呼び出しでキャッシュに書き込まれたトークン(入力料金の1.25倍で請求)。
output_tokensextended thinkingを含む出力トークン。

サーバーツール

Anthropicのサーバーツール(web_search、web_fetch、code_execution)は、通常のツール定義としてそのまま渡されます。会話に追加される内容(検索結果、取得したページ、プログラム出力)はusageにトークンとして返され、上記の料金で請求されます。

ウェブ検索は、これらのトークン料金に加えて検索ごとに課金されます。Anthropicの料金は1,000回あたり$10で、Kunavoでは各モデル独自の割引率が適用されます。件数はレスポンス内のusage.server_tool_use.web_search_requests、またはストリームの最後のmessage_deltaに表示されます。max_uses_exceededなど、エラーを返す検索はカウントされません。ウェブ取得とコード実行は、トークン料金以外に費用はかかりません。

ウェブ検索1,000回あたりモデル
$7.00claude-fable-5-1, claude-fable-5, claude-opus-5-5, claude-opus-5, claude-opus-4-8, claude-opus-4-7, claude-opus-4-6, claude-sonnet-5, claude-sonnet-4-6, claude-haiku-4-5

対応モデル

有効なClaudeモデルはどれも/v1/messagesを受け付けます。Kunavoのスラッグをmodelとして送信してください。

  • claude-fable-5, claude-sonnet-5
  • claude-opus-5, claude-opus-4-7, claude-opus-4-6
  • claude-sonnet-4-6, claude-haiku-4-5

GPTモデルはここでは利用できません。/v1/chat/completions経由で呼び出してください。

HTTP の直接利用

SDKは不要です。エンドポイントは通常のJSON POSTです。

curl https://api.kunavo.com/v1/messages \
  -H "x-api-key: sk-kn-..." \
  -H "content-type: application/json" \
  -d '{
    "model": "claude-sonnet-5",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Hello, Claude"}]
  }'

次に確認する項目