HMRC Monthly Exchange Rates API
Free HMRC monthly exchange rates for UK customs and VAT: one fixed rate per currency per month, published as CSV, XML and JSON. No key, tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the HMRC Monthly Exchange Rates API?
HMRC publishes the monthly exchange rates used for UK customs declarations and VAT as free downloadable files with no key. Each file holds one fixed rate per currency for the whole calendar month.
This is a rate with a specific legal job. HMRC fixes one rate per currency per month and it applies to every customs declaration and VAT calculation in that month regardless of what the market did in between. Using a live market rate where HMRC's monthly rate applies produces figures that will not reconcile with a submitted declaration, so treat this as a compliance input rather than an FX feed.
The direction of the quote is the thing to check. The column is headed `Currency Units per £1`, so 4.9091 for the dirham means 4.9091 dirhams buy one pound — you **divide** a foreign amount by this to get sterling. Files are addressed by month as `monthly_csv_YYYY-M.csv`, where the month has **no leading zero**: August 2026 is `2026-8`, not `2026-08`. XML and JSON variants of the same data live at sibling paths.
Quick facts
- Base URL
https://www.trade-tariff.service.gov.uk/api/v2/exchange_rates- Authentication
- No key or registration. Published by HMRC as part of the UK Trade Tariff service.
- Rate limit
- No documented limit. Files change once a month.
- Pricing
- Free.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the HMRC Monthly Exchange Rates API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. HMRC monthly exchange rates for August 2026
GET https://www.trade-tariff.service.gov.uk/api/v2/exchange_rates/files/monthly_csv_2026-8.csv
curl 'https://www.trade-tariff.service.gov.uk/api/v2/exchange_rates/files/monthly_csv_2026-8.csv'const res = await fetch("https://www.trade-tariff.service.gov.uk/api/v2/exchange_rates/files/monthly_csv_2026-8.csv");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://www.trade-tariff.service.gov.uk/api/v2/exchange_rates/files/monthly_csv_2026-8.csv", timeout=20)
res.raise_for_status()
print(res.json())Country/Territories,Currency,Currency Code,Currency Units per £1,Start date,End date
Abu Dhabi,Dirham,AED,4.9091,01/08/2026,31/08/2026
Albania,Lek,ALL,109.7955,01/08/2026,31/08/2026
Algeria,Dinar,DZD,177.9594,01/08/2026,31/08/2026
Angola,Readj Kwanza,AOA,1224.3306,01/08/2026,31/08/2026
Antigua,E Caribbean Dollar,XCD,3.6196,01/08/2026,31/08/2026
Argentina,Peso,ARS,1975.2991,01/08/2026,31/08/2026
AParameters
| Parameter | Type | Required | Description |
|---|---|---|---|
files/monthly_csv_{YYYY-M}.csv | path | Required | Monthly file. The month has no leading zero — `2026-8`, not `2026-08`. monthly_csv_2026-8.csv |
files/monthly_xml_{YYYY-M}.xml | path | Optional | Same data as XML. monthly_xml_2026-8.xml |
files/monthly_csv_{YYYY-M}.csv (past months) | path | Optional | Historical months are kept at the same URL pattern. monthly_csv_2025-12.csv |
Response fields
Country/Territoriescolumn- Territory the currency belongs to. Several rows can share a currency code.
Currencycolumn- Currency name in HMRC's own wording.
Currency Codecolumn- ISO 4217 code — the column to key on.
Currency Units per £1column- The rate. Divide a foreign-currency amount by this to get sterling.
Start date / End datecolumn- Validity window in `DD/MM/YYYY`, normally the first and last day of the month.
What you can build with the HMRC Monthly Exchange Rates API
- Convert invoice values for a UK customs declaration at the required rate
- Calculate import VAT on a foreign-currency purchase
- Populate a monthly rates table in an accounting system
- Reconcile submitted declarations against the rate that applied that month
Common errors and how to fix them
404
The month was written with a leading zero.
Fix: The filename uses `2026-8`, not `2026-08`. This catches almost everyone the first time.
Converted amounts inverted
The quote direction was assumed backwards.
Fix: The column is units per £1, so sterling equals the foreign amount divided by the rate, not multiplied.
Duplicate currency codes
Several territories share one currency.
Fix: Deduplicate on `Currency Code` — the euro and the US dollar each appear on many rows.
HMRC Monthly Exchange Rates API — frequently asked questions
What are HMRC monthly exchange rates for?
They are the rates HMRC requires for customs declarations and VAT calculations. One rate per currency applies for the whole calendar month, regardless of market movement within it.
Is there an API key?
No. The files are published openly through the UK Trade Tariff service in CSV, XML and JSON with no key or registration.
Which direction is the rate?
Currency units per £1. To convert a foreign amount to sterling, divide by the rate. Multiplying gives you a figure that will not match a declaration.
Why does my URL 404?
Almost certainly a leading zero in the month. The filename pattern is `monthly_csv_2026-8.csv` — single-digit months have no padding.
Tools that pair with this API
VAT Calculator
Add VAT to a net price or extract VAT from a gross amount. Preset 5%, 10%, 20% and 23% rates plus custom, showing net, VAT and gross values instantly.
CSV to JSON Converter
Convert CSV to a JSON array of objects online. Header-row detection, comma/semicolon/tab delimiters and pretty-printed output — 100% in your browser.
Invoice Generator
Create a professional invoice with line items, tax and totals, then export a clean PDF — all in your browser. Free invoice generator, nothing uploaded.
HMRC Monthly Exchange Rates is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.