Python
Você não precisa de um SDK. O Frankfurter funciona com HTTPS padrão e retorna JSON simples, portanto a biblioteca HTTP que você já usa é suficiente. Sem chave de API nem conta de usuário.
Início rápido
Obtenha uma taxa e converta:
import requests
res = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json()
total = 100 * data["rate"] A resposta é um único objeto simples: {"date": "2026-07-17", "base": "USD", "quote": "EUR", "rate": 0.8739}. Um código de moeda inválido retorna 422 com uma mensagem em JSON.
Cálculo financeiro preciso
Valores em ponto flutuante (floats) servem para exibição, mas são inadequados para contabilidade. Faça o parse das taxas como Decimal passando parse_float para json.loads:
from decimal import Decimal
import requests
res = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json(parse_float=Decimal)
total = Decimal("100") * data["rate"]Várias cotações de uma vez
/v2/rates retorna um array simples, com uma linha por cotação. Transforme-o em um dicionário com uma compreensão. Omite quotes para obter todas as moedas.
res = requests.get(
"https://api.frankfurter.dev/v2/rates",
params={"base": "usd", "quotes": "eur,gbp,jpy"},
)
rates = {row["quote"]: row["rate"] for row in res.json()}Armazene em cache o que não muda
Taxas históricas são imutáveis, portanto podem ser armazenadas em cache para sempre. Taxas mais recentes mudam apenas conforme as fontes publicam, no máximo algumas vezes por dia útil, então um TTL curto é suficiente. Com requests-cache, o cache é configurado em uma linha:
import requests_cache
session = requests_cache.CachedSession("frankfurter", expire_after=3600)
res = session.get("https://api.frankfurter.dev/v2/rate/usd/eur")
data = res.json()Async
Em uma aplicação web assíncrona, use httpx:
import httpx
API = "https://api.frankfurter.dev"
async def rate(base, quote):
async with httpx.AsyncClient(base_url=API) as client:
res = await client.get(f"/v2/rate/{base}/{quote}")
res.raise_for_status()
return res.json()["rate"]Fixar uma fonte oficial
Por padrão, você obtém a taxa combinada de todas as fontes. Adicione providers para fixar uma autoridade específica, o que importa quando uma regulamentação exige a taxa publicada pelo seu banco central, como a taxa de referência do BCE para IVA da UE.
res = requests.get(
"https://api.frankfurter.dev/v2/rate/usd/eur",
params={"providers": "ecb"},
)
data = res.json()Explore todas as fontes. Uma fonte fixada segue seu próprio calendário de publicação, portanto sua cotação mais recente pode ficar um dia atrás da média combinada mais recente.
Analisando uma série?
Para intervalos de datas, agrupamento mensal e gráficos, o endpoint CSV é carregado diretamente em um DataFrame. Veja pandas.