JavaScript
No necesitas un SDK. fetch viene de serie en todos los navegadores, Node, Deno, Bun y runtimes edge. CORS está abierto y no hay ninguna clave que se pueda filtrar, así que puedes llamar a la API directamente desde el código del cliente.
Inicio rápido
Obtén un tipo y convierte:
const res = await fetch("https://api.frankfurter.dev/v2/rate/usd/eur");
const data = await res.json();
const total = 100 * data.rate; La respuesta es un único objeto plano: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}. fetch se resuelve aunque haya errores HTTP, así que comprueba res.ok; un código de divisa no válido devuelve un 422 con un mensaje JSON.
Formatear con Intl
No coloques los símbolos de divisa a mano. Intl.NumberFormat conoce el símbolo, su posición y los decimales de cada divisa, en cualquier 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"Símbolos y decimales
No necesitas copiar a tu proyecto una tabla de metadatos de subunidades o símbolos. Pregúntale al formateador:
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; // "¥"Consulta todas las divisas de Frankfurter, con sus códigos y símbolos.
Varias divisas a la vez
/v2/rates devuelve un array plano, con una fila por divisa. Conviértelo en un objeto indexado por divisa con Object.fromEntries. Si omites quotes, obtienes todas las divisas.
const api = "https://api.frankfurter.dev";
const res = await fetch(`${api}/v2/rates?base=usd"es=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 }Fijar una fuente oficial
Por defecto obtienes el tipo combinado de todas las fuentes. Añade providers para fijar una institución concreta, algo que importa cuando una jurisdicción exige el tipo publicado por su banco central, como el tipo de referencia del BCE para el IVA en la UE.
const api = "https://api.frankfurter.dev";
const res = await fetch(`${api}/v2/rate/usd/eur?providers=ecb`);Consulta todas las fuentes. Una fuente fijada sigue su propio calendario de publicación, así que su último tipo puede ir un día por detrás del último tipo combinado.
Pruébalo en vivo
Escribe consultas y mira las respuestas sin salir del navegador, en el Playground.