ドキュメントを検索...

入力してドキュメントを検索

プラットフォームガイド

プラットフォーム API

カタログ、価格、残高、利用状況をコードから読み取る。

プロンプトの送信以外のすべてです。どのモデルが存在するか、各プロバイダーの料金はいくらか、これまでいくら使ったか、どのキーを保有しているか。いずれも補完リクエストを送るのと同じ api ホストで JSON を返します。

カタログと価格のエンドポイントは公開されており、認証情報は一切不要です。自分のアカウントに関わるものには認証情報が必要で、その種類は 2 つあります。

両者は交換できません。API キーで残高は読み取れず、アクセストークンで補完リクエストは送れません。

認証情報形式使える範囲
API キーsk-...推論、モデル一覧、およびそのキー自身の利用カウンター。
アクセストークン29 文字から 32 文字、プレフィックスなし自分のアカウント:残高、キー管理、利用ログ。

どちらも同じヘッダーで送ります。Authorization: Bearer に続けて値を置きます。それ以外は読み取りません。古い例では New-Api-User ヘッダーを付けていますが、これは無視され、cookie によるフォールバックもありません。

エンドポイントが認証情報なしでも応答する場合でも、このヘッダーを送ってください。認証情報を持たないアカウント系ルートへのリクエストは、当方に届く前にチャレンジされることがあり、チャレンジは JSON ではなく HTML を返します。

まず設定を開き、セキュリティの項目にある API アクセスから生成します。表示されるのは一度だけです。サインイン中にしか作成できないため、スクリプトが自分で発行することはできません。

アクセストークンは同時に 1 つしか保有できません。新しく生成すると古いものは黙って無効になり、それを使い続けているものはすべて動かなくなります。

パスワードと同じように扱ってください。お金を使い、キーを作成し、履歴を読み取れます。スクリプトで不要になったら、同じ画面から失効させてください。

公開リクエスト 1 回ですべてのモデルが返り、価格は 100 万トークンあたりのドル額に換算済みです。キーも登録も不要です。

bash
curl https://api.unorouter.com/api/pricing/catalog
json
{
  "counts": { "models": 239, "free": 134, "paid": 105, "vendors": 50 },
  "first_free_model": "glm-5.3:free",
  "vendors": [{ "vendor_id": 4, "vendor_name": "Zhipu", "icon": "Zhipu.Color" }],
  "models": [
    {
      "model_name": "glm-5.3",
      "vendor": "Zhipu",
      "type": "text",
      "is_free": false,
      "online": true,
      "input_price": 0.05103,
      "output_price": 0.160382187,
      "original_input_price": 1.26,
      "original_output_price": 3.960054,
      "tags": "Text,Reasoning,Tools,Cache",
      "supported_endpoint_types": ["openai", "anthropic"],
      "uptime_24h": 99.965,
      "success_rate": 95,
      "avg_latency_ms": 11062
    }
  ]
}

input_price と output_price は、そのモデルを現在提供している中で最も安いプロバイダーで、今日実際に支払う金額です。original_input_price と original_output_price はベンダー自身の定価なので、両者の差が割引分になります。is_free は課金されないモデルを示し、online は今この時点で稼働中のプロバイダーがあるモデルを示します。

小型の近縁が 2 つあります。/api/pricing/counts は合計値だけを返し、ポーリングできるほど軽量です。/api/pricing/vendors はベンダー一覧を返します。古い /api/pricing エンドポイントはドルではなく生の比率を返し、サイズは数倍になります。

ほとんどのモデルは複数のプロバイダーが異なる料金で提供しています。モデルを 1 つ指定すると、そのすべてを確認できます。

bash
curl "https://api.unorouter.com/api/pricing/catalog/model?model=glm-5.3"
json
{
  "model_name": "glm-5.3",
  "model_ratio": 0.63,
  "completion_ratio": 3.1429,
  "cache_ratio": 0.1857,
  "input_price": 0.05103,
  "output_price": 0.160382187,
  "grid_min_ratio": 0.0405,
  "auto_chain": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3", "a7-4069-glm-5.3"],
  "group_ratio": {
    "a7-bbgt-2846-glm-5.3": 0.0405,
    "a7-kkl-3731-glm-5.3": 0.0911,
    "a7-4069-glm-5.3": 0.1214
  },
  "enable_groups": ["a7-bbgt-2846-glm-5.3", "a7-kkl-3731-glm-5.3"]
}

auto_chain はルーティングが試す順序で、安いものが先に来ます。group_ratio は各プロバイダーの倍率で、価格はそこから決まります:

text
input  $/1M = model_ratio * 2 * group_ratio
output $/1M = input * completion_ratio
cached $/1M = input * cache_ratio

glm-5.3 on a7-bbgt-2846: 0.63 * 2 * 0.0405 = $0.05103 / 1M in
                          0.05103 * 3.1429  = $0.16038 / 1M out

これらのグループ名は、キーに紐づけるグループ名と同じものです。詳しくは グループのピン留め

OpenAI 互換の一覧は、接続を押したときにほとんどのクライアントが呼び出すものです。API キーが必要です。

bash
curl https://api.unorouter.com/v1/models \
  -H "Authorization: Bearer $UNOROUTER_API_KEY"

そのキーが実際に使えるものだけを返すため、無料枠のキーでは入金済みのキーより見えるモデルが少なくなります。各項目には context_length と max_output_tokens も含まれます。これは本家 OpenAI では提供されません。

パスは /v1/models です。/v1 を省くと API ではなく Web ページに到達し、クライアントは予期しない doctype に関する JSON パースエラーとして報告します。

1 回の呼び出しで、使える残額を含むアカウント情報が返ります。

bash
curl https://api.unorouter.com/api/user/self \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"
json
{
  "success": true,
  "message": "",
  "data": {
    "id": 12345,
    "username": "you",
    "group": "default",
    "quota": 265000,
    "used_quota": 4231900,
    "request_count": 1884,
    "aff_code": "ABC123"
  }
}

金額の単位はドルではなくクォータです。500,000 単位が 1 米ドルなので、上の残高は 0.53 米ドルです。金額として表示するには 500,000 で割ってください。

quota はこれから使える分です。used_quota と request_count は増える一方の累計値なので、used_quota は何かと残高との差ではありません。

キーを一覧し、id を指定して 1 つの値を表示します。

bash
curl "https://api.unorouter.com/api/token/?p=1&page_size=20" \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"

curl -X POST https://api.unorouter.com/api/token/42/key \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN"

一覧ではすべてのキーの値がマスクされます。そのため値の表示は別の呼び出しになります。この呼び出しにはレート制限があり、監査ログに記録されます。

キーの作成では success は返りますが、キー自体は返りません。まず作成し、一覧から id を調べ、それから実際の値を表示します。更新では更新後のオブジェクトが返りますが、オブジェクト全体を送ってください。省略しても保持されるのは cross_group_retry、group_mapping、auto_groups だけで、それ以外の省略したフィールドは空で書き戻されます。

自分のリクエスト履歴はページングとフィルタリングに対応しています。

bash
curl -G https://api.unorouter.com/api/log/self \
  -H "Authorization: Bearer $UNOROUTER_ACCESS_TOKEN" \
  -d p=1 \
  -d page_size=100 \
  -d type=2 \
  -d start_timestamp=1789344000 \
  -d model_name=glm-5.3
パラメーター意味
type1 チャージ、2 消費、3 管理、5 エラー、6 返金、7 ログイン。省略するとすべてが対象になります。
start_timestamp, end_timestampUnix 秒。2 つの間隔は 10 年を超えられません。
model_name, token_name, group特定のモデル、特定のキー、特定のプロバイダーグループに絞り込みます。
request_id, upstream_request_id当方の id またはプロバイダーの id で 1 件のリクエストを探します。

ページングには p と page_size を追加します。ページサイズの上限は 100 です。同系統のエンドポイント /api/log/self/stat は、同じ絞り込み条件の合計値だけを返します。支出、毎分のリクエスト数、毎分のトークン数です。

アクセストークンなしで 1 つのキーの残高を読み取るには、そのキー自体で認証します:

bash
curl https://api.unorouter.com/api/usage/token/ \
  -H "Authorization: Bearer $UNOROUTER_API_KEY"
json
{
  "object": "token_usage",
  "name": "SillyTavern",
  "total_granted": 500000,
  "total_used": 231900,
  "total_available": 268100,
  "unlimited_quota": false,
  "model_limits_enabled": false,
  "expires_at": 0
}

アカウント系のエンドポイントはペイロードを 1 段ラップします。ページング対応のものは 2 段です。

json
{ "success": true, "message": "", "data": { ... } }

{ "success": true, "message": "", "data": {
    "page": 1, "page_size": 20, "total": 137, "items": [ ... ]
} }

公開カタログのエンドポイントは例外で、ラッパーなしでオブジェクトをそのまま返します。

ほとんどの失敗でも HTTP 200 が返り、success が false になって理由を示すメッセージが付きます。ステータスコードではなく、このフィールドを確認してください。

認証だけは例外で、実際のステータスを返します。認証情報が不正なら 401 と AUTH_UNAUTHORIZED、期限切れなら AUTH_TOKEN_EXPIRED、ログアウト後は AUTH_SESSION_REVOKED、そのルートを呼び出す権限がアカウントにない場合は 403 と AUTH_INSUFFICIENT_PRIVILEGE です。