Skip to content

Cost and FinOpsGuide

Showback and chargeback for AI spend

Provider invoices arrive per account, not per team. Showback and chargeback for AI spend depend on tagging every request at the source, booking it with rules finance can audit, handling shared costs openly, and closing each month so it never moves.

By INFRO Editorial

Published

7 min read

Amber columns of different heights under a glowing trend line on a dark ground, representing AI spend booked to teams

In short

Showback reports each team's AI spend to it; chargeback books that spend to the team's budget. Both need the same foundation: every request tagged with the workflow, feature, customer and team it served; ordered rules that book each request to exactly one cost center or split it transparently; an Unallocated line that is never hidden; and a monthly statement that becomes final and is corrected only by a new version.

Key takeaways

  • Showback is always needed; chargeback depends on your accounting policy. Both run on the same allocation.
  • Tag at the source. A request that was not tagged when it ran cannot be honestly attributed later.
  • Book each request with ordered, first-match rules, and keep an Unallocated line visible on every statement.
  • Split shared costs by stated weights or in proportion to direct spend, and label the result as allocated, never as a team's own usage.
  • Close each month. Late usage lands on the next statement as a prior-period adjustment, and a mistake is fixed by a new version with a reason.

When a company's first AI feature ships, its provider invoice has one owner. By the fifth feature, three teams share two provider accounts, a retrieval index serves all of them, and finance asks which budget the invoice belongs to. The invoice cannot answer: providers bill per account, and at best split by workspace or project.

Showback and chargeback are how that question gets a defensible answer. This guide covers the pieces in the order you need them.

Showback, chargeback and the difference

The FinOps Foundation separates the two by formality. Showback shows any group, at any granularity, the costs of the scope it is responsible for. Chargeback goes further and sends those costs to official accounting budgets1. Neither is more mature than the other: showback is required in any FinOps practice, while chargeback depends on the organization's accounting policies1.

For AI spend the practical consequence is to build showback first, with numbers each team recognises, and move to chargeback only when the allocation has survived a few months of scrutiny. Both run on the same allocation; chargeback adds a close and a sign-off.

Tag at the source

Allocation assigns cost using accounts, tags, labels and other metadata2. Provider-side structure gets you part of the way: Anthropic's cost report can be grouped by workspace, and Anthropic lists allocating expenses by workspace for chargebacks as a use of its API3. But a workspace or project is coarse. It tells you which application ran, not which feature, which customer or which team's workflow.

The dimensions that matter for AI spend are ones only your application knows:

  • Workflow — the stable name of the work, such as support-answer or nightly-indexer.
  • Feature — the product feature it served.
  • End customer — whose request it was, as an opaque id.
  • Team or cost code — where your organization books it.

Attach them to every model call when it is made. Attribution cannot be backfilled honestly: a request that ran without a feature tag has no feature, and guessing one after the fact produces numbers nobody can audit.

tagged_call.py
import os
from openai import OpenAI

client = OpenAI(base_url="https://api.infro.io/v1", api_key=os.environ["INFRO_API_KEY"])

response = client.chat.completions.create(
    model="openai/gpt-5.6-sol",
    messages=[{"role": "user", "content": "Summarize this ticket"}],
    extra_body={
        "metadata": {
            "workflow": "support-agent",
            "trace_id": "run_8f2c",
            "feature": "summarize",
            "user_id": "cust_123",
            "tags": {"team": "support"},
        }
    },
)

Keep tag values low-cardinality where they drive grouping (team, feature) and opaque where they identify people (use a customer id, never an email address). Measure coverage: the share of cost with no workflow or team is the first number to drive down, and the FinOps Foundation uses the percentage of costs that cannot be allocated as a key indicator of allocation success2.

Book with ordered rules

Tags describe a request; rules decide whose budget it lands in. The simplest scheme finance can audit is an ordered rule list where the first matching rule wins:

  1. feature = summarize → Support
  2. workflow = nightly-indexer → Platform
  3. project = research-sandbox → Research
  4. anything else → Unallocated

First-match rules make every booking explainable ("rule 2 matched"), and they make overlaps harmless: a request that matches two rules goes to the earlier one, predictably. Preview a new rule against last month's traffic before saving it, both on its own and after the earlier rules have taken theirs.

Dimensions

Request metered

Project, key, member, environment, plus workflow, feature, end customer and promoted tags from metadata.

Rules in order

The first rule whose every filled field matches books the request. Later rules never see it.

Direct or split

Booked to one center, or split by fixed weights or in proportion to each center's direct spend.

Unallocated

Shown on every statement as its own line, never spread silently across teams.
How a request is booked: dimensions recorded at request time, ordered rules, a direct booking or a split, and a visible Unallocated line for anything no rule matches.

The Unallocated line must stay on every report. Spreading it across teams in proportion to their spend looks tidy and teaches everyone that tagging is optional.

Shared costs, stated openly

Some AI spend genuinely serves several teams: a shared embedding index, an evaluation suite, a platform team's routing experiments. The FinOps Foundation lists the options — hold shared costs centrally or allocate them based on consumption — and says the choice is made between the FinOps team and finance1; some organizations deliberately budget shared items centrally rather than allocating them2.

If you allocate, use one of two methods and write it down:

  • Fixed weights, for example 70/30, when the split is a management decision.
  • Proportional to direct spend in the same period, when the shared resource is used roughly in line with each team's own traffic.

Label the result as allocated on every report. A team reading its statement should see its own usage and its share of shared costs as separate lines.

  • Direct usage
  • Allocated shared cost
  • USD, one month
  • Support$6,000 + $1,500
  • Search$3,000 + $750
  • Research$1,000 + $250
Illustrative: direct usage and allocated shared cost for three teams in one month, with the shared cost split in proportion to direct spend.

Close the month

Chargeback needs a number that stops moving. That means a close:

  • Draft, then final. Generate a draft soon after month end, regenerate it while late usage arrives, and make it final on a fixed day.
  • Final is final. Never edit a final statement. Fix a mistake by issuing a new version for the same month with a written reason, and keep every version readable.
  • Late usage moves forward. Usage metered after a month is final goes on the next statement as a prior-period adjustment, so the number a team already filed does not change underneath it.
  • Rules are versioned by period. A reorganisation in October must not rewrite what September's statement said.
  1. Month endUsage keeps meteringLate requests for the month can still arrive.
  2. Day 2, 06:00Draft generatedRegenerated every 12 hours so late metering lands in it.
  3. Day 5, 00:00FinalNever edited again. Owners get a signed link to their own lines.
  4. LaterLate usageAppears on next month's statement as a prior-period adjustment.
  5. If wrongCorrectionA new version of the same month with a written reason; every version stays readable.
A monthly statement's life: draft, final, late usage carried forward and corrections by new version.

Estimates, invoices and platform fees

Every per-team figure built from requests is an estimate of what the provider bills. Say so on the statement, count unpriced requests beside the total so it reads as a lower bound when there are any, and if you reconcile against the provider's reported cost, show each team's proportional share of that reported figure as an allocation, because provider cost APIs report organization totals, never one team's. Keep AI provider cost and the fees for any tooling you use in separate lines; they are different financial concepts and do not belong in one sum.

A checklist before the first chargeback

  • Workflow, feature, end-customer and team tags on every model call, validated rather than silently dropped.
  • Unallocated share measured and trending down.
  • Ordered rules with a preview, and a history of every change by period.
  • Shared-cost method written down and labelled on statements.
  • A close date, a final state, and corrections by new version only.
  • Unpriced requests counted beside totals.
  • Statements exported in a format finance already ingests.

Cost centers and statements in INFRO

In INFRO, attribution is on every plan: send workflow, trace_id, step, feature and user_id in the request's metadata (or as X-INFRO-* headers), and promote up to five of your own tag keys for grouping. A malformed value is refused with 400 invalid_attribution, not dropped. GET /v1/usage?group_by=feature groups estimated cost by any of them. See cost attribution.

From the Team plan, cost centers book each request by the first matching rule, lowest order first, on project, key, member, environment, workflow, feature, a promoted tag or an end-customer prefix; anything unmatched is booked to Unallocated. A rule can split by fixed weights or in proportion to direct spend, rounded by largest remainder and labelled allocated. Editing a rule closes its version and starts a new one.

Monthly statements draft on day 2 at 06:00 UTC, regenerate every 12 hours, and become final on day 5. A final statement is never updated; corrections are new versions with a reason, and late usage appears as a prior_period_adjustment. Each cost center's owner gets a signed link to their own lines. Statements download as CSV or FOCUS JSON, or through the API:

Fetch a statement as CSV
curl "https://api.infro.io/v1/statements/$STATEMENT_ID?format=csv" \
  -H "Authorization: Bearer $INFRO_API_KEY"

Every amount on a statement is an estimate of what your own providers bill you. INFRO platform fees are never on it; the subscription is invoiced separately. Where reconciliation is enabled, each line also carries its allocated_reported_cost, its proportional share of the provider's reported figure.

From the team that builds it

Where this shows up in INFRO

INFRO is a control plane in front of the provider accounts you already hold. The capabilities below are the parts of it this article touches, each with the documentation that defines its behaviour.

  • Spend attribution

    Private early access

    Group cost by model, project, key, or an end-user id you attach to the request.

    Read the documentation for Spend attribution
  • Usage and cost per request

    Private early access

    Every request records its model, latency, token or unit counts, and estimated provider cost, queryable by project and key.

    Read the documentation for Usage and cost per request
  • Usage, request and FOCUS exports

    Private early access

    GET /v1/usage and GET /v1/requests on any gateway key, the request log and usage series as CSV, plus a FOCUS v1.4 Cost and Usage dataset as JSON or CSV, so AI spend lands in your FinOps platform beside the rest of your cloud cost.

    Read the documentation for Usage, request and FOCUS exports
  • Provider cost reconciliation

    Private early access

    Daily comparison of estimated spend against the cost reported by OpenAI's and Anthropic's own cost APIs, using a separate admin credential, with the likely cause of a persistent gap and a suggested rate you can apply. Included on the Business plan.

    Read the documentation for Provider cost reconciliation
  • Summary, weekly summary and monthly report

    Private early access

    One page for leaders: this budget cycle's estimated provider spend against the budget and its projection, reliability, governance and attribution as four status lights with their reasons, and what needs a decision. Emailed to owners and finance members every Monday, with a printable monthly report on the 2nd; members choose for themselves.

    Read the documentation for Summary, weekly summary and monthly report

INFRO is in private early access. Provider usage is billed to you by your providers; INFRO charges a software subscription and takes 0% of model spend. See plans.

Sources

Numbered in order of first citation. Each was opened and checked against the claim on the date shown.

  1. 1.Invoicing & Chargeback capability (opens in a new tab) — FinOps Foundation. Accessed Sep 29, 2026.
  2. 2.Allocation capability (opens in a new tab) — FinOps Foundation. Accessed Sep 29, 2026.
  3. 3.Usage and Cost API (opens in a new tab) — Anthropic. Accessed Sep 29, 2026.

About this article

Written from the FinOps Foundation's Allocation and Invoicing & Chargeback capability pages, opened on 2026-09-29, and from the attribution, cost-center and statement documentation and implementation of the INFRO gateway, which the authors build. The monthly figures in the shared-cost example are illustrative.

Last checked against its sources on . The next review is due by . No separate named reviewer is recorded for this article.

How articles are written, sourced and corrected is set out in the editorial standards.