Des questions ou un problème ? Écris dans les GitHub Discussions.

Pas besoin de SDK. fetch est disponible dans tous les navigateurs, dans Node, Deno, Bun et les runtimes edge. CORS est ouvert et il n'y a pas de clé qui risque de fuiter : tu peux appeler l'API directement depuis le code client.

Démarrage rapide

Récupère un taux et convertis :

const res = await fetch("https://api.frankfurter.dev/v2/rate/usd/eur");
const data = await res.json();
const total = 100 * data.rate;

La réponse est un objet plat : {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}. fetch résout la promesse même en cas d'erreur HTTP, donc vérifie res.ok ; un code de devise invalide renvoie une erreur 422 avec un message JSON.

Formater avec Intl

Ne place pas les symboles monétaires à la main. Intl.NumberFormat connaît le symbole, sa position et le nombre de décimales de chaque devise, dans chaque locale :

const res = await fetch("https://api.frankfurter.dev/v2/rate/usd/eur");
const { rate } = await res.json();

const eur = new Intl.NumberFormat("en", {
  style: "currency",
  currency: "EUR",
});
eur.format(100 * rate); // "€87.39"

Symboles et décimales

Pas besoin d'embarquer une table de métadonnées pour les sous-unités ou les symboles. Interroge directement le formatter :

const yen = new Intl.NumberFormat("en", {
  style: "currency",
  currency: "JPY",
});

yen.resolvedOptions().maximumFractionDigits; // 0, the yen has no subunits
yen.formatToParts(1).find((part) => part.type === "currency").value; // "¥"

Consulte toutes les devises disponibles sur Frankfurter, avec leurs codes et symboles.

Plusieurs devises à la fois

/v2/rates renvoie un tableau plat, avec une ligne par devise cible. Transforme-le en objet clé-valeur avec Object.fromEntries. Omets quotes pour obtenir toutes les devises.

const api = "https://api.frankfurter.dev";
const res = await fetch(`${api}/v2/rates?base=usd&quotes=eur,gbp,jpy`);
const rows = await res.json();

const rates = Object.fromEntries(rows.map((row) => [row.quote, row.rate]));
// { EUR: 0.8739, GBP: 0.74388, JPY: 162.33 }

Choisir une source officielle

Par défaut, tu obtiens le taux combiné de toutes les sources. Ajoute providers pour t'en tenir à une autorité précise, ce qui compte quand une juridiction impose le taux publié par sa banque centrale, comme le taux de référence de la BCE pour la TVA européenne.

const api = "https://api.frankfurter.dev";
const res = await fetch(`${api}/v2/rate/usd/eur?providers=ecb`);

Consulte toutes les sources. Une source choisie suit son propre calendrier de publication : son dernier taux peut donc avoir un jour de retard sur le dernier taux combiné.

Essayer en direct

Compose des requêtes et vois les réponses sans quitter le navigateur, dans le Playground.