One read of Claude Developer Platformapi-20261001T213726Z
336 pages moved out of 748 read.
What this read moved
26-50 of 336, page 2 of 14This capture is too large to show at once. Changes 26-50 of 336 are below, significant first; the rest are on the following screens.
api/beta/messages/batches/create Changed · +12 / -6 lines
api/beta/messages/batches/results Changed · +12 / -6 lines
api/beta/messages/count_tokens Changed · +12 / -6 lines
api/beta/messages/create Changed · +22 / -12 lines
This page is larger than the 256 KiB this site keeps, so one side of the diff below stops where the stored text does.
api/beta/organization Changed · +3819 / -3928 lines
## Organization › Analytics › Summaries ## Organization › Analytics › Apps › Chat › Projects ## Organization › Analytics › Usage Report ## Organization › Analytics › User Usage Report ## Organization › Analytics › Cost Report ## Organization › Analytics › User Cost Report ### List Spend Limits ## Organization › Spend Limits › Effective ## Organization › Analytics ## Organization › Analytics › Usage ## Organization › Analytics › Cost ## Organization › Analytics › Chat Projects
This page is larger than the 256 KiB this site keeps, so one side of the diff below stops where the stored text does.
api/beta/organization/analytics Changed · +5137 / -3269 lines
### Beta Analytics Artifact Activity ### Beta Analytics Chat Metrics ### Beta Analytics Claude Code Metrics ### Beta Analytics Claude Tag Category ### Beta Analytics Connector Activity ### Beta Analytics Connector Chat Metrics ### Beta Analytics Connector Claude Code Metrics ### Beta Analytics Connector Cowork Metrics ### Beta Analytics Connector Office Metrics ### Beta Analytics Connector Office Product Metrics ### Beta Analytics Context Window ### Beta Analytics Core Code Metrics ### Beta Analytics Cost Bucketed Result ### Beta Analytics Cost Report Time Bucket ### Beta Analytics Cost Type ### Beta Analytics Cost Users Item ### Beta Analytics Cowork Metrics ### Beta Analytics Design Metrics ### Beta Analytics Inference Geo Filter ### Beta Analytics Lines Of Code ### Beta Analytics Office Metrics ### Beta Analytics Office Product Metrics ### Beta Analytics Plugin Activity ### Beta Analytics Plugin Claude Code Metrics ### Beta Analytics Plugin Cowork Metrics ### Beta Analytics Product Filter ### Beta Analytics Project Activity ### Beta Analytics Science Metrics ### Beta Analytics Server Tool Use ### Beta Analytics Single Day Activity Summary ### Beta Analytics Skill Activity ### Beta Analytics Skill Chat Metrics ### Beta Analytics Skill Claude Code Metrics ### Beta Analytics Skill Cowork Metrics ### Beta Analytics Skill Office Metrics ### Beta Analytics Skill Office Product Metrics ### Beta Analytics Token Type ### Beta Analytics Tool Action Counts ### Beta Analytics Tool Actions ### Beta Analytics Usage Bucketed Result ### Beta Analytics Usage Report Time Bucket ### Beta Analytics Usage Users Item ### Beta Analytics User Activity ## Analytics › Summaries ### Get Activity Summaries ## Analytics › Apps › Chat › Projects ## Analytics › Usage Report ## Analytics › User Usage Report ## Analytics › Cost Report ## Analytics › User Cost Report ## Get Activity Summaries ### Query parameters ### Returns ### Example #### Response (200) ### Beta Activity Summary ### Beta Connector Office Product Metrics ### Beta Office Product Metrics ### Beta Skill Office Product Metrics ### Beta Tool Action Counts ## Analytics › Usage ## Analytics › Cost ## Analytics › Chat Projects
This page is larger than the 256 KiB this site keeps, so one side of the diff below stops where the stored text does.
Nothing in the body moved in this read. What changed is above.
api/beta/organization/analytics/apps New page · 181 lines, new page
# Apps ## Apps › Chat › Projects ### Get Chat Project Usage #### Query parameters #### Returns #### Example ##### Response (200)
A whole new page. There's nothing to diff it against, so here is what it says.
---
title: Apps
url: https://platform.claude.com/docs/en/api/beta/organization/analytics/apps
---
# Apps
## Apps › Chat › Projects
### Get Chat Project Usage
**GET** `/v1/organizations/analytics/apps/chat/projects`
Get per-project activity for a given day, with cursor-based pagination.
Returns activity metrics for each project in the organization, sorted by
project ID. Use `group_by[]` to break projects out per member or per RBAC
group, and `filter[]` to scope results; the parameter descriptions list the
supported dimensions. Available to organizations on a Claude Enterprise
plan. Requires an API key with the `read:analytics` scope.
#### Query parameters
- `date: optional string`
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.
format: date
- `ending_date: optional string`
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`.
format: date
- `filter: optional array of string`
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.
maxItems: 100
- `group_by: optional array of "rbac_group_id" or "user_id"`
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.
maxItems: 100
- `"rbac_group_id"`
- `"user_id"`
- `limit: optional number`
Number of results per page (1-1000, default 100).
minimum: 1, maximum: 1000
- `order: optional "asc" or "desc"`
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.
- `"asc"`
- `"desc"`
- `order_by: optional string`
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).
- `page: optional string`
Opaque cursor from a previous response's `next_page` field.
- `starting_date: optional string`
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.
format: date
#### Returns
- `data: array of BetaAnalyticsProjectActivity`
- `distinct_user_count: number`
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.
- `message_count: number`
Number of messages sent in the project on the requested day
- `project_id: string`
Tagged project identifier (e.g. `claude_proj_...`)
- `project_name: string`
Name of the project
- `created_at: optional string or null`
Project creation timestamp in RFC 3339 format. Null if the project was deleted before attribution was recorded.
format: date-time
- `created_by: optional BetaAnalyticsUser or null`
User who created the project. Null if the project was deleted before attribution was recorded, or if the creator's account no longer exists.
- `type: "user"`
Object type. Always `user`.
default: user
- `id: string`
Tagged user identifier (e.g. `user_...`)
- `email_address: string`
Email address of the user
- `distinct_conversation_count: optional number or null`
Number of distinct conversations in the project. Null on aggregated rows where a distinct count cannot be computed.
- `product: optional string or null`
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`.
- `rbac_group_id: optional string or null`
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: optional string or null`
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.
- `user_id: optional string or null`
Tagged user identifier (e.g. `user_...`). Present only when the request grouped by `user_id`.
- `next_page: string or null`
Opaque cursor for the next page, or null if no more results
#### Example
```bash
curl https://api.anthropic.com/v1/organizations/analytics/apps/chat/projects \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"
```
##### Response (200)
```json
{
"data": [
{
"distinct_user_count": 0,
"message_count": 0,
"project_id": "project_id",
"project_name": "project_name",
"created_at": "2019-12-27T18:11:19.117Z",
"created_by": {
"id": "id",
"email_address": "email_address",
"type": "user"
},
"distinct_conversation_count": 0,
"product": "product",
"rbac_group_id": "rbac_group_id",
"rbac_group_name": "rbac_group_name",
"user_id": "user_id"
}
],
"next_page": "next_page"
}
```
api/beta/organization/analytics/apps/chat New page · 181 lines, new page
# Chat ## Chat › Projects ### Get Chat Project Usage #### Query parameters #### Returns #### Example ##### Response (200)
A whole new page. There's nothing to diff it against, so here is what it says.
---
title: Chat
url: https://platform.claude.com/docs/en/api/beta/organization/analytics/apps/chat
---
# Chat
## Chat › Projects
### Get Chat Project Usage
**GET** `/v1/organizations/analytics/apps/chat/projects`
Get per-project activity for a given day, with cursor-based pagination.
Returns activity metrics for each project in the organization, sorted by
project ID. Use `group_by[]` to break projects out per member or per RBAC
group, and `filter[]` to scope results; the parameter descriptions list the
supported dimensions. Available to organizations on a Claude Enterprise
plan. Requires an API key with the `read:analytics` scope.
#### Query parameters
- `date: optional string`
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.
format: date
- `ending_date: optional string`
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`.
format: date
- `filter: optional array of string`
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.
maxItems: 100
- `group_by: optional array of "rbac_group_id" or "user_id"`
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.
maxItems: 100
- `"rbac_group_id"`
- `"user_id"`
- `limit: optional number`
Number of results per page (1-1000, default 100).
minimum: 1, maximum: 1000
- `order: optional "asc" or "desc"`
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.
- `"asc"`
- `"desc"`
- `order_by: optional string`
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).
- `page: optional string`
Opaque cursor from a previous response's `next_page` field.
- `starting_date: optional string`
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.
format: date
#### Returns
- `data: array of BetaAnalyticsProjectActivity`
- `distinct_user_count: number`
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.
- `message_count: number`
Number of messages sent in the project on the requested day
- `project_id: string`
Tagged project identifier (e.g. `claude_proj_...`)
- `project_name: string`
Name of the project
- `created_at: optional string or null`
Project creation timestamp in RFC 3339 format. Null if the project was deleted before attribution was recorded.
format: date-time
- `created_by: optional BetaAnalyticsUser or null`
User who created the project. Null if the project was deleted before attribution was recorded, or if the creator's account no longer exists.
- `type: "user"`
Object type. Always `user`.
default: user
- `id: string`
Tagged user identifier (e.g. `user_...`)
- `email_address: string`
Email address of the user
- `distinct_conversation_count: optional number or null`
Number of distinct conversations in the project. Null on aggregated rows where a distinct count cannot be computed.
- `product: optional string or null`
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`.
- `rbac_group_id: optional string or null`
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: optional string or null`
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.
- `user_id: optional string or null`
Tagged user identifier (e.g. `user_...`). Present only when the request grouped by `user_id`.
- `next_page: string or null`
Opaque cursor for the next page, or null if no more results
#### Example
```bash
curl https://api.anthropic.com/v1/organizations/analytics/apps/chat/projects \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"
```
##### Response (200)
```json
{
"data": [
{
"distinct_user_count": 0,
"message_count": 0,
"project_id": "project_id",
"project_name": "project_name",
"created_at": "2019-12-27T18:11:19.117Z",
"created_by": {
"id": "id",
"email_address": "email_address",
"type": "user"
},
"distinct_conversation_count": 0,
"product": "product",
"rbac_group_id": "rbac_group_id",
"rbac_group_name": "rbac_group_name",
"user_id": "user_id"
}
],
"next_page": "next_page"
}
```
api/beta/organization/analytics/apps/chat/projects New page · 179 lines, new page
# Projects ## Get Chat Project Usage ### Query parameters ### Returns ### Example #### Response (200)
A whole new page. There's nothing to diff it against, so here is what it says.
---
title: Projects
url: https://platform.claude.com/docs/en/api/beta/organization/analytics/apps/chat/projects
---
# Projects
## Get Chat Project Usage
**GET** `/v1/organizations/analytics/apps/chat/projects`
Get per-project activity for a given day, with cursor-based pagination.
Returns activity metrics for each project in the organization, sorted by
project ID. Use `group_by[]` to break projects out per member or per RBAC
group, and `filter[]` to scope results; the parameter descriptions list the
supported dimensions. Available to organizations on a Claude Enterprise
plan. Requires an API key with the `read:analytics` scope.
### Query parameters
- `date: optional string`
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.
format: date
- `ending_date: optional string`
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`.
format: date
- `filter: optional array of string`
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.
maxItems: 100
- `group_by: optional array of "rbac_group_id" or "user_id"`
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.
maxItems: 100
- `"rbac_group_id"`
- `"user_id"`
- `limit: optional number`
Number of results per page (1-1000, default 100).
minimum: 1, maximum: 1000
- `order: optional "asc" or "desc"`
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.
- `"asc"`
- `"desc"`
- `order_by: optional string`
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).
- `page: optional string`
Opaque cursor from a previous response's `next_page` field.
- `starting_date: optional string`
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.
format: date
### Returns
- `data: array of BetaAnalyticsProjectActivity`
- `distinct_user_count: number`
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.
- `message_count: number`
Number of messages sent in the project on the requested day
- `project_id: string`
Tagged project identifier (e.g. `claude_proj_...`)
- `project_name: string`
Name of the project
- `created_at: optional string or null`
Project creation timestamp in RFC 3339 format. Null if the project was deleted before attribution was recorded.
format: date-time
- `created_by: optional BetaAnalyticsUser or null`
User who created the project. Null if the project was deleted before attribution was recorded, or if the creator's account no longer exists.
- `type: "user"`
Object type. Always `user`.
default: user
- `id: string`
Tagged user identifier (e.g. `user_...`)
- `email_address: string`
Email address of the user
- `distinct_conversation_count: optional number or null`
Number of distinct conversations in the project. Null on aggregated rows where a distinct count cannot be computed.
- `product: optional string or null`
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`.
- `rbac_group_id: optional string or null`
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: optional string or null`
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.
- `user_id: optional string or null`
Tagged user identifier (e.g. `user_...`). Present only when the request grouped by `user_id`.
- `next_page: string or null`
Opaque cursor for the next page, or null if no more results
### Example
```bash
curl https://api.anthropic.com/v1/organizations/analytics/apps/chat/projects \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"
```
#### Response (200)
```json
{
"data": [
{
"distinct_user_count": 0,
"message_count": 0,
"project_id": "project_id",
"project_name": "project_name",
"created_at": "2019-12-27T18:11:19.117Z",
"created_by": {
"id": "id",
"email_address": "email_address",
"type": "user"
},
"distinct_conversation_count": 0,
"product": "product",
"rbac_group_id": "rbac_group_id",
"rbac_group_name": "rbac_group_name",
"user_id": "user_id"
}
],
"next_page": "next_page"
}
```
api/beta/organization/analytics/apps/chat/projects/list New page · 177 lines, new page
# Get Chat Project Usage ## Query parameters ## Returns ## Example ### Response (200)
A whole new page. There's nothing to diff it against, so here is what it says.
---
title: Get Chat Project Usage
url: https://platform.claude.com/docs/en/api/beta/organization/analytics/apps/chat/projects/list
---
# Get Chat Project Usage
**GET** `/v1/organizations/analytics/apps/chat/projects`
Get per-project activity for a given day, with cursor-based pagination.
Returns activity metrics for each project in the organization, sorted by
project ID. Use `group_by[]` to break projects out per member or per RBAC
group, and `filter[]` to scope results; the parameter descriptions list the
supported dimensions. Available to organizations on a Claude Enterprise
plan. Requires an API key with the `read:analytics` scope.
## Query parameters
- `date: optional string`
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.
format: date
- `ending_date: optional string`
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`.
format: date
- `filter: optional array of string`
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.
maxItems: 100
- `group_by: optional array of "rbac_group_id" or "user_id"`
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.
maxItems: 100
- `"rbac_group_id"`
- `"user_id"`
- `limit: optional number`
Number of results per page (1-1000, default 100).
minimum: 1, maximum: 1000
- `order: optional "asc" or "desc"`
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.
- `"asc"`
- `"desc"`
- `order_by: optional string`
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).
- `page: optional string`
Opaque cursor from a previous response's `next_page` field.
- `starting_date: optional string`
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.
format: date
## Returns
- `data: array of BetaAnalyticsProjectActivity`
- `distinct_user_count: number`
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.
- `message_count: number`
Number of messages sent in the project on the requested day
- `project_id: string`
Tagged project identifier (e.g. `claude_proj_...`)
- `project_name: string`
Name of the project
- `created_at: optional string or null`
Project creation timestamp in RFC 3339 format. Null if the project was deleted before attribution was recorded.
format: date-time
- `created_by: optional BetaAnalyticsUser or null`
User who created the project. Null if the project was deleted before attribution was recorded, or if the creator's account no longer exists.
- `type: "user"`
Object type. Always `user`.
default: user
- `id: string`
Tagged user identifier (e.g. `user_...`)
- `email_address: string`
Email address of the user
- `distinct_conversation_count: optional number or null`
Number of distinct conversations in the project. Null on aggregated rows where a distinct count cannot be computed.
- `product: optional string or null`
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`.
- `rbac_group_id: optional string or null`
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: optional string or null`
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.
- `user_id: optional string or null`
Tagged user identifier (e.g. `user_...`). Present only when the request grouped by `user_id`.
- `next_page: string or null`
Opaque cursor for the next page, or null if no more results
## Example
```bash
curl https://api.anthropic.com/v1/organizations/analytics/apps/chat/projects \
-H 'anthropic-version: 2023-06-01' \
-H "X-Api-Key: $ANTHROPIC_API_KEY"
```
### Response (200)
```json
{
"data": [
{
"distinct_user_count": 0,
"message_count": 0,
"project_id": "project_id",
"project_name": "project_name",
"created_at": "2019-12-27T18:11:19.117Z",
"created_by": {
"id": "id",
"email_address": "email_address",
"type": "user"
},
"distinct_conversation_count": 0,
"product": "product",
"rbac_group_id": "rbac_group_id",
"rbac_group_name": "rbac_group_name",
"user_id": "user_id"
}
],
"next_page": "next_page"
}
```
api/beta/organization/analytics/artifacts Changed · +21 / -85 lines
## Domain types ### Beta Artifact Usage
api/beta/organization/analytics/artifacts/list Changed · +21 / -30 lines
api/beta/organization/analytics/chat_projects Page removed · 257 lines, page removed
# Chat Projects ## Get Chat Project Usage ### Query parameters ### Returns ### Example #### Response (200) ## Domain types ### Beta Chat Project Usage
The page is gone upstream. What it last said is kept here.
api/beta/organization/analytics/chat_projects/list Page removed · 181 lines, page removed
# Get Chat Project Usage ## Query parameters ## Returns ## Example ### Response (200)
The page is gone upstream. What it last said is kept here.
api/beta/organization/analytics/connectors Changed · +98 / -212 lines
## Domain types ### Beta Connector Usage
api/beta/organization/analytics/connectors/list Changed · +98 / -102 lines
api/beta/organization/analytics/cost Page removed · 1093 lines, page removed
# Cost ## Get Cost Over Time ### Query parameters ### Returns ### Example #### Response (200) ## Get Per-User Cost ### Query parameters ### Returns ### Example #### Response (200) ## Domain types ### Beta Cost Bucket ### Beta User Cost
The page is gone upstream. What it last said is kept here.
api/beta/organization/analytics/cost/list Page removed · 363 lines, page removed
# Get Cost Over Time ## Query parameters ## Returns ## Example ### Response (200)
The page is gone upstream. What it last said is kept here.
api/beta/organization/analytics/cost/list_by_user Page removed · 420 lines, page removed
# Get Per-User Cost ## Query parameters ## Returns ## Example ### Response (200)
The page is gone upstream. What it last said is kept here.
api/beta/organization/analytics/cost_report New page · 363 lines, new page
# Cost Report ## Get Cost Over Time ### Query parameters ### Returns ### Example #### Response (200)
A whole new page. There's nothing to diff it against, so here is what it says.
---
title: Cost Report
url: https://platform.claude.com/docs/en/api/beta/organization/analytics/cost_report
---
# Cost Report
## Get Cost Over Time
**GET** `/v1/organizations/analytics/cost_report`
Get cost in USD over time across a date range.
Returns cost bucketed by minute, hour, or day, optionally broken down by
product, model, context window, inference region, speed, cost type, or
token type. Available to organizations on a Claude Enterprise plan.
Requires an API key with the `read:analytics` scope.
### Query parameters
- `starting_at: string`
Start of range, inclusive. RFC 3339 tz-aware. Must be within the last 365 days and no earlier than 2026-01-01T00:00:00Z.
format: date-time
- `bucket_width: optional "1d" or "1h" or "1m"`
Time bucket granularity.
default: 1d
- `"1d"`
- `"1h"`
- `"1m"`
- `claude_tag_categories: optional array of BetaAnalyticsClaudeTagCategory`
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.
maxItems: 100
- `"dm"`
- `"engaged"`
- `"monitoring"`
- `"proactive"`
- `"scheduled"`
- `claude_tag_user_ids: optional array of string`
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.
maxItems: 100
- `context_windows: optional array of BetaAnalyticsContextWindow`
Filter to specific context-window pricing tiers. Use `group_by[]=context_window` to break out per-tier values.
maxItems: 100
- `"0-200k"`
- `"200k-1M"`
- `ending_at: optional string`
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.
format: date-time
- `group_by: optional array of "claude_tag_category" or "claude_tag_user_id" or "context_window" or 8 more`
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.
maxItems: 100
- `"claude_tag_category"`
- `"claude_tag_user_id"`
- `"context_window"`
- `"cost_type"`
- `"inference_geo"`
- `"model"`
- `"product"`
- `"rbac_group_id"`
- `"slack_channel_id"`
- `"speed"`
- `"token_type"`
- `inference_geos: optional array of BetaAnalyticsInferenceGeoFilter`
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.
maxItems: 100
- `"global"`
- `"not_available"`
- `"us"`
- `limit: optional number`
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).
minimum: 1
- `models: optional array of string`
Models to include. Defaults to all models. Use `group_by[]=model` to break out per-model values.
maxItems: 100
- `page: optional string`
Opaque cursor from a previous response's `next_page` field.
- `products: optional array of BetaAnalyticsProductFilter`
Product surfaces to include. Defaults to all products. Use `group_by[]=product` to break out per-product values.
maxItems: 100
- `"chat"`
- `"claude-tag"`
- `"claude_code"`
- `"claude_design"`
- `"claude_in_chrome"`
- `"cowork"`
- `"office_agent"`
- `rbac_group_ids: optional array of string`
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.
maxItems: 100
- `slack_channel_ids: optional array of string`
Filter to usage originating from specific Slack channels. Use `group_by[]=slack_channel_id` to break out per-channel values.
maxItems: 100
- `speeds: optional array of "fast" or "standard"`
Filter to fast or standard inference mode. Use `group_by[]=speed` to break out per-mode values.
maxItems: 100
- `"fast"`
- `"standard"`
- `user_ids: optional array of string`
Filter to specific users by tagged user ID.
maxItems: 100
### Returns
- `data: array of BetaAnalyticsCostReportTimeBucket`
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.
- `ending_at: string`
End of the time bucket (exclusive) in RFC 3339 format.
format: date-time
- `results: array of BetaAnalyticsCostBucketedResult`
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).
- `amount: string`
Amount (post-discount, pre-credit) in fractional cents.
- `claude_tag_category: BetaAnalyticsClaudeTagCategory or null`
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.
- `"dm"`
- `"engaged"`
- `"monitoring"`
- `"proactive"`
- `"scheduled"`
- `claude_tag_user_id: string or null`
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.
- `context_window: BetaAnalyticsContextWindow or null`
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.
- `"0-200k"`
- `"200k-1M"`
- `cost_type: BetaAnalyticsCostType or null`
Cost component when `group_by[]=cost_type`; null otherwise (amount is the combined total).
- `"code_execution"`
- `"tokens"`
- `"web_search"`
- `currency: string`
Currency code for the cost amount. Currently always `"USD"`.
default: USD
- `inference_geo: "global" or "us" or null`
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).
- `"global"`
- `"us"`
- `list_amount: string`
List-price amount (pre-discount) in fractional cents.
- `model: string or null`
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.
- `product: string or null`
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".
- `rbac_group_id: string or null`
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[]`.
- `requests: number or null`
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`).
- `slack_channel_id: string or null`
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).
- `speed: "fast" or "standard" or null`
Inference speed mode of the usage or cost: `fast` or `standard`. Null unless `speed` is in `group_by[]`.
- `"fast"`
- `"standard"`
- `token_type: BetaAnalyticsTokenType or null`
Token type when `group_by[]=token_type` and `cost_type=tokens`; null otherwise.
- `"cache_creation.ephemeral_1h_input_tokens"`
- `"cache_creation.ephemeral_5m_input_tokens"`
- `"cache_read_input_tokens"`
- `"output_tokens"`
- `"uncached_input_tokens"`
- `starting_at: string`
Start of the time bucket (inclusive) in RFC 3339 format.
Cut at 300 lines. The page has the rest.
api/beta/organization/analytics/cost_report/list New page · 361 lines, new page
# Get Cost Over Time ## Query parameters ## Returns ## Example ### Response (200)
A whole new page. There's nothing to diff it against, so here is what it says.
---
title: Get Cost Over Time
url: https://platform.claude.com/docs/en/api/beta/organization/analytics/cost_report/list
---
# Get Cost Over Time
**GET** `/v1/organizations/analytics/cost_report`
Get cost in USD over time across a date range.
Returns cost bucketed by minute, hour, or day, optionally broken down by
product, model, context window, inference region, speed, cost type, or
token type. Available to organizations on a Claude Enterprise plan.
Requires an API key with the `read:analytics` scope.
## Query parameters
- `starting_at: string`
Start of range, inclusive. RFC 3339 tz-aware. Must be within the last 365 days and no earlier than 2026-01-01T00:00:00Z.
format: date-time
- `bucket_width: optional "1d" or "1h" or "1m"`
Time bucket granularity.
default: 1d
- `"1d"`
- `"1h"`
- `"1m"`
- `claude_tag_categories: optional array of BetaAnalyticsClaudeTagCategory`
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.
maxItems: 100
- `"dm"`
- `"engaged"`
- `"monitoring"`
- `"proactive"`
- `"scheduled"`
- `claude_tag_user_ids: optional array of string`
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.
maxItems: 100
- `context_windows: optional array of BetaAnalyticsContextWindow`
Filter to specific context-window pricing tiers. Use `group_by[]=context_window` to break out per-tier values.
maxItems: 100
- `"0-200k"`
- `"200k-1M"`
- `ending_at: optional string`
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.
format: date-time
- `group_by: optional array of "claude_tag_category" or "claude_tag_user_id" or "context_window" or 8 more`
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.
maxItems: 100
- `"claude_tag_category"`
- `"claude_tag_user_id"`
- `"context_window"`
- `"cost_type"`
- `"inference_geo"`
- `"model"`
- `"product"`
- `"rbac_group_id"`
- `"slack_channel_id"`
- `"speed"`
- `"token_type"`
- `inference_geos: optional array of BetaAnalyticsInferenceGeoFilter`
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.
maxItems: 100
- `"global"`
- `"not_available"`
- `"us"`
- `limit: optional number`
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).
minimum: 1
- `models: optional array of string`
Models to include. Defaults to all models. Use `group_by[]=model` to break out per-model values.
maxItems: 100
- `page: optional string`
Opaque cursor from a previous response's `next_page` field.
- `products: optional array of BetaAnalyticsProductFilter`
Product surfaces to include. Defaults to all products. Use `group_by[]=product` to break out per-product values.
maxItems: 100
- `"chat"`
- `"claude-tag"`
- `"claude_code"`
- `"claude_design"`
- `"claude_in_chrome"`
- `"cowork"`
- `"office_agent"`
- `rbac_group_ids: optional array of string`
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.
maxItems: 100
- `slack_channel_ids: optional array of string`
Filter to usage originating from specific Slack channels. Use `group_by[]=slack_channel_id` to break out per-channel values.
maxItems: 100
- `speeds: optional array of "fast" or "standard"`
Filter to fast or standard inference mode. Use `group_by[]=speed` to break out per-mode values.
maxItems: 100
- `"fast"`
- `"standard"`
- `user_ids: optional array of string`
Filter to specific users by tagged user ID.
maxItems: 100
## Returns
- `data: array of BetaAnalyticsCostReportTimeBucket`
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.
- `ending_at: string`
End of the time bucket (exclusive) in RFC 3339 format.
format: date-time
- `results: array of BetaAnalyticsCostBucketedResult`
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).
- `amount: string`
Amount (post-discount, pre-credit) in fractional cents.
- `claude_tag_category: BetaAnalyticsClaudeTagCategory or null`
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.
- `"dm"`
- `"engaged"`
- `"monitoring"`
- `"proactive"`
- `"scheduled"`
- `claude_tag_user_id: string or null`
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.
- `context_window: BetaAnalyticsContextWindow or null`
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.
- `"0-200k"`
- `"200k-1M"`
- `cost_type: BetaAnalyticsCostType or null`
Cost component when `group_by[]=cost_type`; null otherwise (amount is the combined total).
- `"code_execution"`
- `"tokens"`
- `"web_search"`
- `currency: string`
Currency code for the cost amount. Currently always `"USD"`.
default: USD
- `inference_geo: "global" or "us" or null`
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).
- `"global"`
- `"us"`
- `list_amount: string`
List-price amount (pre-discount) in fractional cents.
- `model: string or null`
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.
- `product: string or null`
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".
- `rbac_group_id: string or null`
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[]`.
- `requests: number or null`
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`).
- `slack_channel_id: string or null`
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).
- `speed: "fast" or "standard" or null`
Inference speed mode of the usage or cost: `fast` or `standard`. Null unless `speed` is in `group_by[]`.
- `"fast"`
- `"standard"`
- `token_type: BetaAnalyticsTokenType or null`
Token type when `group_by[]=token_type` and `cost_type=tokens`; null otherwise.
- `"cache_creation.ephemeral_1h_input_tokens"`
- `"cache_creation.ephemeral_5m_input_tokens"`
- `"cache_read_input_tokens"`
- `"output_tokens"`
- `"uncached_input_tokens"`
- `starting_at: string`
Start of the time bucket (inclusive) in RFC 3339 format.
format: date-time
Cut at 300 lines. The page has the rest.
api/beta/organization/analytics/plugins Changed · +29 / -99 lines
## Domain types ### Beta Plugin Usage
api/beta/organization/analytics/plugins/list Changed · +29 / -33 lines
api/beta/organization/analytics/retrieve_summaries Page removed · 393 lines, page removed
# Get Activity Summaries ## Query parameters ## Returns ## Example ### Response (200)
The page is gone upstream. What it last said is kept here.
api/beta/organization/analytics/skills Changed · +108 / -232 lines
## Domain types ### Beta Skill Usage