請求照合と使用量の自動同期

AIone の利用金額データを自社の財務・監視システムに取り込みたい場合(日次照合、残高アラート、モデル別コスト配賦など)、コンソールに手動ログインしてエクスポートする必要はありません。プラットフォームは 2 つのプログラマティックな照会チャネルを提供しており、組み合わせることで完全自動の照合が実現できます。

チャネル 認証情報 適した用途
① API トークン直接照会/v1/dashboard/billing/* お手元の sk-nex- API トークン 残高監視、クォータアラート、当月消費合計の確認。ログイン不要。one-api / new-api エコシステムの残高照会ツールがそのまま使えます
② アカウントログインで明細取得/api/v1/obs/*/api/v1/billing/* コンソールアカウント(メール + パスワード) 明細単位の照合:日別 / モデル別 / キー別集計、CSV / XLSX エクスポート、取引履歴と請求書

照合の基準:両チャネルは同一の課金ファクト(リクエスト単位の usage_ledger)を読み取ります。金額はすべて USD、月の境界は組織に設定されたタイムゾーンに従います。明細エクスポートの cost_usd の合計がそのまま請求金額であり、二重帳簿は存在しません。

一、API トークンによる残高直接照会(日常監視に推奨)

Base URL:https://api.portal.aiin1.ai。認証はモデル呼び出しと完全に同じです(Authorization: Bearer sk-nex-...、API キーの IP 許可リストが適用されます)。レスポンスは OpenAI 互換形式です。

1.1 クレジット概要:GET /v1/dashboard/billing/credit_grants

curl https://api.portal.aiin1.ai/v1/dashboard/billing/credit_grants \
  -H "Authorization: Bearer sk-nex-your-key-here"
{
  "object": "credit_summary",
  "total_granted": 1000.0,
  "total_used": 137.42,
  "total_available": 862.58,
  "grants": { "object": "list", "data": [] }
}

フィールドの意味は課金モードによって異なります:

課金モード total_available total_used total_granted
前払い(prepaid) リアルタイム利用可能残高 当月消費額 残高 + 当月消費額
後払い / ハイブリッド(postpaid / hybrid) 与信枠 − 当月エクスポージャー 当月エクスポージャー(= 当月消費 − 当月確認済み入金) 与信枠

1.2 サブスクリプション / クォータ:GET /v1/dashboard/billing/subscription

curl https://api.portal.aiin1.ai/v1/dashboard/billing/subscription \
  -H "Authorization: Bearer sk-nex-your-key-here"
{
  "object": "billing_subscription",
  "has_payment_method": true,
  "soft_limit_usd": 862.58,
  "hard_limit_usd": 862.58,
  "system_hard_limit_usd": 862.58,
  "plan": { "title": "prepaid", "id": "prepaid" }
}

hard_limit_usd は現在の消費上限です:後払い / ハイブリッドでは与信枠、前払いでは現在の利用可能残高を表します。

これらのエンドポイントは OpenAI の旧課金 API と同じ構造のため、「OpenAI 残高照会」に対応したツール(ブラウザ拡張、new-api / one-api のチャネル残高監視など)は Base URL を https://api.portal.aiin1.ai に向けるだけで動作します。

二、アカウントログインによる明細取得(照合 / エクスポート)

明細データはコンソールバックエンド API(Base URL:https://portal.aiin1.ai/api/v1)にあります。認証は短期セッショントークン方式です:コンソールアカウントで 1 回ログインし、15 分間有効な access_token を取得、その時間内に必要な取得をすべて完了させます。トークンリフレッシュの実装は不要です。

推奨:照合専用の一般メンバーアカウントを作成し(コンソール → チームメンバー → 招待)、二要素認証(TOTP)は有効にしないでください。TOTP 有効のアカウントはログイン時に totp_code の入力が必要となり、スクリプトには不向きです。

レート制限:ログインエンドポイントは送信元 IP ごとにレート制限されています。「1 回ログイン → トークンを使い回して全データ取得」が正しいパターンです。リクエストごとの再ログインは避けてください。

2.1 ログイン:POST /auth/login

TOKEN=$(curl -s https://portal.aiin1.ai/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{ "email": "billing-bot@yourcompany.com", "password": "YOUR_PASSWORD" }' \
  | jq -r .access_token)

レスポンス:

{ "access_token": "eyJhbGci...", "token_type": "bearer", "expires_in": 900 }

以降のリクエストには Authorization: Bearer $TOKEN を付与します。

2.2 使用量集計:GET /obs/usage

パラメータ 必須 説明
start / end date いいえ 期間(YYYY-MM-DD、両端含む)。必ずペアで指定、範囲 ≤ 365 日、end に未来日は不可。省略時は range_days を使用
range_days int いいえ 直近 N 日(デフォルト 7)
group string いいえ 集計軸:date(デフォルト)/ model / team / key / owner。カンマ区切りでクロス集計が可能(例:group=model,key)。group_key は指定順に | で連結されます
model string いいえ モデル名で絞り込み
apikey_id uuid いいえ API キーで絞り込み
team_id uuid いいえ チームで絞り込み
curl -s "https://portal.aiin1.ai/api/v1/obs/usage?start=2026-07-01&end=2026-07-31&group=model" \
  -H "Authorization: Bearer $TOKEN"

レスポンスは配列で、各行のフィールドは:

フィールド 説明
group_key / group_name 集計キー(日付、モデル名、チーム / キーの ID と名前)
request_count リクエスト数
prompt_tokens / completion_tokens / total_tokens 入力 / 出力 / 合計トークン
cache_creation_input_tokens / cache_read_input_tokens キャッシュ書き込み / ヒットトークン
cost_usd 消費金額(USD)
avg_latency_ms / error_count 平均レイテンシ / エラー数

2.3 リクエスト単位の明細エクスポート:GET /obs/usage/export(CSV)

パラメータ:startend必須)、任意で model / apikey_id / team_id。CSV を直接ストリーム返却します:

curl -s "https://portal.aiin1.ai/api/v1/obs/usage/export?start=2026-07-01&end=2026-07-31" \
  -H "Authorization: Bearer $TOKEN" -o usage-202607.csv

CSV 列:occurred_at, request_id, trace_id, model, apikey_id, team_id, subscription_id, prompt_tokens, completion_tokens, cache_creation_input_tokens, cache_read_input_tokens, total_tokens, latency_ms, status_code, error_code, input_per_1m_usd, output_per_1m_usd, cache_write_per_1m_usd, cache_read_per_1m_usd, price_multiplier, cost_usd

1 行 = 1 リクエストで、トークン実績に加えそのリクエスト時点で適用された単価と割引*_per_1m_usd は定価、price_multiplier は割引係数)が含まれるため、cost_usd を独立に再計算・検算できます。時刻列は組織のタイムゾーンで表示されます。

同じパスに Excel 版もあります:GET /obs/usage/export.xlsx(明細)、GET /obs/usage/stats.xlsx(統計)。パラメータは同一です。

2.4 取引履歴と請求書

エンドポイント 説明
GET /billing/account アカウントスナップショット:billing_modecredit_balance_usdcredit_limit_usd
GET /billing/ledger?page=1&page_size=100 取引履歴(チャージ / 課金 / 調整):typedirectionamount_usdbalance_after_usddescriptioncreated_at
GET /billing/invoices?start=&end=&page=&page_size= 請求書一覧:invoice_noperiod_start/endtotalstatusdue_date
GET /billing/invoices/{id} 請求書詳細(明細行を含む)
GET /billing/invoices/{id}/pdf 請求書 PDF ダウンロード

2.5 完全な例:日次 T+1 照合スクリプト

#!/usr/bin/env bash
set -euo pipefail
BASE="https://portal.aiin1.ai/api/v1"
DAY=$(date -d "yesterday" +%F 2>/dev/null || date -v-1d +%F)
 
TOKEN=$(curl -sf "$BASE/auth/login" -H "Content-Type: application/json" \
  -d "{\"email\":\"$BILLING_EMAIL\",\"password\":\"$BILLING_PASSWORD\"}" | jq -r .access_token)
 
# 前日のリクエスト単位明細 CSV
curl -sf "$BASE/obs/usage/export?start=$DAY&end=$DAY" \
  -H "Authorization: Bearer $TOKEN" -o "usage-$DAY.csv"
 
# 前日のモデル別サマリー
curl -sf "$BASE/obs/usage?start=$DAY&end=$DAY&group=model" \
  -H "Authorization: Bearer $TOKEN" > "usage-$DAY-by-model.json"
 
# 現在残高(トークンチャネル。独立した残高アラートジョブにも適します)
curl -sf https://api.portal.aiin1.ai/v1/dashboard/billing/credit_grants \
  -H "Authorization: Bearer $NEXARA_API_KEY" > "balance-$DAY.json"

三、よくある質問

Q:2 つのチャネルの数字が食い違うことはありますか? ありません。残高チャネルの「当月消費額」と明細チャネルの cost_usd 合計は同一の帳簿に由来し、基準は一致しています。唯一の注意点はタイムゾーンです:月の境界と明細の時刻列は組織に設定されたタイムゾーンに従うため、貴社側で集計する際も同じタイムゾーンを使用してください。

Q:access_token の有効期限が切れたら? 有効期間は意図的に 15 分としています。照合スクリプトは「ログイン → 取得 → 終了」で完結すべきです。1 回の取得が 15 分を超える場合(非常に大きな範囲のエクスポート)は、日付範囲を分割してバッチで取得してください。

Q:sk-nex- トークンで明細を直接取得できますか? 明細チャネルは現在アカウントログインのみ対応です。トークンによる明細照会が強く必要な場合はお問い合わせください。