SPB Git

Repository Public

analytics.md 152.0 KB 3,518 lines markdown

1---2title: Analytics3url: https://platform.claude.com/docs/en/api/beta/organization/analytics4---56# Analytics78## Get Activity Summaries910**GET** `/v1/organizations/analytics/summaries`1112Get organization-wide activity summaries for a date range.1314Returns one entry per day from `starting_date` (inclusive) to `ending_date`15(exclusive). Data is typically available with a 1-day lag and may be16revised by a few percent over the following days: when `ending_date` is17omitted it defaults to the most recent available day + 1, so the last18entry covers the most recent available day. The series can be scoped to19an RBAC group via `filter[]=rbac_group_id:{id}`. Available to20organizations on a Claude Enterprise plan. Requires an API key with the21`read:analytics` scope.2223### Query parameters2425- `starting_date: string`2627  UTC date in YYYY-MM-DD format. Start of the date range (inclusive). Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.2829  format: date3031- `ending_date: optional string`3233  UTC date in YYYY-MM-DD format. End of the date range (exclusive). Data is typically available with a 1-day lag, so this can be at most today — which is also the default when omitted, making the last entry cover the most recent available day. Data may be revised by a few percent over the following days. The range may span at most 366 days.3435  format: date3637- `filter: optional array of string`3839  Filters as `dimension:value`. Only `rbac_group_id` is supported (e.g. `filter[]=rbac_group_id:{id}`); repeat the param to OR across groups. Scopes the whole day series to members of the matching group(s), re-aggregated from member-level activity — org-wide seat/invite fields and the adoption rates derived from them are null on scoped rows. `rbac_group_id` accepts the tagged id (`rbac_group_...`, as emitted in responses and by the spend-limits API) or a bare group UUID, and matches users who held the group at any point during each UTC day (time-of-usage attribution). At most 100 entries.4041  maxItems: 1004243### Returns4445- `BetaActivitySummary object`4647  Response for GET /v1/organizations/analytics/summaries.4849  - `summaries: array of object`5051    - `assigned_seat_count: number or null`5253      Number of seats currently assigned to members. Null when the response is scoped to an RBAC group — seat assignment is org-wide and has no per-group analogue.5455    - `cowork_daily_active_user_count: number`5657      Number of users with Cowork activity on the requested day5859    - `cowork_monthly_active_user_count: number`6061      Number of users with Cowork activity in the 30-day rolling window6263    - `cowork_weekly_active_user_count: number`6465      Number of users with Cowork activity in the 7-day rolling window6667    - `daily_active_user_count: number`6869      Number of users with token consumption on the requested day7071    - `daily_adoption_rate: number or null`7273      Percentage of assigned seats with activity on the requested day (`DAU / assigned_seat_count * 100`). Null when the response is scoped to an RBAC group.7475    - `ending_at: string`7677      End of the aggregation period (exclusive), UTC midnight in RFC 3339 format (e.g. `2026-01-16T00:00:00Z`).7879      format: date-time8081    - `monthly_active_user_count: number`8283      Number of users with token consumption in the 30-day rolling window8485    - `monthly_adoption_rate: number or null`8687      Percentage of assigned seats with activity in the 30-day rolling window (`MAU / assigned_seat_count * 100`). Null when the response is scoped to an RBAC group.8889    - `pending_invite_count: number or null`9091      Number of pending invitations to join the organization. Null when the response is scoped to an RBAC group.9293    - `starting_at: string`9495      Start of the aggregation period (inclusive), UTC midnight in RFC 3339 format (e.g. `2026-01-15T00:00:00Z`).9697      format: date-time9899    - `weekly_active_user_count: number`100101      Number of users with token consumption in the 7-day rolling window102103    - `weekly_adoption_rate: number or null`104105      Percentage of assigned seats with activity in the 7-day rolling window (`WAU / assigned_seat_count * 100`). Null when the response is scoped to an RBAC group.106107    - `chat_daily_active_user_count: optional number or null`108109      Number of users with claude.ai (chat) activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.110111    - `chat_monthly_active_user_count: optional number or null`112113      Number of users with claude.ai (chat) activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.114115    - `chat_weekly_active_user_count: optional number or null`116117      Number of users with claude.ai (chat) activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.118119    - `claude_code_daily_active_user_count: optional number or null`120121      Number of users with Claude Code activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.122123    - `claude_code_monthly_active_user_count: optional number or null`124125      Number of users with Claude Code activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.126127    - `claude_code_weekly_active_user_count: optional number or null`128129      Number of users with Claude Code activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.130131    - `claude_design_daily_active_user_count: optional number or null`132133      Number of users with Claude Design activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.134135    - `claude_design_monthly_active_user_count: optional number or null`136137      Number of users with Claude Design activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.138139    - `claude_design_weekly_active_user_count: optional number or null`140141      Number of users with Claude Design activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.142143    - `office_agent_daily_active_user_count: optional number or null`144145      Number of users with Claude in Office activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.146147    - `office_agent_monthly_active_user_count: optional number or null`148149      Number of users with Claude in Office activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.150151    - `office_agent_weekly_active_user_count: optional number or null`152153      Number of users with Claude in Office activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.154155    - `science_daily_active_user_count: optional number or null`156157      Number of users with Claude Science activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.158159    - `science_entitled_user_count: optional number or null`160161      Number of users with a Claude Science seat entitlement (per-seat RBAC) at the time of the daily snapshot. The funnel top; independent of the org-level Claude Science toggle. Null when the response is scoped to an RBAC group — entitlement is org-wide and has no per-group analogue. Omitted from the response while the per-product breakdown is not enabled for this organization.162163    - `science_monthly_active_user_count: optional number or null`164165      Number of users with Claude Science activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.166167    - `science_weekly_active_user_count: optional number or null`168169      Number of users with Claude Science activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.170171### Example172173```bash174curl https://api.anthropic.com/v1/organizations/analytics/summaries \175    -H 'anthropic-version: 2023-06-01' \176    -H "X-Api-Key: $ANTHROPIC_API_KEY"177```178179#### Response (200)180181```json182{183  "summaries": [184    {185      "assigned_seat_count": 0,186      "cowork_daily_active_user_count": 0,187      "cowork_monthly_active_user_count": 0,188      "cowork_weekly_active_user_count": 0,189      "daily_active_user_count": 0,190      "daily_adoption_rate": 0,191      "ending_at": "2019-12-27T18:11:19.117Z",192      "monthly_active_user_count": 0,193      "monthly_adoption_rate": 0,194      "pending_invite_count": 0,195      "starting_at": "2019-12-27T18:11:19.117Z",196      "weekly_active_user_count": 0,197      "weekly_adoption_rate": 0,198      "chat_daily_active_user_count": 0,199      "chat_monthly_active_user_count": 0,200      "chat_weekly_active_user_count": 0,201      "claude_code_daily_active_user_count": 0,202      "claude_code_monthly_active_user_count": 0,203      "claude_code_weekly_active_user_count": 0,204      "claude_design_daily_active_user_count": 0,205      "claude_design_monthly_active_user_count": 0,206      "claude_design_weekly_active_user_count": 0,207      "office_agent_daily_active_user_count": 0,208      "office_agent_monthly_active_user_count": 0,209      "office_agent_weekly_active_user_count": 0,210      "science_daily_active_user_count": 0,211      "science_entitled_user_count": 0,212      "science_monthly_active_user_count": 0,213      "science_weekly_active_user_count": 0214    }215  ]216}217```218219## Domain types220221### Beta Activity Summary222223- `BetaActivitySummary object`224225  Response for GET /v1/organizations/analytics/summaries.226227  - `summaries: array of object`228229    - `assigned_seat_count: number or null`230231      Number of seats currently assigned to members. Null when the response is scoped to an RBAC group — seat assignment is org-wide and has no per-group analogue.232233    - `cowork_daily_active_user_count: number`234235      Number of users with Cowork activity on the requested day236237    - `cowork_monthly_active_user_count: number`238239      Number of users with Cowork activity in the 30-day rolling window240241    - `cowork_weekly_active_user_count: number`242243      Number of users with Cowork activity in the 7-day rolling window244245    - `daily_active_user_count: number`246247      Number of users with token consumption on the requested day248249    - `daily_adoption_rate: number or null`250251      Percentage of assigned seats with activity on the requested day (`DAU / assigned_seat_count * 100`). Null when the response is scoped to an RBAC group.252253    - `ending_at: string`254255      End of the aggregation period (exclusive), UTC midnight in RFC 3339 format (e.g. `2026-01-16T00:00:00Z`).256257      format: date-time258259    - `monthly_active_user_count: number`260261      Number of users with token consumption in the 30-day rolling window262263    - `monthly_adoption_rate: number or null`264265      Percentage of assigned seats with activity in the 30-day rolling window (`MAU / assigned_seat_count * 100`). Null when the response is scoped to an RBAC group.266267    - `pending_invite_count: number or null`268269      Number of pending invitations to join the organization. Null when the response is scoped to an RBAC group.270271    - `starting_at: string`272273      Start of the aggregation period (inclusive), UTC midnight in RFC 3339 format (e.g. `2026-01-15T00:00:00Z`).274275      format: date-time276277    - `weekly_active_user_count: number`278279      Number of users with token consumption in the 7-day rolling window280281    - `weekly_adoption_rate: number or null`282283      Percentage of assigned seats with activity in the 7-day rolling window (`WAU / assigned_seat_count * 100`). Null when the response is scoped to an RBAC group.284285    - `chat_daily_active_user_count: optional number or null`286287      Number of users with claude.ai (chat) activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.288289    - `chat_monthly_active_user_count: optional number or null`290291      Number of users with claude.ai (chat) activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.292293    - `chat_weekly_active_user_count: optional number or null`294295      Number of users with claude.ai (chat) activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.296297    - `claude_code_daily_active_user_count: optional number or null`298299      Number of users with Claude Code activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.300301    - `claude_code_monthly_active_user_count: optional number or null`302303      Number of users with Claude Code activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.304305    - `claude_code_weekly_active_user_count: optional number or null`306307      Number of users with Claude Code activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.308309    - `claude_design_daily_active_user_count: optional number or null`310311      Number of users with Claude Design activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.312313    - `claude_design_monthly_active_user_count: optional number or null`314315      Number of users with Claude Design activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.316317    - `claude_design_weekly_active_user_count: optional number or null`318319      Number of users with Claude Design activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.320321    - `office_agent_daily_active_user_count: optional number or null`322323      Number of users with Claude in Office activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.324325    - `office_agent_monthly_active_user_count: optional number or null`326327      Number of users with Claude in Office activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.328329    - `office_agent_weekly_active_user_count: optional number or null`330331      Number of users with Claude in Office activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.332333    - `science_daily_active_user_count: optional number or null`334335      Number of users with Claude Science activity on the requested day. Omitted from the response while the per-product breakdown is not enabled for this organization.336337    - `science_entitled_user_count: optional number or null`338339      Number of users with a Claude Science seat entitlement (per-seat RBAC) at the time of the daily snapshot. The funnel top; independent of the org-level Claude Science toggle. Null when the response is scoped to an RBAC group — entitlement is org-wide and has no per-group analogue. Omitted from the response while the per-product breakdown is not enabled for this organization.340341    - `science_monthly_active_user_count: optional number or null`342343      Number of users with Claude Science activity in the 30-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.344345    - `science_weekly_active_user_count: optional number or null`346347      Number of users with Claude Science activity in the 7-day rolling window. Omitted from the response while the per-product breakdown is not enabled for this organization.348349### Beta Analytics User350351- `BetaAnalyticsUser object`352353  A user in the organization, identified by tagged id and email address.354355  - `type: "user"`356357    Object type. Always `user`.358359    default: user360361  - `id: string`362363    Tagged user identifier (e.g. `user_...`)364365  - `email_address: string`366367    Email address of the user368369### Beta Analytics User Actor370371- `BetaAnalyticsUserActor object`372373  - `type: "user_actor"`374375    Actor type. Always `"user_actor"`.376377  - `deleted: boolean`378379    True when the account has been deleted, or when the user is no longer a member of the organization or its associated organizations (for example, their membership was removed or they were deprovisioned via your identity provider). `email` stays populated for removed users and is null when the account has been deleted. `name` follows the rules described on that field. The `user_id` is still populated for reconciliation.380381  - `email: string or null`382383    The user's email address, including for users who are no longer members of the organization or its associated organizations. Null when the account has been deleted (check `deleted`) and for system-minted service accounts, which have no person's mailbox behind them (check `name`).384385  - `name: string or null`386387    The user's full name. Null when the user has not set a name. Returns `"Deleted User"` when the account itself has been deleted, or when the user is no longer a member of the organization or its associated organizations and the organization has chosen to hide the names of removed users. Otherwise, the name stays populated for removed users. Rows for system-minted service accounts render the service name (for example, `"Claude Security"` for usage by Anthropic's security-patching service) or null.388389  - `user_id: string`390391    Tagged user ID.392393### Beta Connector Office Product Metrics394395- `BetaConnectorOfficeProductMetrics object`396397  Office Agent activity metrics for a single connector on a given day within one Office product.398399  - `distinct_session_connector_used_count: number or null`400401    Number of distinct Office Agent sessions in which the connector was used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.402403### Beta Office Product Metrics404405- `BetaOfficeProductMetrics object`406407  Office Agent activity metrics for a single user on a given day within one Office product.408409  - `connectors_used_count: number`410411    Number of MCP connector invocations412413  - `distinct_connectors_used_count: number or null`414415    Number of distinct MCP connectors used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.416417  - `distinct_session_count: number or null`418419    Number of distinct Office Agent sessions. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.420421  - `distinct_skills_used_count: number or null`422423    Number of distinct skills used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.424425  - `message_count: number`426427    Number of messages sent428429  - `skills_used_count: number`430431    Number of skill invocations432433### Beta Skill Office Product Metrics434435- `BetaSkillOfficeProductMetrics object`436437  Office Agent activity metrics for a single skill on a given day within one Office product.438439  - `distinct_session_skill_used_count: number or null`440441    Number of distinct Office Agent sessions in which the skill was used. A skill counts as used only when it is explicitly activated — the model (or the user, via the skill's slash command) invokes it, reading its instructions into context as part of that activation. Skills that are merely installed or listed as available, or whose content reaches the context without an activation (preloaded, hook-injected, or read as a plain file), are not counted. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.442443### Beta Tool Action Counts444445- `BetaToolActionCounts object`446447  Accepted/rejected counts for a single Claude Code tool type.448449  - `accepted_count: number`450451    Number of tool proposals accepted452453  - `rejected_count: number`454455    Number of tool proposals rejected456457## Analytics › Usage458459### Get Token Usage Over Time460461**GET** `/v1/organizations/analytics/usage_report`462463Get token usage over time across a date range.464465Returns token usage bucketed by minute, hour, or day, optionally broken466down by product, model, context window, inference region, or speed.467Available to organizations on a Claude Enterprise plan. Requires an API468key with the `read:analytics` scope.469470#### Query parameters471472- `starting_at: string`473474  Start of range, inclusive. RFC 3339 tz-aware. Must be within the last 365 days and no earlier than 2026-01-01T00:00:00Z.475476  format: date-time477478- `bucket_width: optional "1d" or "1h" or "1m"`479480  Time bucket granularity.481482  default: 1d483484  - `"1d"`485486  - `"1h"`487488  - `"1m"`489490- `claude_tag_categories: optional array of "dm" or "engaged" or "monitoring" or 2 more`491492  Filter to Claude Tag (Claude in Slack) usage in specific spend categories. Usage with no category never matches. `dm` usage is reported under the user's product rather than `claude-tag`, so combining this filter with `products[]=claude-tag` excludes it. Use `group_by[]=claude_tag_category` to break out per-category values.493494  maxItems: 100495496  - `"dm"`497498  - `"engaged"`499500  - `"monitoring"`501502  - `"proactive"`503504  - `"scheduled"`505506- `claude_tag_user_ids: optional array of string`507508  Filter to Claude Tag (Claude in Slack) usage attributed to specific Slack users, by Slack user ID (for example `U0123ABCDEF`), not claude.ai user ID. Usage that is not Claude Tag, and Claude Tag usage not attributed to a single user, never matches. Use `group_by[]=claude_tag_user_id` to break out per-user values.509510  maxItems: 100511512- `context_windows: optional array of "0-200k" or "200k-1M"`513514  Filter to specific context-window pricing tiers. Use `group_by[]=context_window` to break out per-tier values.515516  maxItems: 100517518  - `"0-200k"`519520  - `"200k-1M"`521522- `ending_at: optional string`523524  End of range, exclusive. When omitted, defaults to the earlier of now and `starting_at` + 31 days. The range may span at most 31 days.525526  format: date-time527528- `group_by: optional array of "claude_tag_category" or "claude_tag_user_id" or "context_window" or 6 more`529530  Dimensions to break each time bucket out by. Defaults to no grouping (one total per bucket). Each bucket reports at most its top 100 groups; a group beyond that cap has no row in that bucket (there is no remainder row), so grouped buckets are not exhaustive when a dimension has more than 100 distinct values.531532  maxItems: 100533534  - `"claude_tag_category"`535536  - `"claude_tag_user_id"`537538  - `"context_window"`539540  - `"inference_geo"`541542  - `"model"`543544  - `"product"`545546  - `"rbac_group_id"`547548  - `"slack_channel_id"`549550  - `"speed"`551552- `inference_geos: optional array of "global" or "not_available" or "us"`553554  Filter to specific inference regions. `not_available` matches rows where the region is unset. Use `group_by[]=inference_geo` to break out per-region values.555556  maxItems: 100557558  - `"global"`559560  - `"not_available"`561562  - `"us"`563564- `limit: optional number`565566  Maximum number of time buckets per page. Defaults and caps vary by `bucket_width` (`1d`: default 7, max 31; `1h`: default 24, max 168; `1m`: default 60, max 256).567568  minimum: 1569570- `models: optional array of string`571572  Models to include. Defaults to all models. Use `group_by[]=model` to break out per-model values.573574  maxItems: 100575576- `page: optional string`577578  Opaque cursor from a previous response's `next_page` field.579580- `products: optional array of "chat" or "claude-tag" or "claude_code" or 4 more`581582  Product surfaces to include. Defaults to all products. Use `group_by[]=product` to break out per-product values.583584  maxItems: 100585586  - `"chat"`587588  - `"claude-tag"`589590  - `"claude_code"`591592  - `"claude_design"`593594  - `"claude_in_chrome"`595596  - `"cowork"`597598  - `"office_agent"`599600- `rbac_group_ids: optional array of string`601602  Filter to usage attributed to specific RBAC groups. Accepts tagged RBAC group IDs (`rbac_group_...`) or bare group UUIDs. A row matches when the user belonged to any of the listed groups on the (UTC) day the usage occurred; usage with no group attribution never matches.603604  maxItems: 100605606- `slack_channel_ids: optional array of string`607608  Filter to usage originating from specific Slack channels. Use `group_by[]=slack_channel_id` to break out per-channel values.609610  maxItems: 100611612- `speeds: optional array of "fast" or "standard"`613614  Filter to fast or standard inference mode. Use `group_by[]=speed` to break out per-mode values.615616  maxItems: 100617618  - `"fast"`619620  - `"standard"`621622- `user_ids: optional array of string`623624  Filter to specific users by tagged user ID.625626  maxItems: 100627628#### Returns629630- `BetaUsageBucket object`631632  - `data: array of object`633634    Time buckets for this page, oldest first: one per `bucket_width` interval, including intervals with no data (their `results` list is empty). A page holds at most `limit` buckets.635636    - `ending_at: string`637638      End of the time bucket (exclusive) in RFC 3339 format.639640      format: date-time641642    - `results: array of object`643644      Rows for this time bucket. Empty when the bucket has no data; otherwise a single combined row when `group_by[]` is omitted, or one row per group (subject to the per-bucket group cap described on the `group_by[]` parameter).645646      - `cache_creation: BetaCacheCreation`647648        The number of input tokens for cache creation.649650        - `ephemeral_1h_input_tokens: number`651652          The number of input tokens used to create the 1 hour cache entry.653654          default: 0, minimum: 0655656        - `ephemeral_5m_input_tokens: number`657658          The number of input tokens used to create the 5 minute cache entry.659660          default: 0, minimum: 0661662      - `cache_read_input_tokens: number`663664        The number of input tokens read from the cache.665666      - `claude_tag_category: "dm" or "engaged" or "monitoring" or 2 more or null`667668        Claude Tag (Claude in Slack) spend category: `engaged` (a person addressed Claude in a channel or thread), `proactive` (Claude responded without being addressed), `scheduled` (a scheduled routine ran), `monitoring` (Claude watching a channel it was asked to monitor), or `dm` (direct messages with Claude). Populated only when `claude_tag_category` is in `group_by[]`; null for usage that is not Claude Tag. Direct-message usage is billed to the individual user and is reported under that user's product, not under `claude-tag`. New categories may be added over time.669670        - `"dm"`671672        - `"engaged"`673674        - `"monitoring"`675676        - `"proactive"`677678        - `"scheduled"`679680      - `claude_tag_user_id: string or null`681682        Slack user ID (for example `U0123ABCDEF`) of the member the Claude Tag (Claude in Slack) usage is attributed to, not a claude.ai user ID. Populated only when `claude_tag_user_id` is in `group_by[]`; null for usage that is not Claude Tag and for Claude Tag usage that is not attributed to a single user (for example `monitoring`, and `proactive` usage Claude initiated), so per-user rows can sum to less than the Claude Tag total. Cannot be combined with `group_by[]=rbac_group_id` or the `rbac_group_ids[]` filter.683684      - `context_window: "0-200k" or "200k-1M" or null`685686        Context-window pricing tier of the usage or cost. Null unless `context_window` is in `group_by[]`; it can also be null on grouped rows with no context-window tier, such as code execution.687688        - `"0-200k"`689690        - `"200k-1M"`691692      - `inference_geo: "global" or "us" or null`693694        Inference region of the usage or cost. Null unless `inference_geo` is in `group_by[]`; it can also be null on grouped rows where the region is not set (the rows that `inference_geos[]=not_available` matches).695696        - `"global"`697698        - `"us"`699700      - `model: string or null`701702        Model that produced the usage or cost, as a model name in the form the `models[]` filter accepts (for example, `claude-opus-5`). Null unless `model` is in `group_by[]`; it can also be null on grouped rows whose usage or cost is not attributed to a specific model, such as code execution.703704      - `output_tokens: number`705706        The number of output tokens generated.707708      - `product: string or null`709710        Product surface that produced the usage or cost. Null unless product is in `group_by[]`; it can also be null on grouped rows whose usage cannot be attributed to a known surface. Values include `chat`, `claude_code`, `cowork`, `office_agent`, `claude_in_chrome`, `claude_design`, and `claude-tag`. `claude-tag` is Claude Tag, the Claude product in Slack. Some unattributed usage is reported as "other".711712      - `rbac_group_id: string or null`713714        RBAC group (team) the usage is attributed to, in the public tagged `rbac_group_...` spelling — the same spelling the activity resources use for this key, so the same team has one id across resources and it round-trips as an `rbac_group_ids[]` filter value. Populated only when `rbac_group_id` is in `group_by[]`. Any-membership semantics: a user in several groups contributes their full usage to each of those groups' rows, so the named-group rows overlap and their sum can exceed the org total. A null value is the single unassigned row: users in no group on that (UTC) day. For the true org total, run the same query without `group_by[]`.715716      - `requests: number or null`717718        Number of API requests in this row's scope. For sandbox / code-execution events, this counts execution spans rather than HTTP requests (these rows surface with `product: null`).719720      - `server_tool_use: object`721722        Server-side tool usage metrics.723724        - `web_search_requests: number`725726          The number of web search requests made.727728      - `slack_channel_id: string or null`729730        Slack channel the usage originated from. Populated only when `slack_channel_id` is in `group_by[]`; null for usage outside Slack (and for rows recorded before channel attribution was enabled).731732      - `speed: "fast" or "standard" or null`733734        Inference speed mode of the usage or cost: `fast` or `standard`. Null unless `speed` is in `group_by[]`.735736        - `"fast"`737738        - `"standard"`739740      - `uncached_input_tokens: number`741742        The number of uncached input tokens processed.743744    - `starting_at: string`745746      Start of the time bucket (inclusive) in RFC 3339 format.747748      format: date-time749750  - `data_refreshed_at: string or null`751752    RFC 3339 timestamp of the export this response was served from. Null when no export yet covers any part of the requested range, in which case every bucket's `results` list is empty. Buckets beyond this watermark are incomplete; for stable results, set `ending_at` to this value or earlier. Data is typically refreshed every 4 hours but not final until about 30 days after the usage date (late-arriving events, reconciliation adjustments).753754    format: date-time755756  - `has_more: boolean`757758    Whether another page is available. When true, pass `next_page` as the `page` parameter to fetch it.759760  - `next_page: string or null`761762    Opaque cursor for the next page, or null when `has_more` is false. Pass it as the `page` parameter, keeping the other parameters unchanged. A cursor can expire after the underlying data refreshes; the request then returns HTTP 410 and pagination must restart from the first page.763764  - `organization_id: string`765766    ID of the Organization.767768#### Example769770```bash771curl https://api.anthropic.com/v1/organizations/analytics/usage_report \772    -H 'anthropic-version: 2023-06-01' \773    -H "X-Api-Key: $ANTHROPIC_API_KEY"774```775776##### Response (200)777778```json779{780  "data": [781    {782      "ending_at": "2019-12-27T18:11:19.117Z",783      "results": [784        {785          "cache_creation": {786            "ephemeral_1h_input_tokens": 0,787            "ephemeral_5m_input_tokens": 0788          },789          "cache_read_input_tokens": 0,790          "claude_tag_category": "dm",791          "claude_tag_user_id": "U0123ABCDEF",792          "context_window": "0-200k",793          "inference_geo": "global",794          "model": "claude-opus-5",795          "output_tokens": 0,796          "product": "chat",797          "rbac_group_id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",798          "requests": 0,799          "server_tool_use": {800            "web_search_requests": 10801          },802          "slack_channel_id": "C0123ABCDEF",803          "speed": "fast",804          "uncached_input_tokens": 0805        }806      ],807      "starting_at": "2019-12-27T18:11:19.117Z"808    }809  ],810  "data_refreshed_at": "2019-12-27T18:11:19.117Z",811  "has_more": true,812  "next_page": "next_page",813  "organization_id": "org_013FP9SaFPBg7Kw7fetjn6cF"814}815```816817### Get Per-User Token Usage818819**GET** `/v1/organizations/analytics/user_usage_report`820821Get per-user token usage across a date range.822823Returns one row per user, ranked by the chosen token metric. Use this to824see which users consume the most tokens. Only usage attributable to a825seat user is included; for organization-wide totals including direct826API-key and automation traffic, use the bucketed827`/v1/organizations/analytics/usage_report` endpoint. Available to828organizations on a Claude Enterprise plan. Requires an API key with the829`read:analytics` scope.830831#### Query parameters832833- `starting_at: string`834835  Start of range, inclusive. RFC 3339 tz-aware. Must be within the last 365 days and no earlier than 2026-01-01T00:00:00Z.836837  format: date-time838839- `bucket_width: optional "1d" or "1h" or "1m"`840841  Time-bucket granularity. When set, each row's `starting_at` and `ending_at` are populated and one actor may span several rows (one per time bucket with usage). The time bucket counts toward `limit`, so one page can return multiple rows for the same actor. `ending_at` is required when `bucket_width` is set, and with `bucket_width="1m"` the range may span at most 24 hours. When omitted, each row aggregates the full `[starting_at, ending_at)` range.842843  - `"1d"`844845  - `"1h"`846847  - `"1m"`848849- `claude_tag_categories: optional array of "dm" or "engaged" or "monitoring" or 2 more`850851  Filter to Claude Tag (Claude in Slack) usage in specific spend categories. Usage with no category never matches. `dm` usage is reported under the user's product rather than `claude-tag`, so combining this filter with `products[]=claude-tag` excludes it. Use `group_by[]=claude_tag_category` to break out per-category values.852853  maxItems: 100854855  - `"dm"`856857  - `"engaged"`858859  - `"monitoring"`860861  - `"proactive"`862863  - `"scheduled"`864865- `claude_tag_user_ids: optional array of string`866867  Filter to Claude Tag (Claude in Slack) usage attributed to specific Slack users, by Slack user ID (for example `U0123ABCDEF`), not claude.ai user ID. Usage that is not Claude Tag, and Claude Tag usage not attributed to a single user, never matches. Use `group_by[]=claude_tag_user_id` to break out per-user values.868869  maxItems: 100870871- `context_windows: optional array of "0-200k" or "200k-1M"`872873  Filter to specific context-window pricing tiers. Use `group_by[]=context_window` to break out per-tier values.874875  maxItems: 100876877  - `"0-200k"`878879  - `"200k-1M"`880881- `ending_at: optional string`882883  End of range, exclusive. When omitted, defaults to the earlier of now and `starting_at` + 31 days. The range may span at most 31 days.884885  format: date-time886887- `exclude_deleted_users: optional boolean`888889  If true, omit rows for users who are deleted (`deleted: true`). A page may contain fewer than `limit` rows; use `has_more` and `next_page` to paginate as usual.890891  default: false892893- `group_by: optional array of "claude_tag_category" or "claude_tag_user_id" or "context_window" or 6 more`894895  Break each actor's row out by the given dimensions. Accepts the same values as the bucketed `/usage_report` endpoint. `limit` bounds (actor × time bucket × dimension) rows — with dimensions or `bucket_width` present, one actor may span several rows.896897  maxItems: 100898899  - `"claude_tag_category"`900901  - `"claude_tag_user_id"`902903  - `"context_window"`904905  - `"inference_geo"`906907  - `"model"`908909  - `"product"`910911  - `"rbac_group_id"`912913  - `"slack_channel_id"`914915  - `"speed"`916917- `inference_geos: optional array of "global" or "not_available" or "us"`918919  Filter to specific inference regions. `not_available` matches rows where the region is unset. Use `group_by[]=inference_geo` to break out per-region values.920921  maxItems: 100922923  - `"global"`924925  - `"not_available"`926927  - `"us"`928929- `limit: optional number`930931  Number of rows per page (1-1000, default 20). One row per actor unless `group_by[]` or `bucket_width` splits an actor across rows; `cost_type`/`token_type` fan-out rows (cost endpoint only) are the exception — they do not count toward this limit, so `data` can exceed it.932933  default: 20, maximum: 1000, minimum: 1934935- `models: optional array of string`936937  Models to include. Defaults to all models. Use `group_by[]=model` to break out per-model values.938939  maxItems: 100940941- `order: optional "asc" or "desc"`942943  Sort direction. Defaults to `desc`.944945  default: desc946947  - `"asc"`948949  - `"desc"`950951- `order_by: optional "output_tokens" or "requests" or "total_tokens" or "uncached_input_tokens"`952953  Metric to rank actors by. Defaults to `total_tokens`.954955  default: total_tokens956957  - `"output_tokens"`958959  - `"requests"`960961  - `"total_tokens"`962963  - `"uncached_input_tokens"`964965- `page: optional string`966967  Opaque cursor from a previous response's `next_page` field.968969- `products: optional array of "chat" or "claude-tag" or "claude_code" or 4 more`970971  Product surfaces to include. Defaults to all products.972973  maxItems: 100974975  - `"chat"`976977  - `"claude-tag"`978979  - `"claude_code"`980981  - `"claude_design"`982983  - `"claude_in_chrome"`984985  - `"cowork"`986987  - `"office_agent"`988989- `rbac_group_ids: optional array of string`990991  Filter to usage attributed to specific RBAC groups. Accepts tagged RBAC group IDs (`rbac_group_...`) or bare group UUIDs. A row matches when the user belonged to any of the listed groups on the (UTC) day the usage occurred; usage with no group attribution never matches.992993  maxItems: 100994995- `slack_channel_ids: optional array of string`996997  Filter to usage originating from specific Slack channels. Use `group_by[]=slack_channel_id` to break out per-channel values.998999  maxItems: 10010001001- `speeds: optional array of "fast" or "standard"`10021003  Filter to fast or standard inference mode. Use `group_by[]=speed` to break out per-mode values.10041005  maxItems: 10010061007  - `"fast"`10081009  - `"standard"`10101011- `user_ids: optional array of string`10121013  Filter to specific users by tagged user ID.10141015  maxItems: 10010161017#### Returns10181019- `BetaUserUsage object`10201021  - `data: array of object`10221023    Rows for this page, ranked by `order_by` in the `order` direction. One row per user, or several per user when `group_by[]` or `bucket_width` breaks that user's usage or cost out across rows. Rows split out by `cost_type` or `token_type` (cost endpoint only) stay adjacent and are ranked as one unit.10241025    - `actor: BetaAnalyticsUserActor`10261027      The user this row's usage or cost is attributed to. Always a `user_actor`.10281029      - `type: "user_actor"`10301031        Actor type. Always `"user_actor"`.10321033      - `deleted: boolean`10341035        True when the account has been deleted, or when the user is no longer a member of the organization or its associated organizations (for example, their membership was removed or they were deprovisioned via your identity provider). `email` stays populated for removed users and is null when the account has been deleted. `name` follows the rules described on that field. The `user_id` is still populated for reconciliation.10361037      - `email: string or null`10381039        The user's email address, including for users who are no longer members of the organization or its associated organizations. Null when the account has been deleted (check `deleted`) and for system-minted service accounts, which have no person's mailbox behind them (check `name`).10401041      - `name: string or null`10421043        The user's full name. Null when the user has not set a name. Returns `"Deleted User"` when the account itself has been deleted, or when the user is no longer a member of the organization or its associated organizations and the organization has chosen to hide the names of removed users. Otherwise, the name stays populated for removed users. Rows for system-minted service accounts render the service name (for example, `"Claude Security"` for usage by Anthropic's security-patching service) or null.10441045      - `user_id: string`10461047        Tagged user ID.10481049    - `cache_creation: BetaCacheCreation`10501051      The number of input tokens for cache creation.10521053      - `ephemeral_1h_input_tokens: number`10541055        The number of input tokens used to create the 1 hour cache entry.10561057        default: 0, minimum: 010581059      - `ephemeral_5m_input_tokens: number`10601061        The number of input tokens used to create the 5 minute cache entry.10621063        default: 0, minimum: 010641065    - `cache_read_input_tokens: number`10661067      The number of input tokens read from the cache.10681069    - `claude_tag_category: "dm" or "engaged" or "monitoring" or 2 more or null`10701071      Claude Tag (Claude in Slack) spend category: `engaged` (a person addressed Claude in a channel or thread), `proactive` (Claude responded without being addressed), `scheduled` (a scheduled routine ran), `monitoring` (Claude watching a channel it was asked to monitor), or `dm` (direct messages with Claude). Populated only when `claude_tag_category` is in `group_by[]`; null for usage that is not Claude Tag. Direct-message usage is billed to the individual user and is reported under that user's product, not under `claude-tag`. New categories may be added over time.10721073      - `"dm"`10741075      - `"engaged"`10761077      - `"monitoring"`10781079      - `"proactive"`10801081      - `"scheduled"`10821083    - `claude_tag_user_id: string or null`10841085      Slack user ID (for example `U0123ABCDEF`) of the member the Claude Tag (Claude in Slack) usage is attributed to, not a claude.ai user ID. Populated only when `claude_tag_user_id` is in `group_by[]`; null for usage that is not Claude Tag and for Claude Tag usage that is not attributed to a single user (for example `monitoring`, and `proactive` usage Claude initiated), so per-user rows can sum to less than the Claude Tag total. Cannot be combined with `group_by[]=rbac_group_id` or the `rbac_group_ids[]` filter.10861087    - `context_window: "0-200k" or "200k-1M" or null`10881089      Context-window pricing tier of the usage or cost. Null unless `context_window` is in `group_by[]`; it can also be null on grouped rows with no context-window tier, such as code execution.10901091      - `"0-200k"`10921093      - `"200k-1M"`10941095    - `ending_at: string or null`10961097      End of the row's UTC time bucket (exclusive), as an RFC 3339 timestamp; equal to `starting_at` plus one `bucket_width`. Null unless `bucket_width` is set.10981099      format: date-time11001101    - `inference_geo: "global" or "us" or null`11021103      Inference region of the usage or cost. Null unless `inference_geo` is in `group_by[]`; it can also be null on grouped rows where the region is not set (the rows that `inference_geos[]=not_available` matches).11041105      - `"global"`11061107      - `"us"`11081109    - `model: string or null`11101111      Model that produced the usage or cost, as a model name in the form the `models[]` filter accepts (for example, `claude-opus-5`). Null unless `model` is in `group_by[]`; it can also be null on grouped rows whose usage or cost is not attributed to a specific model, such as code execution.11121113    - `output_tokens: number`11141115      The number of output tokens generated.11161117    - `product: string or null`11181119      Product surface that produced the usage or cost. Null unless product is in `group_by[]`; it can also be null on grouped rows whose usage cannot be attributed to a known surface. Values include `chat`, `claude_code`, `cowork`, `office_agent`, `claude_in_chrome`, `claude_design`, and `claude-tag`. `claude-tag` is Claude Tag, the Claude product in Slack. Some unattributed usage is reported as "other".11201121    - `rbac_group_id: string or null`11221123      RBAC group (team) the usage is attributed to, in the public tagged `rbac_group_...` spelling — the same spelling the activity resources use for this key, so the same team has one id across resources and it round-trips as an `rbac_group_ids[]` filter value. Populated only when `rbac_group_id` is in `group_by[]`. Any-membership semantics: a user in several groups contributes their full usage to each of those groups' rows, so the named-group rows overlap and their sum can exceed the org total. A null value is the single unassigned row: users in no group on that (UTC) day. For the true org total, run the same query without `group_by[]`.11241125    - `requests: number or null`11261127      Number of API requests in this row's scope. For sandbox / code-execution events, this counts execution spans rather than HTTP requests (these rows surface with `product: null`).11281129    - `server_tool_use: object`11301131      Server-side tool usage metrics.11321133      - `web_search_requests: number`11341135        The number of web search requests made.11361137    - `slack_channel_id: string or null`11381139      Slack channel the usage originated from. Populated only when `slack_channel_id` is in `group_by[]`; null for usage outside Slack (and for rows recorded before channel attribution was enabled).11401141    - `speed: "fast" or "standard" or null`11421143      Inference speed mode of the usage or cost: `fast` or `standard`. Null unless `speed` is in `group_by[]`.11441145      - `"fast"`11461147      - `"standard"`11481149    - `starting_at: string or null`11501151      Start of the row's UTC time bucket (inclusive), as an RFC 3339 timestamp. Null unless `bucket_width` is set; without `bucket_width`, each row aggregates the full requested range.11521153      format: date-time11541155    - `total_tokens: number`11561157      Total token count across all token types. This is the value the default `order_by` (`total_tokens`) sorts on.11581159    - `uncached_input_tokens: number`11601161      The number of uncached input tokens processed.11621163  - `data_refreshed_at: string or null`11641165    RFC 3339 timestamp of the export this response was served from. Null when no export yet covers any part of the requested range, in which case `data` is empty. Data beyond this watermark is incomplete; for stable results, set `ending_at` to this value or earlier. Data is typically refreshed every 4 hours but not final until about 30 days after the usage date (late-arriving events, reconciliation adjustments).11661167    format: date-time11681169  - `has_more: boolean`11701171    Whether another page is available. When true, pass `next_page` as the `page` parameter to fetch it.11721173  - `next_page: string or null`11741175    Opaque cursor for the next page, or null when `has_more` is false. Pass it as the `page` parameter, keeping the other parameters unchanged. A cursor can expire after the underlying data refreshes; the request then returns HTTP 410 and pagination must restart from the first page.11761177  - `organization_id: string`11781179    ID of the Organization.11801181#### Example11821183```bash1184curl https://api.anthropic.com/v1/organizations/analytics/user_usage_report \1185    -H 'anthropic-version: 2023-06-01' \1186    -H "X-Api-Key: $ANTHROPIC_API_KEY"1187```11881189##### Response (200)11901191```json1192{1193  "data": [1194    {1195      "actor": {1196        "deleted": true,1197        "email": "jane@example.com",1198        "name": "Jane Smith",1199        "type": "user_actor",1200        "user_id": "user_01AbCdEfGhIjKlMnOpQrSt"1201      },1202      "cache_creation": {1203        "ephemeral_1h_input_tokens": 0,1204        "ephemeral_5m_input_tokens": 01205      },1206      "cache_read_input_tokens": 3200000,1207      "claude_tag_category": "dm",1208      "claude_tag_user_id": "U0123ABCDEF",1209      "context_window": "0-200k",1210      "ending_at": "2019-12-27T18:11:19.117Z",1211      "inference_geo": "global",1212      "model": "claude-opus-5",1213      "output_tokens": 891000,1214      "product": "chat",1215      "rbac_group_id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",1216      "requests": 128,1217      "server_tool_use": {1218        "web_search_requests": 101219      },1220      "slack_channel_id": "C0123ABCDEF",1221      "speed": "fast",1222      "starting_at": "2019-12-27T18:11:19.117Z",1223      "total_tokens": 5377000,1224      "uncached_input_tokens": 12845001225    }1226  ],1227  "data_refreshed_at": "2019-12-27T18:11:19.117Z",1228  "has_more": true,1229  "next_page": "next_page",1230  "organization_id": "org_013FP9SaFPBg7Kw7fetjn6cF"1231}1232```12331234## Analytics › Cost12351236### Get Cost Over Time12371238**GET** `/v1/organizations/analytics/cost_report`12391240Get cost in USD over time across a date range.12411242Returns cost bucketed by minute, hour, or day, optionally broken down by1243product, model, context window, inference region, speed, cost type, or1244token type. Available to organizations on a Claude Enterprise plan.1245Requires an API key with the `read:analytics` scope.12461247#### Query parameters12481249- `starting_at: string`12501251  Start of range, inclusive. RFC 3339 tz-aware. Must be within the last 365 days and no earlier than 2026-01-01T00:00:00Z.12521253  format: date-time12541255- `bucket_width: optional "1d" or "1h" or "1m"`12561257  Time bucket granularity.12581259  default: 1d12601261  - `"1d"`12621263  - `"1h"`12641265  - `"1m"`12661267- `claude_tag_categories: optional array of "dm" or "engaged" or "monitoring" or 2 more`12681269  Filter to Claude Tag (Claude in Slack) usage in specific spend categories. Usage with no category never matches. `dm` usage is reported under the user's product rather than `claude-tag`, so combining this filter with `products[]=claude-tag` excludes it. Use `group_by[]=claude_tag_category` to break out per-category values.12701271  maxItems: 10012721273  - `"dm"`12741275  - `"engaged"`12761277  - `"monitoring"`12781279  - `"proactive"`12801281  - `"scheduled"`12821283- `claude_tag_user_ids: optional array of string`12841285  Filter to Claude Tag (Claude in Slack) usage attributed to specific Slack users, by Slack user ID (for example `U0123ABCDEF`), not claude.ai user ID. Usage that is not Claude Tag, and Claude Tag usage not attributed to a single user, never matches. Use `group_by[]=claude_tag_user_id` to break out per-user values.12861287  maxItems: 10012881289- `context_windows: optional array of "0-200k" or "200k-1M"`12901291  Filter to specific context-window pricing tiers. Use `group_by[]=context_window` to break out per-tier values.12921293  maxItems: 10012941295  - `"0-200k"`12961297  - `"200k-1M"`12981299- `ending_at: optional string`13001301  End of range, exclusive. When omitted, defaults to the earlier of now and `starting_at` + 31 days. The range may span at most 31 days.13021303  format: date-time13041305- `group_by: optional array of "claude_tag_category" or "claude_tag_user_id" or "context_window" or 8 more`13061307  Dimensions to break each time bucket out by. Defaults to no grouping (one total per bucket). Each bucket reports at most its top 100 groups; a group beyond that cap has no row in that bucket (there is no remainder row), so grouped buckets are not exhaustive when a dimension has more than 100 distinct values.13081309  maxItems: 10013101311  - `"claude_tag_category"`13121313  - `"claude_tag_user_id"`13141315  - `"context_window"`13161317  - `"cost_type"`13181319  - `"inference_geo"`13201321  - `"model"`13221323  - `"product"`13241325  - `"rbac_group_id"`13261327  - `"slack_channel_id"`13281329  - `"speed"`13301331  - `"token_type"`13321333- `inference_geos: optional array of "global" or "not_available" or "us"`13341335  Filter to specific inference regions. `not_available` matches rows where the region is unset. Use `group_by[]=inference_geo` to break out per-region values.13361337  maxItems: 10013381339  - `"global"`13401341  - `"not_available"`13421343  - `"us"`13441345- `limit: optional number`13461347  Maximum number of time buckets per page. Defaults and caps vary by `bucket_width` (`1d`: default 7, max 31; `1h`: default 24, max 168; `1m`: default 60, max 256).13481349  minimum: 113501351- `models: optional array of string`13521353  Models to include. Defaults to all models. Use `group_by[]=model` to break out per-model values.13541355  maxItems: 10013561357- `page: optional string`13581359  Opaque cursor from a previous response's `next_page` field.13601361- `products: optional array of "chat" or "claude-tag" or "claude_code" or 4 more`13621363  Product surfaces to include. Defaults to all products. Use `group_by[]=product` to break out per-product values.13641365  maxItems: 10013661367  - `"chat"`13681369  - `"claude-tag"`13701371  - `"claude_code"`13721373  - `"claude_design"`13741375  - `"claude_in_chrome"`13761377  - `"cowork"`13781379  - `"office_agent"`13801381- `rbac_group_ids: optional array of string`13821383  Filter to usage attributed to specific RBAC groups. Accepts tagged RBAC group IDs (`rbac_group_...`) or bare group UUIDs. A row matches when the user belonged to any of the listed groups on the (UTC) day the usage occurred; usage with no group attribution never matches.13841385  maxItems: 10013861387- `slack_channel_ids: optional array of string`13881389  Filter to usage originating from specific Slack channels. Use `group_by[]=slack_channel_id` to break out per-channel values.13901391  maxItems: 10013921393- `speeds: optional array of "fast" or "standard"`13941395  Filter to fast or standard inference mode. Use `group_by[]=speed` to break out per-mode values.13961397  maxItems: 10013981399  - `"fast"`14001401  - `"standard"`14021403- `user_ids: optional array of string`14041405  Filter to specific users by tagged user ID.14061407  maxItems: 10014081409#### Returns14101411- `BetaCostBucket object`14121413  - `data: array of object`14141415    Time buckets for this page, oldest first: one per `bucket_width` interval, including intervals with no data (their `results` list is empty). A page holds at most `limit` buckets.14161417    - `ending_at: string`14181419      End of the time bucket (exclusive) in RFC 3339 format.14201421      format: date-time14221423    - `results: array of object`14241425      Rows for this time bucket. Empty when the bucket has no data; otherwise a single combined row when `group_by[]` is omitted, or one row per group (subject to the per-bucket group cap described on the `group_by[]` parameter).14261427      - `amount: string`14281429        Amount (post-discount, pre-credit) in fractional cents.14301431      - `claude_tag_category: "dm" or "engaged" or "monitoring" or 2 more or null`14321433        Claude Tag (Claude in Slack) spend category: `engaged` (a person addressed Claude in a channel or thread), `proactive` (Claude responded without being addressed), `scheduled` (a scheduled routine ran), `monitoring` (Claude watching a channel it was asked to monitor), or `dm` (direct messages with Claude). Populated only when `claude_tag_category` is in `group_by[]`; null for usage that is not Claude Tag. Direct-message usage is billed to the individual user and is reported under that user's product, not under `claude-tag`. New categories may be added over time.14341435        - `"dm"`14361437        - `"engaged"`14381439        - `"monitoring"`14401441        - `"proactive"`14421443        - `"scheduled"`14441445      - `claude_tag_user_id: string or null`14461447        Slack user ID (for example `U0123ABCDEF`) of the member the Claude Tag (Claude in Slack) usage is attributed to, not a claude.ai user ID. Populated only when `claude_tag_user_id` is in `group_by[]`; null for usage that is not Claude Tag and for Claude Tag usage that is not attributed to a single user (for example `monitoring`, and `proactive` usage Claude initiated), so per-user rows can sum to less than the Claude Tag total. Cannot be combined with `group_by[]=rbac_group_id` or the `rbac_group_ids[]` filter.14481449      - `context_window: "0-200k" or "200k-1M" or null`14501451        Context-window pricing tier of the usage or cost. Null unless `context_window` is in `group_by[]`; it can also be null on grouped rows with no context-window tier, such as code execution.14521453        - `"0-200k"`14541455        - `"200k-1M"`14561457      - `cost_type: "code_execution" or "tokens" or "web_search" or null`14581459        Cost component when `group_by[]=cost_type`; null otherwise (amount is the combined total).14601461        - `"code_execution"`14621463        - `"tokens"`14641465        - `"web_search"`14661467      - `currency: "USD"`14681469        Currency code for the cost amount. Currently always `"USD"`.14701471        default: USD14721473      - `inference_geo: "global" or "us" or null`14741475        Inference region of the usage or cost. Null unless `inference_geo` is in `group_by[]`; it can also be null on grouped rows where the region is not set (the rows that `inference_geos[]=not_available` matches).14761477        - `"global"`14781479        - `"us"`14801481      - `list_amount: string`14821483        List-price amount (pre-discount) in fractional cents.14841485      - `model: string or null`14861487        Model that produced the usage or cost, as a model name in the form the `models[]` filter accepts (for example, `claude-opus-5`). Null unless `model` is in `group_by[]`; it can also be null on grouped rows whose usage or cost is not attributed to a specific model, such as code execution.14881489      - `product: string or null`14901491        Product surface that produced the usage or cost. Null unless product is in `group_by[]`; it can also be null on grouped rows whose usage cannot be attributed to a known surface. Values include `chat`, `claude_code`, `cowork`, `office_agent`, `claude_in_chrome`, `claude_design`, and `claude-tag`. `claude-tag` is Claude Tag, the Claude product in Slack. Some unattributed usage is reported as "other".14921493      - `rbac_group_id: string or null`14941495        RBAC group (team) the usage is attributed to, in the public tagged `rbac_group_...` spelling — the same spelling the activity resources use for this key, so the same team has one id across resources and it round-trips as an `rbac_group_ids[]` filter value. Populated only when `rbac_group_id` is in `group_by[]`. Any-membership semantics: a user in several groups contributes their full usage to each of those groups' rows, so the named-group rows overlap and their sum can exceed the org total. A null value is the single unassigned row: users in no group on that (UTC) day. For the true org total, run the same query without `group_by[]`.14961497      - `requests: number or null`14981499        Number of API requests in this row's scope. Null when `group_by` includes `cost_type` or `token_type` (the count has no per-component attribution; read it from the ungrouped response). For sandbox / code-execution events, this counts execution spans rather than HTTP requests (these rows surface with `product: null`).15001501      - `slack_channel_id: string or null`15021503        Slack channel the usage originated from. Populated only when `slack_channel_id` is in `group_by[]`; null for usage outside Slack (and for rows recorded before channel attribution was enabled).15041505      - `speed: "fast" or "standard" or null`15061507        Inference speed mode of the usage or cost: `fast` or `standard`. Null unless `speed` is in `group_by[]`.15081509        - `"fast"`15101511        - `"standard"`15121513      - `token_type: "cache_creation.ephemeral_1h_input_tokens" or "cache_creation.ephemeral_5m_input_tokens" or "cache_read_input_tokens" or 2 more or null`15141515        Token type when `group_by[]=token_type` and `cost_type=tokens`; null otherwise.15161517        - `"cache_creation.ephemeral_1h_input_tokens"`15181519        - `"cache_creation.ephemeral_5m_input_tokens"`15201521        - `"cache_read_input_tokens"`15221523        - `"output_tokens"`15241525        - `"uncached_input_tokens"`15261527    - `starting_at: string`15281529      Start of the time bucket (inclusive) in RFC 3339 format.15301531      format: date-time15321533  - `data_refreshed_at: string or null`15341535    RFC 3339 timestamp of the export this response was served from. Null when no export yet covers any part of the requested range, in which case every bucket's `results` list is empty. Buckets beyond this watermark are incomplete; for stable results, set `ending_at` to this value or earlier. Data is typically refreshed every 4 hours but not final until about 30 days after the usage date (late-arriving events, reconciliation adjustments).15361537    format: date-time15381539  - `has_more: boolean`15401541    Whether another page is available. When true, pass `next_page` as the `page` parameter to fetch it.15421543  - `next_page: string or null`15441545    Opaque cursor for the next page, or null when `has_more` is false. Pass it as the `page` parameter, keeping the other parameters unchanged. A cursor can expire after the underlying data refreshes; the request then returns HTTP 410 and pagination must restart from the first page.15461547  - `organization_id: string`15481549    ID of the Organization.15501551#### Example15521553```bash1554curl https://api.anthropic.com/v1/organizations/analytics/cost_report \1555    -H 'anthropic-version: 2023-06-01' \1556    -H "X-Api-Key: $ANTHROPIC_API_KEY"1557```15581559##### Response (200)15601561```json1562{1563  "data": [1564    {1565      "ending_at": "2019-12-27T18:11:19.117Z",1566      "results": [1567        {1568          "amount": "amount",1569          "claude_tag_category": "dm",1570          "claude_tag_user_id": "U0123ABCDEF",1571          "context_window": "0-200k",1572          "cost_type": "code_execution",1573          "currency": "USD",1574          "inference_geo": "global",1575          "list_amount": "list_amount",1576          "model": "claude-opus-5",1577          "product": "chat",1578          "rbac_group_id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",1579          "requests": 0,1580          "slack_channel_id": "C0123ABCDEF",1581          "speed": "fast",1582          "token_type": "cache_creation.ephemeral_1h_input_tokens"1583        }1584      ],1585      "starting_at": "2019-12-27T18:11:19.117Z"1586    }1587  ],1588  "data_refreshed_at": "2019-12-27T18:11:19.117Z",1589  "has_more": true,1590  "next_page": "next_page",1591  "organization_id": "org_013FP9SaFPBg7Kw7fetjn6cF"1592}1593```15941595### Get Per-User Cost15961597**GET** `/v1/organizations/analytics/user_cost_report`15981599Get per-user cost in USD across a date range.16001601Returns one row per user, ranked by spend. Use this to see which users1602account for the most cost. Only cost attributable to a seat user is1603included; for organization-wide totals including direct API-key and1604automation traffic, use the bucketed1605`/v1/organizations/analytics/cost_report` endpoint. Available to1606organizations on a Claude Enterprise plan. Requires an API key with the1607`read:analytics` scope.16081609#### Query parameters16101611- `starting_at: string`16121613  Start of range, inclusive. RFC 3339 tz-aware. Must be within the last 365 days and no earlier than 2026-01-01T00:00:00Z.16141615  format: date-time16161617- `bucket_width: optional "1d" or "1h" or "1m"`16181619  Time-bucket granularity. When set, each row's `starting_at` and `ending_at` are populated and one actor may span several rows (one per time bucket with usage). The time bucket counts toward `limit`, so one page can return multiple rows for the same actor. `ending_at` is required when `bucket_width` is set, and with `bucket_width="1m"` the range may span at most 24 hours. When omitted, each row aggregates the full `[starting_at, ending_at)` range.16201621  - `"1d"`16221623  - `"1h"`16241625  - `"1m"`16261627- `claude_tag_categories: optional array of "dm" or "engaged" or "monitoring" or 2 more`16281629  Filter to Claude Tag (Claude in Slack) usage in specific spend categories. Usage with no category never matches. `dm` usage is reported under the user's product rather than `claude-tag`, so combining this filter with `products[]=claude-tag` excludes it. Use `group_by[]=claude_tag_category` to break out per-category values.16301631  maxItems: 10016321633  - `"dm"`16341635  - `"engaged"`16361637  - `"monitoring"`16381639  - `"proactive"`16401641  - `"scheduled"`16421643- `claude_tag_user_ids: optional array of string`16441645  Filter to Claude Tag (Claude in Slack) usage attributed to specific Slack users, by Slack user ID (for example `U0123ABCDEF`), not claude.ai user ID. Usage that is not Claude Tag, and Claude Tag usage not attributed to a single user, never matches. Use `group_by[]=claude_tag_user_id` to break out per-user values.16461647  maxItems: 10016481649- `context_windows: optional array of "0-200k" or "200k-1M"`16501651  Filter to specific context-window pricing tiers. Use `group_by[]=context_window` to break out per-tier values.16521653  maxItems: 10016541655  - `"0-200k"`16561657  - `"200k-1M"`16581659- `ending_at: optional string`16601661  End of range, exclusive. When omitted, defaults to the earlier of now and `starting_at` + 31 days. The range may span at most 31 days.16621663  format: date-time16641665- `exclude_deleted_users: optional boolean`16661667  If true, omit rows for users who are deleted (`deleted: true`). A page may contain fewer than `limit` rows; use `has_more` and `next_page` to paginate as usual.16681669  default: false16701671- `group_by: optional array of "claude_tag_category" or "claude_tag_user_id" or "context_window" or 8 more`16721673  Break each actor's row out by the given dimensions. Accepts the same values as the bucketed `/cost_report` endpoint. The `product`, `model`, `context_window`, `inference_geo`, and `speed` dimensions — and the time bucket, when `bucket_width` is set — count toward `limit`. `cost_type` and `token_type` do not: `cost_type` returns one row per cost component (tokens, web search, code execution); `token_type` returns one row per token type, each with `cost_type: "tokens"`; combining both returns the per-token-type rows plus the web-search and code-execution rows. A page can therefore contain more rows than `limit` when `cost_type` or `token_type` is requested.16741675  maxItems: 10016761677  - `"claude_tag_category"`16781679  - `"claude_tag_user_id"`16801681  - `"context_window"`16821683  - `"cost_type"`16841685  - `"inference_geo"`16861687  - `"model"`16881689  - `"product"`16901691  - `"rbac_group_id"`16921693  - `"slack_channel_id"`16941695  - `"speed"`16961697  - `"token_type"`16981699- `inference_geos: optional array of "global" or "not_available" or "us"`17001701  Filter to specific inference regions. `not_available` matches rows where the region is unset. Use `group_by[]=inference_geo` to break out per-region values.17021703  maxItems: 10017041705  - `"global"`17061707  - `"not_available"`17081709  - `"us"`17101711- `limit: optional number`17121713  Number of rows per page (1-1000, default 20). One row per actor unless `group_by[]` or `bucket_width` splits an actor across rows; `cost_type`/`token_type` fan-out rows (cost endpoint only) are the exception — they do not count toward this limit, so `data` can exceed it.17141715  default: 20, maximum: 1000, minimum: 117161717- `models: optional array of string`17181719  Models to include. Defaults to all models. Use `group_by[]=model` to break out per-model values.17201721  maxItems: 10017221723- `order: optional "asc" or "desc"`17241725  Sort direction. Defaults to `desc`.17261727  default: desc17281729  - `"asc"`17301731  - `"desc"`17321733- `order_by: optional "amount" or "list_amount"`17341735  Metric to rank actors by. Defaults to `amount`.17361737  default: amount17381739  - `"amount"`17401741  - `"list_amount"`17421743- `page: optional string`17441745  Opaque cursor from a previous response's `next_page` field.17461747- `products: optional array of "chat" or "claude-tag" or "claude_code" or 4 more`17481749  Product surfaces to include. Defaults to all products.17501751  maxItems: 10017521753  - `"chat"`17541755  - `"claude-tag"`17561757  - `"claude_code"`17581759  - `"claude_design"`17601761  - `"claude_in_chrome"`17621763  - `"cowork"`17641765  - `"office_agent"`17661767- `rbac_group_ids: optional array of string`17681769  Filter to usage attributed to specific RBAC groups. Accepts tagged RBAC group IDs (`rbac_group_...`) or bare group UUIDs. A row matches when the user belonged to any of the listed groups on the (UTC) day the usage occurred; usage with no group attribution never matches.17701771  maxItems: 10017721773- `slack_channel_ids: optional array of string`17741775  Filter to usage originating from specific Slack channels. Use `group_by[]=slack_channel_id` to break out per-channel values.17761777  maxItems: 10017781779- `speeds: optional array of "fast" or "standard"`17801781  Filter to fast or standard inference mode. Use `group_by[]=speed` to break out per-mode values.17821783  maxItems: 10017841785  - `"fast"`17861787  - `"standard"`17881789- `user_ids: optional array of string`17901791  Filter to specific users by tagged user ID.17921793  maxItems: 10017941795#### Returns17961797- `BetaUserCost object`17981799  - `data: array of object`18001801    Rows for this page, ranked by `order_by` in the `order` direction. One row per user, or several per user when `group_by[]` or `bucket_width` breaks that user's usage or cost out across rows. Rows split out by `cost_type` or `token_type` (cost endpoint only) stay adjacent and are ranked as one unit.18021803    - `actor: BetaAnalyticsUserActor`18041805      The user this row's usage or cost is attributed to. Always a `user_actor`.18061807      - `type: "user_actor"`18081809        Actor type. Always `"user_actor"`.18101811      - `deleted: boolean`18121813        True when the account has been deleted, or when the user is no longer a member of the organization or its associated organizations (for example, their membership was removed or they were deprovisioned via your identity provider). `email` stays populated for removed users and is null when the account has been deleted. `name` follows the rules described on that field. The `user_id` is still populated for reconciliation.18141815      - `email: string or null`18161817        The user's email address, including for users who are no longer members of the organization or its associated organizations. Null when the account has been deleted (check `deleted`) and for system-minted service accounts, which have no person's mailbox behind them (check `name`).18181819      - `name: string or null`18201821        The user's full name. Null when the user has not set a name. Returns `"Deleted User"` when the account itself has been deleted, or when the user is no longer a member of the organization or its associated organizations and the organization has chosen to hide the names of removed users. Otherwise, the name stays populated for removed users. Rows for system-minted service accounts render the service name (for example, `"Claude Security"` for usage by Anthropic's security-patching service) or null.18221823      - `user_id: string`18241825        Tagged user ID.18261827    - `amount: string`18281829      Amount (post-discount, pre-credit) in fractional cents (minor units).18301831    - `claude_tag_category: "dm" or "engaged" or "monitoring" or 2 more or null`18321833      Claude Tag (Claude in Slack) spend category: `engaged` (a person addressed Claude in a channel or thread), `proactive` (Claude responded without being addressed), `scheduled` (a scheduled routine ran), `monitoring` (Claude watching a channel it was asked to monitor), or `dm` (direct messages with Claude). Populated only when `claude_tag_category` is in `group_by[]`; null for usage that is not Claude Tag. Direct-message usage is billed to the individual user and is reported under that user's product, not under `claude-tag`. New categories may be added over time.18341835      - `"dm"`18361837      - `"engaged"`18381839      - `"monitoring"`18401841      - `"proactive"`18421843      - `"scheduled"`18441845    - `claude_tag_user_id: string or null`18461847      Slack user ID (for example `U0123ABCDEF`) of the member the Claude Tag (Claude in Slack) usage is attributed to, not a claude.ai user ID. Populated only when `claude_tag_user_id` is in `group_by[]`; null for usage that is not Claude Tag and for Claude Tag usage that is not attributed to a single user (for example `monitoring`, and `proactive` usage Claude initiated), so per-user rows can sum to less than the Claude Tag total. Cannot be combined with `group_by[]=rbac_group_id` or the `rbac_group_ids[]` filter.18481849    - `context_window: "0-200k" or "200k-1M" or null`18501851      Context-window pricing tier of the usage or cost. Null unless `context_window` is in `group_by[]`; it can also be null on grouped rows with no context-window tier, such as code execution.18521853      - `"0-200k"`18541855      - `"200k-1M"`18561857    - `cost_type: "code_execution" or "tokens" or "web_search" or null`18581859      Cost component breakdown; null when returning the combined total.18601861      - `"code_execution"`18621863      - `"tokens"`18641865      - `"web_search"`18661867    - `currency: "USD"`18681869      Currency code for the cost amount. Currently always `"USD"`.18701871      default: USD18721873    - `ending_at: string or null`18741875      End of the row's UTC time bucket (exclusive), as an RFC 3339 timestamp; equal to `starting_at` plus one `bucket_width`. Null unless `bucket_width` is set.18761877      format: date-time18781879    - `inference_geo: "global" or "us" or null`18801881      Inference region of the usage or cost. Null unless `inference_geo` is in `group_by[]`; it can also be null on grouped rows where the region is not set (the rows that `inference_geos[]=not_available` matches).18821883      - `"global"`18841885      - `"us"`18861887    - `list_amount: string`18881889      List-price amount (pre-discount) in fractional cents.18901891    - `model: string or null`18921893      Model that produced the usage or cost, as a model name in the form the `models[]` filter accepts (for example, `claude-opus-5`). Null unless `model` is in `group_by[]`; it can also be null on grouped rows whose usage or cost is not attributed to a specific model, such as code execution.18941895    - `product: string or null`18961897      Product surface that produced the usage or cost. Null unless product is in `group_by[]`; it can also be null on grouped rows whose usage cannot be attributed to a known surface. Values include `chat`, `claude_code`, `cowork`, `office_agent`, `claude_in_chrome`, `claude_design`, and `claude-tag`. `claude-tag` is Claude Tag, the Claude product in Slack. Some unattributed usage is reported as "other".18981899    - `rbac_group_id: string or null`19001901      RBAC group (team) the usage is attributed to, in the public tagged `rbac_group_...` spelling — the same spelling the activity resources use for this key, so the same team has one id across resources and it round-trips as an `rbac_group_ids[]` filter value. Populated only when `rbac_group_id` is in `group_by[]`. Any-membership semantics: a user in several groups contributes their full usage to each of those groups' rows, so the named-group rows overlap and their sum can exceed the org total. A null value is the single unassigned row: users in no group on that (UTC) day. For the true org total, run the same query without `group_by[]`.19021903    - `requests: number or null`19041905      Number of API requests in this row's scope. Null when `group_by` includes `cost_type` or `token_type` (the count has no per-component attribution; read it from the ungrouped response). For sandbox / code-execution events, this counts execution spans rather than HTTP requests (these rows surface with `product: null`).19061907    - `slack_channel_id: string or null`19081909      Slack channel the usage originated from. Populated only when `slack_channel_id` is in `group_by[]`; null for usage outside Slack (and for rows recorded before channel attribution was enabled).19101911    - `speed: "fast" or "standard" or null`19121913      Inference speed mode of the usage or cost: `fast` or `standard`. Null unless `speed` is in `group_by[]`.19141915      - `"fast"`19161917      - `"standard"`19181919    - `starting_at: string or null`19201921      Start of the row's UTC time bucket (inclusive), as an RFC 3339 timestamp. Null unless `bucket_width` is set; without `bucket_width`, each row aggregates the full requested range.19221923      format: date-time19241925    - `token_type: "cache_creation.ephemeral_1h_input_tokens" or "cache_creation.ephemeral_5m_input_tokens" or "cache_read_input_tokens" or 2 more or null`19261927      Token type when `cost_type` is `tokens`; null otherwise.19281929      - `"cache_creation.ephemeral_1h_input_tokens"`19301931      - `"cache_creation.ephemeral_5m_input_tokens"`19321933      - `"cache_read_input_tokens"`19341935      - `"output_tokens"`19361937      - `"uncached_input_tokens"`19381939  - `data_refreshed_at: string or null`19401941    RFC 3339 timestamp of the export this response was served from. Null when no export yet covers any part of the requested range, in which case `data` is empty. Data beyond this watermark is incomplete; for stable results, set `ending_at` to this value or earlier. Data is typically refreshed every 4 hours but not final until about 30 days after the usage date (late-arriving events, reconciliation adjustments).19421943    format: date-time19441945  - `has_more: boolean`19461947    Whether another page is available. When true, pass `next_page` as the `page` parameter to fetch it.19481949  - `next_page: string or null`19501951    Opaque cursor for the next page, or null when `has_more` is false. Pass it as the `page` parameter, keeping the other parameters unchanged. A cursor can expire after the underlying data refreshes; the request then returns HTTP 410 and pagination must restart from the first page.19521953  - `organization_id: string`19541955    ID of the Organization.19561957#### Example19581959```bash1960curl https://api.anthropic.com/v1/organizations/analytics/user_cost_report \1961    -H 'anthropic-version: 2023-06-01' \1962    -H "X-Api-Key: $ANTHROPIC_API_KEY"1963```19641965##### Response (200)19661967```json1968{1969  "data": [1970    {1971      "actor": {1972        "deleted": true,1973        "email": "jane@example.com",1974        "name": "Jane Smith",1975        "type": "user_actor",1976        "user_id": "user_01AbCdEfGhIjKlMnOpQrSt"1977      },1978      "amount": "41280.000000",1979      "claude_tag_category": "dm",1980      "claude_tag_user_id": "U0123ABCDEF",1981      "context_window": "0-200k",1982      "cost_type": "code_execution",1983      "currency": "USD",1984      "ending_at": "2019-12-27T18:11:19.117Z",1985      "inference_geo": "global",1986      "list_amount": "51600.000000",1987      "model": "claude-opus-5",1988      "product": "chat",1989      "rbac_group_id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",1990      "requests": 128,1991      "slack_channel_id": "C0123ABCDEF",1992      "speed": "fast",1993      "starting_at": "2019-12-27T18:11:19.117Z",1994      "token_type": "cache_creation.ephemeral_1h_input_tokens"1995    }1996  ],1997  "data_refreshed_at": "2019-12-27T18:11:19.117Z",1998  "has_more": true,1999  "next_page": "next_page",2000  "organization_id": "org_013FP9SaFPBg7Kw7fetjn6cF"2001}2002```20032004## Analytics › Users20052006### List User Activity20072008**GET** `/v1/organizations/analytics/users`20092010Get per-user activity for a given day, with cursor-based pagination.20112012Returns activity metrics for each user in the organization, sorted by email2013address. Use `group_by[]` for per-RBAC-group aggregates, or `filter[]` to2014scope results to specific members, groups, or a chat project. Available2015to organizations on a Claude Enterprise plan. Requires an API key with2016the `read:analytics` scope.20172018#### Query parameters20192020- `date: optional string`20212022  UTC date in YYYY-MM-DD format. The day to get user activity for. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.20232024  format: date20252026- `ending_date: optional string`20272028  UTC date in YYYY-MM-DD format. End of the date range (exclusive); only valid with `starting_date`. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day), so this can be at most today — which is also the default when omitted, resolved once when the first page is served and reused for the rest of the pagination sequence. At most 366 days after `starting_date`.20292030  format: date20312032- `filter: optional array of string`20332034  Filters as `dimension:value`, e.g. `filter[]=rbac_group_id:{id}`. Repeat the param for OR within a dimension and across dimensions for AND. Supported dimensions on this endpoint: `project_id`, `rbac_group_id`, `user_id`. Value forms: `project_id` takes a tagged project id (`claude_proj_...`) and scopes each member's row to their claude.ai chat activity within that project (it cannot be combined with `group_by[]` or an `rbac_group_id` filter); `rbac_group_id` takes the tagged id (`rbac_group_...`, as emitted in responses and by the spend-limits API) or a bare group UUID, and matches users who held the group at any point during each covered UTC day (time-of-usage attribution); `user_id` takes a tagged user id (`user_...`), as emitted in responses. An unsupported dimension returns 400. At most 100 entries.20352036  maxItems: 10020372038- `group_by: optional array of "rbac_group_id"`20392040  Dimensions to break results out by (e.g. `group_by[]=rbac_group_id`). Supported on this endpoint: `rbac_group_id`. Rows are already per-member, so the one supported grouping aggregates them per RBAC group instead. Grouped rows carry the requested dimension values as additional fields and paginate like ungrouped responses via `next_page`; an unsupported dimension returns 400. `rbac_group_id` attributes a user to every group they held at any point during each covered UTC day, so grouped rows are not an exclusive partition and can sum above org-level totals. At most 100 entries.20412042  maxItems: 10020432044- `limit: optional number`20452046  Number of results per page (1-1000, default 100).20472048  minimum: 1, maximum: 100020492050- `order: optional "asc" or "desc"`20512052  Sort direction: `asc` or `desc`. Defaults to `asc` for the endpoint's sort column and to `desc` when `order_by` names a metric (a top-N ranking). Applies to `order_by`, or to the endpoint's default sort field when `order_by` is omitted.20532054  - `"asc"`20552056  - `"desc"`20572058- `order_by: optional string`20592060  Sort field. Restricted to the endpoint's sort column plus its rankable metrics (metrics default to descending; a few metrics rank in date-range mode only, per the endpoint's documented orderable set).20612062- `page: optional string`20632064  Opaque cursor from a previous response's `next_page` field.20652066- `starting_date: optional string`20672068  UTC date in YYYY-MM-DD format. Start of a date range (inclusive). Enables rollup mode: one row per entity aggregated over the whole range — addable counters are summed across days, and a distinct count is never summed where summing could double-count (a field's range value is recomputed exactly over the window, approximate via HLL with typical error under 2%, null, or — for the creation-event counts, whose per-day values cannot overlap — a per-day sum that is itself exact; each field's own description says which). Use either `date` or `starting_date`, not both. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.20692070  format: date20712072#### Returns20732074- `BetaUserActivity object`20752076  Response for GET /v1/organizations/analytics/users.20772078  - `data: array of object`20792080    - `chat_metrics: object`20812082      Claude.ai activity metrics for a single user on a given day.20832084      - `connectors_used_count: number`20852086        Number of MCP connector invocations.20872088      - `distinct_artifacts_created_count: number`20892090        Number of distinct artifacts created. Exact in date-range mode: a creation belongs to exactly one day, so the per-day counts never overlap and their sum over the window is the exact count of distinct creations in it.20912092      - `distinct_connectors_used_count: number or null`20932094        Distinct claude.ai connectors this user used. Excludes calls whose connector could not be identified and all calls from organizations with zero data retention. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.20952096      - `distinct_conversation_count: number or null`20972098        Number of distinct conversations the user participated in. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.20992100      - `distinct_files_uploaded_count: number or null`21012102        Number of distinct files uploaded. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.21032104      - `distinct_projects_created_count: number`21052106        Number of distinct projects created. Exact in date-range mode: a creation belongs to exactly one day, so the per-day counts never overlap and their sum over the window is the exact count of distinct creations in it.21072108      - `distinct_projects_used_count: number or null`21092110        Number of distinct projects used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.21112112      - `distinct_shared_artifacts_viewed_count: number or null`21132114        Number of distinct shared artifacts the user viewed. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.21152116      - `distinct_skills_used_count: number or null`21172118        Number of distinct skills used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.21192120      - `message_count: number`21212122        Number of messages sent21232124      - `shared_conversations_viewed_count: number`21252126        Number of times the user opened a shared conversation in a project21272128      - `thinking_message_count: number`21292130        Number of messages that used extended thinking21312132    - `claude_code_metrics: object`21332134      Claude Code activity metrics for a single user on a given day.21352136      - `core_metrics: object`21372138        Core Claude Code activity metrics for a single user on a given day.21392140        - `artifacts_created_count: number`21412142          Number of artifacts created in Claude Code sessions: an artifact counts once, on the day a session first saves it. Counted from 2026-08-17; 0 on earlier days. Exact in date-range mode: a creation belongs to exactly one day, so the per-day counts never overlap and their sum over the window is the exact count of distinct creations in it.21432144        - `commit_count: number`21452146          Number of commits made via Claude Code21472148        - `distinct_session_count: number or null`21492150          Number of distinct Claude Code sessions. On aggregated rows and in date-range mode: summed per-day distinct counts. A session essentially never spans a UTC day, so the sum is in practice the true distinct count.21512152        - `lines_of_code: object`21532154          Lines of code added and removed via Claude Code.21552156          - `added_count: number`21572158            Lines of code added21592160          - `removed_count: number`21612162            Lines of code removed21632164        - `pull_request_count: number`21652166          Number of pull requests created via Claude Code21672168      - `tool_actions: object`21692170        Per-tool accepted/rejected counts for Claude Code file modification tools.21712172        - `edit_tool: BetaToolActionCounts`21732174          Accepted/rejected counts for a single Claude Code tool type.21752176          - `accepted_count: number`21772178            Number of tool proposals accepted21792180          - `rejected_count: number`21812182            Number of tool proposals rejected21832184        - `multi_edit_tool: BetaToolActionCounts`21852186          Accepted/rejected counts for a single Claude Code tool type.21872188        - `notebook_edit_tool: BetaToolActionCounts`21892190          Accepted/rejected counts for a single Claude Code tool type.21912192        - `write_tool: BetaToolActionCounts`21932194          Accepted/rejected counts for a single Claude Code tool type.21952196    - `cowork_metrics: object`21972198      Cowork activity metrics for a single user on a given day.21992200      - `action_count: number`22012202        Number of tool actions completed in Cowork sessions22032204      - `artifacts_created_count: number`22052206        Number of artifacts created in Cowork sessions: an artifact counts once, on the day a session first saves it. Counted from 2026-08-17; 0 on earlier days. Exact in date-range mode: a creation belongs to exactly one day, so the per-day counts never overlap and their sum over the window is the exact count of distinct creations in it.22072208      - `connectors_used_count: number`22092210        Total number of connector invocations in Cowork sessions22112212      - `dispatch_turn_count: number`22132214        Number of Dispatch (background agent) turns completed22152216      - `distinct_connectors_used_count: number or null`22172218        Number of distinct connectors used in Cowork sessions. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.22192220      - `distinct_session_count: number or null`22212222        Number of distinct Cowork sessions. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.22232224      - `distinct_skills_used_count: number or null`22252226        Number of distinct skills used in Cowork sessions. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.22272228      - `message_count: number`22292230        Number of messages sent in Cowork sessions22312232      - `skills_used_count: number`22332234        Total number of skill invocations in Cowork sessions22352236      - `distinct_plugins_used_count: optional number or null`22372238        Number of distinct plugins used in Cowork sessions. Null while Cowork plugin-use metrics are not enabled for this organization. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.22392240      - `edit_tool_count: optional number or null`22412242        Number of successful Edit tool calls in Cowork sessions. Null while the file-edit metrics are not enabled for this organization.22432244      - `file_edit_count: optional number or null`22452246        Number of successful file-edit tool calls (Edit, MultiEdit, Write, NotebookEdit) in Cowork sessions. Null, never 0, while the file-edit metrics are not enabled for this organization.22472248      - `multi_edit_tool_count: optional number or null`22492250        Number of successful MultiEdit tool calls in Cowork sessions. Null while the file-edit metrics are not enabled for this organization.22512252      - `notebook_edit_tool_count: optional number or null`22532254        Number of successful NotebookEdit tool calls in Cowork sessions. Null while the file-edit metrics are not enabled for this organization.22552256      - `plugins_used_count: optional number or null`22572258        Total number of plugin invocations in Cowork sessions. Null while Cowork plugin-use metrics are not enabled for this organization.22592260      - `sessions_with_file_edits_count: optional number or null`22612262        Number of distinct Cowork sessions with at least one successful file-edit tool call. Null while the file-edit metrics are not enabled for this organization. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.22632264      - `write_tool_count: optional number or null`22652266        Number of successful Write tool calls in Cowork sessions. Null while the file-edit metrics are not enabled for this organization.22672268    - `design_metrics: object`22692270      Claude Design activity metrics for a single user on a given day.22712272      - `distinct_projects_created_count: number`22732274        Number of distinct Claude Design projects created. Exact in date-range mode: a creation belongs to exactly one day, so the per-day counts never overlap and their sum over the window is the exact count of distinct creations in it.22752276      - `distinct_projects_used_count: number or null`22772278        Number of distinct Claude Design projects the user worked in. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.22792280      - `distinct_session_count: number or null`22812282        Number of distinct Claude Design sessions. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.22832284      - `message_count: number`22852286        Number of messages sent in Claude Design sessions22872288    - `office_metrics: object`22892290      Office Agent activity metrics for a single user on a given day, broken out by Office product.22912292      - `excel: BetaOfficeProductMetrics`22932294        Office Agent activity metrics for a single user on a given day within one Office product.22952296        - `connectors_used_count: number`22972298          Number of MCP connector invocations22992300        - `distinct_connectors_used_count: number or null`23012302          Number of distinct MCP connectors used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.23032304        - `distinct_session_count: number or null`23052306          Number of distinct Office Agent sessions. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.23072308        - `distinct_skills_used_count: number or null`23092310          Number of distinct skills used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.23112312        - `message_count: number`23132314          Number of messages sent23152316        - `skills_used_count: number`23172318          Number of skill invocations23192320      - `outlook: BetaOfficeProductMetrics`23212322        Office Agent activity metrics for a single user on a given day within one Office product.23232324      - `powerpoint: BetaOfficeProductMetrics`23252326        Office Agent activity metrics for a single user on a given day within one Office product.23272328      - `word: BetaOfficeProductMetrics`23292330        Office Agent activity metrics for a single user on a given day within one Office product.23312332    - `science_metrics: object`23332334      Claude Science activity metrics for a single user on a given day.23352336      - `delegation_count: number`23372338        Number of delegations (handoffs to a specialized agent) in Claude Science sessions23392340      - `distinct_session_count: number or null`23412342        Number of distinct Claude Science sessions. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.23432344      - `message_count: number`23452346        Number of messages sent in Claude Science sessions23472348      - `remote_compute_job_count: number`23492350        Number of remote compute jobs launched from Claude Science sessions23512352      - `skills_used_count: number`23532354        Total number of skill invocations in Claude Science sessions23552356    - `web_search_count: number`23572358      Number of web searches performed23592360    - `distinct_user_count: optional number or null`23612362      Number of distinct active users represented by this row. Only set for grouped rollups (`group_by[]`); null for per-user rows. In date-range mode, recomputed as an exact distinct count of the group's active members over the requested window, never a sum of per-day values.23632364    - `last_activity_date: optional string or null`23652366      Most recent UTC day (YYYY-MM-DD) on which the user had any counted activity, within the requested window: equal to the requested `date` in single-day mode, and to the latest active day from `starting_date` (inclusive) to `ending_date` (exclusive) in date-range rollup mode — never a day earlier than the window start. On filtered requests (`filter[]`) only days matching the filter count: with `filter[]=rbac_group_id:{id}` it is the last day the user was active while a member of that group, consistent with the row's other metrics. On grouped (`group_by[]`) rows it is the latest day any member of the group was active (the requested `date` in single-day mode). Omitted from the response while last-activity reporting is not enabled for this organization.23672368      format: date23692370    - `rbac_group_id: optional string or null`23712372      Tagged RBAC group identifier (`rbac_group_...`), matching the spend-limits API spelling. Present only when the request grouped by `rbac_group_id`.23732374    - `rbac_group_name: optional string or null`23752376      Resolved RBAC group display name, alongside `rbac_group_id` when name resolution is available. Null if the group has been deleted or its name could not be resolved; `rbac_group_id` remains the stable key.23772378    - `user: optional BetaAnalyticsUser or null`23792380      A user in the organization, identified by tagged id and email address.23812382      - `type: "user"`23832384        Object type. Always `user`.23852386        default: user23872388      - `id: string`23892390        Tagged user identifier (e.g. `user_...`)23912392      - `email_address: string`23932394        Email address of the user23952396  - `next_page: string or null`23972398    Opaque cursor for the next page, or null if no more results23992400#### Example24012402```bash2403curl https://api.anthropic.com/v1/organizations/analytics/users \2404    -H 'anthropic-version: 2023-06-01' \2405    -H "X-Api-Key: $ANTHROPIC_API_KEY"2406```24072408##### Response (200)24092410```json2411{2412  "data": [2413    {2414      "chat_metrics": {2415        "connectors_used_count": 0,2416        "distinct_artifacts_created_count": 0,2417        "distinct_connectors_used_count": 0,2418        "distinct_conversation_count": 0,2419        "distinct_files_uploaded_count": 0,2420        "distinct_projects_created_count": 0,2421        "distinct_projects_used_count": 0,2422        "distinct_shared_artifacts_viewed_count": 0,2423        "distinct_skills_used_count": 0,2424        "message_count": 0,2425        "shared_conversations_viewed_count": 0,2426        "thinking_message_count": 02427      },2428      "claude_code_metrics": {2429        "core_metrics": {2430          "artifacts_created_count": 0,2431          "commit_count": 0,2432          "distinct_session_count": 0,2433          "lines_of_code": {2434            "added_count": 0,2435            "removed_count": 02436          },2437          "pull_request_count": 02438        },2439        "tool_actions": {2440          "edit_tool": {2441            "accepted_count": 0,2442            "rejected_count": 02443          },2444          "multi_edit_tool": {2445            "accepted_count": 0,2446            "rejected_count": 02447          },2448          "notebook_edit_tool": {2449            "accepted_count": 0,2450            "rejected_count": 02451          },2452          "write_tool": {2453            "accepted_count": 0,2454            "rejected_count": 02455          }2456        }2457      },2458      "cowork_metrics": {2459        "action_count": 0,2460        "artifacts_created_count": 0,2461        "connectors_used_count": 0,2462        "dispatch_turn_count": 0,2463        "distinct_connectors_used_count": 0,2464        "distinct_session_count": 0,2465        "distinct_skills_used_count": 0,2466        "message_count": 0,2467        "skills_used_count": 0,2468        "distinct_plugins_used_count": 0,2469        "edit_tool_count": 0,2470        "file_edit_count": 0,2471        "multi_edit_tool_count": 0,2472        "notebook_edit_tool_count": 0,2473        "plugins_used_count": 0,2474        "sessions_with_file_edits_count": 0,2475        "write_tool_count": 02476      },2477      "design_metrics": {2478        "distinct_projects_created_count": 0,2479        "distinct_projects_used_count": 0,2480        "distinct_session_count": 0,2481        "message_count": 02482      },2483      "office_metrics": {2484        "excel": {2485          "connectors_used_count": 0,2486          "distinct_connectors_used_count": 0,2487          "distinct_session_count": 0,2488          "distinct_skills_used_count": 0,2489          "message_count": 0,2490          "skills_used_count": 02491        },2492        "outlook": {2493          "connectors_used_count": 0,2494          "distinct_connectors_used_count": 0,2495          "distinct_session_count": 0,2496          "distinct_skills_used_count": 0,2497          "message_count": 0,2498          "skills_used_count": 02499        },2500        "powerpoint": {2501          "connectors_used_count": 0,2502          "distinct_connectors_used_count": 0,2503          "distinct_session_count": 0,2504          "distinct_skills_used_count": 0,2505          "message_count": 0,2506          "skills_used_count": 02507        },2508        "word": {2509          "connectors_used_count": 0,2510          "distinct_connectors_used_count": 0,2511          "distinct_session_count": 0,2512          "distinct_skills_used_count": 0,2513          "message_count": 0,2514          "skills_used_count": 02515        }2516      },2517      "science_metrics": {2518        "delegation_count": 0,2519        "distinct_session_count": 0,2520        "message_count": 0,2521        "remote_compute_job_count": 0,2522        "skills_used_count": 02523      },2524      "web_search_count": 0,2525      "distinct_user_count": 0,2526      "last_activity_date": "2019-12-27",2527      "rbac_group_id": "rbac_group_id",2528      "rbac_group_name": "rbac_group_name",2529      "user": {2530        "id": "id",2531        "email_address": "email_address",2532        "type": "user"2533      }2534    }2535  ],2536  "next_page": "next_page"2537}2538```25392540## Analytics › Skills25412542### Get Skill Usage25432544**GET** `/v1/organizations/analytics/skills`25452546Get per-skill usage for a given day, with cursor-based pagination.25472548Returns skill usage metrics for the organization, sorted by skill name.2549Use `group_by[]` to break usage out per member, per RBAC group, or per2550product surface, and `filter[]` to scope results; the parameter2551descriptions list the supported dimensions. Available to organizations2552on a Claude Enterprise plan. Requires an API key with the2553`read:analytics` scope.25542555#### Query parameters25562557- `date: optional string`25582559  UTC date in YYYY-MM-DD format. The day to get skill usage for. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.25602561  format: date25622563- `ending_date: optional string`25642565  UTC date in YYYY-MM-DD format. End of the date range (exclusive); only valid with `starting_date`. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day), so this can be at most today — which is also the default when omitted, resolved once when the first page is served and reused for the rest of the pagination sequence. At most 366 days after `starting_date`.25662567  format: date25682569- `filter: optional array of string`25702571  Filters as `dimension:value`, e.g. `filter[]=rbac_group_id:{id}`. Repeat the param for OR within a dimension and across dimensions for AND. Supported dimensions on this endpoint: `product`, `rbac_group_id`, `share_status`, `skill_name`, `user_id`. Value forms: `product` is one of `chat`, `claude_code`, `cowork`, or `office_agent`; `rbac_group_id` takes the tagged id (`rbac_group_...`, as emitted in responses and by the spend-limits API) or a bare group UUID, and matches users who held the group at any point during each covered UTC day (time-of-usage attribution); `share_status` is one of `organization`, `private`, or `public`; `skill_name` matches case-insensitively; `user_id` takes a tagged user id (`user_...`), as emitted in responses. An unsupported dimension returns 400. At most 100 entries.25722573  maxItems: 10025742575- `group_by: optional array of "product" or "rbac_group_id" or "user_id"`25762577  Dimensions to break results out by (e.g. `group_by[]=user_id`). Supported on this endpoint: `product`, `rbac_group_id`, `user_id`. Grouped rows carry the requested dimension values as additional fields and paginate like ungrouped responses via `next_page`; an unsupported dimension returns 400. `rbac_group_id` attributes a user to every group they held at any point during each covered UTC day, so grouped rows are not an exclusive partition and can sum above org-level totals. At most 100 entries.25782579  maxItems: 10025802581  - `"product"`25822583  - `"rbac_group_id"`25842585  - `"user_id"`25862587- `limit: optional number`25882589  Number of results per page (1-1000, default 100).25902591  minimum: 1, maximum: 100025922593- `order: optional "asc" or "desc"`25942595  Sort direction: `asc` or `desc`. Defaults to `asc` for the endpoint's sort column and to `desc` when `order_by` names a metric (a top-N ranking). Applies to `order_by`, or to the endpoint's default sort field when `order_by` is omitted.25962597  - `"asc"`25982599  - `"desc"`26002601- `order_by: optional string`26022603  Sort field. Restricted to the endpoint's sort column plus its rankable metrics (metrics default to descending; a few metrics rank in date-range mode only, per the endpoint's documented orderable set).26042605- `page: optional string`26062607  Opaque cursor from a previous response's `next_page` field.26082609- `starting_date: optional string`26102611  UTC date in YYYY-MM-DD format. Start of a date range (inclusive). Enables rollup mode: one row per entity aggregated over the whole range — addable counters are summed across days, and a distinct count is never summed where summing could double-count (a field's range value is recomputed exactly over the window, approximate via HLL with typical error under 2%, null, or — for the creation-event counts, whose per-day values cannot overlap — a per-day sum that is itself exact; each field's own description says which). Use either `date` or `starting_date`, not both. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.26122613  format: date26142615#### Returns26162617- `BetaSkillUsage object`26182619  Response for GET /v1/organizations/analytics/skills.26202621  - `data: array of object`26222623    - `chat_metrics: object`26242625      Claude.ai activity metrics for a single skill on a given day.26262627      - `distinct_conversation_skill_used_count: number or null`26282629        Number of distinct conversations in which the skill was used. A skill counts as used only when it is explicitly activated — the model (or the user, via the skill's slash command) invokes it, reading its instructions into context as part of that activation. Skills that are merely installed or listed as available, or whose content reaches the context without an activation (preloaded, hook-injected, or read as a plain file), are not counted. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.26302631    - `claude_code_metrics: object`26322633      Claude Code activity metrics for a single skill on a given day.26342635      - `distinct_session_skill_used_count: number or null`26362637        Number of distinct Claude Code sessions in which the skill was used. A skill counts as used only when it is explicitly activated — the model (or the user, via the skill's slash command) invokes it, reading its instructions into context as part of that activation. Skills that are merely installed or listed as available, or whose content reaches the context without an activation (preloaded, hook-injected, or read as a plain file), are not counted. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.26382639    - `cowork_metrics: object`26402641      Cowork activity metrics for a single skill on a given day.26422643      - `distinct_session_skill_used_count: number or null`26442645        Number of distinct Cowork sessions in which the skill was used. A skill counts as used only when it is explicitly activated — the model (or the user, via the skill's slash command) invokes it, reading its instructions into context as part of that activation. Skills that are merely installed or listed as available, or whose content reaches the context without an activation (preloaded, hook-injected, or read as a plain file), are not counted. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.26462647    - `distinct_user_count: number`26482649      Number of distinct users who used the skill on the requested day, or, in date-range mode, over the requested window — recomputed as an exact distinct count over the window's per-member daily rows, never a sum of per-day values. A skill counts as used only when it is explicitly activated — the model (or the user, via the skill's slash command) invokes it, reading its instructions into context as part of that activation. Skills that are merely installed or listed as available, or whose content reaches the context without an activation (preloaded, hook-injected, or read as a plain file), are not counted.26502651    - `office_metrics: object`26522653      Office Agent activity metrics for a single skill on a given day, broken out by Office product.26542655      - `excel: BetaSkillOfficeProductMetrics`26562657        Office Agent activity metrics for a single skill on a given day within one Office product.26582659        - `distinct_session_skill_used_count: number or null`26602661          Number of distinct Office Agent sessions in which the skill was used. A skill counts as used only when it is explicitly activated — the model (or the user, via the skill's slash command) invokes it, reading its instructions into context as part of that activation. Skills that are merely installed or listed as available, or whose content reaches the context without an activation (preloaded, hook-injected, or read as a plain file), are not counted. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.26622663      - `outlook: BetaSkillOfficeProductMetrics`26642665        Office Agent activity metrics for a single skill on a given day within one Office product.26662667      - `powerpoint: BetaSkillOfficeProductMetrics`26682669        Office Agent activity metrics for a single skill on a given day within one Office product.26702671      - `word: BetaSkillOfficeProductMetrics`26722673        Office Agent activity metrics for a single skill on a given day within one Office product.26742675    - `skill_name: string`26762677      Name of the skill26782679    - `attributed_list_price: optional string or null`26802681      List-price (rate-card) value of the member requests attributed to this skill, as a decimal string in the minor unit of `currency` (cents for USD), from Claude Code, Cowork, and Office Agent request-level attribution — the value of requests that involved the skill, not the skill's incremental cost. Unlike `estimated_overage_spend` this reflects usage value regardless of how it was funded — seat-covered usage counts — but it is undiscounted and does not tie to billed spend or the organization's spend reporting. claude.ai chat usage carries no request-level attribution and contributes nothing: the field is null on `chat` product rows and on `office_agent` product cuts dated before 2026-06-18 (the Office Agent attribution data-start), and on ungrouped rows it covers the Claude Code + Cowork + Office Agent share only (null when no attributable usage exists). Also null under the same conditions as `estimated_overage_spend` (spend reporting not enabled for this organization, `office_agent` product cuts before the 2026-06-18 data-start). "0" means attributable usage existed but none was attributed to this skill. Addable across days: date-range rollup mode returns the window's sum. On `group_by[]` and `filter[]` shapes both amounts can total below the ungrouped value for the same skill over the same date or range: spend attributed to a member–skill pair with no counted usage on that day is excluded from those cuts.26822683    - `currency: optional "USD" or null`26842685      Currency for this row's monetary fields (`estimated_overage_spend` and `attributed_list_price`), as an uppercase ISO-4217 code. Always "USD" when either amount is populated; null whenever both amounts are null.26862687    - `enable_count: optional number or null`26882689      Distinct accounts that enabled this skill on the requested day (claude.ai only — the skill analog of plugin `install_count`). The count is org-wide: null when enable reporting is not enabled for this organization, or when the request scopes to `user_id` / `rbac_group_id` / `product` via `group_by[]` or `filter[]` (an org-wide count would be misleading on per-cut rows). A distinct count, not an event count: summing across days double-counts members who enable the skill on more than one day, so it is also null in date-range rollup mode (`starting_date`/`ending_date`).26902691    - `estimated_overage_spend: optional string or null`26922693      Estimated overage spend attributed to this skill, as a decimal string in the minor unit of `currency` (cents for USD; "1250" is $12.50, fractional cents possible) — an allocation of each member's daily post-discount, pre-credit metered overage spend (the same cost basis as the organization's spend reporting and the Cost & Usage API, so per-skill figures are directly comparable; spend with no skill attribution — including any member-day without skill invocations — is not represented, so skill rows sum to at most those totals) across the skills the member used. Overage only: usage covered by included seat allowances bills nothing and allocates $0 here — see `attributed_list_price` for the funding-independent usage-value companion. Claude Code, Cowork, and Office Agent spend use request-level skill attribution; claude.ai chat spend is approximated proportionally to skill-invoking messages. An estimate, not a billing number — and the cost of the requests/messages that involved the skill, not the skill's incremental cost (the same request would still have cost something without the skill active). "0" means no overage spend was attributed; null when spend reporting is not enabled for this organization, on `office_agent` product cuts dated before 2026-06-18 (the Office Agent attribution data-start). Addable across days: date-range rollup mode (`starting_date`/`ending_date`) returns the window's sum. With `group_by[]=user_id` each row carries the user's own attributed spend. On `group_by[]` and `filter[]` shapes both amounts can total below the ungrouped value for the same skill over the same date or range: spend attributed to a member–skill pair with no counted usage on that day is excluded from those cuts.26942695    - `invocation_count: optional number or null`26962697      Total number of times this skill was invoked on the requested day (the skill analog of plugin `invocation_count`). Unlike `distinct_user_count` — which answers '\# of users' — this is the true '# of uses'. A skill counts as used only when it is explicitly activated — the model (or the user, via the skill's slash command) invokes it, reading its instructions into context as part of that activation. Skills that are merely installed or listed as available, or whose content reaches the context without an activation (preloaded, hook-injected, or read as a plain file), are not counted. Null when invocation reporting is not enabled for this organization. Sum across a date range for total uses in the window — date-range rollup mode (`starting_date`/`ending_date`) returns this sum directly.26982699    - `product: optional string or null`27002701      Product that produced this row's activity: one of `chat`, `claude_code`, `cowork`, or `office_agent` (the canonical Cost & Usage product naming; an `office_agent` row's per-surface breakdown is in its `office_metrics`). On `/plugins` only `cowork` and `claude_code` occur (the only surfaces with plugin attribution); on `/artifacts` only `chat`, `claude_code`, and `cowork` occur (the surfaces that create artifacts); `/apps/chat/projects` does not support the product dimension (a `product` entry in `group_by[]` or `filter[]` there is rejected). Present only when the request grouped by `product`.27022703    - `rbac_group_id: optional string or null`27042705      Tagged RBAC group identifier (`rbac_group_...`), matching the spend-limits API spelling. Present only when the request grouped by `rbac_group_id`.27062707    - `rbac_group_name: optional string or null`27082709      Resolved RBAC group display name, alongside `rbac_group_id` when name resolution is available. Null if the group has been deleted or its name could not be resolved; `rbac_group_id` remains the stable key.27102711    - `share_status: optional "organization" or "private" or "public" or null`27122713      Skill share status (claude.ai only): one of `private`, `organization`, or `public`. Null for skills used only in Claude Code or Office (no per-skill share-status concept) and when share-status reporting is not yet available for the organization. Filterable via `filter[]=share_status:{value}`.27142715      - `"organization"`27162717      - `"private"`27182719      - `"public"`27202721    - `skill_display_name: optional string or null`27222723      Human-readable display name for rows whose `skill_name` is an opaque skill id (user/organization skill types and plugin-delivered skills — user-defined names are withheld from the analytics pipeline). Organization-shared skills and skills delivered by the organization's own plugins (its plugin marketplaces and its library) resolve; plugin skill names are shown without their 'plugin:' prefix. The literal 'unknown' bucket row gets a fixed 'Unknown skill' label. Null for private (user-defined) skills and members' personal-plugin skills — those names are not disclosed to analytics-key holders — and for Anthropic-provided plugin skills (not resolved), and null when `skill_name` is already a display name, when the skill or plugin was deleted, or when display-name resolution is not enabled for this organization.27242725    - `user_id: optional string or null`27262727      Tagged user identifier (e.g. `user_...`). Present only when the request grouped by `user_id`.27282729  - `next_page: string or null`27302731    Opaque cursor for the next page, or null if no more results27322733#### Example27342735```bash2736curl https://api.anthropic.com/v1/organizations/analytics/skills \2737    -H 'anthropic-version: 2023-06-01' \2738    -H "X-Api-Key: $ANTHROPIC_API_KEY"2739```27402741##### Response (200)27422743```json2744{2745  "data": [2746    {2747      "chat_metrics": {2748        "distinct_conversation_skill_used_count": 02749      },2750      "claude_code_metrics": {2751        "distinct_session_skill_used_count": 02752      },2753      "cowork_metrics": {2754        "distinct_session_skill_used_count": 02755      },2756      "distinct_user_count": 0,2757      "office_metrics": {2758        "excel": {2759          "distinct_session_skill_used_count": 02760        },2761        "outlook": {2762          "distinct_session_skill_used_count": 02763        },2764        "powerpoint": {2765          "distinct_session_skill_used_count": 02766        },2767        "word": {2768          "distinct_session_skill_used_count": 02769        }2770      },2771      "skill_name": "skill_name",2772      "attributed_list_price": "attributed_list_price",2773      "currency": "USD",2774      "enable_count": 0,2775      "estimated_overage_spend": "estimated_overage_spend",2776      "invocation_count": 0,2777      "product": "product",2778      "rbac_group_id": "rbac_group_id",2779      "rbac_group_name": "rbac_group_name",2780      "share_status": "organization",2781      "skill_display_name": "skill_display_name",2782      "user_id": "user_id"2783    }2784  ],2785  "next_page": "next_page"2786}2787```27882789## Analytics › Connectors27902791### Get Connector Usage27922793**GET** `/v1/organizations/analytics/connectors`27942795Get per-connector usage for a given day, with cursor-based pagination.27962797Returns connector usage metrics for the organization, sorted by connector2798name. Connector names are normalized from their various sources — for2799example, "Atlassian MCP server" and "mcp-atlassian" both appear as2800"atlassian". Use `group_by[]` to break usage out per member, per RBAC2801group, or per product surface, and `filter[]` to scope results; the2802parameter descriptions list the supported dimensions. Available to2803organizations on a Claude Enterprise plan. Requires an API key with the2804`read:analytics` scope.28052806#### Query parameters28072808- `date: optional string`28092810  UTC date in YYYY-MM-DD format. The day to get connector usage for. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.28112812  format: date28132814- `ending_date: optional string`28152816  UTC date in YYYY-MM-DD format. End of the date range (exclusive); only valid with `starting_date`. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day), so this can be at most today — which is also the default when omitted, resolved once when the first page is served and reused for the rest of the pagination sequence. At most 366 days after `starting_date`.28172818  format: date28192820- `filter: optional array of string`28212822  Filters as `dimension:value`, e.g. `filter[]=rbac_group_id:{id}`. Repeat the param for OR within a dimension and across dimensions for AND. Supported dimensions on this endpoint: `connector_name`, `product`, `rbac_group_id`, `user_id`. Value forms: `connector_name` matches case-insensitively, a display name such as 'GitHub MCP' also matches its normalized stored form ('github'), and for rows whose `connector_name` is an opaque connector id the connector's display name (`connector_display_name`) also matches; `product` is one of `chat`, `claude_code`, `cowork`, or `office_agent`; `rbac_group_id` takes the tagged id (`rbac_group_...`, as emitted in responses and by the spend-limits API) or a bare group UUID, and matches users who held the group at any point during each covered UTC day (time-of-usage attribution); `user_id` takes a tagged user id (`user_...`), as emitted in responses. An unsupported dimension returns 400. At most 100 entries.28232824  maxItems: 10028252826- `group_by: optional array of "product" or "rbac_group_id" or "user_id"`28272828  Dimensions to break results out by (e.g. `group_by[]=user_id`). Supported on this endpoint: `product`, `rbac_group_id`, `user_id`. Grouped rows carry the requested dimension values as additional fields and paginate like ungrouped responses via `next_page`; an unsupported dimension returns 400. `rbac_group_id` attributes a user to every group they held at any point during each covered UTC day, so grouped rows are not an exclusive partition and can sum above org-level totals. At most 100 entries.28292830  maxItems: 10028312832  - `"product"`28332834  - `"rbac_group_id"`28352836  - `"user_id"`28372838- `limit: optional number`28392840  Number of results per page (1-1000, default 100).28412842  minimum: 1, maximum: 100028432844- `order: optional "asc" or "desc"`28452846  Sort direction: `asc` or `desc`. Defaults to `asc` for the endpoint's sort column and to `desc` when `order_by` names a metric (a top-N ranking). Applies to `order_by`, or to the endpoint's default sort field when `order_by` is omitted.28472848  - `"asc"`28492850  - `"desc"`28512852- `order_by: optional string`28532854  Sort field. Restricted to the endpoint's sort column plus its rankable metrics (metrics default to descending; a few metrics rank in date-range mode only, per the endpoint's documented orderable set).28552856- `page: optional string`28572858  Opaque cursor from a previous response's `next_page` field.28592860- `starting_date: optional string`28612862  UTC date in YYYY-MM-DD format. Start of a date range (inclusive). Enables rollup mode: one row per entity aggregated over the whole range — addable counters are summed across days, and a distinct count is never summed where summing could double-count (a field's range value is recomputed exactly over the window, approximate via HLL with typical error under 2%, null, or — for the creation-event counts, whose per-day values cannot overlap — a per-day sum that is itself exact; each field's own description says which). Use either `date` or `starting_date`, not both. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.28632864  format: date28652866#### Returns28672868- `BetaConnectorUsage object`28692870  Response for GET /v1/organizations/analytics/connectors.28712872  - `data: array of object`28732874    - `chat_metrics: object`28752876      Claude.ai activity metrics for a single connector on a given day.28772878      - `distinct_conversation_connector_used_count: number or null`28792880        Number of distinct conversations in which the connector was used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.28812882    - `claude_code_metrics: object`28832884      Claude Code activity metrics for a single connector on a given day.28852886      - `distinct_session_connector_used_count: number or null`28872888        Number of distinct Claude Code sessions in which the connector was used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.28892890    - `connector_name: string`28912892      Name of the connector. Some rows carry an opaque connector id here instead of a readable name; `connector_display_name` holds the resolved name for those rows.28932894    - `cowork_metrics: object`28952896      Cowork activity metrics for a single connector on a given day.28972898      - `distinct_session_connector_used_count: number or null`28992900        Number of distinct Cowork sessions in which the connector was used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.29012902    - `distinct_user_count: number`29032904      Number of distinct users who used the connector on the requested day, or, in date-range mode, over the requested window — recomputed as an exact distinct count over the window's per-member daily rows, never a sum of per-day values.29052906    - `office_metrics: object`29072908      Office Agent activity metrics for a single connector on a given day, broken out by Office product.29092910      - `excel: BetaConnectorOfficeProductMetrics`29112912        Office Agent activity metrics for a single connector on a given day within one Office product.29132914        - `distinct_session_connector_used_count: number or null`29152916          Number of distinct Office Agent sessions in which the connector was used. Approximate (HLL, typical error <2%) in date-range mode. Null on aggregated rows where a distinct count cannot be computed.29172918      - `outlook: BetaConnectorOfficeProductMetrics`29192920        Office Agent activity metrics for a single connector on a given day within one Office product.29212922      - `powerpoint: BetaConnectorOfficeProductMetrics`29232924        Office Agent activity metrics for a single connector on a given day within one Office product.29252926      - `word: BetaConnectorOfficeProductMetrics`29272928        Office Agent activity metrics for a single connector on a given day within one Office product.29292930    - `connector_display_name: optional string or null`29312932      Human-readable display name for rows whose `connector_name` is an opaque connector id rather than a readable name, resolved at request time from the organization's connectors (including connectors that have since been removed). `connector_name` remains the row's stable key for sorting and pagination, and `filter[]=connector_name:{value}` also matches these rows by display name. Display names are not unique, and the same connector's claude.ai usage can appear under a separate row with a readable `connector_name`. Null when `connector_name` is already a readable name, when the id cannot be resolved to one of the organization's connectors, or when display-name resolution is not enabled for this organization.29332934    - `individual_auth_distinct_user_count: optional number or null`29352936      Number of distinct users whose use of this connector on the requested day ran on their own individual credential, connected through their own consent flow. Companion bucket to `managed_auth_distinct_user_count`, which carries the measurement, attribution, and null rules. Users whose requests used no stored credential count in neither bucket.29372938    - `managed_auth_distinct_user_count: optional number or null`29392940      Number of distinct users whose use of this connector on the requested day ran on Enterprise Managed Auth (an organization-managed credential provisioned through the organization's identity provider), read from the token record each request used. Null, never 0, when managed-auth reporting is not enabled for the organization, the value cannot be attributed to the row, no credentialed requests and no managed-token mint events (a managed credential being provisioned for a user's use of the connector) were observed that day, or the day predates 2026-07-01, the first day the backing data exists (forward-only data, no backfill). When credentialed requests or mint events were observed and attributed, both managed-auth fields populate, reporting 0 for a bucket with no users; the two counts are independent, not a partition — a user whose requests that day used both kinds of credential counts in both. Mint events carry user but not surface attribution, so they count as observed auth activity on `user_id` and `rbac_group_id` cuts — attributed to the user the credential was provisioned for — but never on a cut that references `product` (group or filter). Date-range rollup mode (`starting_date`/`ending_date`) computes both fields exactly over the window — distinct users with at least one qualifying day — when the whole window starts on or after 2026-07-01, with the null-versus-0 and mint-event rules applying with the window in place of the day; a range starting earlier reports every managed-auth field as null, never a partial-window value.29412942    - `product: optional string or null`29432944      Product that produced this row's activity: one of `chat`, `claude_code`, `cowork`, or `office_agent` (the canonical Cost & Usage product naming; an `office_agent` row's per-surface breakdown is in its `office_metrics`). On `/plugins` only `cowork` and `claude_code` occur (the only surfaces with plugin attribution); on `/artifacts` only `chat`, `claude_code`, and `cowork` occur (the surfaces that create artifacts); `/apps/chat/projects` does not support the product dimension (a `product` entry in `group_by[]` or `filter[]` there is rejected). Present only when the request grouped by `product`.29452946    - `rbac_group_id: optional string or null`29472948      Tagged RBAC group identifier (`rbac_group_...`), matching the spend-limits API spelling. Present only when the request grouped by `rbac_group_id`.29492950    - `rbac_group_name: optional string or null`29512952      Resolved RBAC group display name, alongside `rbac_group_id` when name resolution is available. Null if the group has been deleted or its name could not be resolved; `rbac_group_id` remains the stable key.29532954    - `read_call_count: optional number or null`29552956      Number of connector tool calls on the requested day whose trusted read-only annotation marked them read-only. Call count, not distinct users. Every call recorded on a classified surface lands in exactly one of `read_call_count`, `write_call_count`, or `unclassified_call_count`, so the three sum to the day's classified calls. Classification is forward-only per surface: claude.ai from 2026-06-01, Claude Code from 2026-05-30, Claude in Office from 2026-05-29, Cowork from 2026-06-02 (Cowork clients predating annotation forwarding land in `unclassified_call_count`). Null, never 0, when the value cannot be stated: the read/write split is not enabled for this organization, or the day predates 2026-05-29. For a date-range total, sum the per-day values, but treat a window that extends before 2026-05-29 as null rather than summing only its covered days — date-range rollup mode (`starting_date`/`ending_date`) applies both rules server-side.29572958    - `unclassified_call_count: optional number or null`29592960      Number of connector tool calls on the requested day with no trusted read-only annotation — the annotation is optional in the MCP spec and is discarded when connector access controls are active, so unclassified calls are common. This field shows how much of the day's classified activity the read/write split actually covers. Call count, not distinct users. One of the three call-classification buckets; see `read_call_count` for the per-surface data-start dates, null conditions, and date-range guidance.29612962    - `user_id: optional string or null`29632964      Tagged user identifier (e.g. `user_...`). Present only when the request grouped by `user_id`.29652966    - `write_call_count: optional number or null`29672968      Number of connector tool calls on the requested day whose trusted read-only annotation marked them not read-only. Call count, not distinct users. One of the three call-classification buckets; see `read_call_count` for the per-surface data-start dates, null conditions, and date-range guidance.29692970  - `next_page: string or null`29712972    Opaque cursor for the next page, or null if no more results29732974#### Example29752976```bash2977curl https://api.anthropic.com/v1/organizations/analytics/connectors \2978    -H 'anthropic-version: 2023-06-01' \2979    -H "X-Api-Key: $ANTHROPIC_API_KEY"2980```29812982##### Response (200)29832984```json2985{2986  "data": [2987    {2988      "chat_metrics": {2989        "distinct_conversation_connector_used_count": 02990      },2991      "claude_code_metrics": {2992        "distinct_session_connector_used_count": 02993      },2994      "connector_name": "connector_name",2995      "cowork_metrics": {2996        "distinct_session_connector_used_count": 02997      },2998      "distinct_user_count": 0,2999      "office_metrics": {3000        "excel": {3001          "distinct_session_connector_used_count": 03002        },3003        "outlook": {3004          "distinct_session_connector_used_count": 03005        },3006        "powerpoint": {3007          "distinct_session_connector_used_count": 03008        },3009        "word": {3010          "distinct_session_connector_used_count": 03011        }3012      },3013      "connector_display_name": "connector_display_name",3014      "individual_auth_distinct_user_count": 0,3015      "managed_auth_distinct_user_count": 0,3016      "product": "product",3017      "rbac_group_id": "rbac_group_id",3018      "rbac_group_name": "rbac_group_name",3019      "read_call_count": 0,3020      "unclassified_call_count": 0,3021      "user_id": "user_id",3022      "write_call_count": 03023    }3024  ],3025  "next_page": "next_page"3026}3027```30283029## Analytics › Chat Projects30303031### Get Chat Project Usage30323033**GET** `/v1/organizations/analytics/apps/chat/projects`30343035Get per-project activity for a given day, with cursor-based pagination.30363037Returns activity metrics for each project in the organization, sorted by3038project ID. Use `group_by[]` to break projects out per member or per RBAC3039group, and `filter[]` to scope results; the parameter descriptions list the3040supported dimensions. Available to organizations on a Claude Enterprise3041plan. Requires an API key with the `read:analytics` scope.30423043#### Query parameters30443045- `date: optional string`30463047  UTC date in YYYY-MM-DD format. The day to get project activity for. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.30483049  format: date30503051- `ending_date: optional string`30523053  UTC date in YYYY-MM-DD format. End of the date range (exclusive); only valid with `starting_date`. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day), so this can be at most today — which is also the default when omitted, resolved once when the first page is served and reused for the rest of the pagination sequence. At most 366 days after `starting_date`.30543055  format: date30563057- `filter: optional array of string`30583059  Filters as `dimension:value`, e.g. `filter[]=rbac_group_id:{id}`. Repeat the param for OR within a dimension and across dimensions for AND. Supported dimensions on this endpoint: `project_id`, `rbac_group_id`, `user_id`. Value forms: `project_id` takes a tagged project id (`claude_proj_...`); `rbac_group_id` takes the tagged id (`rbac_group_...`, as emitted in responses and by the spend-limits API) or a bare group UUID, and matches users who held the group at any point during each covered UTC day (time-of-usage attribution); `user_id` takes a tagged user id (`user_...`), as emitted in responses. An unsupported dimension returns 400. At most 100 entries.30603061  maxItems: 10030623063- `group_by: optional array of "rbac_group_id" or "user_id"`30643065  Dimensions to break results out by (e.g. `group_by[]=user_id`). Supported on this endpoint: `rbac_group_id`, `user_id`. Grouped rows carry the requested dimension values as additional fields and paginate like ungrouped responses via `next_page`; an unsupported dimension returns 400. `rbac_group_id` attributes a user to every group they held at any point during each covered UTC day, so grouped rows are not an exclusive partition and can sum above org-level totals. At most 100 entries.30663067  maxItems: 10030683069  - `"rbac_group_id"`30703071  - `"user_id"`30723073- `limit: optional number`30743075  Number of results per page (1-1000, default 100).30763077  minimum: 1, maximum: 100030783079- `order: optional "asc" or "desc"`30803081  Sort direction: `asc` or `desc`. Defaults to `asc` for the endpoint's sort column and to `desc` when `order_by` names a metric (a top-N ranking). Applies to `order_by`, or to the endpoint's default sort field when `order_by` is omitted.30823083  - `"asc"`30843085  - `"desc"`30863087- `order_by: optional string`30883089  Sort field. Restricted to the endpoint's sort column plus its rankable metrics (metrics default to descending; a few metrics rank in date-range mode only, per the endpoint's documented orderable set).30903091- `page: optional string`30923093  Opaque cursor from a previous response's `next_page` field.30943095- `starting_date: optional string`30963097  UTC date in YYYY-MM-DD format. Start of a date range (inclusive). Enables rollup mode: one row per entity aggregated over the whole range — addable counters are summed across days, and a distinct count is never summed where summing could double-count (a field's range value is recomputed exactly over the window, approximate via HLL with typical error under 2%, null, or — for the creation-event counts, whose per-day values cannot overlap — a per-day sum that is itself exact; each field's own description says which). Use either `date` or `starting_date`, not both. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.30983099  format: date31003101#### Returns31023103- `BetaChatProjectUsage object`31043105  Response for GET /v1/organizations/analytics/apps/chat/projects.31063107  - `data: array of object`31083109    - `distinct_user_count: number`31103111      Number of distinct users who used the project on the requested day, or, in date-range mode, over the requested window — recomputed as an exact distinct count over the window's per-member daily rows, never a sum of per-day values.31123113    - `message_count: number`31143115      Number of messages sent in the project on the requested day31163117    - `project_id: string`31183119      Tagged project identifier (e.g. `claude_proj_...`)31203121    - `project_name: string`31223123      Name of the project31243125    - `created_at: optional string or null`31263127      Project creation timestamp in RFC 3339 format. Null if the project was deleted before attribution was recorded.31283129      format: date-time31303131    - `created_by: optional BetaAnalyticsUser or null`31323133      A user in the organization, identified by tagged id and email address.31343135      - `type: "user"`31363137        Object type. Always `user`.31383139        default: user31403141      - `id: string`31423143        Tagged user identifier (e.g. `user_...`)31443145      - `email_address: string`31463147        Email address of the user31483149    - `distinct_conversation_count: optional number or null`31503151      Number of distinct conversations in the project. Null on aggregated rows where a distinct count cannot be computed.31523153    - `product: optional string or null`31543155      Product that produced this row's activity: one of `chat`, `claude_code`, `cowork`, or `office_agent` (the canonical Cost & Usage product naming; an `office_agent` row's per-surface breakdown is in its `office_metrics`). On `/plugins` only `cowork` and `claude_code` occur (the only surfaces with plugin attribution); on `/artifacts` only `chat`, `claude_code`, and `cowork` occur (the surfaces that create artifacts); `/apps/chat/projects` does not support the product dimension (a `product` entry in `group_by[]` or `filter[]` there is rejected). Present only when the request grouped by `product`.31563157    - `rbac_group_id: optional string or null`31583159      Tagged RBAC group identifier (`rbac_group_...`), matching the spend-limits API spelling. Present only when the request grouped by `rbac_group_id`.31603161    - `rbac_group_name: optional string or null`31623163      Resolved RBAC group display name, alongside `rbac_group_id` when name resolution is available. Null if the group has been deleted or its name could not be resolved; `rbac_group_id` remains the stable key.31643165    - `user_id: optional string or null`31663167      Tagged user identifier (e.g. `user_...`). Present only when the request grouped by `user_id`.31683169  - `next_page: string or null`31703171    Opaque cursor for the next page, or null if no more results31723173#### Example31743175```bash3176curl https://api.anthropic.com/v1/organizations/analytics/apps/chat/projects \3177    -H 'anthropic-version: 2023-06-01' \3178    -H "X-Api-Key: $ANTHROPIC_API_KEY"3179```31803181##### Response (200)31823183```json3184{3185  "data": [3186    {3187      "distinct_user_count": 0,3188      "message_count": 0,3189      "project_id": "project_id",3190      "project_name": "project_name",3191      "created_at": "2019-12-27T18:11:19.117Z",3192      "created_by": {3193        "id": "id",3194        "email_address": "email_address",3195        "type": "user"3196      },3197      "distinct_conversation_count": 0,3198      "product": "product",3199      "rbac_group_id": "rbac_group_id",3200      "rbac_group_name": "rbac_group_name",3201      "user_id": "user_id"3202    }3203  ],3204  "next_page": "next_page"3205}3206```32073208## Analytics › Plugins32093210### Get Plugin Usage32113212**GET** `/v1/organizations/analytics/plugins`32133214Get per-plugin install + invocation usage for a given day, with pagination.32153216Returns plugin usage metrics for the organization across Cowork and Claude3217Code, sorted by plugin name. The `plugin_name` value `third-party` is3218an aggregate bucket, not a plugin: it collects plugin activity, from3219either surface, for which the reporting client did not provide a plugin3220name — so an organization's own plugins can contribute both to their own3221named rows and to this bucket. Use `group_by[]` to break usage out per3222member, per RBAC group, or per product surface (Cowork / Claude Code),3223and `filter[]` to scope results; the parameter descriptions list the3224supported dimensions. Requires an API key with the3225`read:analytics` scope. `starting_date` / `ending_date` select3226range-rollup mode like `/skills`.32273228#### Query parameters32293230- `date: optional string`32313232  UTC date in YYYY-MM-DD format. The day to get plugin usage for. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.32333234  format: date32353236- `ending_date: optional string`32373238  UTC date in YYYY-MM-DD format. End of the date range (exclusive); only valid with `starting_date`. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day), so this can be at most today — which is also the default when omitted, resolved once when the first page is served and reused for the rest of the pagination sequence. At most 366 days after `starting_date`.32393240  format: date32413242- `filter: optional array of string`32433244  Filters as `dimension:value`, e.g. `filter[]=rbac_group_id:{id}`. Repeat the param for OR within a dimension and across dimensions for AND. Supported dimensions on this endpoint: `plugin_name`, `product`, `rbac_group_id`, `user_id`. Value forms: `plugin_name` matches case-insensitively; `product` is `claude_code` or `cowork` (the only surfaces with plugin attribution); `rbac_group_id` takes the tagged id (`rbac_group_...`, as emitted in responses and by the spend-limits API) or a bare group UUID, and matches users who held the group at any point during each covered UTC day (time-of-usage attribution); `user_id` takes a tagged user id (`user_...`), as emitted in responses. An unsupported dimension returns 400. At most 100 entries.32453246  maxItems: 10032473248- `group_by: optional array of "product" or "rbac_group_id" or "user_id"`32493250  Dimensions to break results out by (e.g. `group_by[]=user_id`). Supported on this endpoint: `product`, `rbac_group_id`, `user_id`. On this endpoint `product` takes the values `claude_code` or `cowork` only (the surfaces with plugin attribution). Grouped rows carry the requested dimension values as additional fields and paginate like ungrouped responses via `next_page`; an unsupported dimension returns 400. `rbac_group_id` attributes a user to every group they held at any point during each covered UTC day, so grouped rows are not an exclusive partition and can sum above org-level totals. At most 100 entries.32513252  maxItems: 10032533254  - `"product"`32553256  - `"rbac_group_id"`32573258  - `"user_id"`32593260- `limit: optional number`32613262  Number of results per page (1-1000, default 100).32633264  minimum: 1, maximum: 100032653266- `order: optional "asc" or "desc"`32673268  Sort direction: `asc` or `desc`. Defaults to `asc` for the endpoint's sort column and to `desc` when `order_by` names a metric (a top-N ranking). Applies to `order_by`, or to the endpoint's default sort field when `order_by` is omitted.32693270  - `"asc"`32713272  - `"desc"`32733274- `order_by: optional string`32753276  Sort field. Restricted to the endpoint's sort column plus its rankable metrics (metrics default to descending; a few metrics rank in date-range mode only, per the endpoint's documented orderable set).32773278- `page: optional string`32793280  Opaque cursor from a previous response's `next_page` field.32813282- `starting_date: optional string`32833284  UTC date in YYYY-MM-DD format. Start of a date range (inclusive). Enables rollup mode: one row per entity aggregated over the whole range — addable counters are summed across days, and a distinct count is never summed where summing could double-count (a field's range value is recomputed exactly over the window, approximate via HLL with typical error under 2%, null, or — for the creation-event counts, whose per-day values cannot overlap — a per-day sum that is itself exact; each field's own description says which). Use either `date` or `starting_date`, not both. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.32853286  format: date32873288#### Returns32893290- `BetaPluginUsage object`32913292  Response for GET /v1/organizations/analytics/plugins.32933294  - `data: array of object`32953296    - `claude_code_metrics: object`32973298      Claude Code activity metrics for a single plugin on a given day.32993300      - `distinct_session_plugin_used_count: number or null`33013302        Number of distinct Claude Code sessions in which the plugin was invoked. Null on aggregated rows where a distinct count cannot be computed.33033304    - `cowork_metrics: object`33053306      Cowork activity metrics for a single plugin on a given day.33073308      - `distinct_session_plugin_used_count: number or null`33093310        Number of distinct Cowork sessions in which the plugin was invoked. Null on aggregated rows where a distinct count cannot be computed.33113312    - `distinct_user_count: number`33133314      Number of distinct users with recorded install or invocation activity for the plugin on the requested day (install-only users count), or, in date-range mode, over the requested window — recomputed as an exact distinct count over the window's per-member daily rows, never a sum of per-day values.33153316    - `install_count: number or null`33173318      Number of distinct users who installed the plugin on the requested day, or, in date-range mode, over the requested window — recomputed as an exact distinct count over the window's per-member daily rows, never a sum of per-day values.33193320    - `invocation_count: number`33213322      Number of plugin invocations on the requested day33233324    - `plugin_name: string`33253326      Name of the plugin33273328    - `plugin_id: optional string or null`33293330      Stable plugin identifier when available (e.g. `serena@claude-plugins-official`). Null for third-party Claude Code plugins (redacted at the source) and Cowork slash commands that carry only a hashed id.33313332    - `product: optional string or null`33333334      Product that produced this row's activity: one of `chat`, `claude_code`, `cowork`, or `office_agent` (the canonical Cost & Usage product naming; an `office_agent` row's per-surface breakdown is in its `office_metrics`). On `/plugins` only `cowork` and `claude_code` occur (the only surfaces with plugin attribution); on `/artifacts` only `chat`, `claude_code`, and `cowork` occur (the surfaces that create artifacts); `/apps/chat/projects` does not support the product dimension (a `product` entry in `group_by[]` or `filter[]` there is rejected). Present only when the request grouped by `product`.33353336    - `rbac_group_id: optional string or null`33373338      Tagged RBAC group identifier (`rbac_group_...`), matching the spend-limits API spelling. Present only when the request grouped by `rbac_group_id`.33393340    - `rbac_group_name: optional string or null`33413342      Resolved RBAC group display name, alongside `rbac_group_id` when name resolution is available. Null if the group has been deleted or its name could not be resolved; `rbac_group_id` remains the stable key.33433344    - `user_id: optional string or null`33453346      Tagged user identifier (e.g. `user_...`). Present only when the request grouped by `user_id`.33473348  - `next_page: string or null`33493350    Opaque cursor for the next page, or null if no more results33513352#### Example33533354```bash3355curl https://api.anthropic.com/v1/organizations/analytics/plugins \3356    -H 'anthropic-version: 2023-06-01' \3357    -H "X-Api-Key: $ANTHROPIC_API_KEY"3358```33593360##### Response (200)33613362```json3363{3364  "data": [3365    {3366      "claude_code_metrics": {3367        "distinct_session_plugin_used_count": 03368      },3369      "cowork_metrics": {3370        "distinct_session_plugin_used_count": 03371      },3372      "distinct_user_count": 0,3373      "install_count": 0,3374      "invocation_count": 0,3375      "plugin_name": "plugin_name",3376      "plugin_id": "plugin_id",3377      "product": "product",3378      "rbac_group_id": "rbac_group_id",3379      "rbac_group_name": "rbac_group_name",3380      "user_id": "user_id"3381    }3382  ],3383  "next_page": "next_page"3384}3385```33863387## Analytics › Artifacts33883389### Get Artifact Activity33903391**GET** `/v1/organizations/analytics/artifacts`33923393Get artifact-creation activity for a given day, broken out by MIME type.33943395Returns the full (`artifact_type`, `is_shared`) cube for the organization;3396`next_page` is null except for grouped queries, which paginate. The cube3397can be broken out per product, per member, or per RBAC group via3398`group_by[]`, and scoped via `filter[]`. Requires an API key with the3399`read:analytics` scope.34003401#### Query parameters34023403- `date: string`34043405  UTC date in YYYY-MM-DD format. The day to get artifact activity for. Data is typically available with a 1-day lag (varies by query; the error for a too-recent date names the latest available day) and may be revised by a few percent over the following days. No earlier than 2026-01-01.34063407  format: date34083409- `filter: optional array of string`34103411  Filters as `dimension:value`, e.g. `filter[]=rbac_group_id:{id}`. Repeat the param for OR within a dimension and across dimensions for AND. Supported dimensions on this endpoint: `artifact_type`, `is_shared`, `product`, `rbac_group_id`, `user_id`. Value forms: `artifact_type` is a canonical artifact MIME type (e.g. `text/markdown`) or `other`; `is_shared` is `true` or `false`; `product` is `chat`, `claude_code`, or `cowork` (the surfaces that create artifacts); `rbac_group_id` takes the tagged id (`rbac_group_...`, as emitted in responses and by the spend-limits API) or a bare group UUID, and matches users who held the group at any point during each covered UTC day (time-of-usage attribution); `user_id` takes a tagged user id (`user_...`), as emitted in responses. An unsupported dimension returns 400. At most 100 entries.34123413  maxItems: 10034143415- `group_by: optional array of "product" or "rbac_group_id" or "user_id"`34163417  Dimensions to break results out by: `product`, `user_id` and/or `rbac_group_id`. The ungrouped artifact-type cube is finite and returned in full; grouped queries multiply the cube and paginate via `next_page`. `product` takes the values `chat`, `claude_code`, or `cowork` (the surfaces that create artifacts). `rbac_group_id` attributes a user to every group they held at any point during the requested UTC day, so grouped rows are not an exclusive partition. At most 100 entries.34183419  maxItems: 10034203421  - `"product"`34223423  - `"rbac_group_id"`34243425  - `"user_id"`34263427- `limit: optional number`34283429  Maximum rows to return (1-1000, default 100). The ungrouped artifact-type cube is finite and returned in full; `limit` is the page size only when `group_by[]` multiplies the cube.34303431  minimum: 1, maximum: 100034323433- `page: optional string`34343435  Opaque cursor from a previous response's `next_page` field. Only valid with `group_by[]` — the ungrouped cube is never paginated.34363437#### Returns34383439- `BetaArtifactUsage object`34403441  Response for GET /v1/organizations/analytics/artifacts.34423443  `next_page` is null on ungrouped queries — the artifact-type cube is3444  finite and returned in full. Grouped queries (`group_by[]` on `product` /3445  `user_id` / `rbac_group_id`) multiply the cube and paginate like the other3446  analytics list endpoints.34473448  - `data: array of object`34493450    - `artifact_type: string`34513452      Canonical artifact MIME type (e.g. `text/markdown`, `application/vnd.ant.react`, `image/svg+xml`), or `other`. Claude Code and Cowork artifacts report as `text/html`.34533454    - `artifacts_created_count: number`34553456      Number of artifacts created in this bucket on the requested day34573458    - `distinct_user_count: number`34593460      Number of distinct users who created artifacts in this bucket on the requested day34613462    - `is_shared: boolean`34633464      Whether the artifacts in this bucket have ever been shared (a Claude Code / Cowork artifact is shared once anyone beyond its creator may open it: named members, the whole organization, or anyone with the link).34653466    - `published_artifacts_created_count: number`34673468      Number of those artifacts that have been published (for Claude Code / Cowork artifacts: open to anyone with the link); never exceeds `artifacts_created_count`34693470    - `product: optional string or null`34713472      Product that produced this row's activity: one of `chat`, `claude_code`, `cowork`, or `office_agent` (the canonical Cost & Usage product naming; an `office_agent` row's per-surface breakdown is in its `office_metrics`). On `/plugins` only `cowork` and `claude_code` occur (the only surfaces with plugin attribution); on `/artifacts` only `chat`, `claude_code`, and `cowork` occur (the surfaces that create artifacts); `/apps/chat/projects` does not support the product dimension (a `product` entry in `group_by[]` or `filter[]` there is rejected). Present only when the request grouped by `product`.34733474    - `rbac_group_id: optional string or null`34753476      Tagged RBAC group identifier (`rbac_group_...`), matching the spend-limits API spelling. Present only when the request grouped by `rbac_group_id`.34773478    - `rbac_group_name: optional string or null`34793480      Resolved RBAC group display name, alongside `rbac_group_id` when name resolution is available. Null if the group has been deleted or its name could not be resolved; `rbac_group_id` remains the stable key.34813482    - `user_id: optional string or null`34833484      Tagged user identifier (e.g. `user_...`). Present only when the request grouped by `user_id`.34853486  - `next_page: string or null`34873488    Cursor for the next page of a grouped query; always null for the ungrouped artifact-type cube, which is returned in full.34893490#### Example34913492```bash3493curl https://api.anthropic.com/v1/organizations/analytics/artifacts \3494    -H 'anthropic-version: 2023-06-01' \3495    -H "X-Api-Key: $ANTHROPIC_API_KEY"3496```34973498##### Response (200)34993500```json3501{3502  "data": [3503    {3504      "artifact_type": "artifact_type",3505      "artifacts_created_count": 0,3506      "distinct_user_count": 0,3507      "is_shared": true,3508      "published_artifacts_created_count": 0,3509      "product": "product",3510      "rbac_group_id": "rbac_group_id",3511      "rbac_group_name": "rbac_group_name",3512      "user_id": "user_id"3513    }3514  ],3515  "next_page": "next_page"3516}3517```3518
Files main
Menu

Theme