Currencies
ISO 4217 active currency codes with their numeric codes, symbols, decimal precision (which determines minor unit handling for amounts), and the alpha-2 country codes of every territory that uses each currency. Useful for currency pickers, formatting amounts, and validating user input.
Quick fetch
Stable, immutable URL. CORS-enabled. No auth.
curl https://staticdata.dev/v1/currencies.json
Or use as a typed import:
import { currencies } from "https://staticdata.dev/v1/currencies.ts"
Formats
- JSON 24.2 KB
/v1/currencies.json
min: 15.5 KB · /v1/currencies.min.json
- CSV 4.9 KB
/v1/currencies.csv
- TypeScript 24.4 KB
/v1/currencies.ts
export const currencies
type Currency = (typeof currencies)[number]
Schema
Each record in the dataset has the following shape.
| Field | Type | Description | Example |
|---|---|---|---|
| code | string | ISO 4217 alphabetic code | EUR |
| name | string | English currency name | Euro |
| numeric | string | ISO 4217 numeric code (zero-padded) | 978 |
| symbol | string | Currency symbol | € |
| decimals | number | Number of decimal places defining the minor unit | 2 |
| countries | string[] | ISO 3166-1 alpha-2 codes of countries using the currency | ["AT","DE","FR"] |
Preview
First 10 records.
| code | name | numeric | symbol | decimals |
|---|---|---|---|---|
| AED | UAE Dirham | 784 | د.إ | 2 |
| AFN | Afghani | 971 | ؋ | 2 |
| ALL | Lek | 008 | L | 2 |
| AMD | Armenian Dram | 051 | ֏ | 2 |
| ANG | Netherlands Antillean Guilder | 532 | ƒ | 2 |
| AOA | Kwanza | 973 | Kz | 2 |
| ARS | Argentine Peso | 032 | $ | 2 |
| AUD | Australian Dollar | 036 | $ | 2 |
| AWG | Aruban Florin | 533 | ƒ | 2 |
| AZN | Azerbaijan Manat | 944 | ₼ | 2 |
Fetch examples
Drop-in snippets in five languages.
curl -sSL https://staticdata.dev/v1/currencies.json | jq '.[0]' import type { Currency } from "https://staticdata.dev/v1/currencies.ts";
const res = await fetch("https://staticdata.dev/v1/currencies.min.json");
if (!res.ok) throw new Error(`Fetch failed: ${res.status}`);
const currencies: Currency[] = await res.json();
console.log(currencies[0]); import urllib.request, json
with urllib.request.urlopen("https://staticdata.dev/v1/currencies.min.json") as r:
currencies = json.load(r)
print(currencies[0]) package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
resp, err := http.Get("https://staticdata.dev/v1/currencies.min.json")
if err != nil { panic(err) }
defer resp.Body.Close()
var data []map[string]any
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
panic(err)
}
fmt.Println(data[0])
} use serde_json::Value;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let body = ureq::get("https://staticdata.dev/v1/currencies.min.json").call()?.into_string()?;
let data: Vec<Value> = serde_json::from_str(&body)?;
println!("{:?}", data.first());
Ok(())
} Sources and methodology
Only currently active ISO 4217 currencies are included. Funds codes (X-prefixed) and historic withdrawn currencies are excluded.
The decimals field is critical for displaying amounts. Currencies with 0 decimals (JPY, KRW, ISK, several CFA-zone currencies) should not be formatted with cents. Currencies with 3 decimals (BHD, JOD, KWD, OMR, TND, IQD, LYD) require three-digit minor units. Most are 2 decimals.
Symbols are the most common form in the issuing country’s primary script. There is no canonical authoritative source for currency symbols; we follow CLDR where it exists and Unicode otherwise.
The countries array lists every country that has the currency as legal tender. The Euro list is the longest. Some currencies (USD, EUR, XAF, XOF, XCD, XPF, NZD) are used by multiple countries.
Versioning
URLs under /v1/ are immutable. The data they return will not change in a way
that breaks consumers. Schema-incompatible updates ship under a new version path. See the
currencies changelog for this dataset's history.