Claude Platform Docs

Obter custo por usuário

GET/v1/organizations/analytics/user_cost_report

Obtenha o custo por usuário em USD em um intervalo de datas.

Retorna uma linha por usuário, classificada por gasto. Use isso para ver quais usuários respondem pela maior parte do custo. Somente o custo atribuível a um usuário com assento é incluído; para totais de toda a organização, incluindo tráfego direto de chave de API e de automação, use o endpoint agrupado /v1/organizations/analytics/cost_report. Disponível para organizações em um plano Claude Enterprise. Requer uma chave de API com o escopo read:analytics.

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.

formatdate-time
bucket_width: optional "1d" or "1h" or "1m"

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.

One of the following:
"1d"
"1h"
"1m"
claude_tag_categories: optional array of "dm" or "engaged" or "monitoring" or 2 more

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.

maxItems100
One of the following:
"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.

maxItems100
context_windows: optional array of "0-200k" or "200k-1M"

Filter to specific context-window pricing tiers. Use group_by[]=context_window to break out per-tier values.

maxItems100
One of the following:
"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.

formatdate-time
exclude_deleted_users: optional boolean

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.

defaultfalse
group_by: optional array of "claude_tag_category" or "claude_tag_user_id" or "context_window" or 8 more

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.

maxItems100
One of the following:
"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 "global" or "not_available" or "us"

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.

maxItems100
One of the following:
"global"
"not_available"
"us"
limit: optional number

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.

default20
maximum1000
minimum1
models: optional array of string

Models to include. Defaults to all models. Use group_by[]=model to break out per-model values.

maxItems100
order: optional "asc" or "desc"

Sort direction. Defaults to desc.

defaultdesc
One of the following:
"asc"
"desc"
order_by: optional "amount" or "list_amount"

Metric to rank actors by. Defaults to amount.

defaultamount
One of the following:
"amount"
"list_amount"
page: optional string

Opaque cursor from a previous response's next_page field.

products: optional array of "chat" or "claude-tag" or "claude_code" or 4 more

Product surfaces to include. Defaults to all products.

maxItems100
One of the following:
"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.

maxItems100
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.

maxItems100
speeds: optional array of "fast" or "standard"

Filter to fast or standard inference mode. Use group_by[]=speed to break out per-mode values.

maxItems100
One of the following:
"fast"
"standard"
user_ids: optional array of string

Filter to specific users by tagged user ID.

maxItems100
Returns
UserCost object{ data, data_refreshed_at, has_more, 2 more }
Obter custo por usuário
cURL
curl https://api.anthropic.com/v1/organizations/analytics/user_cost_report \
    -H 'anthropic-version: 2023-06-01' \
    -H "X-Api-Key: $ANTHROPIC_ADMIN_API_KEY"
Returns Examples
Response 200
{
  "data": [
    {
      "actor": {
        "deleted": true,
        "email": "jane@example.com",
        "name": "Jane Smith",
        "type": "user_actor",
        "user_id": "user_01AbCdEfGhIjKlMnOpQrSt"
      },
      "amount": "41280.000000",
      "claude_tag_category": "dm",
      "claude_tag_user_id": "U0123ABCDEF",
      "context_window": "0-200k",
      "cost_type": "code_execution",
      "currency": "USD",
      "ending_at": "2019-12-27T18:11:19.117Z",
      "inference_geo": "global",
      "list_amount": "51600.000000",
      "model": "claude-opus-5",
      "product": "chat",
      "rbac_group_id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",
      "requests": 128,
      "slack_channel_id": "C0123ABCDEF",
      "speed": "fast",
      "starting_at": "2019-12-27T18:11:19.117Z",
      "token_type": "cache_creation.ephemeral_1h_input_tokens"
    }
  ],
  "data_refreshed_at": "2019-12-27T18:11:19.117Z",
  "has_more": true,
  "next_page": "next_page",
  "organization_id": "org_013FP9SaFPBg7Kw7fetjn6cF"
}