Обзор
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);Пример браузера использует тот же источник. Для частного сайта нужны права доступа; URL не обходит вход.
Доступ и аутентификация
Доступ зависит от настроек сайта и сеанса браузера. Клиентские ключи, Bearer-аутентификация клиентов и публичный cross-origin 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 используется только сервером для Внешний поставщик курсов валют, не клиентами. Проверяйте HTTP и Content-Type: отказ в доступе может быть HTML или перенаправлением.
Эндпоинты
| Method | Path | Описание |
|---|---|---|
| GET | /v1/currencies | Все символы с текущими курсами и названиями поставщика. Включены доступные альтернативные валюты и металлы. |
| GET | /v1/quotes | Базовая валюта; по умолчанию USD. Принимаются все текущие символы поставщика. |
| GET | /v1/exchange | Неотрицательная числовая сумма для конвертации. |
| 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 — курсы, история и конвертация сайта. Значения по умолчанию и ответы различаются.
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 | Код в верхнем регистре; альтернативные активы могут иметь более трёх знаков или подчёркивания. |
| 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 возвращает целевые единицы за единицу базы. Дубликаты удаляются; пустые, строчные или недоступные коды дают 400.
| Параметр | Тип | Описание |
|---|---|---|
| anchor | string | Базовая валюта; по умолчанию USD. Принимаются все текущие символы поставщика. |
| data[].currency | string | В |
| data[].value | number | rates[currency] / rates[anchor] |
GET /v1/exchange
Неотрицательная числовая сумма для конвертации.
| Параметр | Тип | Обязательно | По умолчанию | Описание |
|---|---|---|---|---|
| from | string | Необязательно | USD | Символ исходной валюты; по умолчанию USD. |
| to | string | Необязательно | KRW | Символ целевой валюты; по умолчанию KRW. |
| quantity | number | Необязательно | 1 | Неотрицательная числовая сумма для конвертации. |
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 | Доступные курсы относительно USD; проверяйте коды по последнему ответу. |
| 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 | true при возрасте более max(3 × ожидаемый интервал, 900 секунд). |
| 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 начинается семь дней назад; 1M, 3M и 1Y — календарные периоды. Дневные данные заканчиваются вчера. Границы месяцев и високосные годы корректируются. Длинные периоды разбиваются по месяцам, сортируются и объединяются без повторов.
| Параметр | Тип | Описание |
|---|---|---|
| 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
}
]
}
]
}Для OHLC через /v1/candles нужны права поставщика. Проверьте /v1/capabilities; доступность зависит от подключённого тарифа.
{
"timezone": "UTC",
"date_bounds": "inclusive",
"max_days": 366,
"upstream_chunk": "calendar_month"
}GET /v1/candles
Для OHLC через /v1/candles нужны права поставщика. Проверьте /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
}
}Для OHLC через /v1/candles нужны права поставщика. Проверьте /v1/capabilities; доступность зависит от подключённого тарифа.
Данные и точность
Справочные курсы не являются банковским предложением или гарантированной ценой. Конвертация использует общий снимок; округляйте при отображении или расчёте.
rate = rates[to] / rates[from]
result = amount * rateКурсы сохраняют точность чисел с плавающей точкой без усечения до фиксированного числа знаков. Округляйте при отображении или по своей учётной политике.
Одна исходная единица, включая JPY. Умножайте на 100 только при отображении. Учитывайте двоичные ошибки JavaScript и задайте правила десятичных значений и округления для расчётов.
Дата и время
UNIX — секунды UTC, ISO использует Z. Дата UTC может отличаться от местной. Сайт использует часовой пояс браузера. meta.timezone — лишь подсказка отображения.
| Параметр | Тип | Описание |
|---|---|---|
| /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 | Введите неотрицательную сумму |
| 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 | Введите неотрицательную сумму |
| 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 не гарантируется.
Ограничения и кеш
Данные кешируются; настроенный интервал — пять минут. /api: 90 запросов в минуту на IP, локально в 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
}Доступность
Для OHLC через /v1/candles нужны права поставщика. Проверьте /v1/capabilities; доступность зависит от подключённого тарифа.
Для OHLC через /v1/candles нужны права поставщика. Проверьте /v1/capabilities; доступность зависит от подключённого тарифа.
Проверка API
Вызовите API на этом сайте. Ключ поставщика остаётся на сервере.
Выполните запрос, чтобы увидеть настоящий ответ JSON.