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.
formatis 1;atis the moment of the read, so a script can compute everyageagainst it;viewisfullorrestricted;mineis the caller's own project, or null outside any project (and null when the copy in force that names it cannot be read).countsis the header's three numbers —teams,labs,accounts.labsis the blocks, in the same order: one entry per lab,accountsholding one entry per machine line. A subscription entry carriesaccount,kind,machine(the line's own fields:window,left,used,resetsIn,changedAt,age,source,fallback,state,inside,reserve,other, andwatchwhen the clause prints) andteams, one entry per row under the line — the team it belongs to as this caller reads it, androw, which isstatus --json's own row object underbudgets. A spend entry carries the money instead of a window (amount,currency,at,age,source,state). A subscription line'sseatis 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.unknownis the why-lines, each with thescopeit printed under — the caller's own project's name, oranother.notesis thenote:lines, each with itsscope, and acountwhen the line stands for more than one team (or more than one store) —countis 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:
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