Des questions ou des problèmes ? Écris dans les GitHub Discussions.

Tu n'as pas besoin de SDK. fetch est intégré dans chaque navigateur, dans Node, Deno, Bun et les environnements d'exécution edge. CORS est ouvert et il n'y a aucune clé qui risquerait de fuiter, tu peux donc appeler l'API directement depuis ton code client.

Démarrage rapide

Récupère un taux et effectue une conversion :

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 se résout même en cas d'erreur HTTP, pense donc à vérifier res.ok ; un code de devise invalide renvoie une erreur 422 avec un message JSON.

Formater avec Intl

Ne positionne 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

Inutile d'embarquer une table de métadonnées pour les sous-unités ou les symboles. Demande directement au formateur :

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 prises en charge par 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 de recherche 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 }

Fixer une source officielle

Par défaut, tu obtiens le taux combiné de toutes les sources. Ajoute providers pour cibler une institution spécifique, ce qui est nécessaire lorsqu'une juridiction impose le taux officiel de 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 spécifique suit son propre calendrier de publication, son dernier taux peut donc accuser un jour de décalage par rapport au taux combiné.

Tester en direct

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