Claude Cost Report API: daily buckets by workspace vs Sume /v1/usage

Anthropic's cost_report endpoint returns USD cost in 1d buckets, groupable by workspace or description. Sume's /v1/usage sums one thread, run or job instead.

5 min readSume
All posts

Anthropic's Cost Report is GET /v1/organizations/cost_report. It takes a required starting_at timestamp, returns spend in daily (1d) time buckets, and can group results by description or workspace_id. Sume answers a different question: GET /v1/usage on Sume sums what one Studio Agent thread, one run, or one generation job cost, rather than spend per calendar day.

This post uses Anthropic's reference page, read 2026-10-02. The page marks the API as beta, so parameters can change.

What parameters does the Cost Report take?

The response is an object with data, has_more and next_page. Each bucket has starting_at, ending_at and results. The example result carries amount as a string, currency USD, cost_type, description, model, token_type, service_tier and workspace_id.

Query parameters on Anthropic's Get Cost Report page, read 2026-10-02.
ParameterRequiredWhat the page says
starting_atYesRFC 3339 timestamp; buckets on or after it are returned, snapped to the start of the minute, hour or day in UTC.
ending_atNoBuckets that end before this timestamp are returned.
bucket_widthNoOnly 1d is listed, and it is the default.
group_byNoAny subset of description and workspace_id.
limitNoNumber of time buckets; default 7, minimum 1, maximum 31.
pageNoThe next_page token from the previous response.

What does Sume return instead?

Per the Usage docs, GET /v1/usage lists the newest ledger rows for the workspace of the API key. Adding thread_id, run_id or job_id adds a summary folded over every row that scope caused, and summary.debited_usd_micros is the figure the docs say to quote. GET /v1/balance returns the USD balance.

The documented query parameters are limit (1 to 100), thread_id, run_id and job_id. The docs I read show no date range or group-by parameter, so a per-day total on Sume means summing rows you have fetched yourself, as in exporting usage to CSV.

import os
import requests

run_id = os.environ["SUME_RUN_ID"]
key = os.environ["SUME_API_KEY"]
r = requests.get(
    "https://api.sume.com/v1/usage",
    params={"run_id": run_id, "limit": 1},
    headers={"Authorization": f"Bearer {key}"},
    timeout=30,
)
r.raise_for_status()
summary = r.json()["data"]["summary"]
print(summary["debited_usd"], summary["final"])

Which one answers which question?

The two endpoints answer different questions, so pick by the question you are asking.

  • What did we spend on Claude this week, by workspace? Anthropic's Cost Report, grouped by workspace_id.
  • What did this one run or thread cost us on Sume? GET /v1/usage?run_id=... or thread_id=....
  • Is the wallet running low? GET /v1/balance on Sume.
  • The two are separate ledgers with separate billing; neither endpoint sees the other's spend.

What else did the page show?

The page's list of beta header values includes spend-limit-reads-2026-09-26, and its navigation has a Spend Limits section under Organization. This post did not read those pages, so it makes no claim about what they return. For Sume's own caps, see the spend cap post.

Sources

Related posts

More in Developers

All Developers posts

Written by Sume