How to · Anthropic

The Anthropic Admin API Cost Report, and the Gap It Leaves

By Ghiles Asmani, founder of Weckr · Published August 7, 2026

Short version:Anthropic’s Admin API exposes a usage report and a cost report for your organization, grouped by model, workspace, API key, and service tier, behind a special sk-ant-admin key. It is the right source for what Anthropic will bill you. It cannot tell you cost per end user, because your users all share one key, so per customer attribution still has to happen in your own code.

If you searched for this, you are probably past the console graphs and want the numbers in your own dashboard or spreadsheet. Here is how the API works, what it answers well, and where it stops.

The two endpoints

Both live under the organization scope and require an Admin API key, created by an organization admin in the Anthropic Console. A regular API key returns an authorization error.

  • Usage report: /v1/organizations/usage_report/messages, token consumption over time. Tokens are split into uncached input, cached input, cache creation, and output, which matters because those four rates differ several fold.
  • Cost report: spend in USD over the same window, with service breakdowns, the number that reconciles against your invoice.

You can bucket by minute, hour, or day, and group or filter by API key, workspace, model, and service tier. Full parameters are in Anthropic’s usage and cost API docs.

curl "https://api.anthropic.com/v1/organizations/usage_report/messages?\
starting_at=2026-08-01T00:00:00Z&bucket_width=1d&group_by[]=model" \
  -H "x-api-key: $ANTHROPIC_ADMIN_KEY" \
  -H "anthropic-version: 2023-06-01"

How those tokens turn into the dollars on the cost report, rate by rate, is worked through in the Claude API cost calculator.

What it answers well

  • Which model is the money going to, Opus versus Sonnet versus Haiku, per day.
  • Which workspace or API key spent what, useful if you split keys per environment or team.
  • How much of your input is cached versus fresh, which is your prompt caching report card.
  • Finance questions: month to date spend, trend lines, invoice reconciliation.

For a finance dashboard or a monthly close, this plus a cron job is genuinely all you need, and it is the authoritative record: it is what Anthropic bills.

The gap: your customers are not in it

The finest grain is the API key. Your product almost certainly calls Anthropic with one key for all customers, so the report can say “$1,900 on Sonnet in July” and cannot say which of your users caused it, which feature drove it, or whether the $49 account that made 6,000 calls is now costing you more than it pays. Anthropic cannot close this gap: it has no idea who your end users are.

Per customer cost only exists if you attribute it at call time, tagging every request with your user id and feature and pricing it as it happens. That is the approach in tracking Claude API cost per user, and the request level mechanics are in tracking Claude usage per user.

The setup that uses both

  • Per request, in your stack: tag user id, feature, and plan on every call, price it from current rates, enforce per user caps before the call. This is operational: it catches the runaway user today, not on the invoice.
  • Monthly, from the Admin API: pull the cost report and cross check it against the sum of your per request tracking. If they diverge more than a few percent, something is unattributed, a background job, a stray key, or a model you are not pricing.

Weckr is the per request half packaged: two lines around your Anthropic client and every call lands with user, feature, cost, and margin against the user’s plan. The console side of this story, what the graphs show and hide, is in Anthropic console billing explained.

FAQ

How do I get Claude usage and cost data programmatically?

Use the Anthropic Admin API. The usage report endpoint at /v1/organizations/usage_report/messages returns token consumption over time, and the cost report endpoint returns spend in USD. Both need an Admin API key, which starts with sk-ant-admin and can only be created by an organization admin in the Anthropic Console. A normal sk-ant-api key will not work.

What can the Anthropic cost report break down by?

You can bucket by minute, hour, or day, and group or filter by API key, workspace, model, and service tier. Token data separates uncached input, cached input, cache creation, and output tokens. That is enough to answer which model, which workspace, and which key spent the money, but nothing finer than the key level.

Can the Admin API give me Claude cost per end user?

No. The finest grain is your API key or workspace, and all of your end users usually share one key. Anthropic cannot know your user ids, so per customer attribution has to happen in your own stack: tag each request with the user id at call time and aggregate on your side, which is what a per user tracker like Weckr automates.

How fresh is the Admin API data?

It is a reporting API over historical data, refreshed on Anthropic’s schedule rather than in real time. That makes it right for invoices, finance dashboards, and month over month trends, and wrong for live controls like blocking a runaway user mid burst, which needs cost computed at request time in your own path.

Should I use the Admin API or client side tracking?

Both, for different jobs. The Admin API is the authoritative record of what Anthropic will bill your organization, so use it for reconciliation and finance. Client side per request tracking is the only way to get per user, per feature cost and to enforce spending caps before a call happens. The strong setup is per user tracking for operations plus a monthly Admin API cross check.

Keep reading

The invoice tells you how much. Not who.

The Admin API is the best version of the aggregate answer. The per customer answer, which accounts are quietly unprofitable, lives in your own request path, and Weckr turns it on in two lines. See the per user view on the live demo, or start from the AI cost and margin guide.

See the dashboard with real data, no signup needed.

Try the demo →