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.
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:
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.
154 active codes. Click a column header to sort. Type in the search box to filter by code, name, numeric code or country.
| 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.
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.
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 |
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.
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.
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])
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 "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.
A short list of things that catch developers out, drawn from real production bugs:
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.GET /api/currencies?from={country_code} on UniRateAPI or use the lookup table directly in your codebase.Other reference pages in this collection — pair these with your integration when you need a single source of truth for currency metadata.
Unicode, HTML entity and LaTeX for every currency glyph, with copy buttons.
Standard + reduced VAT / GST for 120 countries, EU rates pulled live from the EC feed.
Current policy rates for 30 major central banks with rate-name and next-meeting dates.
Live and historical FX rates for 170+ currencies. Code samples in 5 languages.
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