Usage & metering
Training is billed on capacity added + tokens trained (see Pricing); each finished run writes one itemized usage line. These endpoints are read-only.
GET /overview?days=30
Counters for the dashboard header.
json
{ "active_runs": 1, "models": 1, "datasets": 1,
"gpu_minutes_period": 30.48, "tokens_period": 256000,
"spend_usd_period": 0.61, "period_days": 30 }GET /usage?days=14
Per-day rollup for the usage charts. unit is the active billing meter. Each row's cost_usd is the charged amount; gpu_minutes/tokens are recorded alongside for transparency.
json
{ "period_days": 14, "unit": "1M-tokens",
"total_gpu_minutes": 30.48, "total_tokens": 1500000,
"total_cost_usd": 25.00, "total_jobs": 2,
"buckets": [
{ "date": "2026-06-04", "gpu_minutes": 30.48, "tokens": 1500000,
"cost_usd": 25.00, "jobs": 2 }
] }Where billing surfaces
Billing data shows up in three places, all read-only — the UI and SDK never write it:
| Endpoint | Granularity | Use |
|---|---|---|
GET /jobs/{id}/result | One run | cost_usd + the run's quality/compute. |
GET /usage?days=N | Per-day rollup | Charts: spend, tokens, runs over time. |
GET /overview?days=N | Account totals | Dashboard header counters. |
Each finished run writes exactly one usage line, with the itemized breakdown that matches the pricing model — the growth, training, and (if applied) floor amounts. An estimate made before launch reconciles directly against the final line.
Fields
gpu_minutes and tokens are recorded for transparency alongside the charged cost_usd; unit reflects the meter the run was billed on (1M-tokens for training, job for contraction).