Work and coding agents

Each person's and team's cost across every work and coding agent, from ChatGPT and Claude to Cursor and Devin, priced at your contracts, with limits inside the tools that take them, misuse alerts, idle seats, invoice checks and chargeback.

Veqen reads what each agent reports per person and day, names the person behind it, prices it at your contract, and adds it up per person, team and cost center. It reads cost, credits, requests and tokens, never prompts, code or responses. Coding agents are where most teams start, because engineers use them most, but the same bill covers the agents everyone else uses for their work.

Connect your tools

There are four ways a tool's usage comes in, and the integrations page lists the exact key each tool needs and the plan of that tool it takes.

  • By API, with a read-only admin key: ChatGPT Enterprise (ChatGPT, Work and Codex), Claude Enterprise (chat, Cowork, Claude Code, Claude in Chrome and the rest), Microsoft 365 Copilot, Gemini in Google Workspace, Claude Code, Codex, Cursor, GitHub Copilot, Windsurf, Devin, Factory, Augment Code, Warp and Ona. Add the key under Settings › Connections. Claude Code and Codex read with your Anthropic and OpenAI connections, so connect those first. Claude Code, Codex and Cursor are read every hour and the others once a day, as each tool's API allows, and most report a day or two behind. A first sync catches up on the month in parts.
  • From OpenTelemetry, for Claude Code and Cowork on Claude plans the admin APIs don't cover. Point Claude Code at Veqen with an ingest key (see Track Claude Code costs). For Cowork on a Claude Team plan, set Admin settings › Cowork › OTLP endpoint to https://veqen-app.com/v1/otlp, the protocol to http/json, and the headers to Authorization=Bearer followed by an ingest key. Where Claude Enterprise is connected, its cost report already has Cowork, so the telemetry adds nothing.
  • From an export, for tools without a usage API: Kiro, Amazon Q Developer, Amp, Gemini Code Assist, JetBrains AI, Tabnine, GitLab Duo, Sourcegraph Cody, Replit Agent and anything else. Upload the CSV on Tools. A file needs a date column, a user or email column, and credits or a cost (cost, cost_usd, net_amount, total_cost_usd, amount or spend; amounts like $1,204.50 are fine). It replaces only the days and people it covers, so one file per team or workspace adds up.
  • From your own provider keys, for agents that call a provider directly: OpenCode, Aider, Cline, Continue, Kilo Code, Roo Code, Zed, Goose and Crush. A key whose name says the agent (aider-maria) counts toward its owner's cost; set the agent and the owner on Keys when the name doesn't say. These keys also get the hourly stolen-key protection your product's keys get.

Some tools say who used them but not what it cost per person. Microsoft 365 Copilot reports each license and when its holder last used it, so Seats shows the licenses nobody uses and a contract's seat price is what each one costs. Gemini comes with Google Workspace plans, so Veqen counts each person's Gemini actions a day and prices them only by the seat price you enter.

Claude Code's and Cowork's telemetry is kept under each person's account id unless you turn on names by email in Settings › Privacy, and you match an id to a person once under Settings › People matching. Anyone holding an ingest key could send telemetry, so someone only it names counts toward your bill once they're matched by hand, or their email is in your directory, a team, your members or another tool's report; when it names more new people in a day than that, owners, admins and security hear about it, in case a key has leaked.

Every tool knows people by its own name for them: an email, a login or a user id. Veqen matches them to one person by email where the tool gives one; Settings › People matching lists the rest with a suggestion for each, and takes a CSV of tool, the tool's name or id for the person, and their email to match many at once.

Contracts

Without a contract, Veqen uses each tool's own dollars and the price book for token counts, and can't price credits or ACUs. Under Settings › Tool contracts, add what you pay, from the day it applies:

Field Use it for
Seat price a month A seat-priced plan, such as Microsoft 365 Copilot or a ChatGPT or Claude seat; seats are counted for the people who used the tool, or the number you bought
Price per credit or ACU ChatGPT credits, Windsurf, Devin, Augment, Warp, Ona, Kiro, Copilot's AI credits, and Factory per million tokens
Discount on the tool's dollars A negotiated rate on usage the tool prices itself
Usage the seats include Usage each month that the seat price already covers

Every day is priced at the contract in force that day, so a renewal mid-month splits correctly.

Teams, cost centers and managers

Put people in teams under Settings › Teams and cost centers: by hand, from an HR export (email, team, and optionally cost center and the day it applies from), or from your directory, where each person's first group that doesn't grant a Veqen role becomes their team. Assignments are dated, so someone who moves mid-month is split by the days they spent in each team on Chargeback.

Owners, admins, finance and security members see everyone. On the same page, owners and admins name each team's managers: a manager sees that team on People and Teams and hears when one of them spends far above their usual day. Anyone else sees only their own cost.

Limits

On Limits, set a monthly limit for everyone, everyone in one team, one person, or a team's total. A limit set to stop is sent into ChatGPT Enterprise, Claude Enterprise, Cursor, GitHub Copilot, Devin and Augment Code, which stop the person at it, within a few minutes of saving. A team's total alerts: the tools only take a limit per person, so to stop a team, limit each person in it. Other tools don't take limits by API, and Claude Code on the Claude Console takes them only in the Console, so the page says where to set one in each. Veqen alerts at 50, 80 and 100 percent of each person's total across every tool. A person's own limit wins over their team's, which wins over the one for everyone, the lowest of two at the same level wins, and a limit you delete in Veqen stays in the tools until you change it there. ChatGPT takes limits in dollars only on workspaces billed in dollars. Limits in the tools come with work and coding agents Team; on Free, a limit alerts only.

Veqen reads each tool's limits back every hour, with what each person spent against theirs where the tool says, so Limits shows a limit someone changed in the tool, and Veqen sends its own again.

Requests for more

People ask for a higher limit on Limits, or in ChatGPT Enterprise, Claude Enterprise and Devin, whose requests Veqen reads within the hour. GitHub Copilot keeps its requests to itself, so people on Copilot ask in Veqen. Owners, admins and the person's team managers hear about each request, and approve it at a monthly amount, which becomes that person's own limit in every tool, or deny it. A request from ChatGPT, Claude Enterprise or Devin is answered there too, so the person hears from the tool, and one answered in the tool leaves the queue. For ChatGPT, the admin key needs usage limits read and write; for Claude Enterprise, the key needs read:spend_limits and write:spend_limits beside read:analytics; for Devin, the token needs ManageAcuLimits.

Misuse alerts, seats and invoices

On Team, when someone's day is at least five times their usual day and at least $100, owners, admins, security members and their managers get an alert as soon as the tool reports that day. It takes seven days of history to know someone's usual day. A stolen seat, a leaked token and an agent left looping all look like this.

Where engineers send Claude Code's OpenTelemetry, Veqen also alerts when Claude Code's admin API reports at least $20 on someone's account for a day and none of their telemetry arrived that day, though it did on at least five of the 14 days before. Their account or key was used from a machine that isn't theirs.

Seats lists the seats nobody has used in 30 days, and the seats still held by people who left your directory, with what each costs a month. Veqen alerts once when someone who left still holds a seat.

On Tools, enter each tool's invoice by its lines (seats, usage, credits and anything else). Veqen checks it against what your contract implies for the people who used the tool, and says what explains the difference. Saving again replaces that month's invoice.

Chargeback

On work and coding agents Team and Enterprise, Chargeback splits each tool's invoice (or, without one, the bill its contract implies) to cost centers, teams and people: by each person's usage at the contract in force each day, a seat each, and the days they spent in each team. It splits product inference too: each provider's bill by the spend of the keys each person owns, with keys an agent runs on counted as work and coding agents and spend no person's key explains left unassigned. A summary shows each cost center's work and coding agents, product inference and total, and whether it matches the invoices. The rows add up to each total to the cent. Finance approves a finished month once every provider's bill for it is in, which freezes it, and exports it as CSV or as a PDF from Print or save as PDF. The month-end close books its work and coding agents on their own account, with your departments, classes and entities. Claude Code and Codex read from your Anthropic and OpenAI organizations, and agents that run on your own provider keys, are paid on those providers' bills: the chargeback splits each bill by key, with those tools' part as work and coding agents, and the close keeps them on the provider's line. Either way the total is the bills, to the cent. Each key's hourly usage is kept 90 days, so product inference in older months stays unassigned. The API has it too: GET /v1/chargeback/{period}.

Plans

Free shows the cost of the three people who cost the most, and adds up everyone else. Team names everyone and adds limits in the tools, misuse alerts, idle seats and the invoice check, for each active person: anyone who used a connected tool in the period, never someone who only holds a seat. Every organization gets one 14-day Team trial, which starts with its first work and coding agent data. See Plans and pricing.

Without the dashboard

  • GET /v1/people?month=YYYY-MM and GET /v1/teams give each person's and team's cost, as the key's creator would see it. See the API reference.
  • The MCP tool coding_agent_spend answers the same question in Claude, ChatGPT or Cursor. See the MCP server.
  • npx @veqen/sdk coding-bill cursor.csv copilot.csv --teams teams.csv turns exports into a bill per team on your machine, with nothing uploaded. See the CLI.