GET /v1/credits でコードから残高を確認する
リクエストの料金はプリペイド残高から支払われ、残高でまかなえないリクエストは 402 insufficient_credits で拒否されます。その前に残高不足を知りたい場合は、GET /v1/credits で残高を取得できます。他の呼び出しと同じ API キーで認証します。
呼び出し
curl https://api.hyperouter.app/v1/credits \
-H "Authorization: Bearer $HYPEROUTER_API_KEY"
レスポンスには 3 つのフィールドがあり、いずれも 10 進数の USD 文字列です。
| Field | 意味 |
|---|---|
balance_usd | 残高です。 |
held_usd | 未完了のリクエストが確保している額です。 |
available_usd | 利用可能な残りの額です。 |
Hyperouter は、リクエストの実行前にかかりうる最大額を確保し、完了後に実際に使われた分を課金して、残りを解放します(課金と制限)。held_usd があるのはそのためで、リクエストの処理中は、残高の一部を使えません。available_usd は残高から確保額を引いた値で、注目すべき数値です。
アカウントの残高です
残高はキーではなくアカウントに属するため、アカウントのどのキーからも同じ数値が見えます。独自のクレジット上限を持つキーは、available_usd が大きくても、その上限で 402 insufficient_credits により拒否されることがあります。
フィールドは浮動小数点数ではなく文字列です。Hyperouter はお金を正確に数えており、文字列にすることで、解析方法をお客様が決めるまで正確さが保たれます。Python では decimal.Decimal でそのまま読み込めます。TypeScript では、数桁の精度が重要でなければ Number(...) に変換してから比較してください。アラートのしきい値であれば問題になりません。
キャッシュ
レスポンスには Cache-Control: private, no-store が付くため、このヘッダーに従うプロキシやクライアントは保持しません。毎回、最新の値を取得してください。
アラートであれば、1 分に 1 回の確認で十分です。残高が動くのは、リクエストが精算されたときと、スタッフがチャージを反映したときだけで、どちらもそれより短い間隔は必要ありません。
残高不足のアラート
cron や、すでにお使いのスケジューラーから実行できる小さなスクリプトです。
import os
import sys
from decimal import Decimal
import requests
THRESHOLD = Decimal("5.00") # USD; pick your own
res = requests.get(
"https://api.hyperouter.app/v1/credits",
headers={"Authorization": f"Bearer {os.environ['HYPEROUTER_API_KEY']}"},
timeout=10,
)
res.raise_for_status()
credits = res.json()
available = Decimal(credits["available_usd"])
if available < THRESHOLD:
print(f"Hyperouter balance low: {available} USD available", file=sys.stderr)
sys.exit(1)
ゼロ以外の終了コードは、ほとんどのスケジューラーがすでにメッセージに変換できます。同じ確認を TypeScript で書くと次のとおりです。
const res = await fetch("https://api.hyperouter.app/v1/credits", {
headers: { Authorization: `Bearer ${process.env.HYPEROUTER_API_KEY}` },
});
if (!res.ok) throw new Error(`credits: HTTP ${res.status}`);
const { available_usd } = await res.json();
if (Number(available_usd) < 5) {
console.error(`Hyperouter balance low: ${available_usd} USD available`);
process.exitCode = 1;
}
呼び出し自体が 401 で失敗した場合は、キーがない、形式が正しくない、不明、または無効のいずれかです。認証エラーに各ケースを掲載しています。
チャージ
現時点ではチャージは手動です。ダッシュボードで、金額、支払い参照番号、支払いのスクリーンショットを添えてチャージの依頼を作成してください。スタッフが支払いを確認して残高に反映します。チャージごとに、支払額の 5.5%(最低 $0.80)の手数料がかかります。担当者が反映するまでの時間を見込んで、しきい値は余裕をもって高めに設定してください。
次のステップ
- すべてのレスポンスに課金額が
usage.costとして含まれ、GET /v1/generations/{id}は任意のリクエストの記録を返すため、リクエストごとに利用額を突き合わせられます。 - 対処できるエラーでは、リトライのループにおける
402 insufficient_creditsを説明しています。