Dúvidas ou problemas? Poste no GitHub Discussions.

O endpoint CSV do Frankfurter carrega direto num DataFrame, então buscar cotações leva uma linha. O motivo para usá-lo em vez de uma consulta rápida de cotação de mercado é a reprodutibilidade: fixe um único provedor e o histórico dele fica como foi publicado, então um backtest que você roda hoje bate com o que rodou no ano passado.

Início rápido

Aponte o read_csv para o endpoint CSV:

import pandas as pd

df = pd.read_csv("https://api.frankfurter.dev/v2/rates.csv?base=usd&quotes=eur,gbp")

Você recebe um DataFrame date,base,quote,rate, com uma linha por cotação.

Converter um valor

O CSV traz a cotação, não o total convertido. Multiplique o valor pela coluna rate. Para um único escalar sem pandas, chame o endpoint de cotação única com requests:

import requests

rate = requests.get("https://api.frankfurter.dev/v2/rate/usd/eur").json()["rate"]
total = 100 * rate

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 mantém a análise auditável: muitas jurisdições exigem a taxa publicada pelo próprio banco central na conversão de valores em moeda estrangeira.

df = pd.read_csv("https://api.frankfurter.dev/v2/rates.csv?base=usd&quotes=eur&providers=ecb")
ECB
Taxa de referência do Banco Central Europeu, o padrão para IVA e alfândega na UE.
NBP
Narodowy Bank Polski. Na Polônia, o IVA e o imposto de renda das empresas (CIT) são convertidos pela taxa do NBP.
CNB
Fixing do Banco Nacional Tcheco, usado na contabilidade e nos impostos da República Tcheca.
BCB
PTAX do Banco Central do Brasil, a referência para contratos e tributos no Brasil.
BANXICO
Taxa FIX do Banco de México, usada para liquidar obrigações em dólar americano.

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.

Séries históricas

Use from para um intervalo de datas e group=month para ter uma linha por mês. Faça o parse da coluna de data e defina-a como índice; depois é só plotar ou fazer resample. O histórico combinado pode mudar um pouco quando chegam dados novos, então fixe um provedor para tudo o que você precisar reproduzir.

df = pd.read_csv(
    "https://api.frankfurter.dev/v2/rates.csv?from=1949-12-01&base=usd&quotes=gbp&providers=bbk&group=month",
    parse_dates=["date"],
    index_col="date",
)
df["rate"].plot()

Isso traz o dólar americano contra a libra desde 1949, direto do arquivo do Deutsche Bundesbank. Dá para ver a paridade fixa da libra em US$ 2,80 ficar estável por anos até ser rompida em 1967. O histórico mais antigo vem dos fixings do Bundesbank em Frankfurt: o dólar contra o marco desde 1948 e a maioria dos outros pares com o dólar de 1949 a 1970. O Banco Central Europeu assume a partir de 1999, então uma série moderna contínua usa a combinação padrão ou providers=ecb.