Track Claude Code costs per developer and project

Send Claude Code request-cost events to Veqen, allocate reported spend by project and developer, and keep estimates separate from invoices.

By Keyveve, Inc. · Updated 2026-10-22

A team's coding-agent bill becomes useful when you can connect it to a project. Veqen records Claude Code's completed request events with developer and project identifiers. The resulting cost is labeled reported: it is an estimate from the coding tool, not proof of what your provider or subscription charged.

Configure request logs

Create an ingest key in API keys. Put it in your local shell or approved secret manager. Do not commit it to project settings.

export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=http/json
export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=https://veqen-app.com/v1/otlp/v1/logs
export OTEL_EXPORTER_OTLP_LOGS_HEADERS="Authorization=Bearer $VEQEN_API_KEY"
export OTEL_RESOURCE_ATTRIBUTES="veqen.project=checkout,veqen.user=developer-17,veqen.environment=development"
export OTEL_LOG_USER_PROMPTS=0
export OTEL_LOG_ASSISTANT_RESPONSES=0
export OTEL_LOG_TOOL_DETAILS=0
export OTEL_LOG_TOOL_CONTENT=0
claude

Use pseudonymous developer identifiers. Start a new Claude Code process after setting the variables. These are signal-specific exporter settings, so they do not redirect another backend's metrics. Veqen consumes per-request log records, not cumulative cost counters; sending a cumulative counter repeatedly would overcount spend.

Claude Code documents request logs with usage, cost and request identifiers. Its input-token field excludes cache reads and writes, which Veqen preserves separately. See Anthropic's telemetry reference for supported client versions and telemetry controls.

What is recorded

Veqen accepts only api_request records, reads model, tokens, request time, duration and approved allocation fields, and ignores other event classes. It prefers integer cost_usd_micros over cost_usd when both are present. The same request identifier and timestamp sent again is deduplicated within your organization.

Prompts, responses, commands, tool arguments and email addresses have no mapping into this adapter. They are discarded on receipt. This does not prevent the sender from transmitting them: existing telemetry settings can still include private attributes. Use a local OpenTelemetry Collector to remove unwanted fields before export if your policy prohibits transmission. Keep detailed content capture disabled.

Verify your first session

Make one short request in a project with a distinct identifier, wait for the log exporter to flush, then open Veqen's dashboard. Filter by that project and inspect its model usage. The daily usage CSV aggregates these amounts; it does not expose the per-event reported-cost marker. If nothing arrives, check the endpoint, JSON protocol and key scope. A 401 means authentication failed; 415 means the exporter sent an unsupported encoding. A partial-success response identifies rejected records, while valid records in the same batch remain stored.

Do not instrument the same requests through a second SDK or trace exporter into Veqen. Request logs and independently generated SDK events do not share identifiers.

Interpret cost carefully

Reported usage estimates can differ from subscription charges, negotiated rates, credits or provider invoices. Keep these figures separate from reconciled API spend when reviewing AI COGS and R&D. An agent's activity can help allocate engineering expense without turning each estimate into a payable invoice line.

After-the-fact telemetry cannot stop a request already sent. Use budget checks in applications where you control the call boundary. For a team review, group by project first, then developer, and compare similar workloads before drawing conclusions about individual productivity.

Veqen records what every AI call cost and who it was for, reconciles it to your provider bills and produces the journal entries. Start free or read the quickstart.