LUME EXCHANGE RATES / API REFERENCE

Документация API

Настроенный источник — Внешний поставщик курсов валют. Ответы содержат источник и время публикации. Доступные валюты определяются фактическими данными.

Base URLhttps://lumeexchangerates.com

Обзор

Lume Exchange Rates объединяет сравнение, конвертацию и историю курсов для поездок, международных цен и продуктов.

Настроенный источник — Внешний поставщик курсов валют. Ответы содержат источник и время публикации. Доступные валюты определяются фактическими данными.

HTTPSJSONUTF-8GET / POSTUTC

Быстрый старт

Сначала получите список валют, затем выберите anchor и targets. Поля и коды одинаковы во всех языках.

cURL
curl --request GET 'https://lumeexchangerates.com/v1/quotes?anchor=USD&targets=EUR,JPY'
JavaScript · browser
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 URLURLhttps://lumeexchangerates.com
Content-Typeheaderapplication/json
Customer API key—Этот предварительный просмотр использует сеанс вошедшего в систему браузера. Индивидуальные API-ключи клиентам пока не выдаются.
Provider App IDserver secretOPEN_EXCHANGE_RATES_APP_ID
CORSsame-originЗаголовки разрешения межсайтового доступа не предоставляются.

Authorization: Token используется только сервером для Внешний поставщик курсов валют, не клиентами. Проверяйте HTTP и Content-Type: отказ в доступе может быть HTML или перенаправлением.

Эндпоинты

MethodPathОписание
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/candlesOHLC
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
curl --request GET 'https://lumeexchangerates.com/v1/currencies'

Значения и даты — примеры, не текущие курсы. Списки могут быть сокращены. Реальные данные доступны в проверке API.

JSON
{
  "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[].codestringКод в верхнем регистре; альтернативные активы могут иметь более трёх знаков или подчёркивания.
data[].namestringНазвание валюты от провайдера, иначе её код.

GET /v1/quotes

Базовая валюта; по умолчанию USD. Принимаются все текущие символы поставщика.

ПараметрТипОбязательноПо умолчаниюОписание
anchorstringНеобязательноUSDБазовая валюта; по умолчанию USD. Принимаются все текущие символы поставщика.
targetsstringНеобязательновсеЦелевые символы через запятую. Не указывайте параметр, чтобы получить все доступные символы.
cURL
curl --request GET 'https://lumeexchangerates.com/v1/quotes?anchor=USD&targets=EUR,JPY'

Значения и даты — примеры, не текущие курсы. Списки могут быть сокращены. Реальные данные доступны в проверке API.

JSON
{
  "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.

ПараметрТипОписание
anchorstringБазовая валюта; по умолчанию USD. Принимаются все текущие символы поставщика.
data[].currencystringВ
data[].valuenumberrates[currency] / rates[anchor]

GET /v1/exchange

Неотрицательная числовая сумма для конвертации.

ПараметрТипОбязательноПо умолчаниюОписание
fromstringНеобязательноUSDСимвол исходной валюты; по умолчанию USD.
tostringНеобязательноKRWСимвол целевой валюты; по умолчанию KRW.
quantitynumberНеобязательно1Неотрицательная числовая сумма для конвертации.
cURL
curl --request GET 'https://lumeexchangerates.com/v1/exchange?from=USD&to=EUR&quantity=100'

Значения и даты — примеры, не текущие курсы. Списки могут быть сокращены. Реальные данные доступны в проверке API.

JSON
{
  "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.ratenumberrates[to] / rates[from]
data.resultnumberquantity × rate

GET /api/rates/latest

Последний опубликованный курс

Параметр: —

cURL
curl --request GET 'https://lumeexchangerates.com/api/rates/latest'

Значения и даты — примеры, не текущие курсы. Списки могут быть сокращены. Реальные данные доступны в проверке API.

JSON
{
  "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.basestringUSD
data.ratesobjectДоступные курсы относительно USD; проверяйте коды по последнему ответу.
meta.provider_timestampintegerUTC · UNIX seconds
meta.published_atstringISO 8601 · UTC
meta.fetched_atstringВремя получения сервером, не публикации провайдера.
meta.expected_interval_secondsintegerseconds
meta.stalebooleantrue при возрасте более max(3 × ожидаемый интервал, 900 секунд).
meta.lag_secondsintegerСекунды с публикации провайдера.
meta.persistent_storagebooleanПодключена ли служба постоянного сбора.
meta.kindstringlatest_published | utc_daily

GET /api/currencies

Валюта

ПараметрТипОбязательноПо умолчаниюОписание
langstringНеобязательноenen / ko / ja / zh / es / hi / bn / de / fr / nl / pt / it / ru / vi / th / ar / id / ur
cURL
curl --request GET 'https://lumeexchangerates.com/api/currencies?lang=en'

Значения и даты — примеры, не текущие курсы. Списки могут быть сокращены. Реальные данные доступны в проверке API.

JSON
{
  "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.

ПараметрТипОбязательноПо умолчаниюОписание
fromstringНеобязательноUSDИз
tostringНеобязательноEURВ
periodenumНеобязательно1M1D | 1W | 1M | 3M | 1Y
cURL
curl --request GET 'https://lumeexchangerates.com/api/rates/history?from=USD&to=EUR&period=1W'

Значения и даты — примеры, не текущие курсы. Списки могут быть сокращены. Реальные данные доступны в проверке API.

JSON
{
  "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[].timestring | integerДневные: YYYY-MM-DD (UTC). Внутридневные: секунды UNIX.
data[].valuenumberrates[to] / rates[from]
meta.kindstringutc_daily | intraday
JSON
{
  "meta": {
    "kind": "intraday",
    "persistent_storage": false
  },
  "data": []
}

Без службы сбора 1D возвращает HTTP 200 и пустой список: это не ошибка и не минутные данные. Отсутствующие в прошлом валюты могут быть недоступны.

GET /api/rates/previous

Предыдущий день UTC

ПараметрТипОбязательноПо умолчаниюОписание
fromstringНеобязательноUSDИз
tostringНеобязательноEURВ
cURL
curl --request GET 'https://lumeexchangerates.com/api/rates/previous?from=USD&to=EUR'

Значения и даты — примеры, не текущие курсы. Списки могут быть сокращены. Реальные данные доступны в проверке API.

JSON
{
  "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-TypeheaderОбязательноapplication/jsonapplication/json
amountnumberОбязательно—0 ≤ amount ≤ 1e15; finite
fromstringОбязательно—Из
tostringОбязательно—В
cURL
curl --request POST 'https://lumeexchangerates.com/api/convert' \
  --header 'Content-Type: application/json' \
  --data '{"amount":100,"from":"USD","to":"EUR"}'

Значения и даты — примеры, не текущие курсы. Списки могут быть сокращены. Реальные данные доступны в проверке API.

JSON
{
  "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.

ПараметрТипОбязательноПо умолчаниюОписание
dateYYYY-MM-DDОбязательно—1999-01-01 ≤ date ≤ UTC today
anchorstringНеобязательноUSDИз
targetsCSVНеобязательноallВ
cURL
curl --request GET 'https://lumeexchangerates.com/v1/history?date=2026-01-01&anchor=EUR&targets=USD,JPY'

Значения и даты — примеры, не текущие курсы. Списки могут быть сокращены. Реальные данные доступны в проверке API.

JSON
{
  "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_daybooleanДневной курс UTC
meta.published_atISO 8601 UTCПоследний опубликованный курс

GET /v1/series

Курсы на дату доступны через /v1/history, за период — через /v1/series.

ПараметрТипОбязательноПо умолчаниюОписание
start / endYYYY-MM-DDОбязательно—1999-01-01 ≤ start ≤ end < UTC today; ≤ 366 days inclusive
anchor / targetsstring / CSVНеобязательноUSD / allsame as /v1/quotes
cURL
curl --request GET 'https://lumeexchangerates.com/v1/series?start=2026-01-01&end=2026-01-07&anchor=USD&targets=EUR'

Значения и даты — примеры, не текущие курсы. Списки могут быть сокращены. Реальные данные доступны в проверке API.

JSON
{
  "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; доступность зависит от подключённого тарифа.

JSON
{
  "timezone": "UTC",
  "date_bounds": "inclusive",
  "max_days": 366,
  "upstream_chunk": "calendar_month"
}

GET /v1/candles

Для OHLC через /v1/candles нужны права поставщика. Проверьте /v1/capabilities; доступность зависит от подключённого тарифа.

ПараметрТипОбязательноПо умолчаниюОписание
startYYYY-MM-DDTHH:mm:00ZОбязательно—UTC; completed period only; ≥ 2016-12-19
periodenumОбязательно—1m | 5m | 15m | 30m | 1h | 12h | 1d | 1w | 1mo
anchor / targetsstring / CSVНеобязательноUSD / allprovider base / symbols
cURL
curl --request GET 'https://lumeexchangerates.com/v1/candles?start=2026-01-01T00%3A00%3A00Z&period=1d&anchor=USD&targets=EUR'

Значения и даты — примеры, не текущие курсы. Списки могут быть сокращены. Реальные данные доступны в проверке API.

JSON
{
  "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
    }
  ]
}
JSON
{
  "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
curl --request GET 'https://lumeexchangerates.com/v1/capabilities'

Значения и даты — примеры, не текущие курсы. Списки могут быть сокращены. Реальные данные доступны в проверке API.

JSON
{
  "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; доступность зависит от подключённого тарифа.

Данные и точность

Справочные курсы не являются банковским предложением или гарантированной ценой. Конвертация использует общий снимок; округляйте при отображении или расчёте.

Formula
rate = rates[to] / rates[from]
result = amount * rate

Курсы сохраняют точность чисел с плавающей точкой без усечения до фиксированного числа знаков. Округляйте при отображении или по своей учётной политике.

Одна исходная единица, включая JPY. Умножайте на 100 только при отображении. Учитывайте двоичные ошибки JavaScript и задайте правила десятичных значений и округления для расчётов.

Дата и время

UNIX — секунды UTC, ISO использует Z. Дата UTC может отличаться от местной. Сайт использует часовой пояс браузера. meta.timezone — лишь подсказка отображения.

ПараметрТипОписание
/v1 meta.as_ofISO 8601 | YYYY-MM-DDВремя поставщика
/v1 meta.refresh_interval_secondsintegerКэш
/v1 meta.currency_countintegerДоступно валют: …
/v1 meta.modeprovider | dailyИсточник данных
/api meta.published_atISO 8601 UTCПоследний опубликованный курс
history data[].timeYYYY-MM-DD UTC | UNIX secondsДневной курс UTC

Ошибки

HTTPcodeОписание
400INVALID_CURRENCY / INVALID_INPUT / INVALID_CONVERSION / INVALID_JSON / INVALID_PERIODВведите неотрицательную сумму
405METHOD_NOT_ALLOWEDGET: /v1/*, /api/rates/*, /api/currencies; POST: /api/convert
404NOT_FOUND/api/rates/*
422HISTORY_NOT_IN_PLAN / DATA_UNAVAILABLEДоступность
429RATE_LIMITED/api/* · 90 / IP / minute
404NOT_FOUNDUnknown /v1 endpoint
422FEATURE_NOT_IN_PLAN / HISTORY_NOT_IN_PLAN / OHLC_NOT_IN_PLANДоступность
400INVALID_DATE / INVALID_DATE_RANGE / INVALID_PERIOD / INCOMPLETE_PERIODВведите неотрицательную сумму
503PROVIDER_UNAVAILABLE / DATA_UNAVAILABLE / SERVICE_UNAVAILABLEКурсы недоступны. Повторите попытку позже.
JSON
{
  "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 не постоянный.

JSON
{
  "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 на этом сайте. Ключ поставщика остаётся на сервере.

ЗАПРОС / cURL
ОТВЕТ / JSON
Выполните запрос, чтобы увидеть настоящий ответ JSON.
WELCOME TO LUME EXCHANGE RATES

Начните создавать с Lume Exchange Rates

Попробуйте реальные курсы без банковской карты. Бесплатный API сейчас доступен в режиме предварительного просмотра; покупка и списание не происходят.

Реальные курсы · Оплата не требуется

SUBSCRIPTION / USD

Проверьте подписку

Регулярная подписка в USD. Перед подтверждением проверьте налоги и итог в защищённом платёжном окне.

Применимые налоги отображаются при оплате. Продлением и отменой можно управлять в платёжном портале.

Paddle

ACCOUNT / BILLING

Ваша подписка