Why your OpenAI usage doesn't match your invoice

The common reasons OpenAI usage, cost data and what you actually paid don't line up, and a month-end routine for explaining the difference.

Braid5-minute read

OpenAI usage and what you paid rarely match because they measure different things. Usage counts tokens and requests. Cost is the dollar amount OpenAI records for that usage on each UTC day. What you paid is usually prepaid credit purchases, and those follow your auto-recharge settings. To reconcile, compare the month's cost data with credit purchases plus the change in your balance, and wait a few days after month end so recent days can settle.

Usage, cost and payments are different numbers

NumberWhat it measuresWhere to find it
UsageTokens and requests, by project, API key and modelUsage dashboard; Usage API (/v1/organization/usage/completions and siblings)
CostDollars per day, by project, API key and line itemCost export in the usage dashboard; Costs API (/v1/organization/costs)
What you paidCredit purchases on prepaid accounts; a monthly invoice on EnterpriseYour billing page and card or bank statements

Reconciling means two checks. The month's cost should explain what you paid, and any estimate your team builds from usage should land close to cost. Cost is the reference for both.

Why payments don't match monthly cost

Prepaid credit and auto-recharge

New API accounts are prepaid, and auto-recharge is on by default. It buys a set amount of credit whenever the balance falls below a threshold, so card charges follow refills. One month can have three refills and the next one, with the same usage. Auto-recharge's monthly cap limits how much credit it buys, not how much you use, and purchased credits expire after a year, so a balance can also fall with no usage behind it.

For a prepaid account, the month's cost should come out close to this:

cost for the month ≈ credit bought during the month
                   + balance at the start of the month
                   - balance at the end of the month
                   - credit that expired during the month

Enterprise invoices no longer itemize API costs

Monthly invoices are an Enterprise arrangement. From April 1, 2026, Enterprise invoices no longer list API costs in detail. The breakdown now comes from the cost export in the usage dashboard, which groups by line item, filters by project and has no date-range limit, or from the Costs API. If finance used to read the breakdown off the invoice, send them to the export.

Why token-based estimates don't match cost

If your team estimates cost by multiplying tokens by list prices, in a spreadsheet, a gateway or your own logs, expect it to drift from OpenAI's figure. Take an illustrative month on gpt-6.1-terra, at list prices as of November 2026 ($1.00 per 1M input tokens, $0.05 per 1M cached input tokens): 10M input tokens, 6M of them served from the prompt cache. Priced as plain input, that's $10.00. Billed, it's 4M at $1.00 plus 6M at $0.05, or $4.30. Check the pricing page for current rates.

Caching is one of several pricing details that a tokens-times-price estimate misses:

  • cached input is billed at a fraction of the input price, and newer models also charge for cache writes;
  • the Batch API is 50% off, and Flex processing is priced at Batch rates;
  • Fast mode, formerly priority processing, adds a per-token premium;
  • prompts over 272K tokens are priced higher;
  • regional data processing adds 10% on newer models;
  • reasoning tokens are billed as output, so an estimate built from the visible response text comes up short (see what reasoning tokens cost);
  • tools and storage are their own line items, with no tokens at all.

UTC dates and data that changes after the fact

OpenAI's usage dashboard shows UTC dates, and the Costs API returns daily buckets. If your books run on local time, the edges of each month fall differently. For a company on US Pacific Time, OpenAI's October 2026 ends at 5 p.m. on October 31 local time, and the evening of September 30 counts toward October. The amounts are usually small, but enough that the totals won't match to the cent.

OpenAI doesn't document how quickly cost data becomes final, and recent days can still change after you first read them. A figure for last month pulled on the 1st may differ from the same figure pulled on the 5th. Write down the date you pulled it.

A month-end reconciliation routine

  1. A few days after the month closes, pull its cost grouped by line item and project, and note the date. For October 2026 in UTC, with an Admin API key:
    curl "https://api.openai.com/v1/organization/costs?start_time=1790812800&end_time=1793491200&bucket_width=1d&group_by=line_item&group_by=project_id&limit=31" \
      -H "Authorization: Bearer $OPENAI_ADMIN_KEY"
    # 1790812800 is Oct 1 00:00 UTC and 1793491200 is Nov 1 00:00 UTC.
    # If the response has "has_more": true, repeat with page=<next_page>.
  2. Total the amounts and compare them with the invoice, or for a prepaid account with the credit calculation above.
  3. Explain the difference in named pieces: time zone edges, expired credit, taxes, and whatever is left. A leftover bigger than rounding is worth raising with OpenAI support.
  4. Compare internal estimates with cost. If your gateway says $9,200 and OpenAI's cost data says $10,050 (an illustrative gap), find which line items the estimate misses before anyone uses it to price a plan.
  5. Split the month by feature using your mapping of projects and keys (see tracking costs per feature, team or customer), with its own line for anything unmapped.
  6. Write the explanation down in two or three sentences, so next month starts from it.

Month end is shorter when the big changes were explained as they happened. A weekly spend report by feature does most of that, and when something unexplained does turn up, the bill diagnosis checklist narrows it down by project, key, model and line item.

Common questions

Why doesn't my OpenAI bill match the usage dashboard?

On a prepaid account, the charges on your card are credit purchases triggered by auto-recharge, not the month's usage. Compare the dashboard's cost for the month with purchases plus the change in balance, allowing for any credit that expired.

Does OpenAI cost data change after the day is over?

It can. OpenAI doesn't document a delay or a point at which a day is final, and recent days can still move. Pull month-end figures a few days after the month closes, and record when you pulled them.

Why don't my own token logs match OpenAI's costs?

Token logs priced at list rates miss cached-input discounts, cache-write charges, Batch and Flex pricing, Fast mode, long-prompt pricing, regional processing and tool line items. Use them for splitting cost by customer or request, and check their monthly total against OpenAI's cost data.

Where did the itemized API costs on my OpenAI invoice go?

Enterprise invoices issued from April 1, 2026 no longer itemize API costs. Use the cost export in the usage dashboard or the Costs API, grouped by line item and project.

Where Braid fits

Braid reads OpenAI's cost and usage data with a read-only Admin API key. It keeps OpenAI's posted costs apart from its own estimates, which it labels as estimates, and its Monday report shows spend by Implementation (the features your company names) against each budget. It works from usage and cost data, not your invoices or credit purchases, so the final comparison with what you paid stays with finance.

Try Braid with your team.

We're looking for teams to test Braid before launch. Get full access to all premium features for free. All we ask is for feedback on what works and what needs improvement.

  1. Request beta access.Tell us your name, role and company.
  2. Receive your invitation.If approved, you'll get an email inviting you to join.
  3. Set up your company.Connect your provider, map your AI use cases and invite your team.

Request beta access.

Justin, Braid's founder, reviews every request. If yours is approved, you'll get an invitation by email.

Free during beta. No credit card required.