---
title: "List User Activity"
method: GET
path: "/v1/organizations/analytics/users?beta=true"
---

# List User Activity

`GET /v1/organizations/analytics/users?beta=true`

Get per-user activity for a given day, with cursor-based pagination.

Returns activity metrics for each user in the organization, sorted by email
address. Use `group_by[]` for per-RBAC-group aggregates, or `filter[]` to
scope results to specific members, groups, or a chat project. Available
to organizations on a Claude Enterprise plan. Requires an API key with
the `read:analytics` scope.

## Query parameters

- `date` string, date, nullable — 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.
- `starting_date` string, date, nullable — 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.
- `ending_date` string, date, nullable — 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`.
- `limit` integer, nullable — Number of results per page (1-1000, default 100).
- `page` string, nullable — Opaque cursor from a previous response's `next_page` field.
- `group_by[]` string[], nullable — 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.
- `filter[]` string[], nullable — 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.
- `order_by` string, nullable — 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).
- `order` 'asc' | 'desc', nullable — 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.

## Headers

- `x-api-key` string, nullable

## Response `200`

Successful Response

- BetaAnalyticsUsersResponse — Response for GET /v1/organizations/analytics/users.
  - `data` BetaAnalyticsUserActivity[], required
    - `chat_metrics` BetaAnalyticsChatMetrics, required — Claude.ai activity metrics for a single user on a given day.
      - `connectors_used_count` integer, required — Number of MCP connector invocations.
      - `distinct_artifacts_created_count` integer, required — 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.
      - `distinct_connectors_used_count` integer, nullable, required — 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.
      - `distinct_conversation_count` integer, nullable, required — 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.
      - `distinct_files_uploaded_count` integer, nullable, required — 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.
      - `distinct_projects_created_count` integer, required — 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.
      - `distinct_projects_used_count` integer, nullable, required — 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.
      - `distinct_shared_artifacts_viewed_count` integer, nullable, required — 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.
      - `distinct_skills_used_count` integer, nullable, required — 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.
      - `message_count` integer, required — Number of messages sent
      - `shared_conversations_viewed_count` integer, required — Number of times the user opened a shared conversation in a project
      - `thinking_message_count` integer, required — Number of messages that used extended thinking
    - `claude_code_metrics` BetaAnalyticsClaudeCodeMetrics, required — Claude Code activity metrics for a single user on a given day.
      - `core_metrics` BetaAnalyticsCoreCodeMetrics, required — Core Claude Code activity metrics for a single user on a given day.
        - `artifacts_created_count` integer, required — 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.
        - `commit_count` integer, required — Number of commits made via Claude Code
        - `distinct_session_count` integer, nullable, required — 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.
        - `lines_of_code` BetaAnalyticsLinesOfCode, required — Lines of code added and removed via Claude Code.
          - `added_count` integer, required — Lines of code added
          - `removed_count` integer, required — Lines of code removed
        - `pull_request_count` integer, required — Number of pull requests created via Claude Code
      - `tool_actions` BetaAnalyticsToolActions, required — Per-tool accepted/rejected counts for Claude Code file modification tools.
        - `edit_tool` BetaAnalyticsToolActionCounts, required — Accepted/rejected counts for a single Claude Code tool type.
          - `accepted_count` integer, required — Number of tool proposals accepted
          - `rejected_count` integer, required — Number of tool proposals rejected
        - `multi_edit_tool` BetaAnalyticsToolActionCounts, required — Accepted/rejected counts for a single Claude Code tool type.
          - `accepted_count` integer, required — Number of tool proposals accepted
          - `rejected_count` integer, required — Number of tool proposals rejected
        - `notebook_edit_tool` BetaAnalyticsToolActionCounts, required — Accepted/rejected counts for a single Claude Code tool type.
          - `accepted_count` integer, required — Number of tool proposals accepted
          - `rejected_count` integer, required — Number of tool proposals rejected
        - `write_tool` BetaAnalyticsToolActionCounts, required — Accepted/rejected counts for a single Claude Code tool type.
          - `accepted_count` integer, required — Number of tool proposals accepted
          - `rejected_count` integer, required — Number of tool proposals rejected
    - `cowork_metrics` BetaAnalyticsCoworkMetrics, required — Cowork activity metrics for a single user on a given day.
      - `action_count` integer, required — Number of tool actions completed in Cowork sessions
      - `artifacts_created_count` integer, required — 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.
      - `connectors_used_count` integer, required — Total number of connector invocations in Cowork sessions
      - `dispatch_turn_count` integer, required — Number of Dispatch (background agent) turns completed
      - `distinct_connectors_used_count` integer, nullable, required — 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.
      - `distinct_plugins_used_count` integer, nullable — 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.
      - `distinct_session_count` integer, nullable, required — 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.
      - `distinct_skills_used_count` integer, nullable, required — 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.
      - `edit_tool_count` integer, nullable — Number of successful Edit tool calls in Cowork sessions. Null while the file-edit metrics are not enabled for this organization.
      - `file_edit_count` integer, nullable — 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.
      - `message_count` integer, required — Number of messages sent in Cowork sessions
      - `multi_edit_tool_count` integer, nullable — Number of successful MultiEdit tool calls in Cowork sessions. Null while the file-edit metrics are not enabled for this organization.
      - `notebook_edit_tool_count` integer, nullable — Number of successful NotebookEdit tool calls in Cowork sessions. Null while the file-edit metrics are not enabled for this organization.
      - `plugins_used_count` integer, nullable — Total number of plugin invocations in Cowork sessions. Null while Cowork plugin-use metrics are not enabled for this organization.
      - `sessions_with_file_edits_count` integer, nullable — 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.
      - `skills_used_count` integer, required — Total number of skill invocations in Cowork sessions
      - `write_tool_count` integer, nullable — Number of successful Write tool calls in Cowork sessions. Null while the file-edit metrics are not enabled for this organization.
    - `design_metrics` BetaAnalyticsDesignMetrics, required — Claude Design activity metrics for a single user on a given day.
      - `distinct_projects_created_count` integer, required — 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.
      - `distinct_projects_used_count` integer, nullable, required — 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.
      - `distinct_session_count` integer, nullable, required — 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.
      - `message_count` integer, required — Number of messages sent in Claude Design sessions
    - `distinct_user_count` integer, nullable — 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.
    - `last_activity_date` string, date, nullable — 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.
    - `office_metrics` BetaAnalyticsOfficeMetrics, required — Office Agent activity metrics for a single user on a given day, broken out by Office product.
      - `excel` BetaAnalyticsOfficeProductMetrics, required — Office Agent activity metrics for a single user on a given day within one Office product.
        - `connectors_used_count` integer, required — Number of MCP connector invocations
        - `distinct_connectors_used_count` integer, nullable, required — 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.
        - `distinct_session_count` integer, nullable, required — 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.
        - `distinct_skills_used_count` integer, nullable, required — 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.
        - `message_count` integer, required — Number of messages sent
        - `skills_used_count` integer, required — Number of skill invocations
      - `outlook` BetaAnalyticsOfficeProductMetrics, required — Office Agent activity metrics for a single user on a given day within one Office product.
        - `connectors_used_count` integer, required — Number of MCP connector invocations
        - `distinct_connectors_used_count` integer, nullable, required — 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.
        - `distinct_session_count` integer, nullable, required — 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.
        - `distinct_skills_used_count` integer, nullable, required — 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.
        - `message_count` integer, required — Number of messages sent
        - `skills_used_count` integer, required — Number of skill invocations
      - `powerpoint` BetaAnalyticsOfficeProductMetrics, required — Office Agent activity metrics for a single user on a given day within one Office product.
        - `connectors_used_count` integer, required — Number of MCP connector invocations
        - `distinct_connectors_used_count` integer, nullable, required — 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.
        - `distinct_session_count` integer, nullable, required — 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.
        - `distinct_skills_used_count` integer, nullable, required — 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.
        - `message_count` integer, required — Number of messages sent
        - `skills_used_count` integer, required — Number of skill invocations
      - `word` BetaAnalyticsOfficeProductMetrics, required — Office Agent activity metrics for a single user on a given day within one Office product.
        - `connectors_used_count` integer, required — Number of MCP connector invocations
        - `distinct_connectors_used_count` integer, nullable, required — 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.
        - `distinct_session_count` integer, nullable, required — 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.
        - `distinct_skills_used_count` integer, nullable, required — 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.
        - `message_count` integer, required — Number of messages sent
        - `skills_used_count` integer, required — Number of skill invocations
    - `rbac_group_id` string, nullable — Tagged RBAC group identifier (`rbac_group_...`), matching the spend-limits API spelling. Present only when the request grouped by `rbac_group_id`.
    - `rbac_group_name` string, nullable — 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.
    - `science_metrics` BetaAnalyticsScienceMetrics, required — Claude Science activity metrics for a single user on a given day.
      - `delegation_count` integer, required — Number of delegations (handoffs to a specialized agent) in Claude Science sessions
      - `distinct_session_count` integer, nullable, required — 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.
      - `message_count` integer, required — Number of messages sent in Claude Science sessions
      - `remote_compute_job_count` integer, required — Number of remote compute jobs launched from Claude Science sessions
      - `skills_used_count` integer, required — Total number of skill invocations in Claude Science sessions
    - `user` BetaAnalyticsUser — A user in the organization, identified by tagged id and email address.
      - `email_address` string, required — Email address of the user
      - `id` string, required — Tagged user identifier (e.g. `user_...`)
      - `type` 'user', required — Object type. Always `user`.
    - `web_search_count` integer, required — Number of web searches performed
  - `next_page` string, nullable, required — Opaque cursor for the next page, or null if no more results

## Other responses

- `400` — Invalid argument - The client specified an invalid argument
- `401` — Unauthenticated - The request does not have valid authentication credentials
- `403` — Permission denied - The caller does not have permission to execute the specified operation
- `404` — Not found - Some requested entity was not found
- `408` — Deadline exceeded - The deadline expired before the operation could complete
- `409` — Aborted - The operation was aborted due to concurrency issue
- `412` — Failed precondition - Operation was rejected because the system is not in required state
- `413` — Out of range - Operation was attempted past the valid range
- `429` — Resource exhausted - Some resource has been exhausted (rate limiting)
- `431` — Request header fields too large - Request metadata was too large
- `499` — Cancelled - The operation was cancelled by the client
- `500` — Internal - Internal server error
- `501` — Unimplemented - The operation is not implemented or supported
- `503` — Unavailable - The service is currently unavailable
- `504` — Deadline exceeded - Upstream service did not respond in time
- `529` — Overloaded - The service is temporarily overloaded

## Changes

- **2026-09-02** `1bb7c7a0a4a9` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/anthropics/apis/anthropic-api/changes/v1/organizations/analytics/users?beta=true/get.md)

---

[API](https://skmtc.dev/anthropics/apis/anthropic-api.md) · [All operations](https://skmtc.dev/anthropics/apis/anthropic-api/llms.txt) · [OpenAPI document](https://skmtc.dev/anthropics/apis/anthropic-api/revisions/1bb7c7a0a4a9?raw)
