# Reconciliation

Tracked spend is what your code did. Billed spend is what you owe. Reconciliation shows the gap and where it comes from.

## Connect a provider

Under Settings › Connections, add a key that can read your organization's costs:

| Provider | Key | Where to create it |
|---|---|---|
| OpenAI | `sk-admin-...` | platform.openai.com › Settings › Organization › Admin keys; select Restricted and only Usage API Scope → Read |
| Anthropic | Organization-scoped personal or service account key (`sk-ant-api...`), or an existing admin key (`sk-ant-admin...`) | Claude Console › Keys & access › API keys; select Organization scope and an identity with cost-report access |

Veqen tests the key by importing the last 30 days right away; a key that doesn't work is never saved. Keys are encrypted at rest and used only to read the cost endpoints (OpenAI's Organization Costs API and Anthropic's Cost Report API).

Claude workspace-scoped keys cannot access the cost endpoint, even when their prefix matches. Use a dedicated service account for a shared connection and grant only the access it needs. A key may permit more than Veqen uses; Veqen does not turn a broadly privileged key into a read-only key. See [Claude's cost API authentication requirements](https://platform.claude.com/docs/en/manage-claude/usage-cost-api).

Costs refresh every 24 hours on Free (one provider) and every 6 hours on Pro and Team (all providers). Each refresh re-imports the last seven days, because providers can restate recent days.

## Reading the report

For each provider and date range:

- **Billed** and **tracked** totals, and the **capture rate** (tracked ÷ billed). Above 95% means your instrumentation sees nearly everything.
- A daily chart of both lines. They should move together.
- **Where they differ**, by model, largest gap first.

Common reasons for a gap:

| Billed > tracked | Tracked > billed |
|---|---|
| Calls from code that isn't wrapped (scripts, other services, notebooks, the playground) | Credits or negotiated discounts the public price book doesn't know |
| Non-token charges: web search, code execution, file storage | Calls that failed at the provider but reported usage |
| A key used by a teammate or another app in the same provider organization | Duplicate recording (a call both wrapped and sent via OpenTelemetry) |

Untracked spend is counted in full in the [monthly close](/docs/close), classified in your default category.

## Bills entered by hand

Most providers have no cost API: Together, Fireworks, Bedrock and Azure invoices, fal, Replicate, ElevenLabs, a GPU cloud. Under **Bills entered by hand** on the Reconciliation page, enter each month's invoice total per provider. The page compares it with what you tracked for that provider and month, and the [monthly close](/docs/close) books the invoice amount instead of tracked spend. Owners, admins and finance members can enter bills.

For models you host yourself, enter the GPU or cloud bill under the provider name you used for their [custom price](/docs/custom-prices).

## Without code changes

Connecting a provider is the fastest first look: 30 days of real spend by model, before installing anything. The SDK then adds the per-customer and per-feature split.
