Soba Docs

Operating

The dashboard

What each number means, why the lead metric is money you did not spend rather than usage, and which rows are deliberately excluded from every total.

Every layer of Soba produces one number, and the dashboard is where they meet. It leads with the one no gateway can compute.

Inference you didn't pay for#

The headline figure, per month, and deliberately not a usage graph.

It is the sum of what the runs served on user-hardware and user-subscription compute would have cost had your app served them on its own keys: the money that stayed in your account because the run landed on compute your user had already bought.

user-key is counted separately, and deliberately. Those runs also cost you nothing, but they are not free: they spend the machine owner's provider account by the token, so folding them in would make the headline figure larger by counting money somebody else paid.

It is auditable, which is the point

Take the figure, take your own provider bill for the same month, and the two should explain each other: the runs your app served (app) are on your bill, and the ones in this figure are on nobody's, which is what makes them a saving rather than a transfer. A number you cannot check against an external document is a number you eventually stop believing.

It is also the figure a plan exists to move. The connectedReward lever buys connection rate, connection rate moves this number, and the difference between the reward's cost and this number is the whole economic case.

The rest of it#

What it answers
Users Who is on which plan, their allowance and what they have used this period
Runs Every run with its cost class, its cost in micros, the model, and whether it ended on done or error
Machines Each connected machine, its runtimes, whether it is awake and whether its CLI is signed in
Connection rate The share of users who have connected their own compute. The number the reward is buying
Conversions Which trial users became paying customers, when, and what their trial looked like: runs on their own compute against runs on your keys, and how long after the allowance ran out they paid. See Stripe
Cost class mix Where runs actually landed, which is how you tell a routing intent from a routing outcome
Spend Metered cost against your ceilings, per run and per period
Failures Runs that ended on an error, grouped by cause
Stripe activity Every write Soba made to your Stripe account. See Stripe

Cost class mix is the one people underuse. An app can declare prefer: ["user-hardware", "user-subscription"] and still hand 80% of its runs back to your own app, because preference is not reachability. The mix is where that shows up, and it usually means machines are asleep rather than that the route is wrong. Troubleshooting a machine is the other half of that story.

Environments change every total#

An environment switcher sits on the app, defaulting to production, and the aggregates are not simply filtered by it:

  • development is excluded from every aggregate. Billable usage, connection rate, inference you didn't pay for, cost class mix. A developer testing against their own machine is arithmetically identical to a customer connecting theirs, and counting them would inflate every headline number with the people building the product.
  • preview is shown separately, never hidden. It costs real money on your own keys and you need to see it. It is not customer revenue, so it never enters the avoided-cost figure.

That exclusion is the reason environments exist at all. Everything else they do is downstream of getting these numbers honest.

What it does not show#

Prompts and outputs. The dashboard is built from usage and run records (model, provider, token counts, cost class, cost, outcome), because that is what billing and routing need. What a run was about is your product's business, and What Soba sees says exactly where that line falls.

© 2026 Soba resolved = machine grant ∩ broker request