Skip to main content

ISO 4217 Currency Codes API

REAL DATA

Every active ISO 4217 currency — code, name, symbol, minor-unit decimals and the countries using it. Search the list or look up one code, with honest 404s.

Authoritative reference data or standards computation

Base URL
/api/currencies
Capabilities
2 routes
Last updated
July 29, 2026
Data source

GET /api/currencies

Returns the complete active ISO 4217 set by default (count defaults to all matches). search genuinely filters: a currency is returned only when its code or name contains the term. Zero matches ⇒ empty list plus a warning, never an error.

Live requestRuns against the public API
No key required
GET/api/currencies

Request parameters

Case-insensitive substring match against the ISO code or the English name — `krone` keeps DKK and NOK, `franc` keeps every franc, `dkk` matches one code. No match ⇒ empty list + warning.

Advanced response options6 options

Limit the number of returned records (1–100). Defaults to all matches.

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

Return all fields except these (comma-separated).

Response format: json envelope, ndjson (one record per line) or csv.

Pretty-print the JSON response.

Drop the envelope: return the raw array/object without data/meta wrapper.

Response

Example parameters are ready. Send the request to inspect the live response.

Route reference

Code samples Ready-to-copy requests in 4 languages
Choose a code sample language
curl "https://randomapi.dev/api/currencies"
const res = await fetch("https://randomapi.dev/api/currencies");
const { data, meta } = await res.json();
import requests

data = requests.get("https://randomapi.dev/api/currencies").json()["data"]
$json = json_decode(file_get_contents(
  "https://randomapi.dev/api/currencies"
), true);
$data = $json["data"];
Parameters Route-specific request inputs 1
search string

Case-insensitive substring match against the ISO code or the English name — `krone` keeps DKK and NOK, `franc` keeps every franc, `dkk` matches one code. No match ⇒ empty list + warning.

example: search=krone
Universal parameters Shared response and formatting options 6
count int

Limit the number of returned records (1–100). Defaults to all matches.

default: all matches
allowed: 1 – 100
example: count=3
fields list

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

example: fields=code,name
exclude list

Return all fields except these (comma-separated).

example: exclude=countries
format enum

Response format: json envelope, ndjson (one record per line) or csv.

default: json
allowed: json | ndjson | csv
example: format=csv
pretty boolean

Pretty-print the JSON response.

default: false
example: pretty=true
unwrap boolean

Drop the envelope: return the raw array/object without data/meta wrapper.

default: false
example: unwrap=true
Response schema Fields returned in each record 5
code string

ISO 4217 alphabetic code — 3 letters, uppercase.

example: DKK

name string

Official ISO 4217 English currency name.

example: Danish Krone

symbol string nullable

Symbol in common written use ($, €, kr, ¥, د.ك …). Null when none is widely used (e.g. XDR). Symbols are not unique — many currencies share '$'.

example: kr

decimalDigits integer

ISO 4217 minor-unit digits: 2 for most currencies, 0 for JPY-style ones, 3 for the dinar family (BHD, IQD, JOD, KWD, LYD, OMR, TND). MGA/MRU are 2 per ISO despite their fifth subdivisions; XDR has no ISO minor unit and is reported as 2 (CLDR convention).

example: 2

countries string[]

ISO 3166-1 alpha-2 codes of every country/territory where the currency is legal tender, per the ISO 4217 country table. Empty for the supranational XDR.

example: ["DK","FO","GL"]

Documented examples

Build-generated requests and complete responses
4
All active currencies
GET /api/currencies
{
  "data": [
    {
      "code": "AED",
      "name": "UAE Dirham",
      "symbol": "د.إ",
      "decimalDigits": 2,
      "countries": [
        "AE"
      ]
    },
    {
      "code": "AFN",
      "name": "Afghani",
      "symbol": "؋",
      "decimalDigits": 2,
      "countries": [
        "AF"
      ]
    },
    {
      "code": "ALL",
      "name": "Lek",
      "symbol": "L",
      "decimalDigits": 2,
      "countries": [
        "AL"
      ]
    },
    {
      "code": "AMD",
      "name": "Armenian Dram",
      "symbol": "֏",
      "decimalDigits": 2,
      "countries": [
        "AM"
      ]
    },
    {
      "code": "AOA",
    …
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}
Find the krones
GET /api/currencies?search=krone
{
  "data": [
    {
      "code": "DKK",
      "name": "Danish Krone",
      "symbol": "kr",
      "decimalDigits": 2,
      "countries": [
        "DK",
        "FO",
        "GL"
      ]
    },
    {
      "code": "NOK",
      "name": "Norwegian Krone",
      "symbol": "kr",
      "decimalDigits": 2,
      "countries": [
        "NO",
        "BV",
        "SJ"
      ]
    }
  ],
  "meta": {
    "endpoint": "currencies",
    "count": 2,
    "params": {
      "search": "krone"
    },
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}
Every franc, symbols only
GET /api/currencies?search=franc&fields=code,name,symbol
{
  "data": [
    {
      "code": "BIF",
      "name": "Burundi Franc",
      "symbol": "FBu"
    },
    {
      "code": "CDF",
      "name": "Congolese Franc",
      "symbol": "FC"
    },
    {
      "code": "CHF",
      "name": "Swiss Franc",
      "symbol": "CHF"
    },
    {
      "code": "DJF",
      "name": "Djibouti Franc",
      "symbol": "Fdj"
    },
    {
      "code": "GNF",
      "name": "Guinean Franc",
      "symbol": "FG"
    },
    {
      "code": "KMF",
      "name": "Comorian Franc",
      "symbol": "CF"
    },
    {
      "code": "RWF",
      "name": "Rwanda Franc",
      "symbol": "FRw"
    },
    {
      "code": "XAF",
      "name": "CFA Franc BEAC",
    …
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}
The whole table as CSV
GET /api/currencies?format=csv
code,name,symbol,decimalDigits,countries
AED,UAE Dirham,د.إ,2,"[""AE""]"
AFN,Afghani,؋,2,"[""AF""]"
ALL,Lek,L,2,"[""AL""]"
AMD,Armenian Dram,֏,2,"[""AM""]"
AOA,Kwanza,Kz,2,"[""AO""]"
ARS,Argentine Peso,$,2,"[""AR""]"
AUD,Australian Dollar,$,2,"[""AU"",""CC"",""CX"",""HM"",""KI"",""NF"",""NR"",""TV""]"
AWG,Aruban Florin,ƒ,2,"[""AW""]"
AZN,Azerbaijan Manat,₼,2,"[""AZ""]"
BAM,Convertible Mark,KM,2,"[""BA""]"
BBD,Barbados Dollar,$,2,"[""BB""]"
BDT,Taka,৳,2,"[""BD""]"
BHD,Bahraini Dinar,.د.ب,3,"[""BH""]"
BIF,Burundi Franc,FBu,0,"[""BI""]"
BMD,Bermudian Dollar,$,2,"[""BM""]"
BND,Brunei Dollar,$,2,"[""BN""]"
BOB,Boliviano,Bs,2,"[""BO""]"
BRL,Brazilian Real,R$,2,"[""BR""]"
BSD,Bahamian Dollar,$,2,"[""BS""]"
BTN,Ngultrum,Nu.,2,"[""BT""]"
BWP,Pula,P,2,"[""BW""]"
BYN,Belarusian Ruble,Br,2,"[""BY""]"
BZD,Belize Dollar,$,2,"[""BZ""]"
CAD,Canadian Dollar,$,2,"[""CA""]"
CDF,Congolese Franc,FC,2,"[""CD""]"
CHF,Swiss Franc,CHF,2,"[""CH"",""LI""]"
CLP,Chilean Peso,$,0,"[""CL""]"
CNY,Yuan Renminbi,¥,2,"[""CN""]"
COP,Colombian Peso,$,2,"[""CO""]"
CRC,Costa Rican Colon,₡,2,"[""CR""]"
CUP,Cuban Peso,$,2,"[""CU""]"
CVE,Cabo Verde Escudo,$,2,"[""CV""]"
CZK,Czech Koruna,Kč,2,"[""CZ""]"
DJF,Djibouti Franc,Fdj,0,"[""DJ""]"
DKK,Danish Krone,kr,2,"[""DK"",""FO"",""GL""]"
DOP,Dominican Peso,RD$,2,"[""DO""]"
DZD,Algerian Dinar,د.ج,2,"[""DZ""]"
EGP,Egyptian Pound,E£,2,"[""EG""]"
ERN,Nakfa,Nfk,2,"[""ER""]"
    …
ZMW,Zambian Kwacha,K,2,"[""ZM""]"
ZWG,Zimbabwe Gold,ZiG,2,"[""ZW""]"

GET /api/currencies/lookup

Case-insensitive (dkk = DKK; the canonical code is echoed in meta.params). Unknown, retired and out-of-scope codes are explicit 404s with an explanation — never a substitute record.

Live requestRuns against the public API
No key required
GET/api/currencies/lookup?code=DKK

Request parameters

ISO 4217 alphabetic code — exactly 3 letters, case-insensitive (dkk = DKK).

Advanced response options4 options

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

Return all fields except these (comma-separated).

Pretty-print the JSON response.

Drop the envelope: return the raw array/object without data/meta wrapper.

Response

Example parameters are ready. Send the request to inspect the live response.

Route reference

Code samples Ready-to-copy requests in 4 languages
Choose a code sample language
curl "https://randomapi.dev/api/currencies/lookup?code=DKK"
const res = await fetch("https://randomapi.dev/api/currencies/lookup?code=DKK");
const { data, meta } = await res.json();
import requests

data = requests.get("https://randomapi.dev/api/currencies/lookup?code=DKK").json()["data"]
$json = json_decode(file_get_contents(
  "https://randomapi.dev/api/currencies/lookup?code=DKK"
), true);
$data = $json["data"];
Parameters Route-specific request inputs 1
code string required

ISO 4217 alphabetic code — exactly 3 letters, case-insensitive (dkk = DKK).

allowed: 3 – 3
example: code=DKK
Universal parameters Shared response and formatting options 4
fields list

Return only these fields (comma-separated). Mutually exclusive with 'exclude'.

example: fields=code,name
exclude list

Return all fields except these (comma-separated).

example: exclude=countries
pretty boolean

Pretty-print the JSON response.

default: false
example: pretty=true
unwrap boolean

Drop the envelope: return the raw array/object without data/meta wrapper.

default: false
example: unwrap=true
Response schema Fields returned in each record 5
code string

ISO 4217 alphabetic code — 3 letters, uppercase.

example: DKK

name string

Official ISO 4217 English currency name.

example: Danish Krone

symbol string nullable

Symbol in common written use ($, €, kr, ¥, د.ك …). Null when none is widely used (e.g. XDR). Symbols are not unique — many currencies share '$'.

example: kr

decimalDigits integer

ISO 4217 minor-unit digits: 2 for most currencies, 0 for JPY-style ones, 3 for the dinar family (BHD, IQD, JOD, KWD, LYD, OMR, TND). MGA/MRU are 2 per ISO despite their fifth subdivisions; XDR has no ISO minor unit and is reported as 2 (CLDR convention).

example: 2

countries string[]

ISO 3166-1 alpha-2 codes of every country/territory where the currency is legal tender, per the ISO 4217 country table. Empty for the supranational XDR.

example: ["DK","FO","GL"]

Documented examples

Build-generated requests and complete responses
3
Danish krone
GET /api/currencies/lookup?code=DKK
{
  "data": {
    "code": "DKK",
    "name": "Danish Krone",
    "symbol": "kr",
    "decimalDigits": 2,
    "countries": [
      "DK",
      "FO",
      "GL"
    ]
  },
  "meta": {
    "endpoint": "currencies",
    "route": "/lookup",
    "params": {
      "code": "DKK"
    },
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}
Lowercase works too
GET /api/currencies/lookup?code=jpy
{
  "data": {
    "code": "JPY",
    "name": "Yen",
    "symbol": "¥",
    "decimalDigits": 0,
    "countries": [
      "JP"
    ]
  },
  "meta": {
    "endpoint": "currencies",
    "route": "/lookup",
    "params": {
      "code": "JPY"
    },
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}
How many decimals has the dinar?
GET /api/currencies/lookup?code=BHD&fields=code,name,decimalDigits
{
  "data": {
    "code": "BHD",
    "name": "Bahraini Dinar",
    "decimalDigits": 3
  },
  "meta": {
    "endpoint": "currencies",
    "route": "/lookup",
    "params": {
      "code": "BHD"
    },
    "generatedAt": "2026-07-29T08:13:22.000Z"
  }
}

About this API

Coverage & behavior

All 156 active ISO 4217 currencies as curated reference data: the alphabetic code, the official English name, a practical symbol (null where none is in wide use), the ISO minor-unit decimalDigits, and the ISO 3166-1 alpha-2 countries where each currency is legal tender — including multi-country currencies (EUR spans 36 territories, DKK covers Denmark, the Faroe Islands and Greenland) and dual-currency countries (Panama lists both PAB and USD).

The decimals are the detail money code gets wrong: most currencies have 2, but yen-style currencies (JPY, KRW, CLP, ISK, VND, …) have 0 and the dinar family (BHD, IQD, JOD, KWD, LYD, OMR, TND) has 3 — feed decimalDigits straight into your formatter. MGA and MRU keep ISO exponent 2 despite their traditional fifth subdivisions.

Scope: circulating currencies plus the special supranational codes — XDR (the IMF's Special Drawing Right), the CFA francs XAF/XOF, the CFP franc XPF, the East Caribbean Dollar XCD and the Caribbean Guilder XCG. ISO 4217 funds codes (USN, BOV, CLF, …), the precious-metal codes (XAU, XAG, XPD, XPT) and accounting units are deliberately excluded — they are not money you can price things in. The list reflects ISO 4217 as of mid-2026: Bulgaria is under the euro, XCG has replaced ANG, ZWG has replaced ZWL, SLE has replaced SLL.

  • /api/currencies — the full list; ?search= matches code or name, case-insensitively.
  • /api/currencies/lookup?code=… — one currency by code, case-insensitive. Unknown codes return an explicit 404 with a "did you mean" suggestion, and retired or out-of-scope codes (BGN, ANG, XAU, USN, …) get a 404 that explains exactly what happened to them — never a substitute record.

Use it for

  • Format prices correctly — read decimalDigits instead of assuming 2 (JPY has 0, BHD has 3)
  • Populate a currency picker with real codes, names and symbols
  • Map a country to its currencies for checkout defaults (DK → DKK, PA → PAB + USD)
  • Validate user-entered ISO 4217 codes, with explanatory 404s for retired ones like BGN or ANG

Frequently asked questions

Does it include every active currency?

Yes — all active ISO 4217 currencies with code, English name, symbol, minor-unit decimals and the countries using each. Retired and fund codes are deliberately excluded.

How do I look up one currency?

/api/currencies/lookup?code=EUR returns exactly that currency — and an unknown code answers an honest 404 with a did-you-mean suggestion instead of a wrong record.

Why do some currencies have a null symbol?

Where no symbol is in wide practical use, symbol is null instead of an invented glyph — honest data beats pretty data.

Are exchange rates included?

No — this is the reference registry (codes, names, decimals, countries), not a rates feed. decimalDigits tells you 2 for EUR and 0 for JPY when formatting amounts.