Cost Overview
Home → Cost shows spend, usage, and savings opportunities for a rolling window that you choose: the last 24 hours, 7 days, or 30 days. The page loads four data sets in parallel, and each one shows its own loading, partial, or error state, so one slow figure never blocks the rest. The one dependency is the overview, which decides whether to show the first-run setup layout, so the Cost, Request Rate, and heatmap cards wait for it before they appear.
Choose a window
The selector at the top of the page offers Last 24 hrs (the default), Last 7 days, and Last 30 days. The choice is kept in the page address as ?window=24h, ?window=7d, or ?window=30d, so a bookmarked or shared link opens on the same window. An unknown value opens the last 24 hours.
The window is a rolling period that ends now. There are no lifetime totals on this page. For a longer history, use the activity heatmap, the Cost → Breakdown pages, or the Cost overview API.
While a new window loads, the cards keep showing the previous window's values, dimmed and marked Updating…, so earlier figures are never read as the current ones.
Which totals follow the window
| Card | What it counts | Follows the window |
|---|---|---|
| Gateway calls | LLM, MCP, and egress requests that were evaluated, excluding AIControls' own internal calls | Yes |
| Requests denied | Requests denied by policy. The tooltip also shows how many responses were blocked by response-side controls | Yes |
| Active users, Active agents | Distinct users and agents that made a request in the window, not every identity ever seen | Yes |
| Spend | Spend in the window. Month to date appears beneath it | Yes. Month to date does not |
| Active policies, Pending approvals | Current counts, not counts over a period | No |
| Insights | Prompt caching savings and adoption in the window, recoverable waste, and policy violations blocked. New users are users active in the window who were not active in the period before it | Yes |
| Top Users, Top Projects, By Intent | Ranked spend and sessions in the window | Yes |
| Context optimization | Tokens saved in the window | Yes |
| Cost, Request Rate | Spend and call rate across the window | Yes |
| Activity heatmap | Sessions and spend per day over its own range | No |
The budget warning in Insights compares month to date spend with your monthly budget, so it does not change with the window. It appears only when a monthly budget is configured and month to date spend is known.
Request Rate now shows the average number of gateway calls per minute in each bucket, so a short peak looks lower than before. Allowed calls are no longer drawn as a separate series. Calls that were neither denied nor blocked are shown together.
The activity heatmap
The heatmap ignores the window. It covers the time since your earliest recorded activity, at least 30 days and at most 365 days, and the card title states the range, for example 212 sessions in the last 30 days.
Time zone
The Days tag next to the selector shows the time zone that day boundaries use, such as America/Los_Angeles or +02:00. Daily bars, the heatmap, and Month to date all use it. The last 24 hours is always an exact rolling 24 hours.
AIControls records each day in the zone in effect when that day was written. If the reporting zone changes, older days keep the boundaries of the previous zone. Daily figures near the change can be attributed to a neighboring day by up to the difference between the two zones, and a total that spans the change can be off once by the activity in that interval. Window totals that do not span the change are not affected. Self-hosted deployments should set a reporting time zone explicitly. See PostgreSQL.
Approximate figures
Window totals are exact, but some of the data behind the charts is recorded at a coarser grain:
- Imported historical session cost is attributed in full to the moment each session started.
- Observed AI tool usage is recorded by date, so in the 24-hour chart it is placed in the last hour of that date inside the window.
When either source contributes, the Cost card shows an Approximate buckets tag and the Spend label has a tooltip that explains it. The chart bars add up to the total.
Partial results
Every card has its own state, and the page answers even when some figures cannot be computed.
- A card that is waiting shows a loading placeholder.
- A card with a partial result shows the values that could be computed and a notice with the reason, such as timed out, the server was busy, or still being prepared. A figure that could not be computed shows Unavailable, never zero.
- A card that failed shows an error with Retry. Retry reloads the data set behind that card: the overview feeds the top band, Insights, Top Users, Top Projects, By Intent, and Context optimization together, while Cost, Request Rate, and the heatmap each reload on their own. AIControls does not retry a slow or timed out request on its own.
Gateway call counts begin when per-minute counting started. In a 7-day or 30-day window that reaches back before that point, the count is partial and says counts since a date, or counts cover N of M hours when the covered time is not one stretch. The numbers shown are the counts for the covered time only.
The header shows how old the oldest data on the page is, for example Updated 38 s ago. Responses are cached on the server for a short time. The overview refreshes itself about once a minute while the page is open. Use the refresh button to ask for new figures for every card. A response marked Stale was served from an earlier computation while another server recomputes it.
Related
- Cost Governance for budgets, rules, and limits.
- Dashboard snapshots for how Home loads and caches its cards.
- Cost overview API for the endpoints behind this page.