仕組み
Markdownプログラムとモデルの間で、リクエストがどのように処理されるか。
完全ガイド
OpenAI、Anthropic、Googleへ直接送る場合と同じように、Ailoot APIへリクエストを送信します。Ailootがキーと残高を検証し、リクエストをモデルに渡し、同じ形式でレスポンスを返して、実際の使用量に基づき残高から差し引きます。
一つのキーで三つの形式
形式を決めるのはモデルではなく、リクエストのパスです。同じClaudeモデルをOpenAI Chat、OpenAI Responses、Anthropic Messagesで呼び出せます。レスポンスは、呼び出したパスの形式で返されます。
| 形式 | パス | 利用するクライアント |
|---|---|---|
| OpenAI Chat Completions | /v1/chat/completions | OpenAI SDK、多くのチャットやエディター、n8n、LangChain |
| OpenAI Responses | /v1/responses | Codex CLI、OpenAI Agents SDK、新しいSDKバージョン |
| Anthropic Messages | /v1/messages | Claude Code, Anthropic SDK, Zed, Cline |
| Gemini | /v1beta/models/{model}:generateContent | Gemini CLI, Google GenAI SDK |
料金処理:仮確保と一度の差し引き
- 新しいテキストリクエストの送信前に、Ailootは入力と標準的なレスポンスの見積額を、指定した上限(
max_tokens)と使用するモデルの条件を考慮して仮確保します。計算した仮確保額が空き残高やキーの上限に収まらない場合、出力上限を引き下げられるのは、その上限を実際に守るモデルとメソッドだけです。256トークンと定められた最低出力量のいずれも下回ることはありません。出力が画像、動画、音声の場合は、結果の料金全額の仮確保を維持します。 - レスポンス後、実際の使用量に基づき一度だけ残高から差し引きます。仮確保の未使用分は、すぐに残高へ戻ります。
- レスポンスの料金が仮確保額を超えた場合、差額は空き残高から差し引かれます。残高がマイナスになることはありません。
- 最低限の仮確保に必要な残高もない場合、リクエストは送信されません。分かりやすい402エラーが返り、料金は差し引かれません。
- 結果を得られなかったエラーは課金されません。
詳細と計算例の参照先:仮確保と残高の差し引き。
Request ID付きのエラー
各レスポンスには、リクエストの識別子が付与されます。ヘッダー X-Request-IDとエラーテキストに記載されます。エラーは、呼び出した形式のJSONで返されるため、SDKが正しく認識できます。問題が発生した場合は、Request IDを次の窓口へお送りください:サポート 。これにより、一分でリクエストを見つけられます。
{
"code": "API_KEY_REQUIRED",
"error": {
"code": "invalid_api_key",
"message": "No API key was sent with the request. Nothing was charged. Please check that the full key is sent in the Authorization header as \"Bearer <key>\". Request ID: 3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6.",
"param": null,
"reason": "invalid_api_key",
"request_id": "3b28d3de-5b02-4d07-9f3c-4b9a7d0e68d6",
"type": "invalid_request_error"
},
"message": "No API key was sent with the request. Nothing was charged. …"
}ストリームとタイムアウト
ストリーミングレスポンス(stream: true)はServer-Sent Eventsとして届きます。Ailootは、課金対象のテキストレスポンスを料金計算後に返します。したがって、 stream: true を指定すると形式はSSEのままですが、テキストは単語ごとではなく、モデルの生成終了後に一つのブロックとして届きます。準備におよそ15秒を超える場合、Chat Completions、Responses、Messagesのストリームでは、まず制御用の行 : ping がおよそ10秒ごとに届き、続いて : ailoot-charged-usd … に差し引き額が示され、データが届きます。SDKはこれらの行を読み飛ばします。
Gemini形式には制御用の行がありません。レスポンス :streamGenerateContent は、料金計算後に全体が届きます。推論モデルでは、クライアントのタイムアウトに余裕を持たせてください。数分かかることは正常です。
レスポンスヘッダー
X-Request-ID は、すべてのレスポンスに含まれます。その他のヘッダーは、課金対象のテキストレスポンスにAilootが追加します:
| ヘッダー | 内容 |
|---|---|
X-Request-ID | リクエストの識別子。サポートが確認に使用します。 |
X-Ailoot-Charged-USD | このリクエストで差し引かれた金額(ドル) |
X-Ailoot-Output-Tokens | 支払い対象となった出力トークン数 |
X-Ailoot-Max-Tokens-Capped | 全額の仮確保に残高が足りなかったため、引き下げた後の出力上限 |
X-Ailoot-Notice-Code, X-Ailoot-Notice | 出力長の上限でレスポンスが停止した場合の説明 |
制御用の行でストリームがすでに始まっている場合、これらの情報はヘッダーではなく、データの前のコメント行として届きます。
プロンプトキャッシュ
キャッシュに対応するモデルでは、長いプレフィックス(システム指示、文書)を再送すると料金が下がる場合があります。キャッシュの読み取りと書き込みの料金が記載されるモデルカードの参照先:カタログ。キャッシュにヒットするかどうかはモデル開発元が決めるため、Ailootは保証しません。