Claude Platform Docs

Get Cost By Dimension

CostListPage Beta.Organization.Analytics.Cost.List(parameters, cancellationToken = default)
GET/v1/organizations/analytics/cost

Get cost in USD across a date range, broken out by dimension.

Returns one row per combination of the requested group_by[] dimensions (and time bucket, when time_bucket_width is set) that has cost in the range, ranked by spend or ordered by time bucket; every combination is returned across pages. With no group_by[] and no time_bucket_width, a single row aggregates the whole range. Includes all cost, whether or not it is attributable to a seat user. Requires an API key with the read:analytics scope, or an Admin API key.

Parameters
CostListParams parameters
required DateTimeOffset startingAt⁠Query parameter

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
IReadOnlyList<string>? actorIds⁠Query parameter

Filter to usage attributed to specific identities, by tagged ID: a user_..., svac_... (service account), or apikey_... ID. An apikey_ entry matches only usage attributed to the key itself, not usage on that key attributed to a user or service account (use api_key_ids[] for every request a key authenticated). Federated identities have no tagged ID; select them with actor_types[]. Use group_by[]=actor to break out per-identity values.

maxItems100
IReadOnlyList<BetaAnalyticsActorType>? actorTypes⁠Query parameter

Filter to usage attributed to specific kinds of identity. Use group_by[]=actor_type to break out per-kind values.

maxItems100
ApiActor("api_actor")
FederatedActor("federated_actor")
ServiceAccountActor("service_account_actor")
UserActor("user_actor")
IReadOnlyList<string>? agentIds⁠Query parameter

Filter to usage incurred by sessions of specific Claude Managed Agents agents. Use group_by[]=agent_id to break out per-agent values. Claude Developer Platform organizations only.

maxItems100
IReadOnlyList<string>? apiKeyIds⁠Query parameter

Filter to usage authenticated by specific API keys, by tagged API key ID (apikey_...), whichever identity the usage is attributed to. Include an empty entry (api_key_ids[]=) to also match usage that no API key authenticated. Use group_by[]=api_key_id to break out per-key values; usage without a key has a null api_key_id. Claude Developer Platform organizations only.

maxItems100
IReadOnlyList<BetaAnalyticsClaudeTagCategory>? claudeTagCategories⁠Query parameter

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
Dm("dm")
Engaged("engaged")
Monitoring("monitoring")
Proactive("proactive")
Scheduled("scheduled")
IReadOnlyList<string>? claudeTagUserIds⁠Query parameter

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
IReadOnlyList<BetaAnalyticsContextWindow>? contextWindows⁠Query parameter

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

maxItems100
From0To200k("0-200k")
From200kTo1M("200k-1M")
IReadOnlyList<string>? deploymentIds⁠Query parameter

Filter to usage incurred by Claude Managed Agents sessions that specific deployments started. Use group_by[]=deployment_id to break out per-deployment values. Claude Developer Platform organizations only.

maxItems100
DateTimeOffset? endingAt⁠Query parameter

End of range, exclusive. Required when time_bucket_width is set. Without time_bucket_width, defaults to the earlier of now and starting_at + 31 days. The range may span at most 31 days.

formatdate-time
IReadOnlyList<string>? environmentIds⁠Query parameter

Filter to usage incurred by Claude Managed Agents sessions that ran in specific environments. Use group_by[]=environment_id to break out per-environment values. Claude Developer Platform organizations only.

maxItems100
bool excludeDeletedUsers⁠Query parameter

If true, omit rows whose actor is a user_actor with deleted: true. Requires group_by[]=actor. Rows for other actor types, and rows whose actor is null, are always kept. A page may contain fewer than limit rows; use has_more and next_page to paginate as usual.

IReadOnlyList<BetaAnalyticsCostGroupBy>? groupBy⁠Query parameter

Dimensions to break cost out by (at most 5, not counting cost_type and token_type): one row per combination of their values with cost in the range (and per time bucket, when time_bucket_width is set), every combination returned across pages rather than a capped top set. cost_type and token_type do not count toward limit: cost_type returns one row per cost component (tokens, web search, code execution, and session_usage, Claude Managed Agents session time); 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, code-execution and session-usage rows. When omitted, a single row aggregates the whole range.

maxItems100
Actor("actor")
ActorType("actor_type")
AgentID("agent_id")
ApiKeyID("api_key_id")
ClaudeTagCategory("claude_tag_category")
ClaudeTagUserID("claude_tag_user_id")
ContextWindow("context_window")
CostType("cost_type")
DeploymentID("deployment_id")
EnvironmentID("environment_id")
InferenceGeo("inference_geo")
Model("model")
Product("product")
RbacGroupID("rbac_group_id")
ServiceTier("service_tier")
SessionID("session_id")
SlackChannelID("slack_channel_id")
Speed("speed")
TokenType("token_type")
UserProfileID("user_profile_id")
WorkspaceID("workspace_id")
IReadOnlyList<BetaAnalyticsInferenceGeoFilter>? inferenceGeos⁠Query parameter

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
Global("global")
NotAvailable("not_available")
Us("us")
long limit⁠Query parameter

Number of rows per page (1-1000, default 20). cost_type/token_type fan-out rows (cost endpoint only) do not count toward this limit, so data can exceed it.

minimum1
maximum1000
IReadOnlyList<string>? models⁠Query parameter

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

maxItems100
BetaAnalyticsUsageCostSortOrder order⁠Query parameter

Sort direction of the order_by metric, or of the time buckets when order_by is time and time_bucket_width is set. Defaults to desc.

BetaAnalyticsCostOrderBy orderBy⁠Query parameter

Row order. A metric ranks rows by that metric in the order direction. time orders rows by time bucket in the order direction (newest first by default) and, within a bucket, by amount, highest first. time takes effect only with time_bucket_width; without it, time is the same as amount. Defaults to amount.

string? page⁠Query parameter

Opaque cursor from a previous response's next_page field.

IReadOnlyList<BetaAnalyticsUsageCostProductFilter>? products⁠Query parameter

Product surfaces to include. Defaults to all products.

maxItems100
Chat("chat")
ChatCoworkUnified("chat_cowork_unified")
ClaudeCode("claude_code")
ClaudeConsole("claude_console")
ClaudeDesign("claude_design")
ClaudeInChrome("claude_in_chrome")
ClaudeTag("claude_tag")
Cowork("cowork")
ManagedAgentsApi("managed_agents_api")
MessageBatchesApi("message_batches_api")
MessagesApi("messages_api")
OfficeAgent("office_agent")
IReadOnlyList<string>? rbacGroupIds⁠Query parameter

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
IReadOnlyList<BetaAnalyticsServiceTier>? serviceTiers⁠Query parameter

Filter to specific service tiers. Use group_by[]=service_tier to break out per-tier values. Claude Developer Platform organizations only; matches nothing for a Claude Enterprise organization.

maxItems100
Batch("batch")
Flex("flex")
FlexDiscount("flex_discount")
Priority("priority")
PriorityOnDemand("priority_on_demand")
Standard("standard")
IReadOnlyList<string>? sessionIds⁠Query parameter

Filter to usage incurred by specific Claude Managed Agents sessions, by tagged session ID (sesn_...). Use group_by[]=session_id to break out per-session values. Claude Developer Platform organizations only.

maxItems100
IReadOnlyList<string>? slackChannelIds⁠Query parameter

Filter to usage originating from specific Slack channels. Use group_by[]=slack_channel_id to break out per-channel values.

maxItems100
IReadOnlyList<BetaAnalyticsSpeed>? speeds⁠Query parameter

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

maxItems100
Fast("fast")
Standard("standard")
BetaAnalyticsTimeBucketWidth? timeBucketWidth⁠Query parameter

Time-bucket granularity. When set, rows are returned per time bucket (one per bucket and dimension combination with usage) and each row's starting_at and ending_at are that bucket's bounds; the time bucket counts toward limit. ending_at is required when time_bucket_width is set, and with time_bucket_width="1m" the range may span at most 24 hours. When omitted, each row aggregates the requested range with starting_at and ending_at each rounded down to the hour.

IReadOnlyList<string>? userProfileIds⁠Query parameter

Filter to usage attributed to specific user profiles, by tagged user profile ID (uprof_...). Use group_by[]=user_profile_id to break out per-profile values. Claude Developer Platform organizations only.

maxItems100
IReadOnlyList<string>? workspaceIds⁠Query parameter

Filter to usage in specific workspaces, by tagged workspace ID (wrkspc_...). Use group_by[]=workspace_id to break out per-workspace values. Claude Developer Platform organizations only; matches nothing for a Claude Enterprise organization.

maxItems100
IReadOnlyList<AnthropicBeta> betas⁠Header parameter

This endpoint is in beta: requests must send analytics-usage-cost-2026-08-24 in this header.

MessageBatches2024_09_24("message-batches-2024-09-24")
PromptCaching2024_07_31("prompt-caching-2024-07-31")
ComputerUse2024_10_22("computer-use-2024-10-22")
ComputerUse2025_01_24("computer-use-2025-01-24")
Pdfs2024_09_25("pdfs-2024-09-25")
TokenCounting2024_11_01("token-counting-2024-11-01")
TokenEfficientTools2025_02_19("token-efficient-tools-2025-02-19")
Output128k2025_02_19("output-128k-2025-02-19")
FilesApi2025_04_14("files-api-2025-04-14")
McpClient2025_04_04("mcp-client-2025-04-04")
McpClient2025_11_20("mcp-client-2025-11-20")
DevFullThinking2025_05_14("dev-full-thinking-2025-05-14")
InterleavedThinking2025_05_14("interleaved-thinking-2025-05-14")
CodeExecution2025_05_22("code-execution-2025-05-22")
ExtendedCacheTtl2025_04_11("extended-cache-ttl-2025-04-11")
Context1m2025_08_07("context-1m-2025-08-07")
ContextManagement2025_06_27("context-management-2025-06-27")
ModelContextWindowExceeded2025_08_26("model-context-window-exceeded-2025-08-26")
Skills2025_10_02("skills-2025-10-02")
FastMode2026_02_01("fast-mode-2026-02-01")
Output300k2026_03_24("output-300k-2026-03-24")
UserProfiles2026_03_24("user-profiles-2026-03-24")
UserProfiles2026_08_18("user-profiles-2026-08-18")
UserProfiles2026_09_04("user-profiles-2026-09-04")
AdvisorTool2026_03_01("advisor-tool-2026-03-01")
ManagedAgents2026_04_01("managed-agents-2026-04-01")
CacheDiagnosis2026_04_07("cache-diagnosis-2026-04-07")
Dreaming2026_04_21("dreaming-2026-04-21")
ThinkingTokenCount2026_05_13("thinking-token-count-2026-05-13")
ServerSideFallback2026_06_01("server-side-fallback-2026-06-01")
ServerSideFallback2026_07_01("server-side-fallback-2026-07-01")
FallbackCredit2026_06_01("fallback-credit-2026-06-01")
FallbackCredit2026_07_01("fallback-credit-2026-07-01")
AgentMemory2026_07_22("agent-memory-2026-07-22")
MidConversationToolChanges2026_07_01("mid-conversation-tool-changes-2026-07-01")
Compact2026_01_12("compact-2026-01-12")
ComputerUse2025_11_24("computer-use-2025-11-24")
McpTunnels2026_06_22("mcp-tunnels-2026-06-22")
StructuredOutputs2025_11_13("structured-outputs-2025-11-13")
TaskBudgets2026_03_13("task-budgets-2026-03-13")
ThinkingDisplayUpdates2026_08_18("thinking-display-updates-2026-08-18")
CEUserManagement2026_07_13("ce-user-management-2026-07-13")
MidConversationOutputConfig2026_07_01("mid-conversation-output-config-2026-07-01")
ThinkingBindingControls2026_08_01("thinking-binding-controls-2026-08-01")
MidConversationSystemClearAt2026_08_21("mid-conversation-system-clear-at-2026-08-21")
Compact2026_09_04("compact-2026-09-04")
InlineTools2026_09_15("inline-tools-2026-09-15")
McpClient2026_09_15("mcp-client-2026-09-15")
CEPlugins2026_09_01("ce-plugins-2026-09-01")
SpendLimitReads2026_09_26("spend-limit-reads-2026-09-26")
TelemetryDestinations2026_08_11("telemetry-destinations-2026-08-11")
Webhooks2026_10_07("webhooks-2026-10-07")
MessageThreads2026_08_12("message-threads-2026-08-12")
AnalyticsUsageCost2026_08_24("analytics-usage-cost-2026-08-24")
ExperimentalClaudeTag2026_10_21("experimental-claude-tag-2026-10-21")
Returns
class BetaAnalyticsCostItem { Cost; EndingAt; Group; StartingAt; }
required BetaAnalyticsCostMetrics Cost

Cost for this row.

required string Amount

Amount (post-discount, pre-credit) in fractional cents (minor units).

required string Currency

Currency code for the cost amount. Currently always "USD".

required string ListAmount

List-price amount (pre-discount) in fractional cents.

required long? Requests

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

required DateTimeOffset EndingAt

End of the period this row covers (exclusive), as an RFC 3339 UTC timestamp: the end of the row's time bucket when a time-bucket width is set; otherwise the requested ending_at (or, when omitted, the earlier of now and starting_at plus 31 days) rounded down to the hour, because without a time bucket the report covers whole hours.

formatdate-time
required BetaAnalyticsCostGroup Group

The dimension values this row's cost is broken out by.

required DateTimeOffset StartingAt

Start of the period this row covers (inclusive), as an RFC 3339 UTC timestamp: the start of the row's time bucket when a time-bucket width is set, otherwise the requested starting_at rounded down to the hour.

formatdate-time
Get Cost By Dimension
using System;
using Anthropic.Models.Beta.Organization.Analytics.Cost;

CostListParams parameters = new()
{
    StartingAt = DateTimeOffset.Parse("2026-09-01T00:00:00Z")
};

var page = await client.Beta.Organization.Analytics.Cost.List(parameters);
await foreach (var item in page.Paginate())
{
    Console.WriteLine(item);
}
Returns Examples
Response 200
{
  "data": [
    {
      "cost": {
        "amount": "41280.000000",
        "currency": "USD",
        "list_amount": "51600.000000",
        "requests": 128
      },
      "ending_at": "2026-10-01T00:00:00Z",
      "group": {
        "actor": {
          "deleted": false,
          "email_address": "user@emaildomain.com",
          "name": "Jane Doe",
          "type": "user_actor",
          "user_id": "user_01WxYzAbCdEfGhJkMnPqRsTu"
        },
        "actor_type": "user_actor",
        "agent_id": "agent_01VHd3EAGJ6PLkP9LM7DDu3f",
        "api_key_id": "apikey_01Rj2N8SVvo6BePZj99NhmiT",
        "claude_tag_category": "dm",
        "claude_tag_user_id": "U0123ABCDEF",
        "context_window": "0-200k",
        "cost_type": "tokens",
        "deployment_id": "depl_01JFC6ihzZHtAuyHsaENdJhY",
        "environment_id": "env_017oTjuGedHtjhJauVC5xGJD",
        "inference_geo": "global",
        "model": "claude-opus-5-5",
        "product": "chat",
        "rbac_group_id": "rbac_group_012rppKaSVsmTo6NqRDXQXNF",
        "service_tier": "standard",
        "session_id": "sesn_0187kPDyNCwibNNvfaPEApCJ",
        "slack_channel_id": "C0123ABCDEF",
        "speed": "fast",
        "token_type": "cache_creation.ephemeral_1h_input_tokens",
        "user_profile_id": "uprof_01M33NeYUQK2WV9PpYcsPHLi",
        "workspace_id": "wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"
      },
      "starting_at": "2026-09-01T00:00:00Z"
    }
  ],
  "data_refreshed_at": "2026-10-01T04:02:11Z",
  "has_more": true,
  "next_page": "next_page"
}