JavaScript
Você não precisa de SDK. O fetch já vem em todo navegador, no Node, no Deno, no Bun e em runtimes de edge. O CORS é aberto e não há chave para vazar, então você pode chamar a API direto do código no cliente.
Início rápido
Busque uma cotação e converta:
const res = await fetch("https://api.frankfurter.dev/v2/rate/usd/eur");
const data = await res.json();
const total = 100 * data.rate; A resposta é um objeto plano: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}. O fetch resolve mesmo com erro HTTP, então confira res.ok. Um código de moeda inválido retorna 422 com uma mensagem em JSON.
Formatar com Intl
Não posicione símbolos de moeda manualmente. O Intl.NumberFormat sabe o símbolo, a posição dele e as casas decimais de cada moeda, em qualquer 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 e casas decimais
Não precisa embutir no projeto uma tabela de metadados com subunidades e símbolos. Pergunte ao formatador:
const yen = new Intl.NumberFormat("en", {
style: "currency",
currency: "JPY",
});
yen.resolvedOptions().maximumFractionDigits; // 0, o iene não tem subunidades
yen.formatToParts(1).find((part) => part.type === "currency").value; // "¥"Veja todas as moedas que o Frankfurter oferece, com códigos e símbolos.
Várias cotações de uma vez
/v2/rates retorna um array plano, com uma linha por cotação. Transforme-o num objeto indexado por moeda com Object.fromEntries. Omita quotes para receber todas as moedas.
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 }Fixar uma fonte oficial
Por padrão, você recebe a combinação de todas as fontes. Adicione providers para fixar uma única autoridade, o que importa quando uma jurisdição exige a taxa publicada pelo próprio banco central, como a taxa de referência do BCE para o IVA da UE.
const api = "https://api.frankfurter.dev";
const res = await fetch(`${api}/v2/rate/usd/eur?providers=ecb`);Veja todas as fontes. Uma fonte fixada segue o próprio calendário de publicação, então a cotação mais recente dela pode ficar um dia atrás da cotação combinada mais recente.
Teste ao vivo
Monte consultas e veja as respostas sem sair do navegador, no playground.