Asale

API の概要

ゲートウェイは 1 つ、互換方言は 3 つ。OpenAI・Anthropic・Gemini のクライアントを Asale に向け、base URL とキーを変えるだけで、残りのコードはそのままです。

Asale のゲートウェイは 3 種類のワイヤ形式で応答します。いま使っているクライアントが話す形式をそのまま使えます——SDK もリクエストボディもストリーム処理もそのまま、変えるのは 2 行だけ:base URL とキーです。

このページの内容は 3 方言に共通です。エンドポイントと実行可能なサンプルは各ページにあります:

Base URL

各ベンダーのクライアントが後ろに付け足すパスが違うため、base URL を切る深さも方言ごとに違います。手元の SDK に対応する行を使ってください。

方言Base URL実際に呼ばれるエンドポイント
OpenAIhttps://gw.asale.ai/v1POST /v1/chat/completions
Anthropichttps://gw.asale.aiPOST /v1/messages
Geminihttps://gw.asale.aiPOST /v1beta/models/{model}:generateContent

gw.asale.ai は推論ゲートウェイです。api.asale.ai はコンソール API(セッション・ウォレット・マーケット情報)で、sk-asale- キーは受け付けません。推論リクエストを送っても 404 が返ります。

認証

方言ごとに 1 つずつ、計 3 つのヘッダー。各ベンダーの SDK が手を加えずに認証できるようにするためです。どのヘッダーもどのエンドポイントでも有効です。

Authorization: Bearer sk-asale-...
x-api-key: sk-asale-...
x-goog-api-key: sk-asale-...

キーは API キー画面で管理します。登録時に 1 本自動発行され、追加・命名・有効期限の設定・削除せずに無効化ができ、控えを失くしても読み直せます。

アカウントごとに 1 本がデフォルトです。これはデスクトップアプリが購入時に各 AI ツールへ渡すキーで、自分で書いたコードからのリクエストには関係ありません——そちらは実際に送ったキーで認証されます。

モデル

モデル名はプラットフォームのもので、特定ベンダーの型番一覧ではありません。何がマッチできるかはゲートウェイに直接聞けます:

curl https://gw.asale.ai/v1/models -H "Authorization: Bearer $ASALE_API_KEY"
{
  "object": "list",
  "data": [
    { "id": "claude-sonnet-4-5", "object": "model", "owned_by": "anthropic", "context_length": 200000 }
  ]
}

カタログにはあるが今この瞬間に売り手がいないモデルは、404 ではなく 503 no_supply を返します——名前は正しく、供給がないだけです。流動性はマーケットで確認できます。

ストリーミング

Server-Sent Events を、各方言のイベント形式のまま返します(再フレーミングなし)。OpenAI と Anthropic は stream: true、Gemini は :streamGenerateContent です。既存のストリームパーサーはそのまま動きます。

1 回のリクエストの料金

リクエスト送信前に、宣言された max_tokens とそのモデルの出力価格から見積額を確保します。応答完了後は実使用量で計算し直し、差額はただちに利用可能残高へ戻ります。

エラーになったとき、使用量がゼロで返ったとき、途中で切断したときは課金されません。計測の詳細はトークン計測を参照してください。

エラー

失敗はすべて同じ形の JSON で、対応する HTTP ステータスとともに返ります:

{
  "error": {
    "message": "insufficient balance",
    "code": "payment_required",
    "key": "errors.wallet.insufficientBalance"
  }
}

分岐は必ず code で行ってください。message は翻訳・書き換えの対象です。

ステータスcode対処
401unauthorizedキーが無い・形式が違う・存在しない。ヘッダーとキーを確認。
403forbiddenキーが無効化されているか、アカウントが取引を制限されている。
402payment_requiredウォレットに入金。
429rate_limitedバックオフして再試行。待ち時間は Retry-After
503no_supplyそのモデルを今売っている人がいない。時間をおくか別のモデルへ。
502upstream処理した上流が失敗。再試行して問題ありません。

期限切れのキーは 401errors.apiKey.expired、無効化されたキーは 403errors.apiKey.disabled を返します。対処が違うので、ステータスも分けてあります。

レート制限

キーごとに 1 分あたりのリクエスト数とトークン数の上限があります。どちらかを超えると Retry-After 付きの 429 が返ります。上限はキー単位なので、処理を 2 本のキーに分ければ枠も分かれます。