Visão geral
O Lume Exchange Rates reúne comparação, conversão e histórico para viagens, preços internacionais e produtos.
A fonte configurada é Fornecedor externo de taxas de câmbio. As respostas identificam a fonte e a hora de publicação. As moedas disponíveis dependem dos dados reais.
Início rápido
Consulte as moedas e escolha anchor e targets. Campos e códigos são iguais em todos os idiomas.
curl --request GET 'https://lumeexchangerates.com/v1/quotes?anchor=USD&targets=EUR,JPY'const response = await fetch('/v1/quotes?anchor=USD&targets=EUR,JPY', {
credentials: 'same-origin'
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const { meta, anchor, data } = await response.json();
console.log(anchor, meta.as_of, data);O exemplo do navegador usa a mesma origem. Sites privados exigem autorização; o URL não evita o início de sessão.
Acesso e autenticação
O acesso segue as permissões do site e a sessão do navegador. Ainda não existem chaves API de cliente, autenticação Bearer de cliente ou API pública entre origens. Guarde o App ID no servidor.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| Base URL | URL | https://lumeexchangerates.com |
| Content-Type | header | application/json |
| Customer API key | — | Esta prévia alojada utiliza a sessão iniciada no navegador. Ainda não emite chaves API individuais para clientes. |
| Provider App ID | server secret | OPEN_EXCHANGE_RATES_APP_ID |
| CORS | same-origin | Não são fornecidos cabeçalhos de acesso entre origens. |
Authorization: Token serve apenas a ligação do servidor a Fornecedor externo de taxas de câmbio, não autentica clientes. Verifique HTTP e Content-Type: o acesso pode devolver HTML ou redirecionamentos.
Endpoints
| Method | Path | Descrição |
|---|---|---|
| GET | /v1/currencies | Todos os símbolos com taxas atuais e nomes do fornecedor. Inclui moedas alternativas e metais disponíveis. |
| GET | /v1/quotes | Símbolo base; USD por defeito. Aceita qualquer símbolo atual do fornecedor. |
| GET | /v1/exchange | Montante numérico não negativo a converter. |
| GET | /v1/history | Consulte uma data em /v1/history e um intervalo em /v1/series. |
| GET | /v1/series | Consulte uma data em /v1/history e um intervalo em /v1/series. |
| GET | /v1/candles | OHLC |
| GET | /v1/capabilities | Disponibilidade |
| GET | /api/rates/latest | Última taxa publicada |
| GET | /api/currencies | Moeda |
| GET | /api/rates/history | Gráficos |
| GET | /api/rates/previous | Dia UTC anterior |
| POST | /api/convert | Conversor |
/v1 oferece consultas compactas; /api fornece taxas, histórico e conversão do site. Os valores predefinidos e formatos diferem.
GET /v1/currencies
Todos os símbolos com taxas atuais e nomes do fornecedor. Inclui moedas alternativas e metais disponíveis.
Parâmetro: —
curl --request GET 'https://lumeexchangerates.com/v1/currencies'Valores e datas são exemplos, não taxas atuais; as listas podem estar abreviadas. Consulte dados reais no explorador API.
{
"meta": {
"mode": "provider",
"source": "Fornecedor externo de taxas de câmbio",
"source_url": "https://openexchangerates.org/",
"as_of": "2026-01-01T00:00:00.000Z",
"fetched_at": "2026-01-01T00:00:05.000Z",
"currency_count": 3,
"includes_alternative": true,
"refresh_interval_seconds": 300,
"provider_plan": "Unlimited",
"notice": "Illustrative response; not live rates."
},
"data": [
{
"code": "USD",
"name": "United States Dollar"
},
{
"code": "EUR",
"name": "Euro"
},
{
"code": "JPY",
"name": "Japanese Yen"
}
]
}| Parâmetro | Tipo | Descrição |
|---|---|---|
| data[].code | string | Código em maiúsculas; ativos alternativos podem ter mais de três caracteres ou sublinhados. |
| data[].name | string | Nome fornecido pelo fornecedor ou, na sua ausência, o código. |
GET /v1/quotes
Símbolo base; USD por defeito. Aceita qualquer símbolo atual do fornecedor.
| Parâmetro | Tipo | Obrigatório | Predefinição | Descrição |
|---|---|---|---|---|
| anchor | string | Opcional | USD | Símbolo base; USD por defeito. Aceita qualquer símbolo atual do fornecedor. |
| targets | string | Opcional | todas | Símbolos de destino separados por vírgulas. Omita para devolver todos os símbolos disponíveis. |
curl --request GET 'https://lumeexchangerates.com/v1/quotes?anchor=USD&targets=EUR,JPY'Valores e datas são exemplos, não taxas atuais; as listas podem estar abreviadas. Consulte dados reais no explorador API.
{
"meta": {
"mode": "provider",
"source": "Fornecedor externo de taxas de câmbio",
"source_url": "https://openexchangerates.org/",
"as_of": "2026-01-01T00:00:00.000Z",
"fetched_at": "2026-01-01T00:00:05.000Z",
"currency_count": 3,
"includes_alternative": true,
"refresh_interval_seconds": 300,
"provider_plan": "Unlimited",
"notice": "Illustrative response; not live rates."
},
"anchor": "USD",
"data": [
{
"currency": "EUR",
"value": 0.9
},
{
"currency": "JPY",
"value": 150
}
]
}/v1/quotes?anchor=EUR&targets=USD,JPY devolve unidades de destino por unidade base. Remove duplicados; códigos vazios, minúsculos ou indisponíveis devolvem 400.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| anchor | string | Símbolo base; USD por defeito. Aceita qualquer símbolo atual do fornecedor. |
| data[].currency | string | Para |
| data[].value | number | rates[currency] / rates[anchor] |
GET /v1/exchange
Montante numérico não negativo a converter.
| Parâmetro | Tipo | Obrigatório | Predefinição | Descrição |
|---|---|---|---|---|
| from | string | Opcional | USD | Símbolo da moeda de origem; USD por defeito. |
| to | string | Opcional | KRW | Símbolo da moeda de destino; KRW por defeito. |
| quantity | number | Opcional | 1 | Montante numérico não negativo a converter. |
curl --request GET 'https://lumeexchangerates.com/v1/exchange?from=USD&to=EUR&quantity=100'Valores e datas são exemplos, não taxas atuais; as listas podem estar abreviadas. Consulte dados reais no explorador API.
{
"meta": {
"mode": "provider",
"source": "Fornecedor externo de taxas de câmbio",
"source_url": "https://openexchangerates.org/",
"as_of": "2026-01-01T00:00:00.000Z",
"fetched_at": "2026-01-01T00:00:05.000Z",
"currency_count": 3,
"includes_alternative": true,
"refresh_interval_seconds": 300,
"provider_plan": "Unlimited",
"notice": "Illustrative response; not live rates."
},
"data": {
"from": "USD",
"to": "EUR",
"quantity": 100,
"rate": 0.9,
"result": 90
}
}/v1/exchange?from=USD&to=EUR&quantity=100. Especifique sempre from e to; esta rota GET antiga usa KRW por predefinição. Valores vazios, negativos, NaN, infinitos e resultados fora de alcance devolvem 400.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| data.rate | number | rates[to] / rates[from] |
| data.result | number | quantity × rate |
GET /api/rates/latest
Última taxa publicada
Parâmetro: —
curl --request GET 'https://lumeexchangerates.com/api/rates/latest'Valores e datas são exemplos, não taxas atuais; as listas podem estar abreviadas. Consulte dados reais no explorador API.
{
"meta": {
"provider": "Fornecedor externo de taxas de câmbio",
"kind": "latest_published",
"provider_timestamp": 1767225600,
"published_at": "2026-01-01T00:00:00.000Z",
"expected_interval_seconds": 300,
"lag_seconds": 5,
"stale": false,
"timezone": "Asia/Seoul",
"fetched_at": "2026-01-01T00:00:05.000Z",
"persistent_storage": false
},
"data": {
"base": "USD",
"rates": {
"USD": 1,
"EUR": 0.9,
"JPY": 150
}
}
}| Parâmetro | Tipo | Descrição |
|---|---|---|
| data.base | string | USD |
| data.rates | object | Taxas disponíveis relativas a USD; confirme os códigos na resposta mais recente. |
| meta.provider_timestamp | integer | UTC · UNIX seconds |
| meta.published_at | string | ISO 8601 · UTC |
| meta.fetched_at | string | Hora de obtenção pelo servidor, distinta da publicação do fornecedor. |
| meta.expected_interval_seconds | integer | seconds |
| meta.stale | boolean | true se a idade exceder max(3 × intervalo esperado, 900 segundos). |
| meta.lag_seconds | integer | Segundos desde a publicação do fornecedor. |
| meta.persistent_storage | boolean | Indica se o serviço de recolha persistente está ligado. |
| meta.kind | string | latest_published | utc_daily |
GET /api/currencies
Moeda
| Parâmetro | Tipo | Obrigatório | Predefinição | Descrição |
|---|---|---|---|---|
| lang | string | Opcional | en | en / ko / ja / zh / es / hi / bn / de / fr / nl / pt / it / ru / vi / th / ar / id / ur |
curl --request GET 'https://lumeexchangerates.com/api/currencies?lang=en'Valores e datas são exemplos, não taxas atuais; as listas podem estar abreviadas. Consulte dados reais no explorador API.
{
"meta": {
"provider": "Fornecedor externo de taxas de câmbio",
"kind": "latest_published",
"provider_timestamp": 1767225600,
"published_at": "2026-01-01T00:00:00.000Z",
"expected_interval_seconds": 300,
"lag_seconds": 5,
"stale": false,
"timezone": "Asia/Seoul",
"fetched_at": "2026-01-01T00:00:05.000Z",
"persistent_storage": false
},
"data": [
{
"code": "USD",
"name": "US Dollar"
},
{
"code": "EUR",
"name": "Euro"
}
]
}Intl.DisplayNames traduz nomes. Ativos desconhecidos mantêm o código. Só são devolvidos códigos dos dados atuais.
GET /api/rates/history
Consulte uma data em /v1/history e um intervalo em /v1/series.
| Parâmetro | Tipo | Obrigatório | Predefinição | Descrição |
|---|---|---|---|---|
| from | string | Opcional | USD | De |
| to | string | Opcional | EUR | Para |
| period | enum | Opcional | 1M | 1D | 1W | 1M | 3M | 1Y |
curl --request GET 'https://lumeexchangerates.com/api/rates/history?from=USD&to=EUR&period=1W'Valores e datas são exemplos, não taxas atuais; as listas podem estar abreviadas. Consulte dados reais no explorador API.
{
"meta": {
"kind": "utc_daily",
"from": "USD",
"to": "EUR",
"period": "1W",
"provider": "Fornecedor externo de taxas de câmbio",
"persistent_storage": false
},
"data": [
{
"time": "2026-01-01",
"value": 0.9
},
{
"time": "2026-01-02",
"value": 0.91
}
]
}1W começa há sete dias; 1M, 3M e 1Y usam períodos de calendário. Os dias terminam ontem. Ajustam-se fins de mês e anos bissextos. Períodos longos dividem-se por mês, ordenam-se e eliminam duplicados.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| data[].time | string | integer | Diário: YYYY-MM-DD (UTC). Intradiário: segundos UNIX. |
| data[].value | number | rates[to] / rates[from] |
| meta.kind | string | utc_daily | intraday |
{
"meta": {
"kind": "intraday",
"persistent_storage": false
},
"data": []
}Sem recolha, 1D devolve HTTP 200 e lista vazia: não é erro nem dados por minuto. Moedas ausentes num período histórico podem falhar.
GET /api/rates/previous
Dia UTC anterior
| Parâmetro | Tipo | Obrigatório | Predefinição | Descrição |
|---|---|---|---|---|
| from | string | Opcional | USD | De |
| to | string | Opcional | EUR | Para |
curl --request GET 'https://lumeexchangerates.com/api/rates/previous?from=USD&to=EUR'Valores e datas são exemplos, não taxas atuais; as listas podem estar abreviadas. Consulte dados reais no explorador API.
{
"meta": {
"kind": "utc_daily",
"reference_date": "2026-01-01",
"reference_timestamp": "2026-01-01T23:59:59Z"
},
"data": {
"from": "USD",
"to": "EUR",
"rate": 0.9,
"rates": {
"USD": 1,
"EUR": 0.9
}
}
}Compara com o dia UTC anterior. reference_timestamp é o fim lógico do dia, não a publicação real. Variação: (atual − referência) / referência × 100.
POST /api/convert
Conversor
| Parâmetro | Tipo | Obrigatório | Predefinição | Descrição |
|---|---|---|---|---|
| Content-Type | header | Obrigatório | application/json | application/json |
| amount | number | Obrigatório | — | 0 ≤ amount ≤ 1e15; finite |
| from | string | Obrigatório | — | De |
| to | string | Obrigatório | — | Para |
curl --request POST 'https://lumeexchangerates.com/api/convert' \
--header 'Content-Type: application/json' \
--data '{"amount":100,"from":"USD","to":"EUR"}'Valores e datas são exemplos, não taxas atuais; as listas podem estar abreviadas. Consulte dados reais no explorador API.
{
"meta": {
"provider": "Fornecedor externo de taxas de câmbio",
"kind": "latest_published",
"provider_timestamp": 1767225600,
"published_at": "2026-01-01T00:00:00.000Z",
"expected_interval_seconds": 300,
"lag_seconds": 5,
"stale": false,
"timezone": "Asia/Seoul",
"fetched_at": "2026-01-01T00:00:05.000Z",
"persistent_storage": false
},
"data": {
"amount": 100,
"from": "USD",
"to": "EUR",
"rate": 0.9,
"result": 90
}
}Envie amount como número JSON; a cadeia "100" devolve 400. Os códigos devem existir no snapshot atual. Não executa transferências nem transações.
GET /v1/history
Consulte uma data em /v1/history e um intervalo em /v1/series.
| Parâmetro | Tipo | Obrigatório | Predefinição | Descrição |
|---|---|---|---|---|
| date | YYYY-MM-DD | Obrigatório | — | 1999-01-01 ≤ date ≤ UTC today |
| anchor | string | Opcional | USD | De |
| targets | CSV | Opcional | all | Para |
curl --request GET 'https://lumeexchangerates.com/v1/history?date=2026-01-01&anchor=EUR&targets=USD,JPY'Valores e datas são exemplos, não taxas atuais; as listas podem estar abreviadas. Consulte dados reais no explorador API.
{
"meta": {
"date": "2026-01-01",
"published_at": "2026-01-01T23:00:00Z",
"partial_day": false
},
"anchor": "EUR",
"data": [
{
"currency": "USD",
"value": 1.1
}
]
}| Parâmetro | Tipo | Descrição |
|---|---|---|
| meta.partial_day | boolean | Referência diária UTC |
| meta.published_at | ISO 8601 UTC | Última taxa publicada |
GET /v1/series
Consulte uma data em /v1/history e um intervalo em /v1/series.
| Parâmetro | Tipo | Obrigatório | Predefinição | Descrição |
|---|---|---|---|---|
| start / end | YYYY-MM-DD | Obrigatório | — | 1999-01-01 ≤ start ≤ end < UTC today; ≤ 366 days inclusive |
| anchor / targets | string / CSV | Opcional | USD / all | same as /v1/quotes |
curl --request GET 'https://lumeexchangerates.com/v1/series?start=2026-01-01&end=2026-01-07&anchor=USD&targets=EUR'Valores e datas são exemplos, não taxas atuais; as listas podem estar abreviadas. Consulte dados reais no explorador API.
{
"meta": {
"start": "2026-01-01",
"end": "2026-01-02",
"timezone": "UTC",
"count": 2
},
"anchor": "USD",
"data": [
{
"date": "2026-01-01",
"rates": [
{
"currency": "EUR",
"value": 0.9
}
]
},
{
"date": "2026-01-02",
"rates": [
{
"currency": "EUR",
"value": 0.91
}
]
}
]
}OHLC em /v1/candles exige permissão do fornecedor. Consulte /v1/capabilities; a disponibilidade depende do plano configurado.
{
"timezone": "UTC",
"date_bounds": "inclusive",
"max_days": 366,
"upstream_chunk": "calendar_month"
}GET /v1/candles
OHLC em /v1/candles exige permissão do fornecedor. Consulte /v1/capabilities; a disponibilidade depende do plano configurado.
| Parâmetro | Tipo | Obrigatório | Predefinição | Descrição |
|---|---|---|---|---|
| start | YYYY-MM-DDTHH:mm:00Z | Obrigatório | — | UTC; completed period only; ≥ 2016-12-19 |
| period | enum | Obrigatório | — | 1m | 5m | 15m | 30m | 1h | 12h | 1d | 1w | 1mo |
| anchor / targets | string / CSV | Opcional | USD / all | provider base / symbols |
curl --request GET 'https://lumeexchangerates.com/v1/candles?start=2026-01-01T00%3A00%3A00Z&period=1d&anchor=USD&targets=EUR'Valores e datas são exemplos, não taxas atuais; as listas podem estar abreviadas. Consulte dados reais no explorador API.
{
"meta": {
"start": "2026-01-01T00:00:00Z",
"end": "2026-01-01T23:59:59Z",
"period": "1d"
},
"anchor": "USD",
"data": [
{
"currency": "EUR",
"open": 0.9,
"high": 0.92,
"low": 0.89,
"close": 0.91,
"average": 0.905
}
]
}{
"source": "provider_ohlc",
"synthetic": false,
"cross_rate_ohlc": false,
"max_age": {
"1m": "1h",
"5m": "24h",
"15m": "24h",
"30m": "32d",
"1h": "32d"
},
"alignment_minutes": {
"5m": 5,
"15m": 15,
"30m": 30,
"1h": 30,
"12h": 30,
"1d": 30
},
"calendar_alignment": {
"1w": "00:00 UTC",
"1mo": "YYYY-MM-01T00:00:00Z"
}
}GET /v1/capabilities
Disponibilidade
Parâmetro: —
curl --request GET 'https://lumeexchangerates.com/v1/capabilities'Valores e datas são exemplos, não taxas atuais; as listas podem estar abreviadas. Consulte dados reais no explorador API.
{
"data": {
"latest": true,
"currencies": true,
"conversion": "latest_snapshot",
"historical": "verified_on_request",
"time_series": true,
"ohlc": false,
"refresh_interval_seconds": 300,
"customer_api_keys": false
}
}OHLC em /v1/candles exige permissão do fornecedor. Consulte /v1/capabilities; a disponibilidade depende do plano configurado.
Dados e precisão
As taxas são indicativas, não ofertas bancárias nem preços garantidos. A conversão usa o mesmo conjunto de taxas; arredonde apenas ao apresentar ou liquidar.
rate = rates[to] / rates[from]
result = amount * rateAs taxas preservam a precisão de vírgula flutuante sem truncar para um número fixo de casas decimais. Arredonde apenas na apresentação ou segundo a política contabilística.
Uma unidade de origem, incluindo JPY. Multiplique por 100 apenas na apresentação, se necessário. Considere erros binários JavaScript e defina regras decimais e de arredondamento na liquidação.
Datas e horas
UNIX usa segundos UTC e ISO usa Z. Datas UTC podem diferir das locais. O site usa o fuso do navegador. meta.timezone é apenas uma indicação de apresentação.
| Parâmetro | Tipo | Descrição |
|---|---|---|
| /v1 meta.as_of | ISO 8601 | YYYY-MM-DD | Data e hora do fornecedor |
| /v1 meta.refresh_interval_seconds | integer | Cache |
| /v1 meta.currency_count | integer | … moedas disponíveis |
| /v1 meta.mode | provider | daily | Fonte dos dados |
| /api meta.published_at | ISO 8601 UTC | Última taxa publicada |
| history data[].time | YYYY-MM-DD UTC | UNIX seconds | Referência diária UTC |
Erros
| HTTP | code | Descrição |
|---|---|---|
| 400 | INVALID_CURRENCY / INVALID_INPUT / INVALID_CONVERSION / INVALID_JSON / INVALID_PERIOD | Introduza um montante não negativo |
| 405 | METHOD_NOT_ALLOWED | GET: /v1/*, /api/rates/*, /api/currencies; POST: /api/convert |
| 404 | NOT_FOUND | /api/rates/* |
| 422 | HISTORY_NOT_IN_PLAN / DATA_UNAVAILABLE | Disponibilidade |
| 429 | RATE_LIMITED | /api/* · 90 / IP / minute |
| 404 | NOT_FOUND | Unknown /v1 endpoint |
| 422 | FEATURE_NOT_IN_PLAN / HISTORY_NOT_IN_PLAN / OHLC_NOT_IN_PLAN | Disponibilidade |
| 400 | INVALID_DATE / INVALID_DATE_RANGE / INVALID_PERIOD / INCOMPLETE_PERIOD | Introduza um montante não negativo |
| 503 | PROVIDER_UNAVAILABLE / DATA_UNAVAILABLE / SERVICE_UNAVAILABLE | As taxas estão indisponíveis. Tente novamente em breve. |
{
"error": {
"code": "INVALID_CURRENCY",
"message": "Symbol not available in latest provider data"
}
}message pode faltar. Use HTTP e error.code. Corrija a entrada; para 429 ou 503 temporário use tentativas limitadas com espera exponencial e aleatória. Retry-After não é garantido.
Limites e cache
Os dados usam cache; a configuração atual aponta para cinco minutos. /api: 90 pedidos por minuto por IP, por instância no modo direto e partilhados com Redis. /v1 ainda não aplica quotas futuras.
Cache-Control: no-store refere-se à resposta, não à cache do fornecedor no servidor. Reutilize snapshots pela publicação. Numa falha pode regressar o último valor válido; verifique stale ou as_of. A cache Worker não é persistente.
{
"endpoints": [
"/v1/history",
"/v1/series",
"/v1/candles",
"/v1/capabilities"
],
"requests_per_ip_per_minute": 60,
"cache": "in_process",
"completed_history_cache_seconds": 3600,
"current_day_cache_seconds": 60
}Disponibilidade
OHLC em /v1/candles exige permissão do fornecedor. Consulte /v1/capabilities; a disponibilidade depende do plano configurado.
OHLC em /v1/candles exige permissão do fornecedor. Consulte /v1/capabilities; a disponibilidade depende do plano configurado.
Explorador API
Utilize a API deste site. A chave do fornecedor permanece no servidor.
Execute o pedido para ver a resposta JSON real.