Frankfurter est une API gratuite de taux de change pour 223 devises, provenant de 104 banques centrales et sources officielles. Les taux sont mis à jour chaque jour et remontent à 1948.

L'API publique est disponible sur api.frankfurter.dev, sans clé API. Le projet est open source : tu peux aussi l'auto-héberger pour garder le contrôle total.

Tu travailles avec un agent IA ? Donne-lui llms.txt ou ajoute le serveur MCP.

Taux

Récupère les derniers taux de change.

curl https://api.frankfurter.dev/v2/rates

Change la devise de base avec base.

curl https://api.frankfurter.dev/v2/rates?base=usd

Filtre les devises cibles avec quotes.

curl https://api.frankfurter.dev/v2/rates?quotes=usd,gbp

Taux historiques

Récupère les taux d'une date précise.

curl https://api.frankfurter.dev/v2/rates?date=1999-01-04

Séries temporelles

Récupère les taux sur une période avec from et to.

curl https://api.frankfurter.dev/v2/rates?from=2026-01-01&quotes=usd

Astuce : limite les devises pour garder des réponses légères. Sur de longues périodes, demande du NDJSON pour streamer les résultats ligne par ligne.

Regroupement

Sous-échantillonne une série temporelle avec group. Valeurs acceptées : week et month.

curl https://api.frankfurter.dev/v2/rates?from=2026-01-01&group=month

Filtrer par source

Limite la requête à certaines sources avec providers.

curl https://api.frankfurter.dev/v2/rates?providers=ecb

Par défaut, l'API combine les taux de toutes les sources. Pour les taux d'une seule source, utilise providers ou interroge-la directement via les routes par source.

Provenance des taux

Ajoute expand=providers pour voir quelles sources ont contribué à chaque taux combiné.

curl https://api.frankfurter.dev/v2/rates?expand=providers

Chaque ligne reçoit un tableau providers avec les clés des sources concernées. Les lignes des devises à parité fixe n'ont pas ce champ : leur taux découle de la parité, pas des données d'une source.

Sortie CSV

Les taux existent aussi en CSV. Ajoute .csv au chemin ou mets l'en-tête Accept à text/csv.

curl https://api.frankfurter.dev/v2/rates.csv

Sortie NDJSON

Pour les grosses réponses, demande du NDJSON (JSON délimité par des sauts de ligne) en mettant l'en-tête Accept à application/x-ndjson. Chaque ligne est un objet JSON indépendant, pratique pour streamer de longues séries temporelles sans garder toute la réponse en mémoire.

curl https://api.frankfurter.dev/v2/rates?from=2026-01-01

Taux d'une paire

Récupère le taux d'une seule paire de devises. Tu peux ajouter date ou providers.

curl https://api.frankfurter.dev/v2/rate/eur/usd

Devises

Liste les devises disponibles et les sources qui les couvrent.

curl https://api.frankfurter.dev/v2/currencies

Inclus aussi les anciennes devises avec scope.

curl https://api.frankfurter.dev/v2/currencies?scope=all

Détails d'une devise

Récupère les détails d'une devise et les sources qui la couvrent.

curl https://api.frankfurter.dev/v2/currency/eur

Sources

Liste les sources de données derrière l'API.

curl https://api.frankfurter.dev/v2/providers

Récupère les détails d'une source.

curl https://api.frankfurter.dev/v2/providers/ecb

Taux par source

Interroge directement une source précise, avec les mêmes paramètres que /v2/rates et /v2/rate.

curl https://api.frankfurter.dev/v2/providers/ecb/rates

Récupère une seule paire de devises auprès de cette source.

curl https://api.frankfurter.dev/v2/providers/ecb/rate/eur/usd

Combine avec date, une plage de dates (from et to) ou un regroupement. Les formats .csv et ndjson marchent aussi ici.

curl https://api.frankfurter.dev/v2/providers/ecb/rates?date=2024-05-15

Conversion

Il n'y a pas d'endpoint de conversion. Récupère le taux et convertis en quelques lignes de code.

function convert(base, quote, amount) {
  const api = "https://api.frankfurter.dev";
  return fetch(`${api}/v2/rate/${base}/${quote}`)
    .then((r) => r.json())
    .then((d) => (amount * d.rate).toFixed(2));
}

convert("eur", "usd", 10).then((result) =>
  alert(`10 EUR = ${result} USD`)
);

Erreurs

L'API renvoie des codes de statut HTTP standard avec un corps JSON.

{
  "status": 422,
  "message": "invalid currency: ABC"
}
400
Paramètre invalide ou requête mal formée.
404
Devise, taux ou ressource introuvable.
422
Requête comprise, mais impossible à traiter.

Auto-hébergement

Tu peux auto-héberger Frankfurter avec Docker. Le guide de déploiement couvre la mise en production et la configuration des clés API.

FAQ

À qui s'adresse Frankfurter (et à qui non) ?
L'API convient bien à la facturation SaaS, à l'e-commerce, au reporting fiscal, aux ERP et logiciels comptables, ainsi qu'à la recherche académique sur des séries historiques remontant jusqu'en 1948. Elle n'est pas faite pour le trading en temps réel, ni pour les activités sur des devises exotiques soumises à de fortes variations intrajournalières.
L'API est-elle gratuite pour un usage commercial ?
Oui. Les cours combinés sont un calcul propre à Frankfurter et sont libres d'utilisation. Les requêtes directes à des fournisseurs individuels relèvent des conditions de chaque fournisseur.
Puis-je stocker ou mettre en cache les cours dans ma propre base de données ?
Oui. Conserver les observations quotidiennes localement pour la mise en cache ou l'analyse historique est encouragé pour alléger le trafic de l'API.
L'API a-t-elle des limites d'appels ?
Il n'y a pas de quota. Un rate limit protège l'API contre les abus, mais il n'y a aucun plafond mensuel ou quotidien. Pour de gros volumes, pense à mettre les réponses en cache, à auto-héberger l'API ou à interroger directement les jeux de données.
L'API prend-elle en charge GraphQL ?
Non. L'API REST est assez simple pour que GraphQL ajoute de la complexité sans grand bénéfice. Il casserait aussi le cache en edge, qui rend l'API rapide. Utilise les paramètres de requête comme base, quotes et from/to pour obtenir exactement les données dont tu as besoin.
L'API v1 va-t-elle disparaître ?
Non. L'API v1 est deprecated au profit de la v2, mais reste disponible sans limite de durée. Consulte la documentation v1. Pour les données de la Banque centrale européenne, utilise /v2/providers/ecb/rates.
Quelle est la politique de confidentialité de l'API ?
L'API ne collecte ni n'enregistre aucune donnée personnelle, adresse IP ou URL de requête. L'instance publique tourne derrière Cloudflare (cache et protection DDoS), qui ne fournit que des statistiques de trafic agrégées.
Dois-je déclarer l'API dans les informations de confidentialité de l'App Store ou de Google Play ?
Non. Les requêtes sont anonymes et aucun log n'est conservé : selon les règles d'Apple et de Google Play, elles relèvent de « Données non collectées ».
Où signaler un bug ou poser une question ?
Ouvre une issue pour signaler un bug, demander une fonctionnalité ou proposer une nouvelle source de données. Utilise les Discussions pour poser une question ou partager une bibliothèque ou un outil construit avec Frankfurter.
Quelle est la précision des taux ?
Pour la conformité, filtre sur une source précise pour obtenir ses taux de référence officiels. Pour un usage courant, les taux combinés par défaut conviennent, même si les dernières décimales peuvent bouger à l'arrivée de nouvelles données.
S'agit-il de cours moyens, acheteurs ou vendeurs ?
L'API renvoie des cours moyens (mid-market). Quand une source publie des cours acheteur et vendeur au lieu d'un taux de référence, Frankfurter enregistre les deux et calcule le milieu de fourchette.
Tous les taux sont-ils quotidiens ?
Presque tous. Certaines sources fournissent des observations hebdomadaires, mensuelles ou trimestrielles. Ces sources sont exclues du flux combiné. Interroge-les directement avec le filtre providers.
Pourquoi certaines anciennes et nouvelles devises se chevauchent-elles dans le temps ?
Certaines sources font remonter la nouvelle devise sur la période de l'ancienne (par exemple, TRL s'arrête en 2010 alors que TRY commence dès 1996). Nous enregistrons les données des sources telles quelles et ne filtrons les chevauchements qu'au moment de combiner les taux.
Pourquoi Frankfurter ?
Parce que la Banque centrale européenne, notre source de données d'origine, a son siège à Francfort.
European Central Bank and Main riverfront, Frankfurt