JavaScript
No necesitas un SDK. fetch viene integrado en cualquier navegador, Node, Deno, Bun y entornos perimetrales. CORS está abierto y no hay ninguna clave que pueda filtrarse, por lo que puedes llamar a la API directamente desde el código cliente.
Inicio rápido
Obtén un tipo de cambio y realiza la conversión:
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 incluso con 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 manualmente. Intl.NumberFormat conoce el símbolo, su posición y los decimales exactos para cada divisa en cualquier configuración regional:
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 hace falta mantener una tabla de metadatos para 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; // "¥"Explora todas las divisas que ofrece Frankfurter, con sus códigos y símbolos.
Varias cotizaciones a la vez
/v2/rates devuelve un array plano, con una fila por cotización. Transfórmalo en un objeto de búsqueda con Object.fromEntries. Omite quotes para obtener 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 la combinación de todas las fuentes. Añade providers para fijar una entidad concreta, algo importante si una jurisdicción requiere el tipo oficial de su banco central, como el tipo de referencia del BCE para el IVA de la UE.
const api = "https://api.frankfurter.dev";
const res = await fetch(`${api}/v2/rate/usd/eur?providers=ecb`);Explora todas las fuentes. Una fuente fijada sigue su propio calendario de publicación, por lo que su último tipo puede ir un día por detrás del tipo combinado más reciente.
Pruébalo en vivo
Compón consultas y observa las respuestas sin salir del navegador en el playground.