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/rates

Altere a moeda base com base.

curl https://api.frankfurter.dev/v2/rates?base=usd

Filtre as moedas de cotação com quotes.

curl https://api.frankfurter.dev/v2/rates?quotes=usd,gbp

Taxas históricas

Consulte taxas para uma data específica.

curl https://api.frankfurter.dev/v2/rates?date=1999-01-04

Sé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&quotes=usd

Dica: 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=month

Filtrar 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.csv

Saí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-01

Taxa individual

Obtenha a taxa para um único par de moedas. Opcionalmente adicione date ou providers.

curl https://api.frankfurter.dev/v2/rate/eur/usd

Moedas

Obtenha as moedas disponíveis e a cobertura das fontes.

curl https://api.frankfurter.dev/v2/currencies

Inclua moedas históricas com scope.

curl https://api.frankfurter.dev/v2/currencies?scope=all

Moeda individual

Obtenha detalhes e cobertura de fontes para uma única moeda.

curl https://api.frankfurter.dev/v2/currency/eur

Fontes

Liste as fontes de dados da API.

curl https://api.frankfurter.dev/v2/providers

Obtenha detalhes de uma fonte específica.

curl https://api.frankfurter.dev/v2/providers/ecb

Taxas 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/rates

Obtenha 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-15

Conversã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, quotes e from/to para 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, TRL termina em 2010 enquanto TRY começ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.
European Central Bank and Main riverfront, Frankfurt