> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.beatapi.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.beatapi.io/_mcp/server.

# Claude Haiku 4.5 API

> Claude Haiku 4.5 を正確なモデル ID で呼び出し、ネイティブ形式のレスポンスを取得する方法を説明します。

Claude Haiku 4.5 を呼び出すには `model: "claude-haiku-4-5-20251001"` を指定します。以下の例では Anthropic Messages を使って同期リクエストを送信します。

以下は実装例であり、実際のモデル出力を記録したものではありません。キーはサーバーの環境変数 `BEATAPI_API_KEY` に保存し、cURL の例では `<BEATAPI_API_KEY>` を自分のキーに置き換えてください。ブラウザー側のコードにキーを含めないでください。

## リクエストの送信

`POST https://api.beatapi.io/v1/messages`

サーバー側のプロジェクトに `@anthropic-ai/sdk` をインストールしてください。

```typescript
import Anthropic from "@anthropic-ai/sdk";

const apiKey = process.env.BEATAPI_API_KEY;
if (!apiKey) throw new Error("Set BEATAPI_API_KEY in your server environment.");

const client = new Anthropic({
  apiKey,
  baseURL: "https://api.beatapi.io",
});

const message = await client.messages.create({
  model: "claude-haiku-4-5-20251001",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Classify this support request as BILLING, TECHNICAL, or ACCOUNT. Return the category and a one-sentence reason. Request: I was charged twice for the same invoice." }],
});

if (message.stop_reason !== "end_turn") {
  throw new Error(`Handle the stop reason before accepting the result: ${message.stop_reason}`);
}
const text = message.content
  .filter((block) => block.type === "text")
  .map((block) => block.text)
  .join("\n");
if (!text.trim()) throw new Error("The response contains no text answer.");
console.log(text);
console.log({ id: message.id, model: message.model, usage: message.usage });
```

`max_tokens: 1024` はこの例で設定した出力予算であり、モデルの最大出力上限ではありません。SDK がエンドポイントのパスを付けるため、SDK のベース URL には `/v1` を含めません。

### cURL

```bash
curl --request POST \
  --url https://api.beatapi.io/v1/messages \
  --header 'Authorization: Bearer <BEATAPI_API_KEY>' \
  --header 'Content-Type: application/json' \
  --data '{
  "model": "claude-haiku-4-5-20251001",
  "max_tokens": 1024,
  "messages": [
    {
      "role": "user",
      "content": "Classify this support request as BILLING, TECHNICAL, or ACCOUNT. Return the category and a one-sentence reason. Request: I was charged twice for the same invoice."
    }
  ]
}'
```

## 結果の取得と検証

SDK は Messages 形式のレスポンスをそのまま返します。`type` が `text` のブロックからのみテキストを取得し、実際のレスポンスの `stop_reason` と `usage` を確認してください。この例では `end_turn` を受け入れます。`max_tokens` は回答が途中で切れた可能性がある状態、`tool_use` はアプリケーションによるツール処理が必要な状態として扱い、タスクの完了とみなさないでください。

HTTP 200 が返っても、回答がタスクの要件を満たしているとは限りません。アプリケーション側で内容を検証してください。これらのテキストリクエストは直接結果を返すため、`/v1/tasks` をポーリングする必要はありません。

`GET /v1/models` でアカウントが利用できるモデル ID を確認してください。この最小構成の例は、追加の推論設定、サンプリング、キャッシュ制御、ホスト型ツール設定への対応を示すものではありません。