Claude Platform Docs
管理モニタリング

Usage and Cost Analytics API

Claude ConsoleまたはClaude Enterprise組織のトークン使用量とコストを、モデル、ワークスペース、APIキー、アクターなどの単位でクエリします。

Usage and Cost Analytics APIは、組織の過去のトークン使用量とコストを、モデル、ワークスペース、APIキー、または各リクエストの背後にあるユーザーやサービスアカウントなど、選択したディメンションごとに分類してレポートします。Claude Console組織の場合、このデータはClaude ConsoleのUsageページおよびCostページに表示される内容と同様です。

このAPIには2つのエンドポイントがあります。

  • GET /v1/organizations/analytics/usage はトークン数とリクエスト数をレポートします。
  • GET /v1/organizations/analytics/cost はコストをUSDでレポートします。

Usage and Cost Analytics APIはベータ版です。すべてのリクエストでanthropic-beta: analytics-usage-cost-2026-08-24 ヘッダーとanthropic-versionヘッダーを送信してください。SDKとant CLIは両方のヘッダーを自動的に送信し、結果を読み進めるにつれて残りのページを取得するため、limitはページサイズのみを設定します。

このAPIは次の用途に使用できます。

  • 支出の内訳を把握する: コストとトークン使用量を、ワークスペース、APIキー、モデル、サービスティア、または各リクエストを行ったアイデンティティごとに分類します。
  • 上位の消費者を特定する: トークン、リクエスト、またはコストで結果をランク付けし、「今月最も支出の多いAPIキーはどれか?」といった質問に答えます。
  • 時系列を構築する: ダッシュボードや財務レポート向けに、結果を日次、時間単位、または分単位のバケットに分割します。
  • 一度の統合で済ませる: 同じエンドポイント、パラメータ、レスポンスフィールドがClaude ConsoleとClaude Enterpriseの両方の組織に対応します。

クイックスタート

9月の第1週の日次トークン使用量を、モデルと日ごとに1行ずつ取得します:

client = anthropic.Anthropic()

rows = client.beta.organization.analytics.usage.list(
    starting_at="2026-09-01T00:00:00Z",
    ending_at="2026-09-08T00:00:00Z",
    time_bucket_width="1d",
    group_by=["model"],
    limit=10,
)

for row in rows:
    print(f"{row.starting_at} {row.group.model}: {row.usage.total_tokens}")

レスポンスには、使用量のあるモデルと日ごとに1行が含まれ、total_tokensが大きい順に並びます。この例では1行のみを示しています:

{
  "data": [
    {
      "starting_at": "2026-09-03T00:00:00Z",
      "ending_at": "2026-09-04T00:00:00Z",
      "group": {
        "product": null,
        "model": "claude-sonnet-5",
        "context_window": null,
        "inference_geo": null,
        "speed": null,
        "slack_channel_id": null,
        "claude_tag_category": null,
        "claude_tag_user_id": null,
        "rbac_group_id": null,
        "workspace_id": null,
        "service_tier": null,
        "user_profile_id": null,
        "agent_id": null,
        "environment_id": null,
        "deployment_id": null,
        "session_id": null,
        "actor": null,
        "actor_type": null,
        "api_key_id": null
      },
      "usage": {
        "uncached_input_tokens": 1284500,
        "cache_creation": {
          "ephemeral_1h_input_tokens": 0,
          "ephemeral_5m_input_tokens": 215300
        },
        "cache_read_input_tokens": 3200000,
        "output_tokens": 891000,
        "total_tokens": 5590800,
        "server_tool_use": {
          "web_search_requests": 12
        },
        "requests": 4210
      }
    }
  ],
  "has_more": true,
  "next_page": "page_V2mQ4dkt9HcbX3pLr...",
  "data_refreshed_at": "2026-09-18T16:02:11Z"
}

結果の構造

  • すべての行は3つの部分で構成されます: starting_atとending_atは行が対象とする期間を示し、groupはすべてのディメンションを保持し、usage(コストエンドポイントではcost)はメトリクスを保持します。
  • グループ化しない限りディメンションはnullです: group内のディメンションは、group_by[]に指定しない限りnullです。グループ化したディメンションも、コード実行の使用量におけるmodelのように、その値を持たない行ではnullになります。group_by[]には最大5つのディメンションを指定できます。
  • 組み合わせごとに1行: 各行はグループ化したディメンションの1つの組み合わせであり、使用量またはコストのあるすべての組み合わせは、クエリのページ全体を通じてちょうど1回だけ出現します。group_by[]もtime_bucket_widthも指定しない場合、レスポンスは範囲全体を合計した1行になります。
  • タイムバケットは任意です: time_bucket_widthを1m、1h、または1dに設定すると、各組み合わせがUTCのバケットごとに分割されます。その場合、各行のstarting_atとending_atはそのバケットの境界になります。使用量やコストのないバケットは行を生成しません。
  • デフォルトではランク順です: 行は範囲全体における order_by メトリクスの順に並べられ、デフォルトでは大きいものから順になります(order=asc で逆順になります)。時系列を作成するには、time_bucket_width と order_by=time を設定します。その場合、行はタイムバケットごとに順に返され、デフォルトでは最新のバケットが先頭になり(order=asc で最も古いものが先頭になります)、各バケット内では大きい行から順に並びます。空のバケットはゼロで埋めてください。
  • フィルターはグループ化と併用できます: グループ化できるほとんどのディメンションには、models[]=claude-opus-5-5のようなブラケット表記の対応するリストフィルターがあります。複数の値を渡すにはパラメータを繰り返します(最大100個)。同じフィルターの複数の値はORで結合され、異なるフィルターはANDで結合されます。フィルターとgroup_by[]は独立しています。あるディメンションでグループ化するかどうかに関係なくそのディメンションでフィルタリングでき、その逆も可能です。

model や actor などのディメンションはすべての組織に適用されます。api_key_id などの一部はClaude Console組織にのみ適用され、slack_channel_id などの他のものはClaude Enterprise組織にのみ適用されます。組織に適用されないディメンションはすべての行で null になり、そのフィルターは何にも一致しません。例外は rbac_group_id で、組織でチームが利用できない場合は代わりにエラーを返します。使用量 と コスト のAPIリファレンスに、すべてのディメンション、フィルター、値が記載されています。

アクター

actor ディメンションは、リクエストが誰に帰属するかを示します。ユーザー、サービスアカウント、フェデレーションされたクラウドアイデンティティ(クラウドプラットフォーム経由でClaudeにアクセスする組織の場合のAWSまたはGoogle Cloudのプリンシパル)、またはリクエストの背後にそのいずれも存在しない場合はAPIキー自体です。actor でグループ化すると、各行の actor はオブジェクトになり、その type がどの種類かを示します。どのアイデンティティにも帰属できない使用量は actor: null になります。

個人キーとサービスアカウントキーは、リンクされているユーザーまたはサービスアカウントとして動作するため、それらのリクエストではそのアイデンティティが actor として、キーが api_key_id として表示されます。レガシーのワークスペースキーはアイデンティティにリンクされていないため、キーが actor と api_key_id の両方として表示されます。例外は、メンバーがClaude ConsoleアカウントでサインインしたときにClaude Codeが作成するキーです。このキーはClaude Codeワークスペースに存在し、その使用量はそのメンバーに帰属します。Claude ConsoleからのリクエストやWorkload Identity Federationトークンを使用したリクエストなど、APIキーなしで行われたリクエストは api_key_id: null になります。フェデレーションされたワークロードの actor はそのサービスアカウントです。APIキーのない使用量を api_key_ids[] フィルターに含めるには、空のエントリ api_key_ids[]= を追加してください。

api_key_ids[] フィルターと actor_ids[] フィルターは異なる問いに答えます。api_key_ids[]=apikey_... は、誰に帰属するかにかかわらず、そのキーが認証したすべてのリクエストに一致します。actor_ids[]=apikey_... は、キー自体に帰属するリクエストのみに一致します。

使用量エンドポイント

GET /v1/organizations/analytics/usage は、種類別のトークン数を返します。order_by には total_tokens(デフォルト)、output_tokens、uncached_input_tokens、requests、または time を指定できます。

たとえば、1つのワークスペースと1つのAPIキーについて1週間分の使用量をサービスティアごとに分類して確認するには(ティアごとに1行、1週間全体を対象):

client = anthropic.Anthropic()

rows = client.beta.organization.analytics.usage.list(
    starting_at="2026-09-01T00:00:00Z",
    ending_at="2026-09-08T00:00:00Z",
    workspace_ids=["wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"],
    api_key_ids=["apikey_01Rj2N8SVvo6BePZj99NhmiT"],
    group_by=["service_tier"],
)

for row in rows:
    print(f"{row.group.service_tier}: {row.usage.total_tokens}")

APIキーとワークスペースのIDを調べるには、List API KeysエンドポイントとList Workspacesエンドポイント、またはClaude Consoleを使用してください。

1か月間で最も多くのリクエストを行ったユーザー、サービスアカウント、APIキーを見つけるには、次のようにします。

client = anthropic.Anthropic()

rows = client.beta.organization.analytics.usage.list(
    starting_at="2026-09-01T00:00:00Z",
    ending_at="2026-10-01T00:00:00Z",
    group_by=["actor"],
    order_by="requests",
    limit=25,
)

for row in rows:
    print(f"{row.group.actor}: {row.usage.requests}")

コストエンドポイント

GET /v1/organizations/analytics/cost は、/usage エンドポイントと同じフィルター、ディメンション、タイムバケットを受け付けます。各行の cost オブジェクトには、amount(割引適用後、クレジット適用前のコスト)、list_amount(定価でのコスト)、currency(常に "USD")、および requests が含まれます。金額はセント単位の小数点以下6桁の10進数文字列です。"41280.000000" は412.80 USDです。order_by には amount(デフォルト)、list_amount、または time を指定できます。

このエンドポイントにのみ存在し、5ディメンションの上限にカウントされない追加のディメンションが2つあります。group_by[]=cost_typeは各行をコストタイプごとに1行ずつに分割し、group_by[]=token_typeはトークンコストをトークンタイプごとに1行ずつに分割します。limitもこれら2つのディメンションには適用されないため、1ページにlimitを超える行が含まれることがあります。たとえば、1か月分のモデル、コストタイプ、トークンタイプ別のコストは次のとおりです:

client = anthropic.Anthropic()

rows = client.beta.organization.analytics.cost.list(
    starting_at="2026-09-01T00:00:00Z",
    ending_at="2026-10-01T00:00:00Z",
    group_by=["model", "cost_type", "token_type"],
)

for row in rows:
    print(
        f"{row.group.model} {row.group.cost_type} {row.group.token_type}: {row.cost.amount}"
    )

各モデルについて、レスポンスには5つのtokens行(トークンタイプごとに1行)に加えて、web_search、code_execution、session_usageのそれぞれに1行ずつが含まれます。そのうちの1行:

{
  "starting_at": "2026-09-01T00:00:00Z",
  "ending_at": "2026-10-01T00:00:00Z",
  "group": {
    "model": "claude-opus-5",
    ...,
    "cost_type": "tokens",
    "token_type": "cache_read_input_tokens"
  },
  "cost": {
    "currency": "USD",
    "amount": "41280.000000",
    "list_amount": "51600.000000",
    "requests": null
  }
}

group オブジェクトはすべてのディメンションを保持しますが、ここでは省略しています。group_by[]=cost_type または token_type を指定した場合、すべての行で requests は null になります。

日付範囲とタイムバケット

  • タイムスタンプはUTCオフセット付きのRFC 3339形式です(例:2026-09-01T00:00:00Z)。starting_at は範囲に含まれ、ending_at は含まれません。
  • starting_at は2026年1月1日以降、かつ過去365日以内である必要があります。1回のリクエストで指定できる期間は最大31日です。ending_at のデフォルトは、starting_at の31日後または現在時刻のいずれか早い方です。
  • time_bucket_width を設定する場合は常に ending_at が必須であり、time_bucket_width=1m の場合、1回のリクエストで指定できる期間は最大24時間です。
  • 範囲の両端はUTCのバケット境界に切り捨てられます。time_bucket_width が設定されていない場合は時間単位に切り捨てられます。たとえば、time_bucket_width=1h の場合、starting_at が 2026-09-01T10:43:00Z であれば 2026-09-01T10:00:00Z として、ending_at が 2026-09-01T15:43:00Z であれば 2026-09-01T15:00:00Z として扱われるため、レスポンスはUTCの10:00から15:00までを対象とします。

データの鮮度

すべてのレスポンスにはdata_refreshed_atタイムスタンプが含まれ、その時刻以降の使用量は欠落しているか部分的です。リクエストした範囲のどの部分についてもまだデータが利用できない場合、data_refreshed_atはnullになり、dataは空になります。データは通常、基となる使用から4時間以内に更新され、最大24時間かかることがあります。値は、遅れて到着するイベントや照合処理の実行に伴い、暦月の終了後約7日まで修正される可能性があります。たとえば、10月1日の値は11月7日頃まで変わる可能性があります。繰り返し呼び出しても安定した結果を得るには、すでに確認したdata_refreshed_at以前にending_atを設定してください。最終的な合計を得るには、終了から少なくとも7日が経過した月のみをクエリしてください。ページネーションされたクエリのすべてのページは同じデータスナップショットを読み取るため、data_refreshed_atはページ間で同一です。

Usage and Cost APIからの移行

このセクションは、レガシーのUsage and Cost API(/v1/organizations/usage_report/messages および /v1/organizations/cost_report)を呼び出しているClaude Console組織を対象としています。Admin APIキー、anthropic-version ヘッダー、starting_at と ending_at、バケット幅の値(1m、1h、1d)、ブラケット記法、ページネーションのフィールド名、トークンとコストのフィールド名はそのまま引き継がれます。変更点は次のとおりです。

Usage and Cost APIUsage and Cost Analytics API
ベータヘッダーなしすべてのリクエストでanthropic-beta: analytics-usage-cost-2026-08-24
データは通常5分以内に表示されるデータは通常4時間以内に更新され、最大24時間かかることがある(データの鮮度を参照)
dataはタイムバケットのリストで、古い順に並び、空のバケットも含む。各バケットにはresultsリストがあり、そのエントリにはディメンションとメトリクスが並んで格納されるdataはorder_byでランク付けされた行のリストで、各行は独自のstarting_atとending_atを持ち、ディメンションはgroupに、メトリクスはusageまたはcostに格納される。使用量やコストのない組み合わせには行がない。
bucket_width、デフォルトは1dtime_bucket_width、デフォルトなし。日次の行を維持するにはtime_bucket_width=1dを渡し、範囲全体の合計を得るには省略する。コストエンドポイントもすべてのフィルターと1mおよび1hのバケットを受け付ける。
limitはページあたりのタイムバケット数をカウントするlimitはページあたりの行数をカウントする(1〜1,000、デフォルトは20)ため、ページ数はデータのある組み合わせの数に依存する
任意の日付範囲、バケット単位で前方にページングstarting_atは2026年1月1日以降かつ過去365日以内、1リクエストあたり最大31日、time_bucket_widthを指定する場合はending_atが必須、1mバケットでは最大24時間(日付範囲とタイムバケットを参照)。より長い範囲は複数のリクエストに分割する。
account_ids[]、service_account_ids[]、group_by[]=account_id、group_by[]=service_account_id同じタグ付きIDを使用するactor_ids[]、およびgroup_by[]=actorまたはactor_type。actor.user_idまたはactor.service_account_idを読み取る。アクターを参照。
context_window[]context_windows[]
コストレポートでのgroup_by[]=descriptionとdescription文字列descriptionなし。代わりに構造化されたディメンションでグループ化する:model、cost_type、token_type、context_window、service_tier、inference_geo、speedのいずれか。これらはすべて1つのリクエストに収まる。
不明なAPIキーまたはワークスペースIDはエラーを返す何にも一致しない。スペルミスのあるmodels[]名も同様。各リストは最大100個の値を受け付ける。
デフォルトワークスペースではworkspace_id: nullデフォルトワークスペースの実際のworkspace_id(デフォルトワークスペースはどのように表されますか?を参照)
ジオやティアのない使用量ではinference_geo: "not_available"とservice_tier: "standard"両方ともnull。inference_geos[]=not_availableは引き続き推論ジオのない行に一致する。
コストのservice_tierはstandardまたはbatch。amountは"123.45"のような形式実際のティア。amountは"123.450000"のように小数点以下6桁で、さらにlist_amountが加わる。
コード実行は使用量レポートに含まれない。リクエスト数なしコード実行はmodel: nullの使用量行として表示される。両方のエンドポイントにrequestsが、使用量行にtotal_tokensが追加される

従来の日次レポートを再現するには、同じ group_by[] で time_bucket_width=1d をリクエストし、limit=1000 でページを順に取得してから、行を starting_at でグループ化し、欠けている日をゼロで埋めます。日付を順番に取得するには order_by=time&order=asc を追加します。1週間分のモデル別日次使用量の変更前の例:

cURL
curl --globoff "https://api.anthropic.com/v1/organizations/usage_report/messages?\
starting_at=2026-09-01T00:00:00Z&\
ending_at=2026-09-08T00:00:00Z&\
group_by[]=model&\
bucket_width=1d" \
  -H "anthropic-version: 2023-06-01" \
  -H "x-api-key: $ANTHROPIC_API_KEY"

移行後:

client = anthropic.Anthropic()

rows = client.beta.organization.analytics.usage.list(
    starting_at="2026-09-01T00:00:00Z",
    ending_at="2026-09-08T00:00:00Z",
    time_bucket_width="1d",
    group_by=["model"],
    limit=1000,
)

for row in rows:
    print(f"{row.starting_at} {row.group.model}: {row.usage.total_tokens}")

ワークスペース、モデル、サービスティア、コンテキストウィンドウ、推論ジオ別の日次コストを、コストタイプとトークンタイプで分割したもの:

client = anthropic.Anthropic()

rows = client.beta.organization.analytics.cost.list(
    starting_at="2026-09-01T00:00:00Z",
    ending_at="2026-09-08T00:00:00Z",
    time_bucket_width="1d",
    group_by=[
        "workspace_id",
        "model",
        "service_tier",
        "context_window",
        "inference_geo",
        "cost_type",
        "token_type",
    ],
    limit=1000,
)

for row in rows:
    group = row.group
    print(
        f"{row.starting_at} {group.workspace_id} {group.model} {group.service_tier} "
        f"{group.context_window} {group.inference_geo} {group.cost_type} {group.token_type}: "
        f"{row.cost.amount}"
    )

Claude Enterpriseの使用量レポートとコストレポートからの移行

このセクションは、/v1/organizations/analytics/ 配下のClaude Enterprise Analytics APIのレポートエンドポイント usage_report、cost_report、user_usage_report、user_cost_report を呼び出しているClaude Enterprise組織を対象としています。これらのエンドポイントはレガシーですが、引き続きサポートされます。次のいずれかが必要な場合は、/analytics/usage と /analytics/cost に移行してください。

  • 各バケットの上位100グループではなく、すべてのタイムバケットのすべてのグループ
  • 使用量とコストの両方で、actorまたはactor_typeと他のディメンションを組み合わせたグループ化
  • 範囲全体で任意のメトリクスによってランク付けされた行、またはタイムバケット順に並べられた行
  • Claude Consoleの組織にも対応する単一の統合

キー、最も早い日付、365日のルックバックと31日の期間、フィルターとディメンションの名前と値(user_ids[]とClaude Tagのproduct値を除く)、ユーザーのactorフィールド、メトリクスと金額のフィールド、data_refreshed_at、カーソルのルール、および組織レベルのレート制限はそのまま引き継がれます。新しいヘッダーはanalytics-usage-cost-2026-08-24ベータヘッダーのみです。変更点は次のとおりです:

Claude EnterpriseのレポートUsage and Cost Analytics API
usage_reportとcost_reportはタイムバケットを古い順に返し、空のバケットも含む。各バケットは最大で上位100グループを保持する。bucket_widthのデフォルトは1dで、limitはバケット数をカウントするデータのあるすべての組み合わせを対象とする行をorder_byでランク付けして返す。各行は独自のstarting_atとending_atを持ち、ディメンションはgroupに、メトリクスはusageまたはcostに格納される。time_bucket_widthは任意で、limitは行数をカウントする。
タイムバケットのパラメータはbucket_widthtime_bucket_widthで、値は同じ
usage_reportとcost_reportでは、bucket_widthを指定する場合ending_atは任意で、1mバケットは最大31日にわたることができるtime_bucket_widthを指定する場合ending_atは必須。1mバケットは1リクエストあたり最大24時間
user_usage_reportとuser_cost_reportはユーザーごとに1行を返すgroup_by[]=actor&actor_types[]=user_actor。フィルターを指定しない場合、ユーザー以外のアイデンティティの行と、帰属先のない使用量に対するactor: nullの行も返される。
Claude Tagの使用量はproduct: "claude-tag"product: "claude_tag"。products[]はどちらの表記も受け付ける
認識されないmodels[]名は400エラーを返す何にも一致しない
user_ids[]同じタグ付きuser_... IDを使用するactor_ids[]
ユーザーごとのレポートでのexclude_deleted_usersgroup_by[]=actorが必要。指定しない場合、リクエストは400エラーを返す。actorがdeleted: trueのユーザーである行のみを除外し、他のアイデンティティの行とactor: nullの行は残る。

1か月間のユーザーごとのコストを取得する場合、移行前は次のとおりです。

client = anthropic.Anthropic()

rows = client.beta.organization.analytics.user_cost_report.list(
    starting_at="2026-09-01T00:00:00Z",
    ending_at="2026-10-01T00:00:00Z",
    limit=100,
)

for row in rows:
    print(f"{row.actor.user_id}: {row.amount}")

移行後(製品別の内訳を追加):

client = anthropic.Anthropic()

rows = client.beta.organization.analytics.cost.list(
    starting_at="2026-09-01T00:00:00Z",
    ending_at="2026-10-01T00:00:00Z",
    actor_types=["user_actor"],
    group_by=["actor", "product"],
    limit=100,
)

for row in rows:
    actor = row.group.actor
    if actor is not None and actor.type == "user_actor":
        print(f"{actor.user_id} {row.group.product}: {row.cost.amount}")

よくある質問

デフォルトワークスペースはどのように表されますか?

Claude Consoleの組織のデフォルトワークスペースは、他のすべてのワークスペースと同様に独自のwrkspc_ IDを持ちます。デフォルトワークスペースの行ではworkspace_idにそのIDが入り、workspace_ids[]でそのIDによるフィルタリングができます。List Workspacesは、include_default=trueを渡さない限りデフォルトワークスペースを含めません。見慣れないworkspace_idがデフォルトワークスペースかどうかを確認するには、それをGet Workspaceに渡してください。デフォルトワークスペースは"name": "Default"を返します。

Claude Codeのユーザーごとのコストを取得するにはどうすればよいですか?

products[]=claude_code&group_by[]=actor を指定してコストエンドポイントを呼び出してください。Claude Console組織は、ユーザーごとのClaude Codeのアクティビティと推定コストをレポートするClaude Code Analytics APIも使用できます。

関連項目

Was this page helpful?