Home Documentation Central Bank Rates Tax Authority Rates Playground Pricing API Status Blog About FAQ Contact Us

Official Exchange Rate Methodology

How AllRatesToday compares official central-bank exchange rates across 45+ sources, and the open, reproducible formula behind the upcoming composite official rate. No proprietary blends — every number can be recomputed from the published tables.

Everything on this page can be recomputed by hand from the tables each central bank publishes. There is no proprietary blend, no undisclosed weighting, and no adjustment step — if you disagree with a number, you can rerun the formula yourself against the same official sources.

How the cross-bank comparison works

Every source in the Central Bank Rates API is stored as the institution published it: one table per publication date, in the bank's own quoting convention, with its own rate_date. The comparison endpoint answers one question in one call: what does each central bank currently say this pair is worth?

curl "https://allratestoday.com/api/v1/central-banks/rates?source=USD&target=EUR" \
  -H "Authorization: Bearer art_live_your_key"
{
  "source": "USD",
  "target": "EUR",
  "as_of": "2026-08-10",
  "count": 41,
  "banks": [
    { "code": "ecb", "name": "European Central Bank", "rate": 0.9214,
      "rate_date": "2026-08-10", "rate_type": "reference",
      "derived": true, "method": "inverse", "stale": false },
    { "code": "boc", "name": "Bank of Canada", "rate": 0.9209,
      "rate_date": "2026-08-08", "rate_type": "daily",
      "derived": true, "method": "cross", "stale": false }
  ],
  "stats": { "min": 0.9187, "max": 0.9241, "median": 0.9214,
             "spread_bps": 58.6, "banks_in_stats": 38 }
}

Per-bank latest tables

For each active source we take its most recent published table — not a shared "as of" timestamp. Central banks publish on different schedules (ECB at ~16:00 CET on TARGET business days, others daily, weekly, or quarterly), so each entry carries the bank's own rate_date. Sources that amend tables row by row (the US Treasury amends its quarterly table mid-quarter for currencies that moved sharply) are resolved to the set of rows currently in force, per currency.

Bank-internal crosses — banks are never mixed

If a bank doesn't print the requested pair directly, the rate is derived strictly within that bank's own table, in this preference order:

  1. Published — the pair exactly as printed (derived: false).
  2. Inverse — the reciprocal of the printed opposite pair.
  3. Cross via the bank's home currency — e.g. USD→EUR from the Bank of Canada is (CAD per USD) ÷ (CAD per EUR), both from the same Bank of Canada table on the same date.

Two different banks' tables are never combined to produce a single rate, and anything not printed directly is flagged derived with its method — compliance users need to know exactly what the institution actually published.

Spread statistics and freshness

The response includes min, max, median, and spread_bps — the min-to-max range divided by the median, in basis points. These are computed only over fresh sources (newest publication within 30 days); weekly-to-quarterly sources are still returned with their true rate_date and a stale: true flag, since their rates remain legally in force, but they are kept out of the statistics so a quarter-old table can't distort a comparison of today's rates.

The composite official rate rolling out

On top of the comparison we are rolling out a single composite official rate per pair — a consensus of what the world's central banks say, computed with a formula that is fully open. Many aggregated "reference rates" on the market are proprietary blends whose inputs and weights you cannot inspect. Ours is the opposite by design: the inputs are public central-bank tables you can download yourself, and the formula below is the whole formula.

The formula

  1. Eligible inputs — official reference-type rates from daily-cadence central banks only. Weekly, monthly, and quarterly sources, and transactional rate types (buying/selling counters), are excluded.
  2. Freshness window — a bank's table qualifies only if its rate_date falls within the last 3 calendar days, so weekends and single holidays don't empty the panel but genuinely lapsed sources drop out.
  3. USD normalization — each bank's quote for the pair is normalized to a per-USD basis using that bank's own USD quote from the same table. No external market rate enters the calculation.
  4. Trimmed median — sort the normalized rates, drop the top 10% and bottom 10%, and take the median of what remains. Outliers (a bank with a managed peg, a stale fixing, a fat-finger) fall out of the trim instead of being hand-filtered.
  5. Minimum panel — a composite is published only when at least 3 qualifying banks cover the pair after trimming eligibility; otherwise the pair has no composite that day, rather than a composite built on too-thin data.

Every published composite will carry its input list — which banks, which rate_date each contributed, and which were trimmed — so any value can be recomputed independently from the same public sources. The composite data feed ships separately; this page will link to the endpoint when it is live.

What the composite is not

FAQ

Are rates from different central banks ever mixed to compute a pair?

No. Derivation happens strictly inside one bank's table (inverse or home-currency cross), and anything not printed directly is flagged derived. The composite is the only place multiple banks meet — and there they are combined by an open trimmed-median formula, never blended into a pair silently.

Why a trimmed median rather than an average?

A mean lets a single pegged or misprinted rate drag the number; a trimmed median is robust to outliers without anyone deciding case-by-case which bank to exclude. The trim rule is fixed and public, so the result stays reproducible.

Why normalize through USD?

Banks quote in different conventions (units per home currency, home currency per unit, per-100 units). Normalizing each bank through its own USD quote puts every input on one basis without importing any rate the bank didn't itself publish.

Compare 45+ official sources in one call

The comparison endpoint is live on every plan, including free.

Get Free API Key Central Bank Rates API