ドキュメント
はじめに

仕組み

Markdown

プログラムとモデルの間で、リクエストがどのように処理されるか。

完全ガイド

OpenAI、Anthropic、Googleへ直接送る場合と同じように、Ailoot APIへリクエストを送信します。Ailootがキーと残高を検証し、リクエストをモデルに渡し、同じ形式でレスポンスを返して、実際の使用量に基づき残高から差し引きます。

01リクエストクライアントが、キーsk-…を使ってapi.ailoot.aiへリクエストを送信
02検証と仮確保キー、制限値、残高を検証。レスポンスを待つ間、金額を仮確保します。
03モデルモデルのレスポンスが、指定した形式で返されます。
04残高の差し引き実際のトークン数に基づき一度だけ残高から差し引き、仮確保の未使用分を解放します。

一つのキーで三つの形式

形式を決めるのはモデルではなく、リクエストのパスです。同じClaudeモデルをOpenAI Chat、OpenAI Responses、Anthropic Messagesで呼び出せます。レスポンスは、呼び出したパスの形式で返されます。

形式パス利用するクライアント
OpenAI Chat Completions/v1/chat/completionsOpenAI SDK、多くのチャットやエディター、n8n、LangChain
OpenAI Responses/v1/responsesCodex CLI、OpenAI Agents SDK、新しいSDKバージョン
Anthropic Messages/v1/messagesClaude Code, Anthropic SDK, Zed, Cline
Gemini/v1beta/models/{model}:generateContentGemini CLI, Google GenAI SDK

料金処理:仮確保と一度の差し引き

  • 新しいテキストリクエストの送信前に、Ailootは入力と標準的なレスポンスの見積額を、指定した上限(max_tokens)と使用するモデルの条件を考慮して仮確保します。計算した仮確保額が空き残高やキーの上限に収まらない場合、出力上限を引き下げられるのは、その上限を実際に守るモデルとメソッドだけです。256トークンと定められた最低出力量のいずれも下回ることはありません。出力が画像、動画、音声の場合は、結果の料金全額の仮確保を維持します。
  • レスポンス後、実際の使用量に基づき一度だけ残高から差し引きます。仮確保の未使用分は、すぐに残高へ戻ります。
  • レスポンスの料金が仮確保額を超えた場合、差額は空き残高から差し引かれます。残高がマイナスになることはありません。
  • 最低限の仮確保に必要な残高もない場合、リクエストは送信されません。分かりやすい402エラーが返り、料金は差し引かれません。
  • 結果を得られなかったエラーは課金されません。

詳細と計算例の参照先:仮確保と残高の差し引き。

Request ID付きのエラー

各レスポンスには、リクエストの識別子が付与されます。ヘッダー X-Request-IDとエラーテキストに記載されます。エラーは、呼び出した形式のJSONで返されるため、SDKが正しく認識できます。問題が発生した場合は、Request IDを次の窓口へお送りください:サポート 。これにより、一分でリクエストを見つけられます。

401 Unauthorized
{
  "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は保証しません。

ご不明な点はありますか?Request IDと状況の説明をお送りください。調査をお手伝いします。サポートに問い合わせる