概述
Lume Exchange Rates将汇率比较、货币换算和历史趋势汇于一处,方便旅行预算、海外价格比较与产品开发。
当前数据来源为外部汇率数据供应商。最新汇率包含来源和公布时间,可用货币以真实数据为准。
快速开始
先读取货币列表,再指定anchor和targets。所有界面语言使用相同的字段名和货币代码。
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);浏览器示例在同源环境运行。访问私有网站的cURL和服务器请求需要权限,不能仅通过URL绕过登录限制。
访问与认证
预览访问遵循网站权限和浏览器会话。目前不提供客户API密钥、客户Bearer认证或公开跨域API。供应商App ID仅保存在服务器。
| 参数 | 类型 | 说明 |
|---|---|---|
| Base URL | URL | https://lumeexchangerates.com |
| Content-Type | header | application/json |
| Customer API key | — | 当前托管预览使用浏览器登录会话,尚不签发客户专属 API 密钥。 |
| Provider App ID | server secret | OPEN_EXCHANGE_RATES_APP_ID |
| CORS | same-origin | 目前不返回允许跨域访问的响应头。 |
Authorization: Token仅供Lume Exchange Rates服务器连接外部汇率数据供应商时使用,并非客户认证方式。访问限制可能返回HTML或重定向,请先检查HTTP状态和Content-Type。
端点
| Method | Path | 说明 |
|---|---|---|
| GET | /v1/currencies | 返回当前有汇率的全部代码及名称,包括可用的替代货币和贵金属。 |
| GET | /v1/quotes | 基准货币,默认为 USD,支持供应商当前提供的所有代码。 |
| GET | /v1/exchange | 要转换的金额,必须大于或等于 0。 |
| GET | /v1/history | 使用/v1/history查询指定日期汇率,使用/v1/series查询日期区间数据。 |
| GET | /v1/series | 使用/v1/history查询指定日期汇率,使用/v1/series查询日期区间数据。 |
| GET | /v1/candles | OHLC |
| GET | /v1/capabilities | 可用功能 |
| GET | /api/rates/latest | 最新公布汇率 |
| GET | /api/currencies | 货币 |
| GET | /api/rates/history | 汇率图表 |
| GET | /api/rates/previous | 前一UTC日期 |
| POST | /api/convert | 货币换算 |
/v1是精简查询API;/api提供网页使用的最新汇率、历史和换算。两者默认值及响应结构不同,请勿混用。
GET /v1/currencies
返回当前有汇率的全部代码及名称,包括可用的替代货币和贵金属。
参数: —
curl --request GET 'https://lumeexchangerates.com/v1/currencies'以下数值和日期仅用于说明结构,并非当前汇率。数组可能仅显示部分项目。请使用API测试工具查看实际数据。
{
"meta": {
"mode": "provider",
"source": "外部汇率数据供应商",
"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"
}
]
}| 参数 | 类型 | 说明 |
|---|---|---|
| data[].code | string | 大写货币代码。替代资产代码可能超过3个字符或包含下划线。 |
| data[].name | string | 供应商提供的货币名称;缺少名称时返回代码。 |
GET /v1/quotes
基准货币,默认为 USD,支持供应商当前提供的所有代码。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| anchor | string | 选填 | USD | 基准货币,默认为 USD,支持供应商当前提供的所有代码。 |
| targets | string | 选填 | 全部 | 用逗号分隔的目标货币代码,省略时返回全部可用货币。 |
curl --request GET 'https://lumeexchangerates.com/v1/quotes?anchor=USD&targets=EUR,JPY'以下数值和日期仅用于说明结构,并非当前汇率。数组可能仅显示部分项目。请使用API测试工具查看实际数据。
{
"meta": {
"mode": "provider",
"source": "外部汇率数据供应商",
"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。value表示1单位基准货币对应的目标货币数量。targets去重;空代码、小写或不可用代码返回400。
| 参数 | 类型 | 说明 |
|---|---|---|
| anchor | string | 基准货币,默认为 USD,支持供应商当前提供的所有代码。 |
| data[].currency | string | 目标货币 |
| data[].value | number | rates[currency] / rates[anchor] |
GET /v1/exchange
要转换的金额,必须大于或等于 0。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| from | string | 选填 | USD | 原始货币代码,默认为 USD。 |
| to | string | 选填 | KRW | 目标货币代码,默认为 KRW。 |
| quantity | number | 选填 | 1 | 要转换的金额,必须大于或等于 0。 |
curl --request GET 'https://lumeexchangerates.com/v1/exchange?from=USD&to=EUR&quantity=100'以下数值和日期仅用于说明结构,并非当前汇率。数组可能仅显示部分项目。请使用API测试工具查看实际数据。
{
"meta": {
"mode": "provider",
"source": "外部汇率数据供应商",
"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。请始终指定from和to。此旧版GET路径的目标货币默认为KRW。空值、负数、NaN、无穷大或结果溢出返回400。
| 参数 | 类型 | 说明 |
|---|---|---|
| data.rate | number | rates[to] / rates[from] |
| data.result | number | quantity × rate |
GET /api/rates/latest
最新公布汇率
参数: —
curl --request GET 'https://lumeexchangerates.com/api/rates/latest'以下数值和日期仅用于说明结构,并非当前汇率。数组可能仅显示部分项目。请使用API测试工具查看实际数据。
{
"meta": {
"provider": "外部汇率数据供应商",
"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
}
}
}| 参数 | 类型 | 说明 |
|---|---|---|
| data.base | string | USD |
| data.rates | object | 所有可用的美元基准汇率;以最新响应确认代码是否可用。 |
| meta.provider_timestamp | integer | UTC · UNIX seconds |
| meta.published_at | string | ISO 8601 · UTC |
| meta.fetched_at | string | 服务器获取数据的时间,与供应商公布时间不同。 |
| meta.expected_interval_seconds | integer | seconds |
| meta.stale | boolean | 数据年龄超过max(预期更新间隔×3, 900秒)时为true。 |
| meta.lag_seconds | integer | 距供应商公布的秒数。 |
| meta.persistent_storage | boolean | 是否已连接持久化采集服务。 |
| meta.kind | string | latest_published | utc_daily |
GET /api/currencies
货币
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| lang | string | 选填 | 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'以下数值和日期仅用于说明结构,并非当前汇率。数组可能仅显示部分项目。请使用API测试工具查看实际数据。
{
"meta": {
"provider": "外部汇率数据供应商",
"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本地化。未识别的资产保留代码。仅返回最新数据中存在的代码。
GET /api/rates/history
使用/v1/history查询指定日期汇率,使用/v1/series查询日期区间数据。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| from | string | 选填 | USD | 原始货币 |
| to | string | 选填 | EUR | 目标货币 |
| period | enum | 选填 | 1M | 1D | 1W | 1M | 3M | 1Y |
curl --request GET 'https://lumeexchangerates.com/api/rates/history?from=USD&to=EUR&period=1W'以下数值和日期仅用于说明结构,并非当前汇率。数组可能仅显示部分项目。请使用API测试工具查看实际数据。
{
"meta": {
"kind": "utc_daily",
"from": "USD",
"to": "EUR",
"period": "1W",
"provider": "外部汇率数据供应商",
"persistent_storage": false
},
"data": [
{
"time": "2026-01-01",
"value": 0.9
},
{
"time": "2026-01-02",
"value": 0.91
}
]
}1W从7天前开始;1M、3M、1Y按日历期间计算,均截止至昨天,排除未完成的UTC当天。修正月末和闰年边界,较长期间按日历月拆分,再按日期合并去重。
| 参数 | 类型 | 说明 |
|---|---|---|
| data[].time | string | integer | 每日:YYYY-MM-DD (UTC)。日内:UNIX秒。 |
| data[].value | number | rates[to] / rates[from] |
| meta.kind | string | utc_daily | intraday |
{
"meta": {
"kind": "intraday",
"persistent_storage": false
},
"data": []
}未连接采集服务时,1D返回HTTP 200和空数组。这既非错误,也非分钟级数据。历史期间尚不存在的货币可能查询失败。
GET /api/rates/previous
前一UTC日期
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| from | string | 选填 | USD | 原始货币 |
| to | string | 选填 | EUR | 目标货币 |
curl --request GET 'https://lumeexchangerates.com/api/rates/previous?from=USD&to=EUR'以下数值和日期仅用于说明结构,并非当前汇率。数组可能仅显示部分项目。请使用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
}
}
}比较使用前一UTC日的供应商日参考汇率。reference_timestamp是逻辑日末边界,并非实际公布时间。变动百分比为(当前值−参考值)/参考值×100。
POST /api/convert
货币换算
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| Content-Type | header | 必填 | application/json | application/json |
| amount | number | 必填 | — | 0 ≤ amount ≤ 1e15; finite |
| from | string | 必填 | — | 原始货币 |
| to | string | 必填 | — | 目标货币 |
curl --request POST 'https://lumeexchangerates.com/api/convert' \
--header 'Content-Type: application/json' \
--data '{"amount":100,"from":"USD","to":"EUR"}'以下数值和日期仅用于说明结构,并非当前汇率。数组可能仅显示部分项目。请使用API测试工具查看实际数据。
{
"meta": {
"provider": "外部汇率数据供应商",
"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
}
}amount必须是JSON数字。字符串"100"返回400。货币须存在于最新快照中。此接口仅计算数值,不执行转账或交易。
GET /v1/history
使用/v1/history查询指定日期汇率,使用/v1/series查询日期区间数据。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| date | YYYY-MM-DD | 必填 | — | 1999-01-01 ≤ date ≤ UTC today |
| anchor | string | 选填 | USD | 原始货币 |
| targets | CSV | 选填 | all | 目标货币 |
curl --request GET 'https://lumeexchangerates.com/v1/history?date=2026-01-01&anchor=EUR&targets=USD,JPY'以下数值和日期仅用于说明结构,并非当前汇率。数组可能仅显示部分项目。请使用API测试工具查看实际数据。
{
"meta": {
"date": "2026-01-01",
"published_at": "2026-01-01T23:00:00Z",
"partial_day": false
},
"anchor": "EUR",
"data": [
{
"currency": "USD",
"value": 1.1
}
]
}| 参数 | 类型 | 说明 |
|---|---|---|
| meta.partial_day | boolean | UTC每日参考汇率 |
| meta.published_at | ISO 8601 UTC | 最新公布汇率 |
GET /v1/series
使用/v1/history查询指定日期汇率,使用/v1/series查询日期区间数据。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| start / end | YYYY-MM-DD | 必填 | — | 1999-01-01 ≤ start ≤ end < UTC today; ≤ 366 days inclusive |
| anchor / targets | string / CSV | 选填 | 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'以下数值和日期仅用于说明结构,并非当前汇率。数组可能仅显示部分项目。请使用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
}
]
}
]
}/v1/candles的OHLC需要供应商权限。请通过/v1/capabilities确认功能,实际可用范围取决于所连接的套餐。
{
"timezone": "UTC",
"date_bounds": "inclusive",
"max_days": 366,
"upstream_chunk": "calendar_month"
}GET /v1/candles
/v1/candles的OHLC需要供应商权限。请通过/v1/capabilities确认功能,实际可用范围取决于所连接的套餐。
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| start | YYYY-MM-DDTHH:mm:00Z | 必填 | — | UTC; completed period only; ≥ 2016-12-19 |
| period | enum | 必填 | — | 1m | 5m | 15m | 30m | 1h | 12h | 1d | 1w | 1mo |
| anchor / targets | string / CSV | 选填 | 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'以下数值和日期仅用于说明结构,并非当前汇率。数组可能仅显示部分项目。请使用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
可用功能
参数: —
curl --request GET 'https://lumeexchangerates.com/v1/capabilities'以下数值和日期仅用于说明结构,并非当前汇率。数组可能仅显示部分项目。请使用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
}
}/v1/candles的OHLC需要供应商权限。请通过/v1/capabilities确认功能,实际可用范围取决于所连接的套餐。
数据与精度
汇率仅供参考,不是银行报价或保证成交价格。换算使用同一组汇率,并在显示或结算时四舍五入。
rate = rates[to] / rates[from]
result = amount * rate不会按固定小数位截断汇率,请在显示或会计计算的最后一步进行舍入。
所有汇率以1单位原始货币计算,包括JPY。需要100单位显示时仅在显示层乘以100。考虑JavaScript二进制浮点误差,并为结算制定明确的小数和舍入规则。
时间与日期
UNIX时间戳使用UTC秒,ISO时间戳使用Z。UTC每日日期可能不同于本地日期。网页使用浏览器时区。meta.timezone仅是显示提示,不改变timestamp含义。
| 参数 | 类型 | 说明 |
|---|---|---|
| /v1 meta.as_of | ISO 8601 | YYYY-MM-DD | 供应商基准时间 |
| /v1 meta.refresh_interval_seconds | integer | 缓存 |
| /v1 meta.currency_count | integer | 当前支持 … 种货币 |
| /v1 meta.mode | provider | daily | 数据来源 |
| /api meta.published_at | ISO 8601 UTC | 最新公布汇率 |
| history data[].time | YYYY-MM-DD UTC | UNIX seconds | UTC每日参考汇率 |
错误处理
| HTTP | code | 说明 |
|---|---|---|
| 400 | INVALID_CURRENCY / INVALID_INPUT / INVALID_CONVERSION / INVALID_JSON / INVALID_PERIOD | 请输入大于或等于 0 的金额 |
| 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 | 可用功能 |
| 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 | 可用功能 |
| 400 | INVALID_DATE / INVALID_DATE_RANGE / INVALID_PERIOD / INCOMPLETE_PERIOD | 请输入大于或等于 0 的金额 |
| 503 | PROVIDER_UNAVAILABLE / DATA_UNAVAILABLE / SERVICE_UNAVAILABLE | 无法获取汇率,请稍后重试。 |
{
"error": {
"code": "INVALID_CURRENCY",
"message": "Symbol not available in latest provider data"
}
}message可能省略。按HTTP状态和error.code处理。先纠正输入;对429或临时503使用有限次数的指数退避和随机抖动。不保证Retry-After响应头。
限制与缓存
最新汇率使用缓存,当前配置为5分钟更新。/api每IP每分钟90次,Worker直接模式仅限实例内,Redis模式可跨实例限制。/v1尚未执行未来套餐配额。
响应为Cache-Control: no-store。浏览器响应缓存与服务器供应商缓存不同。按公布时间复用快照。供应商故障时可能返回最近正常快照,请检查stale或as_of。Worker直接缓存并非持久化存储。
{
"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
}可用功能
/v1/candles的OHLC需要供应商权限。请通过/v1/capabilities确认功能,实际可用范围取决于所连接的套餐。
/v1/candles的OHLC需要供应商权限。请通过/v1/capabilities确认功能,实际可用范围取决于所连接的套餐。
API测试工具
直接调用本站 API。数据供应商密钥仅保存在服务器端。
执行请求以查看真实 JSON 响应。