Last reviewed: November 2, 2026 (Asia/Shanghai).
Direct answer
Control AI API currency conversion by preserving the supplier’s original currency amounts and conversion evidence, then calculating any internal reporting conversion separately. A cost increase expressed in your reporting currency can come from more usage, different model prices, or an exchange-rate change. Keep enough information to explain each contribution before changing a workload budget.
Maintain three clearly named values where applicable: cost in the pricing currency, cost in the supplier’s billing currency, and cost translated under your internal reporting policy. Each value needs its currency and calculation basis. A billing amount already converted by the supplier must not pass through that same conversion again.
The distinction is visible in official billing schemas. Google Cloud’s standard billing export
defines its currency_conversion_rate as the rate from USD to local currency and explicitly states that cost ÷ currency_conversion_rate gives the cost in USD. Microsoft’s cost-details reference
separately identifies pricing and billing currencies and, for Microsoft Customer Agreement accounts, documents multiplying pricing-currency cost by ExchangeRatePricingToBilling.
These are provider-specific contracts. Use them for the applicable cloud billing feed; a direct AI API supplier needs its own verified invoice and export mapping.
Who this is for
This guide is for teams combining direct model API charges, cloud-hosted AI usage, and supporting infrastructure in one cost report. It is useful when engineering sees stable usage but finance sees higher local-currency spend, or when two dashboards disagree after one refreshes exchange rates.
The ledger design and test matrix below are engineering recommendations derived from the cited references. They support internal cost analysis. Finance should approve the reporting-rate policy and any financial posting requirements. No supplier account, invoice reconciliation, or production deployment was tested for this article.
Key takeaways
- Preserve source amounts and currencies before creating reporting amounts.
- Record conversion direction as units, such as EUR per USD, rather than an ambiguous pair label.
- Use supplier conversion evidence to investigate supplier billing; keep internal planning rates in a separate calculation.
- Compare periods at a fixed rate when investigating operating-cost changes.
- Retain rate dates, retrieval times, and calculation versions so historical reports remain reproducible.
Sources checked
Three primary public references were fetched successfully on November 2, 2026 UTC:
- Google Cloud: Structure of Standard data export
defines
cost, billingcurrency, and the direction ofcurrency_conversion_rate. - Microsoft Learn: Understand usage details fields documents pricing and billing amounts, account-type applicability, exchange-rate fields, and MCA reconciliation formulas.
- European Central Bank: Euro foreign exchange reference rates states that currencies are quoted against the euro. It describes updates around 16:00 CET on working days except TARGET closing days, and says the rates are informational; transaction use is strongly discouraged.
The cloud pages are maintained technical references for an evergreen data-control task. The ECB page displayed an observation dated October 30, 2026 when checked. Its latest published observation is not a promise of a same-day rate or evidence of an AI supplier’s conversion terms.
Contract details to verify
Preserve the source before translating it
Create an explicit mapping for each billing feed. A generic column named cost does not identify whether the amount is priced, billed, converted, discounted, or adjusted. Read the applicable field definition and account agreement before assigning it to a common ledger column.
| Ledger field | Meaning to record |
|---|---|
| Source amount and currency | Exact amount and currency supplied by the source |
| Amount basis | Pricing cost, billed charge, estimate, credit, or another documented category |
| Pricing amount and currency | Available source pricing value, kept separately from billing value |
| Supplier conversion | Factor, source currency, destination currency, and applicable date when provided |
| Reporting conversion | Internal rate policy, factor, direction, and observation date |
| Evidence identity | Source record reference, extract time, and preserved snapshot |
| Calculation version | Adapter version and conversion-policy revision |
| Data state | Provisional, reconciled, or unresolved under the team’s close policy |
Do not manufacture a pricing amount when the export supplies only a billed amount. If you derive a value using a documented formula, label it derived and retain the inputs. Distinguish absent data from a legitimate zero charge.
For Azure, respect the table’s account-type column. ExchangeRateDate, ExchangeRatePricingToBilling, and CostInPricingCurrency are documented for MCA accounts; their presence and meaning should not be assumed for every export. Microsoft also warns that field casing and spacing can differ between account types.
Make direction an executable rule
Normalize an internal factor as destination-currency units per one source-currency unit:
converted_amount = source_amount × destination_units_per_source_unit
For a hypothetical USD 1,000 charge and a factor of 0.90 EUR per USD, the result is EUR 900. A planning factor of 0.92 EUR per USD produces EUR 920. The EUR 20 difference is a difference between conversion assumptions for the same USD amount.
Google’s documented reverse calculation is useful here: its local-currency cost divided by its USD-to-local currency_conversion_rate yields USD cost. An adapter that multiplies instead has reversed the operation. Azure’s documented MCA reconciliation instead begins with EffectivePrice × Quantity, then multiplies that pricing-currency result by ExchangeRatePricingToBilling.
The ECB’s base direction needs another explicit mapping. A quotation expressed as USD per EUR must be inverted before multiplying a USD amount into EUR. Keep the original quote and its direction alongside the derived factor. Do not infer direction from a field name containing only USD_EUR.
Preserve precision through the conversion path and apply the approved rounding boundary. Use the separate guide to preserve sub-cent precision in AI API cost ledgers for representation, storage, and rounding controls.
Separate billing evidence from reporting assumptions
A supplier’s recorded conversion and an internal planning conversion answer different questions. To investigate a billed amount, start with the supplier’s source amounts, conversion evidence, account terms, and adjustments. A public reference rate can support an approved internal analysis, but it cannot establish the rate the supplier applied.
The ECB explicitly discourages transaction use of its informational reference rates. Do not replace a supplier’s documented rate with the newest ECB rate merely because the public number is easy to retrieve. Keep any reference-rate comparison labeled as an analytical comparison.
Version the reporting-rate table by currency direction, effective date or period, source, and policy. Retain both the rate’s observation date and the time your system retrieved it. They are different facts. Define how weekends, closing days, missing currencies, and unavailable feeds are handled; a prior observation can be used only under an explicit policy that preserves its actual date.
Apply the selected policy consistently to historical reports. Refreshing a rate table should not silently rewrite an already approved comparison. A restatement should identify the new policy or rate version and preserve the original result.
Explain growth with a fixed-rate comparison
Use a constant-currency comparison to ask what changed in the workload while holding the translation assumption fixed. The following example uses hypothetical quantities, prices, and rates; these are not current provider prices or market quotations.
| Calculation | Usage units | USD per unit | EUR per USD | Reporting cost |
|---|---|---|---|---|
| Baseline | 1,000,000 | 0.001 | 0.90 | EUR 900 |
| New usage at baseline rate | 1,200,000 | 0.001 | 0.90 | EUR 1,080 |
| New usage at new rate | 1,200,000 | 0.001 | 0.92 | EUR 1,104 |
The total increase is EUR 204. Under this stated calculation order, EUR 180 comes from increased usage at the baseline rate, and EUR 24 comes from applying the new conversion rate to the new-period USD cost. The arithmetic was checked locally.
This attribution order assigns the interaction between usage growth and the exchange-rate change to the currency component. Record that convention. If model prices, model mix, credits, or discounts also change, this two-factor example does not isolate them; add separately defined comparisons instead of calling the entire remaining difference usage growth.
Happy-path operator workflow
Choose one workload, source feed, and reporting currency. Freeze a source extract and identify its account type, amount basis, currency fields, and documented conversion direction. Preserve the supplied billing amounts unchanged.
Map available pricing and conversion fields, calculate a derived check where the source documents one, and compare equivalent subtotals. Microsoft’s CostInBillingCurrency and CostInPricingCurrency definitions are before credits or taxes, so a comparison with an invoice must account for those boundaries rather than treating every difference as an exchange-rate error.
Apply the approved reporting-rate snapshot to a separate reporting value. Produce both the reported-period comparison and a comparison using a fixed rate. Retain the source snapshot, mapping version, rate version, calculation order, and explanation of differences. Confirm source readiness using the billing-period close workflow before using the result for a final chargeback.
Verification before rollout
These are acceptance checks for the target pipeline, not reported deployment results:
| Fixture | Required observation |
|---|---|
| USD 1,000 at 0.90 EUR per USD | EUR 900 under the hypothetical policy |
| Same-currency amount | Identity conversion; original amount remains intact |
| Already converted billing amount | Supplier conversion is not applied twice |
| Rate supplied in the reverse direction | Explicit inversion or controlled rejection |
| Missing, zero, negative, or nonfinite factor | Unresolved conversion; no zero-cost or factor-one fallback |
| Several eligible rate rows for one charge | Ambiguous join rejected; charge is not duplicated |
| No observation for a weekend date | Documented fallback or hold with the true observation date |
| Negative credit | Sign retained; conversion follows the applicable adjustment policy |
| Historical report rerun | Same source and rate versions reproduce the same result |
| Changed reporting-rate policy | New version and comparison retained; original report preserved |
Check record counts and source-currency totals before and after the rate join. A correct multiplication can still produce an incorrect total if the join duplicates charges or drops rows without rates.
Error-path operator workflow
When currency, direction, account applicability, or rate evidence is missing, retain the original charge and mark the reporting conversion unresolved. Withhold the affected converted subtotal from a final decision, show the coverage gap, and assign an owner. Never replace the missing amount with zero or mix the unconverted charge into the reporting-currency total.
If a reconciliation fails, classify the difference before editing formulas: source completeness, amount basis, conversion direction, applicable rate, credits, taxes, rounding, or another documented adjustment. Preserve the failed calculation and its inputs. A repaired mapping should produce a new version that can be compared with the prior result.
Shared logs need a synthetic fixture label, adapter version, currency codes, rate-policy identifier, observation date, record counts, result class, and reconciliation status. Keep credentials, payment details, raw invoices, prompts, and response bodies out of shared logs and agent transcripts.
Failure modes
A rate refresh looks like an efficiency regression. Usage and USD cost are unchanged, but the reporting total moves. Retain the original-currency view and fixed-rate comparison beside the current-rate total.
A converted amount is converted again. A generic cost column loses its currency basis. Require named amount stages and test the adapter with an already converted source record.
Every source receives one monthly factor. Provider billing rules and internal planning policy become conflated. Preserve supplier evidence first; apply the internal factor only to its explicitly selected reporting input.
A missing rate removes a charge. An inner join quietly understates spend. Reconcile coverage and counts, and keep unmatched rows visible as unresolved.
FAQ
Can today’s public exchange rate explain last month’s invoice?
It can provide a separately labeled comparison. It does not prove which rate, date, adjustments, or account terms the supplier used. Start with the supplier’s evidence for invoice reconciliation.
Should all AI costs be stored in one currency?
A common reporting currency helps aggregation, but retain each original amount and currency. That evidence makes conversion errors and later restatements reproducible.
Does a fixed-rate comparison remove every pricing effect?
No. It holds currency translation fixed. Model prices, usage, routing, discounts, credits, and mix can still change. Define additional comparisons when those drivers matter.
What if the supplier exposes no conversion rate?
Keep the supplied amount and currency, record the evidence gap, and use account documentation or support to investigate billing. An internal reporting rate remains an internal assumption and should be labeled accordingly.
Reader next step
Select one AI workload reported in a currency different from its pricing or billing currency. Trace one charge through the source extract, conversion mapping, rate join, and dashboard. Preserve the original amount, prove the direction with a small hypothetical fixture, and generate the same comparison with a fixed rate.
Before changing the workload’s budget, require an explanation of the operating-cost change, the currency effect, and any unresolved conversion coverage. The resulting decision should be reproducible from the retained source and rate versions.