Anthropic Console の Usage タブは便利ですが、 プログラムから取得したい ケースもあります。月次レポートを Slack に流したい、自社ダッシュボードに統合したい、 Excel/CSV にエクスポートしたい、 などです。
Anthropic は Admin API を介して、組織全体の API 使用量を取得する手段を提供しています。 この記事では Admin Key の発行から、 使用量取得 API の叩き方、レスポンスの構造まで、 curl と Python の実例つきで解説します。
準備: Admin Key を発行する
まず、組織オーナー権限で Anthropic Console にログインし、次のページを開きます。
https://console.anthropic.com/settings/admin-keys
「Create Admin Key」をクリックし、 名前(例: tokscope-readonly)を入れて作成。 表示されたキー(sk-ant-admin01-... で始まる)を 必ずすぐコピー。再表示はできません。
通常の API Key と何が違う?
- 通常の API Key(
sk-ant-api03-...): メッセージ送信用。組織管理 API は叩けない - Admin Key(
sk-ant-admin01-...): 組織情報・メンバー・使用量・コストの読み書き用。メッセージ送信はできない
役割が分離されているので、Admin Key が漏洩しても「Claude 推論で金を溶かされる」事故にはならない設計です。 ただし使用量データは見えてしまうので、扱いには十分な注意が必要。
使用量取得 API を叩く
エンドポイント:
GET /v1/organizations/usage_report/messages
必須パラメータ
starting_at: ISO 8601 形式の開始時刻(例:2026-05-01T00:00:00Z)ending_at: ISO 8601 形式の終了時刻
よく使うオプション
bucket_width: 集計幅。1d(日次)or1h(時間次)group_by[]: 結果をどう束ねるか。model、service_tier、context_windowなど。複数指定可
curl 例
curl 'https://api.anthropic.com/v1/organizations/usage_report/messages?\ starting_at=2026-05-01T00:00:00Z&\ ending_at=2026-05-14T00:00:00Z&\ bucket_width=1d&\ group_by[]=model' \ -H 'x-api-key: sk-ant-admin01-xxxxx' \ -H 'anthropic-version: 2023-06-01'
Python 例
import os
import requests
ADMIN_KEY = os.environ["ANTHROPIC_ADMIN_KEY"]
res = requests.get(
"https://api.anthropic.com/v1/organizations/usage_report/messages",
params={
"starting_at": "2026-05-01T00:00:00Z",
"ending_at": "2026-05-14T00:00:00Z",
"bucket_width": "1d",
"group_by[]": "model",
},
headers={
"x-api-key": ADMIN_KEY,
"anthropic-version": "2023-06-01",
},
)
res.raise_for_status()
data = res.json()
for bucket in data["data"]:
date = bucket["starting_at"][:10]
for row in bucket["results"]:
model = row.get("model")
in_tokens = (
(row.get("uncached_input_tokens") or 0)
+ (row.get("cache_creation_input_tokens") or 0)
+ (row.get("cache_read_input_tokens") or 0)
)
out_tokens = row.get("output_tokens") or 0
print(f"{date} {model:30} in={in_tokens:>10} out={out_tokens:>10}")レスポンスの構造
Admin API はバケット(時間範囲)の配列を返します。各バケットには、 group_by で指定したキーで束ねられた results 配列が入ります。
{
"data": [
{
"starting_at": "2026-05-13T00:00:00Z",
"ending_at": "2026-05-14T00:00:00Z",
"results": [
{
"type": "messages",
"model": "claude-opus-4-7",
"uncached_input_tokens": 421022,
"cache_creation_input_tokens": 12000,
"cache_read_input_tokens": 380000,
"output_tokens": 95721
},
{
"type": "messages",
"model": "claude-sonnet-4-6",
...
}
]
},
...
]
}注意点
uncached_input_tokensは、 キャッシュを使わなかった通常の入力トークン。cache_read_input_tokensは、 キャッシュ読み込みで節約された入力分。料金は通常の 1/10。cache_creation_input_tokensは、 キャッシュへの書き込み。これは通常入力の 1.25 倍の料金。- 合算した「総入力トークン数」 = uncached + cache_creation + cache_read。
- 料金 はレスポンスには含まれていない。 トークン数 × 単価 を自分で計算する必要がある。
料金計算は自前で
Admin API はトークン数しか返さないので、 USD 換算は自前です。 単価表 を持って掛け算します。
PRICES = {
"claude-opus-4-7": {"in": 15.00, "out": 75.00, "cache": 1.50},
"claude-sonnet-4-6": {"in": 3.00, "out": 15.00, "cache": 0.30},
"claude-haiku-4-5": {"in": 0.80, "out": 4.00, "cache": 0.08},
}
def cost_usd(model, uncached, cache_read, output):
p = PRICES[model]
return (
uncached * p["in"] / 1_000_000
+ cache_read * p["cache"] / 1_000_000
+ output * p["out"] / 1_000_000
)単価は時々改定されるので、 公式の console.anthropic.com/billing で常に確認するクセが必要です。
レート制限とリトライ
Admin API には組織あたりの レート制限 があります。 ループで日付を細かく刻んで叩くと簡単に上限に当たるので、 bucket_width=1d でまとめて取るのが基本です。 429 が返ったら指数バックオフでリトライしましょう。
自前でやる場合の維持コスト
ここまでの設計を実装すると、 だいたい以下の作業が発生します。
- Admin Key の発行と環境変数管理(漏洩したら即 revoke できる体制)
- Cron / GitHub Actions / Lambda 等で毎日叩く仕組み
- 結果を保存する DB(BigQuery、Postgres、SQLite、Notion、Spreadsheet 等)
- 単価表のメンテナンス(モデル追加・価格改定への追従)
- ダッシュボード作成(Metabase、Grafana、自作)
- アラート発火(Slack / Discord / Email 通知ロジック)
実装ボリュームは 小さな SaaS そのもの。 週末に作って一度動かして満足する分には楽しいですが、 維持し続けるのは別の話。
Tokscope がやっていること
Tokscope は、上記の作業を全部肩代わりするサービスです。具体的には:
- ユーザーが Admin Key を貼ると AES-256-GCM で暗号化保存
- 日次で
/v1/organizations/usage_report/messagesを自動取得 - モデル別単価で USD と JPY を計算、 90 日分の履歴を保持
- 月予算を超えたら Discord/Slack/Email に通知
- OpenAI / Gemini / DeepSeek も同様に統合
自前で同じものを作るのに 数十時間。 Tokscope の Pro プランは月額 ¥1,980。 どっちが得かは、 あなたの時給次第 です。