Acompanhe a cotação histórica diária do dólar, euro, libra e mais 7 moedas contra o real, direto do PTAX do Banco Central, via uma única API REST. Suporte a inverso (BRL-USD) e cross-rates (USD-EUR) calculados sobre os mesmos dados oficiais.
Quem precisa de histórico do dólar comercial sabe a dor: o site do BCB funciona, mas exige requisições por série SGS, formato CSV de exportação limitada, sem JSON nativo, sem CORS para front-end e sem cross-rate. Se você só queria o gráfico anual do dólar para um relatório, vira projeto.
Em maio de 2026 lançamos o /api/v2/currency/historical da brapi.dev, que
empacota o PTAX (fechamento diário oficial) em uma API JSON moderna, com
suporte a múltiplos pares por requisição, inverso e cross-rates calculados
em tempo real.
O que é o PTAX e por que ele é o padrão
PTAX é a taxa de câmbio de referência do Banco Central. Ela é divulgada diariamente em até quatro boletins ("Abertura", "Intermediário 1", "Intermediário 2" e "Fechamento") e representa a média ponderada das operações interbancárias durante o dia.
Em todo o Brasil, contratos, balanços corporativos, declarações de imposto e
operações financeiras usam o PTAX de fechamento (venda) como referência.
É o número que aparece no jornal no dia seguinte — e é exatamente o que a
brapi.dev retorna em /api/v2/currency/historical.
Para que serve o PTAX (e para que NÃO serve)
Use PTAX para: balanços, contratos, fechamento de mês/ano, back-test de estratégias diárias, gráficos.
Não use PTAX para: preço intraday (variação no segundo), trading de alta
frequência, ou paridade real para envio de remessas (cada banco aplica spread
sobre o PTAX). Para cotação em tempo real, use /api/v2/currency.
Pares de moedas suportados
Dez moedas estrangeiras com cotação contra o real, todas com PTAX direto do BCB:
| Par | Moeda | Início do histórico |
|---|---|---|
USD-BRL | Dólar Americano | 1984-11-28 |
EUR-BRL | Euro | 1999-01-04 |
GBP-BRL | Libra Esterlina | 1999-01-04 |
JPY-BRL | Iene Japonês | 1999-01-04 |
CHF-BRL | Franco Suíço | 1999-01-04 |
CAD-BRL | Dólar Canadense | 1999-01-04 |
AUD-BRL | Dólar Australiano | 1999-01-04 |
DKK-BRL | Coroa Dinamarquesa | 1999-01-04 |
NOK-BRL | Coroa Norueguesa | 1999-01-04 |
SEK-BRL | Coroa Sueca | 1999-01-04 |
O dólar é o único com histórico desde 1984 (há quase 42 anos, abrangendo todo o período pós-Plano Real). As demais começam em 1999 quando o BCB incluiu pares G10 no SGS.
Endpoint /api/v2/currency/historical
curl -H "Authorization: Bearer SEU_TOKEN" \
"https://brapi.dev/api/v2/currency/historical?currency=USD-BRL"Resposta:
{
"results": [
{
"pair": "USD-BRL",
"fromCurrency": "USD",
"toCurrency": "BRL",
"observations": [
{ "date": "2026-04-30", "value": 4.9886 },
{ "date": "2026-04-29", "value": 4.9712 },
{ "date": "2026-04-28", "value": 4.9854 }
]
}
],
"requestedAt": "2026-04-30T12:00:00.000Z",
"took": 14
}Parâmetros
| Parâmetro | Descrição | Default |
|---|---|---|
currency (obrigatório) | Pares separados por vírgula (máx. 20) | — |
startDate | Data inicial YYYY-MM-DD | 12 meses atrás |
endDate | Data final YYYY-MM-DD | hoje |
sortOrder | asc ou desc | desc |
limit | Observações por par | 365 |
Para histórico desde o início, passe startDate=1984-11-28 (apenas USD-BRL)
ou startDate=1999-01-04 (demais).
Múltiplos pares em uma única chamada
Pegue dólar, euro, libra e iene simultaneamente:
curl -H "Authorization: Bearer SEU_TOKEN" \
"https://brapi.dev/api/v2/currency/historical?currency=USD-BRL,EUR-BRL,GBP-BRL,JPY-BRL"Cada par vem como um item em results[] na ordem solicitada. Use isso para
montar gráficos comparativos ou correlações em uma só requisição.
Inverso e cross-rates (Pro)
Além dos pares diretos, a API calcula:
- Inverso (
BRL-USD):1 / X-BRLem cada data observada - Cross-rate (
USD-EUR):USD-BRL / EUR-BRLem cada data com observação em ambas as séries
Ambos requerem plano Pro. O cálculo é feito sobre os mesmos dados PTAX, então o resultado é matematicamente idêntico ao que você obteria fazendo as duas consultas e dividindo manualmente — só sem o trabalho.
# Inverso: quantos dólares vale 1 real
curl -H "Authorization: Bearer SEU_TOKEN" \
"https://brapi.dev/api/v2/currency/historical?currency=BRL-USD"
# Cross-rate: euro contra dólar, derivado do PTAX brasileiro
curl -H "Authorization: Bearer SEU_TOKEN" \
"https://brapi.dev/api/v2/currency/historical?currency=EUR-USD,GBP-USD"Saiba mais em Cross-rate de moedas com PTAX.
Exemplo TypeScript: gráfico do dólar dos últimos 5 anos
type Observation = { date: string; value: number };
type HistoricalResponse = {
results: Array<{
pair: string;
fromCurrency: string;
toCurrency: string;
observations: Observation[];
}>;
};
async function fetchUsdBrl5y(): Promise<Observation[]> {
const today = new Date().toISOString().slice(0, 10);
const fiveYearsAgo = new Date();
fiveYearsAgo.setFullYear(fiveYearsAgo.getFullYear() - 5);
const start = fiveYearsAgo.toISOString().slice(0, 10);
const url = new URL('https://brapi.dev/api/v2/currency/historical');
url.searchParams.set('currency', 'USD-BRL');
url.searchParams.set('startDate', start);
url.searchParams.set('endDate', today);
url.searchParams.set('sortOrder', 'asc');
url.searchParams.set('limit', '10000');
const res = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.BRAPI_TOKEN}` },
});
const data: HistoricalResponse = await res.json();
return data.results[0]?.observations ?? [];
}
// Plug em qualquer biblioteca de charting
const series = await fetchUsdBrl5y();
console.log(`${series.length} pontos diários`);Exemplo Python: comparativo dólar vs. euro vs. libra
import os
from datetime import date, timedelta
import requests
def fetch_history(pairs: list[str], years: int):
end = date.today().isoformat()
start = (date.today() - timedelta(days=365 * years)).isoformat()
response = requests.get(
'https://brapi.dev/api/v2/currency/historical',
params={
'currency': ','.join(pairs),
'startDate': start,
'endDate': end,
'sortOrder': 'asc',
'limit': 10000,
},
headers={'Authorization': f"Bearer {os.environ['BRAPI_TOKEN']}"},
)
response.raise_for_status()
return {item['pair']: item['observations'] for item in response.json()['results']}
series = fetch_history(['USD-BRL', 'EUR-BRL', 'GBP-BRL'], years=5)
for pair, obs in series.items():
last = obs[-1] if obs else None
print(f"{pair}: {len(obs)} pts — último: {last}")Exemplo cURL: máxima e mínima do dólar no ano
curl -s -H "Authorization: Bearer SEU_TOKEN" \
"https://brapi.dev/api/v2/currency/historical?currency=USD-BRL&startDate=2026-01-01&endDate=2026-04-30&limit=10000" \
| jq '.results[0].observations | {max: max_by(.value), min: min_by(.value)}'Casos de uso reais
Conversão histórica para balanços e impostos
Reconhecimento de receita em moeda estrangeira, declaração de bens no IRPF ou conversão de contratos antigos: o PTAX de fechamento é o número aceito pela Receita Federal e auditoria.
Back-testing cambial
Estratégias de hedge cambial, simulação de fundos com exposição em dólar
ou cesta de moedas. O limit=10000 traz o histórico completo de uma só vez.
Gráficos de longo prazo
Dashboards corporativos com tendência de 5, 10 ou 20 anos. Cache de 15 min na API + cache no cliente reduzem o custo a virtualmente zero após a primeira requisição.
Análise de risco
Cálculo de volatilidade realizada (desvio padrão dos retornos diários), correlação entre moedas e VaR cambial — tudo a partir das observações JSON.
// Volatilidade anualizada do USD-BRL (252 dias úteis)
const obs = await fetchUsdBrl5y();
const returns = obs
.slice(1)
.map((d, i) => Math.log(d.value / obs[i].value));
const mean = returns.reduce((a, b) => a + b, 0) / returns.length;
const variance =
returns.reduce((acc, r) => acc + (r - mean) ** 2, 0) / (returns.length - 1);
const annualVol = Math.sqrt(variance * 252) * 100;
console.log(`Volatilidade anualizada: ${annualVol.toFixed(2)}%`);Aplicações multi-currency
Apps que exibem patrimônio em múltiplas moedas (cripto + ações + estrangeiras) podem usar o histórico para mostrar a evolução real do portfólio em cada moeda ao longo do tempo.
Cuidados práticos
- PTAX só existe em dias úteis. Fins de semana e feriados não têm observação. Se seu front-end mostra um gap, é esperado — o BCB não publica.
- Janela padrão é 12 meses. Se você precisa do histórico todo, passe
explicitamente
startDatemais antigo +limit=10000. - Inverso e cross-rate exigem plano Pro. Os pares diretos (X-BRL) estão no plano Startup.
- Para tempo real, use
/api/v2/currency. Esse endpoint mostra o preço intraday, com bid/ask, atualizado a cada poucos minutos. O/historicalé PTAX de fechamento — só atualiza no fim do dia. - Cripto não está em
/historical. O endpoint só cobre as 10 moedas fiat suportadas pelo PTAX. Para BTC-BRL, use/api/v2/crypto.
Endpoints relacionados
- 📈 Documentação completa do
/api/v2/currency/historical - 💵 Cotações em tempo real (
/api/v2/currency) - 🔄 Cross-rate de moedas com PTAX
- 📊 API de Macroeconomia (Selic, IPCA, CDI)
Crie sua conta em brapi.dev e teste com USD-BRL nos últimos 30 dias para ver a estrutura da resposta. O plano Startup já libera os pares diretos contra BRL.
