VAT Exchange Rate API: HMRC, ECB and CBIC Rates for VAT

Exchange rate API for VAT: HMRC monthly rates, the ECB reference rate for EU VAT and OSS, CBIC customs rates for India GST, plus national central bank rates. The rate in force on the tax point, with its publication date. JSON, CSV, XLSX.

By Madhushan, Founder & Lead Developer

The rate your VAT return names, for the date VAT became chargeable. HMRC monthly rates, the ECB reference rate for EU VAT and OSS, CBIC customs rates for India, and the national rate from 122 central banks and 4 tax authorities. Every response carries the publication date, so the figure on the return can be traced back to its source.

Which rate VAT needs, by jurisdiction

VAT is due in the home currency, so a foreign-currency invoice has to be converted at a rate the tax rules accept. The rules name a publisher, not a market price. A summary of the common cases (check your own position with your adviser). The full rules for the EU, UK and Switzerland are in exchange rates for VAT on foreign-currency invoices.

WhereRate commonly usedSource in the API
United KingdomHMRC period (monthly) rate, or the UK market selling rate at the time of supply (VAT Notice 700); HMRC rates for import VAThmrc
EU, any member stateLatest ECB reference rate when VAT becomes chargeable, which Art. 91(2) of the VAT Directive requires every member state to acceptecb
EU One-Stop Shop (OSS / IOSS)ECB rate on the last day of the tax period (Art. 366)ecb
PolandNBP average rate from the last business day before the tax point (VAT Act, Art. 31a)nbp
Czechia, Hungary, Sweden, DenmarkThe national central bank's rate under national rules, or the ECB ratecnb, mnb, riksbank, dnb
SwitzerlandImport VAT on the customs value at the BAZG ratebazg
India (GST)Goods: the CBIC-notified customs rate (CGST Rule 34). Services: the rate under generally accepted accounting principles, often RBI/FBILcbic, rbi

For India specifically, the GST invoice exchange rate guide walks through goods and services separately.

The rate in force on the tax point

VAT normally fixes the rate at the chargeable event (the tax point, usually the date of supply), which is not always the invoice date. Ask for that date and the API returns the table that was in force then: the latest publication on or before it. HMRC publishes monthly, CBIC every fortnight, the ECB every TARGET business day; the lookup is the same for all of them.

# The HMRC rate in force on the tax point (paid plans)
curl "https://allratestoday.com/api/v1/central-bank/hmrc/2026-10-15?source=GBP&target=USD" \
  -H "Authorization: Bearer art_live_your_key"
{
  "bank": "hmrc",
  "requested_date": "2026-10-15",
  "rate_date": "2026-10-01",
  "published_on_requested_date": false,
  "source": "GBP",
  "target": "USD",
  "rate": 1.3456,
  "rate_type": "monthly",
  "derived": false,
  "method": "published"
}

rate_date is the publication the rate comes from, and published_on_requested_date shows whether a table was published that day. Keep both with the invoice. In Python, as part of an invoicing flow:

import requests

API = "https://allratestoday.com/api/v1/central-bank"
HEADERS = {"Authorization": "Bearer art_live_your_key"}

def vat_rate(source, invoice_currency, home_currency, tax_point):
    """Rate in force on the tax point, plus the evidence to keep with the invoice."""
    r = requests.get(
        f"{API}/{source}/{tax_point}",
        params={"source": invoice_currency, "target": home_currency},
        headers=HEADERS,
    ).json()
    return r["rate"], {"source": r["bank"], "rate_date": r["rate_date"], "type": r["rate_type"]}

# EU VAT on a USD invoice, German taxpayer, ECB rate (Art. 91(2) VAT Directive)
rate, evidence = vat_rate("ecb", "USD", "EUR", "2026-10-14")
vat_base_eur = round(12_500 * rate, 2)

Latest rates without a key

The latest table from every source is open. It needs no key and works from a browser (CORS), as long as a visible "Exchange rates by AllRatesToday" link appears wherever the data is shown:

# Latest published table, no key (attribution link required)
curl "https://allratestoday.com/api/open/central-bank/ecb?source=EUR&target=USD"
curl "https://allratestoday.com/api/open/central-bank/hmrc?source=GBP&target=EUR"
curl "https://allratestoday.com/api/open/central-bank/cbic?source=USD&target=INR&type=export"

CBIC publishes separate import and export rates; ?type=export selects the export side, and the default is import.

What an auditor will ask for

How the tables are collected and checked is described in the official rates methodology.

In your accounting system

Step-by-step guides load these rates straight into Dynamics 365 Business Central, SAP, Xero, QuickBooks and Odoo. Business Central's exchange rate service can pass the key as ?api_key=, since it cannot send headers.

Frequently asked questions

Which exchange rate do I use for VAT?

The one your tax authority names. In the UK that is usually the HMRC period rate or the UK market selling rate at the time of supply (VAT Notice 700). In the EU, Article 91(2) of the VAT Directive lets every business use the latest ECB rate at the time VAT becomes chargeable, alongside the national rule. Non-euro member states such as Poland use their central bank's rate under national law. India's GST valuation rules point to the CBIC customs rate for goods.

Which rate does the EU One-Stop Shop (OSS) use?

Article 366 of the VAT Directive: the ECB rate published on the last day of the tax period, or the next rate published if there is none that day. Request the ECB table for that date and the API returns the rate in force.

What if no rate was published on the tax point?

Dated requests return the table in force on that date: the most recent publication on or before it. The response shows both requested_date and rate_date, and published_on_requested_date tells you whether they match, so a weekend or holiday is visible in your records.

Can I get VAT exchange rates without an API key?

The latest published table from every source is open and needs no key, provided a visible link to AllRatesToday is shown wherever the data appears. Rates for a past date, history and bulk downloads need a paid plan.

Is the rate changed or rounded?

No. Published rates are served as the institution published them, with its publication date. Where a pair has to be computed from a table (for example a cross rate), the response marks it derived: true and states the method.

Use the rate the tax rules name

Latest tables are free with a link. Dated lookups and history come with every paid plan; finance teams use the Business plan.

See the Business plan Tax authority rates