Bank of Lithuania FX Rates API
Free Bank of Lithuania FX rates web service with no key: official euro reference rates for every quoted currency as XML, current or for any past date.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the Bank of Lithuania FX Rates API?
The Bank of Lithuania exposes its official euro reference rates through a free XML web service with no key. Each rate arrives as a pair of currency-and-amount blocks, expressing how much of a currency equals one euro.
The response shape here is genuinely unusual and worth understanding before you write a parser. Instead of a rate attribute, each `FxRate` element contains two `CcyAmt` blocks: the first is always `EUR` with amount `1`, the second is the quoted currency with the equivalent amount. The rate is the second amount divided by the first — which sounds pedantic until you meet a series where the base amount is not 1.
Two rate types share the endpoint and the `tp` parameter selects between them. `EU` returns the euro foreign exchange reference rates that originate with the ECB, while `LT` returns the Bank of Lithuania's own accounting rates for currencies the ECB does not quote. They overlap in name but not in coverage, so choose according to which currency you actually need rather than which returns data first.
Quick facts
- Base URL
https://www.lb.lt/webservices/FxRates- Authentication
- No key or registration. The service is published by the Bank of Lithuania as open data.
- Rate limit
- No documented limit. Reference rates are published once per working day.
- Pricing
- Free.
- CORS
- Not enabled — call it from your server
- Official docs
- Read the docs
How to use the Bank of Lithuania FX 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. Current euro reference rates for every quoted currency
GET https://www.lb.lt/webservices/FxRates/FxRates.asmx/getCurrentFxRates?tp=EU
curl 'https://www.lb.lt/webservices/FxRates/FxRates.asmx/getCurrentFxRates?tp=EU'const res = await fetch("https://www.lb.lt/webservices/FxRates/FxRates.asmx/getCurrentFxRates?tp=EU");
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.lb.lt/webservices/FxRates/FxRates.asmx/getCurrentFxRates?tp=EU", timeout=20)
res.raise_for_status()
print(res.json())<?xml version="1.0" encoding="utf-8"?>
<FxRates xmlns="http://www.lb.lt/WebServices/FxRates">
<FxRate>
<Tp>EU</Tp>
<Dt>2026-08-20</Dt>
<CcyAmt>
<Ccy>EUR</Ccy>
<Amt>1</Amt>
</CcyAmt>
<CcyAmt>
<Ccy>AUD</Ccy>
<Amt>1.6438</Amt>
</CcyAmt>
</FxRate>
<FxRate>
<Tp>EU</Tp>
<Dt>2026-08-20</Dt>
<CcyAmt>
<Ccy>EUR</Ccy>Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
tp | query | Required | Rate type: `EU` for euro foreign exchange reference rates, `LT` for the bank's own accounting rates. EU |
dt | query | Optional | Date in `YYYY-MM-DD` on the `getFxRates` operation, for a historical list. 2026-08-20 |
ccy | query | Optional | ISO 4217 code on the single-currency operations. USD |
Response fields
FxRate/Tpelement- Echo of the rate type you requested.
FxRate/Dtelement- Date the rate applies to, ISO formatted.
FxRate/CcyAmt[1]element- Base side of the quote — `EUR` with an `Amt` of 1.
FxRate/CcyAmt[2]element- Quoted side — the ISO code and the amount equal to the base. This amount divided by the base amount is the rate.
What you can build with the Bank of Lithuania FX Rates API
- Convert euro amounts for Lithuanian accounting and VAT reporting
- Fetch a historical euro reference rate for a specific booking date
- Cover currencies the ECB does not publish by switching `tp` to `LT`
- Feed a nightly rates table from an official euro-area source
Common errors and how to fix them
Empty FxRates element
No publication for the requested date, or a `tp` value with no data for it.
Fix: Weekends and Lithuanian public holidays have no rates. Fall back to the previous working day.
Parser finds no rate attribute
The rate is not an attribute — it is the second `CcyAmt/Amt` element.
Fix: Read both `CcyAmt` blocks and divide the quoted amount by the base amount rather than looking for a single field.
SOAP fault
A `.asmx` operation was called with a missing required parameter.
Fix: Every operation needs its parameters even when they look optional; `tp` in particular is always required.
Bank of Lithuania FX Rates API — frequently asked questions
Is the Bank of Lithuania FX rates service free?
Yes. The web service needs no key or account and serves both the current list and historical dates. Responses are XML.
What is the difference between the EU and LT rate types?
`EU` returns the euro foreign exchange reference rates that come from the ECB. `LT` returns the Bank of Lithuania's own accounting rates, which cover additional currencies the ECB does not quote.
Why does each rate have two currency blocks?
The service expresses a quote as a pair: a base amount in euro and an equivalent amount in the quoted currency. Divide the second amount by the first to get the rate, rather than assuming the base is always 1.
Is there a JSON endpoint?
No, the service is a classic ASMX web service returning XML. Convert once at your boundary and cache — the rates only change on working days.
Tools that pair with this API
XML to JSON Converter
Convert XML to JSON online. Elements become objects, attributes are prefixed with @, text is preserved, and parse errors are reported clearly — in-browser.
XML Formatter
Format and beautify XML online with proper indentation, or minify it to a single line. Parse errors are reported clearly — free, fast and fully private.
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.
Bank of Lithuania FX 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.