Frankfurter
O Frankfurter registra taxas de câmbio diárias de 98 bancos centrais e fontes oficiais para 206 moedas. Os dados remontam a 1948.
A API pública está disponível em api.frankfurter.dev e não requer chave de API. O projeto é de código aberto, permitindo também hospedagem própria para controle total.
Trabalhando com um agente de IA? Aponte para llms.txt ou conecte o servidor MCP.
Taxas de câmbio
Obtenha as taxas de câmbio mais recentes.
curl https://api.frankfurter.dev/v2/ratesAltere a moeda base com base.
curl https://api.frankfurter.dev/v2/rates?base=usdFiltre as moedas de cotação com quotes.
curl https://api.frankfurter.dev/v2/rates?quotes=usd,gbpTaxas históricas
Consulte taxas para uma data específica.
curl https://api.frankfurter.dev/v2/rates?date=1999-01-04Séries temporais
Obtenha taxas ao longo de um período com from e to.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01"es=usdDica: Filtrar as moedas mantém as respostas compactas. Para intervalos longos de datas, solicite NDJSON para receber os resultados em streaming linha a linha.
Agrupamento
Reduza a resolução de uma série temporal com group. Suporta week e month.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01&group=monthFiltrar por fonte
Restrinja a fontes específicas com providers.
curl https://api.frankfurter.dev/v2/rates?providers=ecb Por padrão, as taxas combinam todas as fontes. Use providers para obter taxas de uma fonte específica ou consulte diretamente as rotas da fonte.
Atribuição de fontes
Adicione expand=providers para ver quais fontes contribuíram para cada taxa combinada.
curl https://api.frankfurter.dev/v2/rates?expand=providers Cada linha recebe um array providers com as chaves das fontes participantes. Linhas de moedas com taxa de câmbio fixa omitem esse campo, pois derivam da paridade e não de dados de fontes.
Saída em CSV
As taxas também estão disponíveis em CSV. Adicione .csv ao caminho ou defina o cabeçalho Accept como text/csv.
curl https://api.frankfurter.dev/v2/rates.csvSaída em NDJSON
Para respostas grandes, solicite NDJSON (JSON delimitado por quebras de linha) definindo o cabeçalho Accept como application/x-ndjson. Cada linha é um objeto JSON independente, ideal para streaming de séries temporais longas sem armazenar toda a resposta em buffer.
curl https://api.frankfurter.dev/v2/rates?from=2026-01-01Taxa individual
Obtenha a taxa para um único par de moedas. Opcionalmente adicione date ou providers.
curl https://api.frankfurter.dev/v2/rate/eur/usdMoedas
Obtenha as moedas disponíveis e a cobertura das fontes.
curl https://api.frankfurter.dev/v2/currenciesInclua moedas históricas com scope.
curl https://api.frankfurter.dev/v2/currencies?scope=allMoeda individual
Obtenha detalhes e cobertura de fontes para uma única moeda.
curl https://api.frankfurter.dev/v2/currency/eurFontes
Liste as fontes de dados da API.
curl https://api.frankfurter.dev/v2/providersObtenha detalhes de uma fonte específica.
curl https://api.frankfurter.dev/v2/providers/ecbTaxas por fonte
Consulte taxas diretamente de uma fonte específica. Suporta os mesmos parâmetros de /v2/rates e /v2/rate.
curl https://api.frankfurter.dev/v2/providers/ecb/ratesObtenha um único par de moedas dessa fonte.
curl https://api.frankfurter.dev/v2/providers/ecb/rate/eur/usd Combine com date, intervalos de datas (from e to) ou agrupamento. Formatos como .csv e ndjson também funcionam aqui.
curl https://api.frankfurter.dev/v2/providers/ecb/rates?date=2024-05-15Conversão
Não há um endpoint de conversão dedicado. Obtenha a taxa e converta com poucas linhas de código.
function convert(base, quote, amount) {
const api = "https://api.frankfurter.dev";
return fetch(`${api}/v2/rate/${base}/${quote}`)
.then((r) => r.json())
.then((d) => (amount * d.rate).toFixed(2));
}
convert("eur", "usd", 10).then((result) =>
alert(`10 EUR = ${result} USD`)
);Erros
A API retorna códigos de status HTTP padrão com um corpo em JSON.
{
"message": "Could not find currency ABC"
}400- Parâmetro inválido ou requisição malformada.
404- Moeda, taxa ou recurso não encontrado.
422- Requisição compreendida, mas não pôde ser processada.
Self-Hosting
Você pode hospedar por conta própria com Docker. Consulte o guia de deploy para configuração em produção e chaves de API.
FAQ
- Para quem o Frankfurter é indicado (e para quem não é)?
- Funciona muito bem para faturamento SaaS, e-commerce, relatórios fiscais, sistemas de ERP e contabilidade, e pesquisa acadêmica com séries históricas desde 1948. Não é voltado para trading em tempo real nem para operações com moedas exóticas sujeitas a oscilações intraday bruscas.
- A API é gratuita para uso comercial?
- Sim, com certeza. Consulte os termos de cada fonte para obter detalhes sobre os dados subjacentes.
- A API possui limites de chamadas?
- Não há cotas. As requisições possuem limitação de taxa (rate limiting) para evitar abusos, mas não existem limites diários ou mensais. Para alto volume de uso, considere armazenar respostas em cache, hospedar uma instância própria ou consultar os conjuntos de dados diretamente.
- A API suporta GraphQL?
- Não. A API REST é simples o suficiente para que GraphQL apenas adicionasse complexidade sem grandes vantagens. Isso também invalidaria o cache em borda (edge caching), que mantém a API rápida. Use parâmetros como
base,quotesefrom/topara obter exatamente os dados necessários. - A API v1 será descontinuada?
- Não. A API v1 está deprecated em favor da v2, mas continua disponível por tempo indeterminado. Veja a documentação da v1. Para dados do Banco Central Europeu, use /v2/providers/ecb/rates.
- Qual é a política de privacidade da API?
- A API não coleta nem registra dados pessoais, endereços IP ou URLs consultadas. A instância pública opera atrás da Cloudflare para cache e proteção contra DDoS, fornecendo apenas estatísticas anônimas agregadas de tráfego.
- Preciso declarar a API nas políticas de privacidade da App Store ou Google Play?
- Não. Como as consultas são anônimas e nenhum registro de requisição é mantido, elas se qualificam como Dados Não Coletados segundo as diretrizes da Apple e do Google Play.
- Onde posso relatar um erro ou tirar dúvidas?
- Abra uma issue para relatar bugs, solicitar recursos ou sugerir novas fontes de dados. Use Discussions para fazer perguntas ou compartilhar bibliotecas e ferramentas desenvolvidas com o Frankfurter.
- Qual é a precisão das taxas de câmbio?
- Para conformidade regulatória ou fiscal, filtre por uma fonte específica para obter suas taxas de referência oficiais. Para uso geral, as taxas combinadas padrão funcionam perfeitamente, embora as últimas casas decimais possam sofrer pequenos ajustes com a chegada de novos dados.
- As taxas são médias, de compra (bid) ou de venda (ask)?
- A API retorna taxas médias de mercado (mid-market). Quando uma fonte publica cotações de compra e venda em vez de uma taxa de referência, o Frankfurter armazena ambas e calcula o ponto médio.
- Todas as taxas de câmbio são diárias?
- Quase todas. Apenas 2 fontes publicam em intervalos diferentes: a autoridade fiscal britânica HMRC (mensal) e o Tesouro dos EUA UST (trimestral). Como suas taxas permanecem válidas por semanas ou meses, elas não entram no feed combinado e aparecem apenas ao consultar essas fontes diretamente.
- Por que algumas moedas antigas e novas têm períodos que se sobrepõem?
- Algumas fontes aplicam moedas substitutas retroativamente ao período da moeda anterior (por exemplo,
TRLtermina em 2010 enquantoTRYcomeça em 1996). Mantemos os dados da fonte como estão e filtramos as sobreposições apenas na combinação. - Por que Frankfurter?
- Porque o Banco Central Europeu, com cujos dados tudo começou, fica em Frankfurt.