The JSON

Part of team usage — what --json prints: the document's keys in both views, and the whole example document.

--json prints the same report as one document, format 1, for a script to read. No field is left out: every key below is printed in both views — the page's Examples section has the whole document, as the command prints it.

  • format is 1; at is the moment of the read, so a script can compute every age against it; view is full or restricted; mine is the caller's own project, or null outside any project (and null when the copy in force that names it cannot be read).
  • counts is the header's three numbers — teams, labs, accounts.
  • labs is the blocks, in the same order: one entry per lab, accounts holding one entry per machine line. A subscription entry carries account, kind, machine (the line's own fields: window, left, used, resetsIn, changedAt, age, source, fallback, state, inside, reserve, other, and watch when the clause prints) and teams, one entry per row under the line — the team it belongs to as this caller reads it, and row, which is status --json's own row object under budgets. A spend entry carries the money instead of a window (amount, currency, at, age, source, state). A subscription line's seat is present for the caller's own team's line and left out of another team's in the restricted view; the full view carries every team's. A spend line has no seat — its reading is a check's, and a check belongs to no seat. labs[].others, when present, is the count of accounts in that lab the caller's own file does not name, and it is present only when there is at least one.
  • unknown is the why-lines, each with the scope it printed under — the caller's own project's name, or another.
  • notes is the note: lines, each with its scope, and a count when the line stands for more than one team (or more than one store) — count is present only when it is more than one.

The full view is the same document with the names allowed in: team on every machine line, root on every row entry, every team's rows, every lab, and each note named per team. The restricted document is exactly this shape, and a field added later to a team's own reading reaches neither renderer until it is added to the report's own types.

The document

--json prints the same report as one document. Every figure carries the moment behind it (changedAt), and the top-level at is the read's own, so a script can compute the age of every figure itself:

Terminal
 team usage --json ; echo "exit $?"
{
  "format": 1,
  "at": "2026-10-04T09:00:00.000Z",
  "view": "restricted",
  "mine": "beacon",
  "counts": {
    "teams": 1,
    "labs": 2,
    "accounts": 1
  },
  "labs": [
    {
      "lab": "anthropic",
      "accounts": []
    },
    {
      "lab": "openai",
      "accounts": [
        {
          "account": "openai",
          "kind": "subscription",
          "machine": {
            "window": "session",
            "left": 40,
            "used": 60,
            "resetsIn": "44m",
            "changedAt": "2026-10-04T08:58:00.000Z",
            "age": "2m",
            "source": "check",
            "fallback": false,
            "state": "fresh",
            "inside": false,
            "reserve": 20,
            "pace": null,
            "other": false,
            "seat": null
          },
          "teams": [
            {
              "team": "beacon",
              "row": {
                "account": "openai",
                "window": "session",
                "left": 40,
                "used": 60,
                "resetsIn": "44m",
                "seat": null,
                "age": "2m",
                "source": "check",
                "fallback": false,
                "state": "fresh",
                "inside": false,
                "reserve": 20,
                "pace": null
              }
            }
          ]
        }
      ]
    }
  ],
  "unknown": [],
  "notes": []
}
exit 0