BYTETOOLS

Central Bank of Türkiye (TCMB) API

Free Central Bank of Türkiye exchange rate feed with no key: official lira buying and selling rates, forex and banknote, for any working day back to 1996.

No API key requiredHTTPSFree tier

Endpoint tested and returned HTTP 200 on 2026-08-21

What is the Central Bank of Türkiye (TCMB) API?

The Central Bank of the Republic of Türkiye publishes its daily exchange rate bulletin as free XML with no key. Each currency carries four rates — forex buying and selling, banknote buying and selling — plus cross rates against the US dollar.

TCMB is one of the few central banks that separates forex rates from banknote rates in the same bulletin, and the distinction is real money. `ForexBuying` and `ForexSelling` apply to transfers and account transactions; `BanknoteBuying` and `BanknoteSelling` apply to physical cash and are always slightly worse. Picking the wrong pair will not error, it will just give you a number that does not match the transaction being reconciled.

URLs are date-addressed rather than parameterised: the file for 20 August 2026 lives at `/kurlar/202608/20082026.xml`. Note the month directory is `YYYYMM` while the filename is `DDMMYYYY` — the same date in two different orders, in one path. There is no file at all on weekends and Turkish public holidays, so a scheduled job must handle 404 as a normal outcome and step back to the previous working day.

Quick facts

Base URL
https://www.tcmb.gov.tr/kurlar
Authentication
No key or registration. The bulletin is a public TCMB publication.
Rate limit
No documented limit. One bulletin is published per working day at around 15:30 Istanbul time.
Pricing
Free.
CORS
Not enabled — call it from your server
Official docs
Read the docs

How to use the Central Bank of Türkiye (TCMB) 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. Official TRY exchange rate bulletin for 20 August 2026

GET https://www.tcmb.gov.tr/kurlar/202608/20082026.xml

curl
curl 'https://www.tcmb.gov.tr/kurlar/202608/20082026.xml'
JavaScript (fetch)
const res = await fetch("https://www.tcmb.gov.tr/kurlar/202608/20082026.xml");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://www.tcmb.gov.tr/kurlar/202608/20082026.xml", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="isokur.xsl"?>
<Tarih_Date Tarih="20.08.2026" Date="08/20/2026"  Bulten_No="2026/155" >
	<Currency CrossOrder="0" Kod="USD" CurrencyCode="USD">
			<Unit>1</Unit>
			<Isim>ABD DOLARI</Isim>
			<CurrencyName>US DOLLAR</CurrencyName>
			<ForexBuying>47.8642</ForexBuying>
			<ForexSelling>47.9504</ForexSelling>
			<B

Parameters

ParameterTypeRequiredDescription
YYYYMMpath segmentRequiredYear and month directory for the bulletin. 202608
DDMMYYYY.xmlpath segmentRequiredFilename for the specific day — note the reversed component order compared with the directory. 20082026.xml
today.xmlpath segmentOptional`/kurlar/today.xml` always serves the most recent bulletin without date arithmetic. today.xml

Response fields

Tarih_Date@Tarih / @Dateattribute
Bulletin date in Turkish `DD.MM.YYYY` and US `MM/DD/YYYY` formats respectively.
Tarih_Date@Bulten_Noattribute
Sequential bulletin number within the year.
Currency@CurrencyCodeattribute
ISO 4217 code.
Currency/Unitelement
Units the rate applies to — 1 for most currencies, 100 for JPY and a few others.
Currency/ForexBuying / ForexSellingelement
Rates for transfers and account transactions, in lira per `Unit`.
Currency/BanknoteBuying / BanknoteSellingelement
Rates for physical cash, which are always slightly wider than the forex pair.
Currency/CrossRateUSD / CrossRateOtherelement
Cross rate against the US dollar, populated on one side or the other depending on the currency.

What you can build with the Central Bank of Türkiye (TCMB) API

  • Convert lira amounts using the official rate for a specific transaction date
  • Distinguish transfer rates from cash rates when reconciling travel expenses
  • Backfill a Turkish lira history by walking working days back through the archive
  • Cross-check a bank's applied rate against the published bulletin

Common errors and how to fix them

404

No bulletin exists for that date.

Fix: Weekends and Turkish public holidays are skipped entirely. Catch the 404 and step back a day, or use `/kurlar/today.xml`.

Empty rate elements

Some currencies have no banknote quote.

Fix: Banknote fields can be blank for currencies TCMB does not deal in physically. Fall back to the forex rate and label it clearly.

Rate off by 100x

`Unit` was ignored.

Fix: The Japanese yen and several others are quoted per 100 units. Divide by the `Unit` element.

Central Bank of Türkiye (TCMB) API — frequently asked questions

Is the TCMB exchange rate data free to use?

Yes. The daily bulletin is published as open XML with no key, no registration and no documented rate limit.

What is the difference between forex and banknote rates?

Forex rates apply to transfers and account transactions; banknote rates apply to physical cash and carry a slightly wider spread. Reconciling a card transaction against a banknote rate will produce a small persistent discrepancy.

How do I get the latest rates without knowing the date?

Request `/kurlar/today.xml`, which always serves the most recent published bulletin. That avoids having to model Turkish public holidays in your own code.

How far back does the archive go?

Daily bulletins are available from 1996 onwards, one file per working day, all at the same date-addressed URL pattern. Because there is no index endpoint, backfilling means walking working days yourself and treating 404 as a normal skip rather than a failure.

Tools that pair with this API

Central Bank of Türkiye (TCMB) 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.