Subscriptions and seats
A subscription is a plan your organisation pays for per seat, such as Claude Max, ChatGPT Team or GitHub Copilot Business. Recording them under Costs → Subscriptions is what turns the spend report from “what tokens would cost” into “what we actually pay”, and what separates sanctioned use from shadow AI.
Fields
Section titled “Fields”| Field | Meaning |
|---|---|
| Name | Your label, for example “Engineering Claude Max”. |
| Vendor | anthropic, openai, google, github or other. |
| Plan | The plan as the vendor names it, for humans: “Claude Max 20x”. |
| Seat cost (monthly) | Per seat, per month, in the subscription’s currency (default USD). |
| Seats purchased | Seats paid for. This can exceed seats assigned, and the difference is what you’re buying and not using. |
| Match tools | Collector tool names this subscription pays for, comma-separated (for example claude-code,claude-desktop). Empty matches any tool from the vendor. |
| Match plans | Plan values as the collector reports them (for example claude_max,claude_pro). Empty matches any plan. |
| Notes | Free text. |
A seat belongs to a person, identified by the user name the collector reports. Give it a display name when the OS account isn’t a person’s name (jdoe → “Jane Doe”). Every machine a person reports from rolls up to their seat, whether that’s a laptop, a desktop or a build box.
Releasing a seat keeps it on record with the date it was released.
How usage is matched
Section titled “How usage is matched”A request is covered when all of these are true:
- The tool reported that it ran on a paid plan, not an API key.
- The person holds a seat on a subscription from the same vendor.
- The subscription’s match tools and match plans (if set) include the tool and plan reported.
Plan usage that meets 1 but not 2 or 3 is untracked. It’s surfaced in the report and in Shadow AI, never counted as free.
GET /api/subscriptionsPOST /api/subscriptionsPUT /api/subscriptions/{id}DELETE /api/subscriptions/{id}POST /api/subscriptions/{id}/seatsDELETE /api/subscriptions/seats/{seatId}