# seatledger > What a team's coding-agent seats and tokens buy — Claude Code and Codex usage per developer, model and client, with API-equivalent dollars, kept up to 13 months — and an alert when the token rate changes on anyone's machine (tokens per request, cache-read share, 1-hour cache writes, tokens per turn, Codex tokens per 1% of its 5-hour window), with the date and client version where it starts. The hosted team ledger is run by agentwares (operator TrainedBooks). The local CLI, npx seatledger, is free, MIT, and makes no network calls except team create, team join, team, push and the seatledger_team_summary tool. The buyer is the engineering lead or founder who pays for the team's seats, by card. An agent can create a free team and push with no human present. ## Plans - Free: $0/month — up to 3 developers, 30 days of history, team_ledger, rate_findings - Team: $49/month — up to 10 developers, 13 months of history, team_ledger, rate_findings, email_alerts, slack_alerts, csv_export - Business: $149/month — up to 50 developers, 13 months of history, team_ledger, rate_findings, email_alerts, slack_alerts, csv_export - A developer is an active push key, the owner's included. Past the cap, a join or push is refused with SEAT_LIMIT (402) and a fix; nothing is dropped silently. - Free shows rate findings on the dashboard; Team and Business also email the owner (and post to Slack if set), once per step change per team. - Machine-readable: https://agentwares-agentcheck.vercel.app/seatledger/pricing.json ## What a push sends (seatledger.push/v1) — and never sends - days: every local day the push covers; the stored rows for those days become exactly the pushed rows (re-pushing replaces, never adds). - rows: per day × client (claude-code | codex) × client version × model — requests, input_tokens, output_tokens, cache_read_tokens, cache_write_tokens, api_equivalent_usd (null for a model without a list price). project only with --project-names. - findings: numbers and ids only — client, model ("*" for all of a client's models), date, version, previous_version, version_changed, changes [{metric, before, after, change}], cache reads and writes per request before/after. - Never: prompt, response, tool or file content; file paths; session or request ids. Every text field is an id with no spaces; unknown fields are refused. ## Agent flow (no human) 1. POST https://agentwares-agentcheck.vercel.app/api/seatledger/v1/teams {"accept_terms": true} → owner_key (once), invite_url. Rate-limited per client. 2. POST https://agentwares-agentcheck.vercel.app/api/seatledger/v1/push with Authorization: Bearer and the body `npx seatledger push --dry-run` prints (or SEATLEDGER_KEY= npx seatledger push). 3. GET https://agentwares-agentcheck.vercel.app/api/seatledger/v1/summary?since=30d → totals, by_day, by_month, by_developer, by_model, by_client, findings. 4. POST https://agentwares-agentcheck.vercel.app/api/seatledger/v1/checkout {"tier": "team"} with the owner key → checkout_url for a person with a card. ## Endpoints - POST /api/seatledger/v1/teams — create a free team (no auth) - POST /api/seatledger/v1/join — {"invite", "member"} → a developer's own key (no auth; the invite is the credential) - POST /api/seatledger/v1/push — a developer's aggregates (key) - GET /api/seatledger/v1/team — plan and seats (key; the owner sees every developer) - GET /api/seatledger/v1/summary — the ledger (key; a developer key sees its own row in by_developer) - GET /api/seatledger/v1/export.csv — every row in range (owner; Team and Business) - POST /api/seatledger/v1/invites — a new invite link; the old one stops working (owner) - DELETE /api/seatledger/v1/members/{id} — revoke a key, freeing its seat (owner) - POST /api/seatledger/v1/checkout, POST /api/seatledger/v1/portal — Stripe links (owner) - OpenAPI: https://agentwares-agentcheck.vercel.app/seatledger/openapi.json ## From the CLI and MCP - npx seatledger team create [--name ] [--email ] [--dry-run] — a free team from the terminal; saves the owner key to ~/.seatledger/team.json (0600) and prints the invite link - npx seatledger team join --as — saves the key to ~/.seatledger/team.json (0600) - npx seatledger push [--dry-run] [--since 30d] [--project-names] - npx seatledger mcp — seatledger_usage_summary and seatledger_rate_changes (this machine, no network), seatledger_team_summary (the team ledger, read-only) ## Pages - Landing: https://agentwares-agentcheck.vercel.app/seatledger · Pricing: https://agentwares-agentcheck.vercel.app/seatledger/pricing - Dashboard (GitHub sign-in, the team owner): https://agentwares-agentcheck.vercel.app/seatledger/dashboard - Guides: https://agentwares-agentcheck.vercel.app/seatledger/guides/claude-code-usage-per-developer · https://agentwares-agentcheck.vercel.app/seatledger/guides/claude-code-token-use-jump · https://agentwares-agentcheck.vercel.app/seatledger/guides/codex-five-hour-window-percent - Privacy: https://agentwares-agentcheck.vercel.app/privacy · Terms: https://agentwares-agentcheck.vercel.app/terms ## Errors Every error is JSON with code, cause, fix and retryable.