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.

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.
| Parameter | Required | What the page says |
|---|---|---|
starting_at | Yes | RFC 3339 timestamp; buckets on or after it are returned, snapped to the start of the minute, hour or day in UTC. |
ending_at | No | Buckets that end before this timestamp are returned. |
bucket_width | No | Only 1d is listed, and it is the default. |
group_by | No | Any subset of description and workspace_id. |
limit | No | Number of time buckets; default 7, minimum 1, maximum 31. |
page | No | The 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=...orthread_id=.... - Is the wallet running low?
GET /v1/balanceon 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
- Avatar catalog search: explore mode, seed and diversity
POST /v1/avatar-catalog/search browses reusable avatars. Omit the query for explore mode, pass a seed to keep the order stable, and set diversity from 0 to 1.
- Avatar catalog search returns few results: auto_expand explained
When an avatar catalog search is thin, Sume relaxes filters in a set order and lists them in relaxed_filters. Set auto_expand to false for strict matching.
- Face swap job completed but no video_url: resource_status
For Avatar Face Swap, poll job_status but read the video only when resource_status is ready. How to poll /v1/jobs and fetch the result without an empty URL.
- Face swap source clip: 4-15 seconds with usable audio on Sume
Sume's Avatar Face Swap Beta targets source videos of about 4-15 seconds with usable audio. What the docs say on length, silent clips, and unsupported fields.
Written by Sume