Observability
Analytics
Query USDC spend and request counts by model, wallet, and team — up to 90 days of history.
Analytics
The analytics endpoints return aggregated spend and request counts for a rolling time window. Use them to build dashboards, detect anomalies, or allocate costs across teams.
All total_cost_usdc values are in USDC (e.g. 4.75 = $4.75 USDC).
Team stats
Returns spend and requests for a single team, broken down by model, by provider, and by wallet.
Requires member role or higher.
GET /v1/orgs/018f1a2b-.../teams/019c3d4e-.../stats?days=30
Authorization: Bearer <admin-token | solvela_k_...>Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
days | integer | 7 | Rolling window in days. Clamped to 1–90. |
Response — 200 OK
{
"team_id": "019c3d4e-...",
"period_days": 30,
"total_spend_usdc": 142.80,
"total_requests": 4821,
"by_model": [
{
"model": "claude-sonnet-4-5",
"request_count": 2100,
"total_cost_usdc": 94.50
},
{
"model": "gpt-4o-mini",
"request_count": 2721,
"total_cost_usdc": 48.30
}
],
"by_provider": [
{
"provider": "anthropic",
"request_count": 2100,
"total_cost_usdc": 94.50
},
{
"provider": "openai",
"request_count": 2721,
"total_cost_usdc": 48.30
}
],
"by_wallet": [
{
"wallet_address": "AgEnTwALLetAddReSs...",
"request_count": 4821,
"total_cost_usdc": 142.80
}
]
}Org stats
Returns spend and requests for the entire organization, with a derived budget rollup, a daily time series, per-team / per-tenant / per-vendor breakdowns, and a paginated list of top wallets.
Requires member role or higher.
GET /v1/orgs/018f1a2b-.../stats?days=7&limit=10&offset=0
Authorization: Bearer <admin-token | solvela_k_...>Query parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
days | integer | 7 | Rolling window in days. Clamped to 1–90. |
limit | integer | 10 | Page size for top_wallets. Clamped to 1–100. |
offset | integer | 0 | Row offset for top_wallets. Negative values clamp to 0. |
Response — 200 OK
{
"org_id": "018f1a2b-...",
"period_days": 7,
"total_spend_usdc": 38.20,
"total_requests": 1104,
"budget": {
"hourly_limit_usdc": null,
"daily_limit_usdc": 150.0,
"monthly_limit_usdc": 4000.0,
"teams_total": 3,
"teams_with_hourly_budget": 0,
"teams_with_daily_budget": 2,
"teams_with_monthly_budget": 3
},
"by_team": [
{
"team_id": "019c3d4e-...",
"team_name": "research-agents",
"request_count": 890,
"total_cost_usdc": 30.10
},
{
"team_id": "019e5f6a-...",
"team_name": "prod-agents",
"request_count": 214,
"total_cost_usdc": 8.10
}
],
"by_day": [
{ "date": "2026-06-06", "spend_usdc": 5.40, "requests": 160 },
{ "date": "2026-06-07", "spend_usdc": 7.10, "requests": 201 }
],
"by_tenant": [
{ "tenant": "customer-a", "request_count": 600, "total_cost_usdc": 21.00 },
{ "tenant": "customer-b", "request_count": 290, "total_cost_usdc": 9.10 }
],
"by_vendor": [
{
"vendor_wallet": "VendoRwALLetAddReSs...",
"request_count": 312,
"settled_usdc": "12.480000",
"fee_receivable_usdc": "0.624000"
}
],
"top_wallets": [
{
"wallet_address": "AgEnTwALLetAddReSs...",
"request_count": 890,
"total_cost_usdc": 30.10
}
]
}Budget rollup (budget)
The budget object is a derived, reporting-only figure: the per-period
sum of the org's team budgets (see Budgets).
It is not an enforced org-level cap — Solvela enforces budgets at the leaf
(wallet and team) level only. A team with no limit for a period is treated as
unlimited and contributes nothing to the sum. Because of that, a limit is a
meaningful ceiling for a period only when every team has a budget for it;
the teams_with_*_budget counts (against teams_total) make any partial
coverage explicit. A null limit means no team set one for that period — never
read it as a 0 cap.
Breakdowns and time series
by_day— daily spend and request totals over the window, ascending by date (YYYY-MM-DD, UTC).by_tenant— spend grouped by thex-tenantattribution tag; rows with no tenant tag are omitted.by_vendor— for marketplace services that settle directly to a vendor wallet, the summed vendor settlement and Solvela's 5% fee receivable. Both are USDC strings with six decimal places, summed from integer atomic units (no floating-point rounding on the money value).
Counting semantics
A wallet may belong to multiple teams of an organization. The org summary
total, by_day, by_tenant, by_vendor, and top_wallets count each spend
row exactly once regardless of how many teams the wallet is in. by_team
intentionally attributes a wallet's spend under every team it belongs to, so
the per-team slices can legitimately sum to more than the org total when wallets
are shared across teams.
Ready for production?
Solvela Enterprise is $49.99/mo + 5% per route. Includes everything on this page plus the dashboard.
View pricing →