ISO 4217 Currency Codes: Full Table + API

Every ISO 4217 currency code in one searchable table — 154 active alpha-3 codes, 11 non-currency X codes (XAU, XAG, XDR, XTS, XXX) and 38 retired codes with their EUR conversion history. Built for developers who need the data live, not as a PDF.

What ISO 4217 actually is

ISO 4217 is the international standard that assigns a stable three-letter alpha code, a three-digit numeric code, and minor-unit information to every currency in active circulation. It is maintained by the SIX Interbank Clearing on behalf of the International Organization for Standardization, with revisions published as amendments rather than full reissues — the most recent base document is ISO 4217:2015 with ongoing amendments through 2025.

For developers, ISO 4217 is the first thing your money model needs to get right. If you store amounts as (decimal, currency_code) tuples, the currency code must be ISO 4217 alpha-3 — anything else (a vendor-specific code, a SWIFT code, a name string) will eventually break against another system that expects the standard. Every reputable payment processor, accounting platform, ERP and central bank uses ISO 4217 alpha-3 as the wire format.

The standard splits into three layers worth understanding:

  • Active national currencies — the 180-ish codes you see on every payment terminal: USD (840), EUR (978), GBP (826), JPY (392), and so on.
  • X codes — non-national codes that ISO 4217 reserves for funds, metals, the IMF Special Drawing Right, the no-currency placeholder XXX, and the testing code XTS. These exist because financial systems need to denominate things that are not national fiat currencies but still need a code.
  • Retired codes — currencies that have been replaced by redenomination, accession to the euro, or political dissolution. The codes survive in historical accounting data, audit logs, archives and pre-conversion contracts. ISO 4217 keeps them recorded so legacy data remains interpretable.

The numeric codes (840 for USD, 978 for EUR, 392 for JPY) exist for the same reason ISO 3166 ships both alpha and numeric country codes: legacy banking systems with restricted character sets, SWIFT messaging compatibility, and the rare case where you need an identifier that survives a currency rename. In modern REST APIs you almost always send and receive alpha-3.

Subunit information matters more than developers usually realise. JPY has no subunit (1 yen is the smallest unit); USD has 100 cents; KWD has 1,000 fils; MGA has 5 iraimbilanja per ariary (yes, base-5). Storing every amount as cents is fine for USD-only systems but breaks the moment you take a JPY or KWD payment — you need to consult the table to know how many decimal places matter.

Active ISO 4217 currencies

154 active codes. Click a column header to sort. Type in the search box to filter by code, name, numeric code or country.

154 of 154 codes
Code Numeric Name Minor unit Per major Used by
AED 784 UAE Dirham fils 100 United Arab Emirates
AFN 971 Afghan Afghani pul 100 Afghanistan
ALL 008 Albanian Lek qindarkë 100 Albania
AMD 051 Armenian Dram luma 100 Armenia
ANG 532 Netherlands Antillean Guilder cent 100 Curaçao, Sint Maarten
AOA 973 Angolan Kwanza cêntimo 100 Angola
ARS 032 Argentine Peso centavo 100 Argentina
AUD 036 Australian Dollar cent 100 Australia, Kiribati, Nauru (+1 more)
AWG 533 Aruban Florin cent 100 Aruba
AZN 944 Azerbaijani Manat qəpik 100 Azerbaijan
BAM 977 Bosnia-Herzegovina Convertible Mark fening 100 Bosnia and Herzegovina
BBD 052 Barbadian Dollar cent 100 Barbados
BDT 050 Bangladeshi Taka poisha 100 Bangladesh
BGN 975 Bulgarian Lev stotinka 100 Bulgaria
BHD 048 Bahraini Dinar fils 1000 Bahrain
BIF 108 Burundian Franc 1 Burundi
BMD 060 Bermudan Dollar cent 100 Bermuda
BND 096 Brunei Dollar sen 100 Brunei
BOB 068 Bolivian Boliviano centavo 100 Bolivia
BRL 986 Brazilian Real centavo 100 Brazil
BSD 044 Bahamian Dollar cent 100 Bahamas
BTN 064 Bhutanese Ngultrum chetrum 100 Bhutan
BWP 072 Botswanan Pula thebe 100 Botswana
BYN 933 Belarusian Ruble kapiejka 100 Belarus
BZD 084 Belize Dollar cent 100 Belize
CAD 124 Canadian Dollar cent 100 Canada
CDF 976 Congolese Franc centime 100 Democratic Republic of the Congo
CHF 756 Swiss Franc rappen / centime 100 Switzerland, Liechtenstein
CLP 152 Chilean Peso 1 Chile
CNY 156 Chinese Yuan Renminbi fen 100 China
COP 170 Colombian Peso centavo 100 Colombia
CRC 188 Costa Rican Colón céntimo 100 Costa Rica
CUP 192 Cuban Peso centavo 100 Cuba
CVE 132 Cape Verdean Escudo centavo 100 Cape Verde
CZK 203 Czech Koruna haléř 100 Czech Republic
DJF 262 Djiboutian Franc 1 Djibouti
DKK 208 Danish Krone øre 100 Denmark, Faroe Islands, Greenland
DOP 214 Dominican Peso centavo 100 Dominican Republic
DZD 012 Algerian Dinar santeem 100 Algeria
EGP 818 Egyptian Pound piastre 100 Egypt
ERN 232 Eritrean Nakfa cent 100 Eritrea
ETB 230 Ethiopian Birr santim 100 Ethiopia
EUR 978 Euro cent 100 Austria, Belgium, Croatia (+18 more)
FJD 242 Fijian Dollar cent 100 Fiji
FKP 238 Falkland Islands Pound penny 100 Falkland Islands
GBP 826 British Pound Sterling penny 100 United Kingdom, Isle of Man, Jersey (+1 more)
GEL 981 Georgian Lari tetri 100 Georgia
GHS 936 Ghanaian Cedi pesewa 100 Ghana
GIP 292 Gibraltar Pound penny 100 Gibraltar
GMD 270 Gambian Dalasi butut 100 Gambia
GNF 324 Guinean Franc 1 Guinea
GTQ 320 Guatemalan Quetzal centavo 100 Guatemala
GYD 328 Guyanese Dollar cent 100 Guyana
HKD 344 Hong Kong Dollar cent 100 Hong Kong
HNL 340 Honduran Lempira centavo 100 Honduras
HTG 332 Haitian Gourde centime 100 Haiti
HUF 348 Hungarian Forint fillér 100 Hungary
IDR 360 Indonesian Rupiah sen 100 Indonesia
ILS 376 Israeli New Shekel agora 100 Israel, Palestine
INR 356 Indian Rupee paisa 100 India, Bhutan
IQD 368 Iraqi Dinar fils 1000 Iraq
IRR 364 Iranian Rial dinar 100 Iran
ISK 352 Icelandic Króna 1 Iceland
JMD 388 Jamaican Dollar cent 100 Jamaica
JOD 400 Jordanian Dinar fils 1000 Jordan
JPY 392 Japanese Yen 1 Japan
KES 404 Kenyan Shilling cent 100 Kenya
KGS 417 Kyrgyzstani Som tyiyn 100 Kyrgyzstan
KHR 116 Cambodian Riel sen 100 Cambodia
KMF 174 Comorian Franc 1 Comoros
KPW 408 North Korean Won chon 100 North Korea
KRW 410 South Korean Won 1 South Korea
KWD 414 Kuwaiti Dinar fils 1000 Kuwait
KYD 136 Cayman Islands Dollar cent 100 Cayman Islands
KZT 398 Kazakhstani Tenge tiyn 100 Kazakhstan
LAK 418 Laotian Kip att 100 Laos
LBP 422 Lebanese Pound piastre 100 Lebanon
LKR 144 Sri Lankan Rupee cent 100 Sri Lanka
LRD 430 Liberian Dollar cent 100 Liberia
LSL 426 Lesotho Loti sente 100 Lesotho
LYD 434 Libyan Dinar dirham 1000 Libya
MAD 504 Moroccan Dirham centime 100 Morocco, Western Sahara
MDL 498 Moldovan Leu ban 100 Moldova
MGA 969 Malagasy Ariary iraimbilanja 5 Madagascar
MKD 807 Macedonian Denar deni 100 North Macedonia
MMK 104 Myanmar Kyat pya 100 Myanmar
MNT 496 Mongolian Tögrög möngö 100 Mongolia
MOP 446 Macanese Pataca avo 100 Macau
MRU 929 Mauritanian Ouguiya khoums 5 Mauritania
MUR 480 Mauritian Rupee cent 100 Mauritius
MVR 462 Maldivian Rufiyaa laari 100 Maldives
MWK 454 Malawian Kwacha tambala 100 Malawi
MXN 484 Mexican Peso centavo 100 Mexico
MYR 458 Malaysian Ringgit sen 100 Malaysia
MZN 943 Mozambican Metical centavo 100 Mozambique
NAD 516 Namibian Dollar cent 100 Namibia
NGN 566 Nigerian Naira kobo 100 Nigeria
NIO 558 Nicaraguan Córdoba centavo 100 Nicaragua
NOK 578 Norwegian Krone øre 100 Norway, Svalbard, Jan Mayen
NPR 524 Nepalese Rupee paisa 100 Nepal
NZD 554 New Zealand Dollar cent 100 New Zealand, Cook Islands, Niue (+2 more)
OMR 512 Omani Rial baisa 1000 Oman
PAB 590 Panamanian Balboa centésimo 100 Panama
PEN 604 Peruvian Sol céntimo 100 Peru
PGK 598 Papua New Guinean Kina toea 100 Papua New Guinea
PHP 608 Philippine Peso sentimo 100 Philippines
PKR 586 Pakistani Rupee paisa 100 Pakistan
PLN 985 Polish Złoty grosz 100 Poland
PYG 600 Paraguayan Guaraní céntimo 100 Paraguay
QAR 634 Qatari Riyal dirham 100 Qatar
RON 946 Romanian Leu ban 100 Romania
RSD 941 Serbian Dinar para 100 Serbia
RUB 643 Russian Ruble kopek 100 Russia
RWF 646 Rwandan Franc 1 Rwanda
SAR 682 Saudi Riyal halala 100 Saudi Arabia
SBD 090 Solomon Islands Dollar cent 100 Solomon Islands
SCR 690 Seychellois Rupee cent 100 Seychelles
SDG 938 Sudanese Pound piastre 100 Sudan
SEK 752 Swedish Krona öre 100 Sweden
SGD 702 Singapore Dollar cent 100 Singapore
SHP 654 Saint Helena Pound penny 100 Saint Helena
SLE 925 Sierra Leonean Leone cent 100 Sierra Leone
SOS 706 Somali Shilling cent 100 Somalia
SRD 968 Surinamese Dollar cent 100 Suriname
SSP 728 South Sudanese Pound piaster 100 South Sudan
STN 930 São Tomé and Príncipe Dobra cêntimo 100 São Tomé and Príncipe
SYP 760 Syrian Pound piastre 100 Syria
SZL 748 Swazi Lilangeni cent 100 Eswatini
THB 764 Thai Baht satang 100 Thailand
TJS 972 Tajikistani Somoni diram 100 Tajikistan
TMT 934 Turkmenistani Manat tenge 100 Turkmenistan
TND 788 Tunisian Dinar millime 1000 Tunisia
TOP 776 Tongan Paʻanga seniti 100 Tonga
TRY 949 Turkish Lira kuruş 100 Turkey
TTD 780 Trinidad and Tobago Dollar cent 100 Trinidad and Tobago
TWD 901 New Taiwan Dollar cent 100 Taiwan
TZS 834 Tanzanian Shilling cent 100 Tanzania
UAH 980 Ukrainian Hryvnia kopiyka 100 Ukraine
UGX 800 Ugandan Shilling 1 Uganda
USD 840 United States Dollar cent 100 United States, Ecuador, El Salvador (+5 more)
UYU 858 Uruguayan Peso centésimo 100 Uruguay
UZS 860 Uzbekistani Sum tiyin 100 Uzbekistan
VES 928 Venezuelan Bolívar Soberano céntimo 100 Venezuela
VND 704 Vietnamese Đồng hào 10 Vietnam
VUV 548 Vanuatu Vatu 1 Vanuatu
WST 882 Samoan Tala sene 100 Samoa
XAF 950 Central African CFA Franc 1 Cameroon, Central African Republic, Chad (+3 more)
XCD 951 East Caribbean Dollar cent 100 Anguilla, Antigua and Barbuda, Dominica (+5 more)
XOF 952 West African CFA Franc 1 Benin, Burkina Faso, Côte d'Ivoire (+5 more)
XPF 953 CFP Franc 1 French Polynesia, New Caledonia, Wallis and Futuna
YER 886 Yemeni Rial fils 100 Yemen
ZAR 710 South African Rand cent 100 South Africa, Lesotho, Eswatini (+1 more)
ZMW 967 Zambian Kwacha ngwee 100 Zambia
ZWL 932 Zimbabwean Dollar cent 100 Zimbabwe

"Per major" is the number of minor units per one major unit — 100 for most currencies (cents per dollar, pence per pound), 1 for currencies with no subdivision (JPY, KRW, ISK, CLP, VND minor unit hào is technically present but rarely used in practice), 1,000 for the Gulf and North African dinar group, and 5 for MGA and MRU. Storing amounts as integers in the smallest unit avoids floating-point errors — but only if your code knows the right divisor for each currency.

Retired and historical codes

Currencies don't disappear quietly. They join a currency union, get redenominated after hyperinflation, or are demonetised after a political transition. ISO 4217 keeps the codes on record so historical data — invoices, audit trails, museum catalogues, academic datasets — stays interpretable forever. The 38 codes below are the ones developers actually encounter in production systems: the twelve euro-legacy currencies that joined the Eurozone between 1999 and 2023, plus a curated selection of high-visibility redenominations.

Code Numeric Name Retired Replaced by Conversion
SUR 810 Soviet Ruble 1991 RUB Replaced by the Russian Ruble (RUB) after the dissolution of the Soviet Union.
YUN 890 Yugoslav Dinar (1994–2003) 1994 YUM Multiple redenominations through 1990s hyperinflation.
UAK 804 Ukrainian Karbovanets 1996 UAH 1 UAH = 100,000 UAK (1996 redenomination)
RUR 810 Russian Ruble (1992–1997) 1998 RUB 1 RUB = 1,000 RUR (1998 redenomination)
ECU 998 European Currency Unit 1999 EUR 1 EUR = 1 ECU (accounting replacement on 1999-01-01)
ATS 040 Austrian Schilling 2002 EUR 1 EUR = 13.7603 ATS
BEF 056 Belgian Franc 2002 EUR 1 EUR = 40.3399 BEF
DEM 276 German Mark 2002 EUR 1 EUR = 1.95583 DEM
ESP 724 Spanish Peseta 2002 EUR 1 EUR = 166.386 ESP
FIM 246 Finnish Markka 2002 EUR 1 EUR = 5.94573 FIM
FRF 250 French Franc 2002 EUR 1 EUR = 6.55957 FRF
GRD 300 Greek Drachma 2002 EUR 1 EUR = 340.750 GRD
IEP 372 Irish Punt 2002 EUR 1 EUR = 0.787564 IEP
ITL 380 Italian Lira 2002 EUR 1 EUR = 1,936.27 ITL
LUF 442 Luxembourgish Franc 2002 EUR 1 EUR = 40.3399 LUF
NLG 528 Dutch Guilder 2002 EUR 1 EUR = 2.20371 NLG
PTE 620 Portuguese Escudo 2002 EUR 1 EUR = 200.482 PTE
AFA 004 Afghan Afghani (old) 2003 AFN 1 AFN = 1,000 AFA (2003 redenomination)
YUM 891 Yugoslav New Dinar 2003 RSD/CSD Replaced by the Serbian Dinar (RSD) in 2003.
MGF 450 Malagasy Franc 2005 MGA 1 MGA = 5 MGF (2005 transition)
ROL 642 Romanian Leu (old) 2005 RON 1 RON = 10,000 ROL (2005 redenomination)
TRL 792 Turkish Lira (old) 2005 TRY 1 TRY = 1,000,000 TRL (2005 redenomination)
AZM 031 Azerbaijani Manat (old) 2006 AZN 1 AZN = 5,000 AZM (2006 redenomination)
MZM 508 Mozambican Metical (old) 2006 MZN 1 MZN = 1,000 MZM (2006 redenomination)
GHC 288 Ghanaian Cedi (old) 2007 GHS 1 GHS = 10,000 GHC (2007 redenomination)
SDD 736 Sudanese Dinar 2007 SDG 1 SDG = 100 SDD (2007 redenomination)
SIT 705 Slovenian Tolar 2007 EUR 1 EUR = 239.640 SIT
CYP 196 Cypriot Pound 2008 EUR 1 EUR = 0.585274 CYP
MTL 470 Maltese Lira 2008 EUR 1 EUR = 0.429300 MTL
VEB 862 Venezuelan Bolívar (pre-2008) 2008 VES Replaced by VEF in 2008, then by VES in 2018 after further redenomination.
SKK 703 Slovak Koruna 2009 EUR 1 EUR = 30.1260 SKK
TMM 795 Turkmenistani Manat (old) 2009 TMT 1 TMT = 5,000 TMM (2009 redenomination)
ZWD 716 Zimbabwean Dollar (original) 2009 USD/ZWL Demonetised in 2009 after hyperinflation; Zimbabwe re-introduced a local dollar (ZWL) in 2019.
EEK 233 Estonian Kroon 2011 EUR 1 EUR = 15.6466 EEK
LVL 428 Latvian Lats 2014 EUR 1 EUR = 0.702804 LVL
LTL 440 Lithuanian Litas 2015 EUR 1 EUR = 3.45280 LTL
BYR 974 Belarusian Ruble (pre-2016) 2016 BYN 1 BYN = 10,000 BYR (2016 redenomination)
HRK 191 Croatian Kuna 2023 EUR 1 EUR = 7.53450 HRK

The euro-legacy conversion rates are fixed by treaty — the European Council Regulation that introduced the euro locked in 1 EUR = 1.95583 DEM, 1 EUR = 6.55957 FRF and so on. Historical DEM amounts can always be re-expressed in EUR exactly. By contrast, redenominations like the 2005 Turkish Lira reform (1 TRY = 1,000,000 TRL) or the 2009 Zimbabwean demonetisation are jurisdiction-specific arithmetic; check the central-bank pronouncement for the official factor before automating any conversion.

Country → currency reverse lookup

The other direction: given a country, what currency does it use? This table covers 167 countries and territories. Note that several countries share a currency (the 21 Eurozone members all use EUR; Ecuador, El Salvador, Marshall Islands, Micronesia, Palau, East Timor and Zimbabwe all use USD; the eight WAEMU members all use XOF) — so the country-to-currency mapping is many-to-one, not one-to-one.

  Country ISO country code Currency code
🇦🇫 Afghanistan AF AFN
🇦🇱 Albania AL ALL
🇩🇿 Algeria DZ DZD
🇦🇴 Angola AO AOA
🇦🇷 Argentina AR ARS
🇦🇲 Armenia AM AMD
🇦🇺 Australia AU AUD
🇦🇹 Austria AT EUR
🇦🇿 Azerbaijan AZ AZN
🇧🇭 Bahrain BH BHD
🇧🇩 Bangladesh BD BDT
🇧🇧 Barbados BB BBD
🇧🇾 Belarus BY BYN
🇧🇪 Belgium BE EUR
🇧🇿 Belize BZ BZD
🇧🇹 Bhutan BT BTN
🇧🇴 Bolivia BO BOB
🇧🇦 Bosnia and Herzegovina BA BAM
🇧🇼 Botswana BW BWP
🇧🇷 Brazil BR BRL
🇧🇬 Bulgaria BG BGN
🇧🇫 Burkina Faso BF XOF
🇰🇭 Cambodia KH KHR
🇨🇲 Cameroon CM XAF
🇨🇦 Canada CA CAD
🇨🇫 Central African Republic CF XAF
🇹🇩 Chad TD XAF
🇨🇱 Chile CL CLP
🇨🇳 China CN CNY
🇨🇴 Colombia CO COP
🇨🇷 Costa Rica CR CRC
🇭🇷 Croatia HR EUR
🇨🇺 Cuba CU CUP
🇨🇾 Cyprus CY EUR
🇨🇿 Czech Republic CZ CZK
🇨🇩 Democratic Republic of the Congo CD CDF
🇩🇰 Denmark DK DKK
🇩🇴 Dominican Republic DO DOP
🇪🇨 Ecuador EC USD
🇪🇬 Egypt EG EGP
🇸🇻 El Salvador SV USD
🇪🇪 Estonia EE EUR
🇪🇹 Ethiopia ET ETB
🇫🇯 Fiji FJ FJD
🇫🇮 Finland FI EUR
🇫🇷 France FR EUR
🇵🇫 French Polynesia PF XPF
🇬🇦 Gabon GA XAF
🇬🇪 Georgia GE GEL
🇩🇪 Germany DE EUR
🇬🇭 Ghana GH GHS
🇬🇷 Greece GR EUR
🇬🇹 Guatemala GT GTQ
🇬🇾 Guyana GY GYD
🇭🇹 Haiti HT HTG
🇭🇳 Honduras HN HNL
🇭🇰 Hong Kong HK HKD
🇭🇺 Hungary HU HUF
🇮🇸 Iceland IS ISK
🇮🇳 India IN INR
🇮🇩 Indonesia ID IDR
🇮🇷 Iran IR IRR
🇮🇶 Iraq IQ IQD
🇮🇪 Ireland IE EUR
🇮🇱 Israel IL ILS
🇮🇹 Italy IT EUR
🇨🇮 Ivory Coast CI XOF
🇯🇲 Jamaica JM JMD
🇯🇵 Japan JP JPY
🇯🇴 Jordan JO JOD
🇰🇿 Kazakhstan KZ KZT
🇰🇪 Kenya KE KES
🇰🇮 Kiribati KI AUD
🇰🇼 Kuwait KW KWD
🇰🇬 Kyrgyzstan KG KGS
🇱🇦 Laos LA LAK
🇱🇻 Latvia LV EUR
🇱🇧 Lebanon LB LBP
🇱🇾 Libya LY LYD
🇱🇹 Lithuania LT EUR
🇱🇺 Luxembourg LU EUR
🇲🇴 Macau MO MOP
🇲🇬 Madagascar MG MGA
🇲🇼 Malawi MW MWK
🇲🇾 Malaysia MY MYR
🇲🇻 Maldives MV MVR
🇲🇱 Mali ML XOF
🇲🇹 Malta MT EUR
🇲🇭 Marshall Islands MH USD
🇲🇺 Mauritius MU MUR
🇲🇽 Mexico MX MXN
🇫🇲 Micronesia FM USD
🇲🇩 Moldova MD MDL
🇲🇳 Mongolia MN MNT
🇲🇪 Montenegro ME EUR
🇲🇦 Morocco MA MAD
🇲🇿 Mozambique MZ MZN
🇲🇲 Myanmar MM MMK
🇳🇦 Namibia NA NAD
🇳🇷 Nauru NR AUD
🇳🇵 Nepal NP NPR
🇳🇱 Netherlands NL EUR
🇳🇨 New Caledonia NC XPF
🇳🇿 New Zealand NZ NZD
🇳🇮 Nicaragua NI NIO
🇳🇪 Niger NE XOF
🇳🇬 Nigeria NG NGN
🇲🇰 North Macedonia MK MKD
🇳🇴 Norway NO NOK
🇴🇲 Oman OM OMR
🇵🇰 Pakistan PK PKR
🇵🇼 Palau PW USD
🇵🇸 Palestine PS ILS
🇵🇦 Panama PA PAB
🇵🇬 Papua New Guinea PG PGK
🇵🇾 Paraguay PY PYG
🇵🇪 Peru PE PEN
🇵🇭 Philippines PH PHP
🇵🇱 Poland PL PLN
🇵🇹 Portugal PT EUR
🇶🇦 Qatar QA QAR
🇨🇬 Republic of the Congo CG XAF
🇷🇴 Romania RO RON
🇷🇺 Russia RU RUB
🇷🇼 Rwanda RW RWF
🇼🇸 Samoa WS WST
🇸🇦 Saudi Arabia SA SAR
🇸🇳 Senegal SN XOF
🇷🇸 Serbia RS RSD
🇸🇨 Seychelles SC SCR
🇸🇬 Singapore SG SGD
🇸🇰 Slovakia SK EUR
🇸🇮 Slovenia SI EUR
🇸🇧 Solomon Islands SB SBD
🇿🇦 South Africa ZA ZAR
🇰🇷 South Korea KR KRW
🇸🇸 South Sudan SS SSP
🇪🇸 Spain ES EUR
🇱🇰 Sri Lanka LK LKR
🇸🇩 Sudan SD SDG
🇸🇷 Suriname SR SRD
🇸🇪 Sweden SE SEK
🇨🇭 Switzerland CH CHF
🇸🇾 Syria SY SYP
🇹🇼 Taiwan TW TWD
🇹🇯 Tajikistan TJ TJS
🇹🇿 Tanzania TZ TZS
🇹🇭 Thailand TH THB
🇹🇴 Tonga TO TOP
🇹🇹 Trinidad and Tobago TT TTD
🇹🇳 Tunisia TN TND
🇹🇷 Turkey TR TRY
🇹🇲 Turkmenistan TM TMT
🇹🇻 Tuvalu TV AUD
🇦🇪 UAE AE AED
🇺🇬 Uganda UG UGX
🇺🇦 Ukraine UA UAH
🇬🇧 United Kingdom GB GBP
🇺🇸 United States US USD
🇺🇾 Uruguay UY UYU
🇺🇿 Uzbekistan UZ UZS
🇻🇺 Vanuatu VU VUV
🇻🇪 Venezuela VE VES
🇻🇳 Vietnam VN VND
🇾🇪 Yemen YE YER
🇿🇲 Zambia ZM ZMW
🇿🇼 Zimbabwe ZW ZWL

ISO 4217 isn't just national currencies

The X-prefixed codes are reserved for "non-currency" units that financial systems still need to track. The four most important categories: precious metals (one troy ounce of XAU, XAG, XPT or XPD), the IMF Special Drawing Right (XDR — a basket reserve asset used for international settlement), the testing code (XTS — never put it in production) and the no-currency placeholder (XXX — for amount fields that are not monetary). The XBA–XBD codes are pre-euro bond market units that are still occasionally referenced in legacy fixed-income datasets.

Code Numeric Name Notes
XAG 961 Silver (troy ounce) One troy ounce of silver.
XAU 959 Gold (troy ounce) One troy ounce of gold. Used in metals trading and central-bank reserves.
XBA 955 European Composite Unit (EURCO) Bond market unit.
XBB 956 European Monetary Unit (E.M.U.-6) Bond market unit.
XBC 957 European Unit of Account 9 (E.U.A.-9) Bond market unit.
XBD 958 European Unit of Account 17 (E.U.A.-17) Bond market unit.
XDR 960 IMF Special Drawing Rights Basket reserve asset maintained by the IMF; used for international settlement.
XPD 964 Palladium (troy ounce) One troy ounce of palladium.
XPT 962 Platinum (troy ounce) One troy ounce of platinum.
XTS 963 Test code Reserved for testing — never a live payment.
XXX 999 No currency Used when a transaction has no currency — e.g. an amount field that is not a monetary value.

The metal codes are the practical surprise for most developers — they let you quote bullion balances, ETF NAVs and jewelry inventory using the same data model as your fiat balances. UniRateAPI returns spot prices for XAU, XAG, XPT and XPD via the same /api/commodities/rates endpoint your forex code already understands. There's a deeper write-up of how the metal market actually quotes prices on the gold price API page.

XTS is genuinely useful — staging environments, integration tests and reconciliation harnesses can use it as a real ISO 4217 code that no payment processor will ever accept in production. XXX is the answer to "what currency code do I put in this required field for an amount that isn't money?" and is the only correct answer.

How to use this programmatically

UniRateAPI's /api/currencies endpoint returns the live list of supported codes — no static file to keep in sync, no quarterly update job. Free tier covers 200 requests/day; the response shape is the same on every plan. Three quickstart samples below; full reference in the forex API reference.

Python
import requests

r = requests.get(
    "https://api.unirateapi.com/api/currencies",
    params={"api_key": "YOUR_API_KEY"},
    timeout=5,
)
codes = r.json()["currencies"]
print(len(codes), "codes:", codes[:5])
Node.js
const url = new URL("https://api.unirateapi.com/api/currencies");
url.searchParams.set("api_key", "YOUR_API_KEY");

const res = await fetch(url);
const data = await res.json();
console.log(data.currencies.length, "codes");
cURL
curl "https://api.unirateapi.com/api/currencies?api_key=YOUR_API_KEY"

For a one-off seed of your currencies table, hit the endpoint at deploy time and store the result. For long-running integrations, refresh weekly — new ISO 4217 codes are rare (the most recent additions were SLE in 2022 and VES in 2018) but they do happen. If you need historical metadata (the year a code was retired, what it was replaced by), use the static reference data on this page rather than the API; the API focuses on live rates.

Common ISO 4217 gotchas

A short list of things that catch developers out, drawn from real production bugs:

  • JPY decimal handling. Storing 100 yen as 10000 "minor units" because your code assumed every currency has 100 cents per unit produces an off-by-100 bug that survives QA easily. JPY's subunit_per_unit is 1.
  • KWD, BHD, OMR, JOD, TND, LYD, IQD all use 1,000 minor units per major. A 100-fils Kuwaiti payment is 0.100 KWD, not 1.00 KWD. Three decimals, not two.
  • MGA and MRU use base-5. The Malagasy ariary is divided into 5 iraimbilanja, and the Mauritanian ouguiya into 5 khoums. They are the only ISO 4217 currencies that are not a power of ten — most accounting systems assume base-10 and silently truncate.
  • The euro is one currency, 21 countries. If your country-aware UI displays "currency: EUR — Germany" and "currency: EUR — France" as different things, you're conflating ISO 3166 with ISO 4217. They are independent.
  • Don't equate ZWL with ZWD. The Zimbabwean dollar has been re-introduced multiple times after demonetisation. ZWD is the original (1980–2009), ZWL is the post-2019 reintroduction. Historical data files mix both — always check the date.
  • Numeric codes are not unique forever. When a currency is retired, ISO can re-allocate its numeric code to a successor — RUB and RUR both share 643. Numeric-only joins on historical data can collide.
  • ISO 4217 has no Bitcoin code. XBT was a draft proposal that was never standardised. BTC is the de-facto industry convention but it is not ISO 4217. Don't validate against the standard if you accept crypto.
  • ECU is a code, not a currency. The European Currency Unit (ECU) was an accounting basket that preceded the euro. The transition on 1999-01-01 was a pure rename: 1 ECU = 1 EUR exactly. Historical pre-1999 EUR rates are technically ECU rates.

Frequently asked questions

What is ISO 4217? +
ISO 4217 is the international standard that defines three-letter codes (alpha-3), three-digit numeric codes, and minor-unit information for the world's currencies. It's maintained by the SIX Interbank Clearing on behalf of ISO. The standard covers active national currencies (USD, EUR, GBP…), historical currencies that have been retired (DEM, FRF, ITL…), funds (XBA–XBD), precious metals (XAU/XAG/XPT/XPD), the IMF Special Drawing Right (XDR), the testing code (XTS) and the no-currency placeholder (XXX).
How many ISO 4217 currency codes are there? +
As of 2026 there are roughly 180 active national-currency codes, plus eleven non-national "X codes" for metals, funds and special purposes, plus a long tail of retired codes. Our table above lists 154 active codes, 11 X codes and 38 of the most commonly-encountered retired codes (with year of retirement and replacement currency).
What is the difference between alpha-3 and numeric currency codes? +
Alpha-3 is the three-letter mnemonic — USD, EUR, JPY — used in almost every developer context (REST APIs, fintech systems, accounting software). The three-digit numeric code (840 for USD, 978 for EUR) is used in legacy banking and SWIFT systems where character set matters and where you need a stable code that survives a currency rename. Most APIs only consume alpha-3.
Does ISO 4217 include cryptocurrency codes? +
No — ISO 4217 only covers national currencies and a small set of non-national reserve and metal codes. There is no ISO 4217 code for Bitcoin, Ether or any other cryptocurrency. Industry conventions like XBT for Bitcoin (a draft proposal that was never standardised) and BTC are used widely but are not part of ISO 4217. ISO/TC 68/SC 8 has been discussing a standard for digital assets but as of 2026 nothing has been ratified.
Why is the code for gold XAU? +
X-prefixed codes are reserved by ISO 4217 for "non-currency" or "supranational" units. XAU stands for one troy ounce of gold (Au is the chemical symbol). Silver is XAG, platinum XPT, palladium XPD. Treating bullion as a currency code lets accounting systems track gold balances the same way they track USD or EUR — useful for ETFs, central-bank reserves, jewelry inventory and bullion dealers.
What is the currency code for [my country]? +
See the country-to-currency reverse lookup section above — it covers 167 countries and territories. For programmatic access, hit GET /api/currencies?from={country_code} on UniRateAPI or use the lookup table directly in your codebase.
What is the XXX currency code used for? +
XXX is the official ISO 4217 placeholder for "no currency". You use it when an amount field doesn't represent money (e.g. a unit count) but the schema requires a valid currency code. XTS is its sibling for "test code" — reserved for use in test environments. Never put either in a production payment.
Why does the German Mark (DEM) still appear in databases? +
Historical financial data, audit trails, archived ledger entries, museum and academic datasets, and pre-2002 invoices all still carry euro-legacy codes like DEM, FRF, ITL, ATS and ESP. The official EUR conversion rates are fixed (1 EUR = 1.95583 DEM, etc.) so historical amounts can always be re-expressed in EUR. Our retired-codes table above lists every euro-legacy code with its conversion rate.

Need this data live in your app?

Free API key in 30 seconds. Same data this page is built on, returned as JSON. 200 requests/day on the free tier — enough to seed your database and keep it fresh.

200 requests/day free · No card required · Pro plan from $9/mo