Сервис мониторинга курсов валют
Мониторинг · аналитика · справочники · информация
Live · обновление через 09:12
Telegram
Для разработчиков

API курсов валют туроператоров

Внутренние курсы валют российских туроператоров, рейтинги по Яндекс ИКС и курсы валют стран, популярных у российских туристов, — одним JSON-запросом, без парсинга чужих сайтов. Данные по всем крупным туроператорам России сверяются с курсом ЦБ РФ и обновляются ежедневно, включая курсы на завтра.

  • Турагентствам считать стоимость тура по курсу оператора внутри своей CRM
  • Агрегаторам и медиа публиковать курсы у себя, не чиня парсер каждый месяц
  • Туроператорам видеть, по какому курсу работают конкуренты

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

Один запрос, никаких SDK и библиотек.

Запросcurl -H "X-TM-Key: ВАШ_КЛЮЧ" \
  "https://tourmometer.ru/api/v1/rates.php"
Ответ{
  "ok": true,
  "data": {
    "rate_date": "2026-09-26",
    "base": { "cbr": { "usd": 84.9057, "eur": 96.8859 } },
    "operators": [
      {
        "id": 1,
        "alias": "BGO",
        "title": "Библио-Глобус",
        "usd": { "rate": 90.85, "base": 84.9057, "markup_percent": 7 },
        "eur": { "rate": 103.67, "base": 96.8859, "markup_percent": 7 }
      }
    ]
  },
  "meta": { "count": 24, "plan": "base", "max_date": "2026-09-26", "version": "v1" }
}
1

Заявка

Заполните форму внизу страницы. Демо-доступ открываем без оплаты — на нём удобно написать и отладить интеграцию.

2

Ключ

Приходит письмом в течение рабочего дня. Состоит из открытого идентификатора и секрета; секрет у нас не хранится, только его хеш.

3

Запрос

Ключ передаётся заголовком X-TM-Key. Подойдёт любой HTTP-клиент — curl, Guzzle, requests, fetch на сервере.

Что отдаёт API

Курсы туроператоров

Курс доллара и евро у каждого оператора на сегодня и на завтра, вместе с базовым курсом ЦБ и процентом наценки, из которого он посчитан. Все крупные туроператоры России, ежедневное обновление.

Рейтинг по Яндекс ИКС

Индекс качества сайта каждого оператора, дата последнего замера и направление изменения. На тарифе «Про» — вся история значений.

Курсы валют популярных у туристов стран

Национальная валюта популярных направлений к евро, доллару и рублю. Валюты, которые ЦБ не котирует, считаются кросс-курсом.

Тарифы

Что входит Демо0 ₽ Базовый3 900 ₽/мес Про8 900 ₽/мес
Курсы туроператоров вчерашние сегодня и завтра сегодня и завтра
Рейтинги по Яндекс ИКС — — есть
Курсы валют стран, популярных у российских туристов — — есть
Архив и история значений — — есть
Вебхуки — — есть
Лимит запросов 50 в сутки 5 000 в месяц 200 000 в месяц
Привязка ключа к IP по желанию по желанию по желанию

При оплате за год — два месяца бесплатно. Вы платите за 10 месяцев и пользуетесь 12. Действует на любом платном тарифе.

Демо-тариф бесплатный и бессрочный: он отдаёт те же данные, в том же формате и через те же эндпоинты, но с задержкой на сутки. Переход на платный тариф не требует менять код и не меняет ключ — меняется только то, какие данные он видит.

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

Базовый адрес и версии

Все эндпоинты начинаются с https://tourmometer.ru/api/v1/. Номер версии в адресе означает, что формат ответа внутри неё не меняется: мы можем добавлять новые поля, но не переименовываем и не убираем существующие. Если когда-нибудь понадобится несовместимое изменение, выйдет /api/v2/, а первая версия продолжит работать — о сроке её отключения мы предупредим не менее чем за шесть месяцев.

Авторизация

Ключ передаётся заголовком X-TM-Key в виде идентификатор.секрет:

X-TM-Key: AbCdEfGhIjKlMnOp.a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6

Поддерживается и форма Authorization: Bearer идентификатор.секрет, если вашему клиенту так удобнее.

Запрашивайте только с сервера. Не обращайтесь к API из браузерного JavaScript: ключ окажется в исходном коде страницы, и его увидит любой посетитель. Запрос делает ваш сервер, а страница получает данные уже от него. По этой же причине API не отдаёт заголовки CORS — из браузера запрос и не пройдёт.

Эндпоинты

АдресЧто возвращаетПараметры
GET /api/v1/rates.php Курсы валют туроператоров date — дата в формате ГГГГ-ММ-ДД, работает только с доступом к архиву;
operator — коды операторов через запятую
GET /api/v1/ratings.php Рейтинги туроператоров по Яндекс ИКС operator — коды через запятую;
history=1 — добавить историю значений
GET /api/v1/countries.php Курсы валют стран, популярных у российских туристов country — коды стран через запятую;
popular=1 — только популярные направления

Поддерживается только метод GET. Неизвестные параметры игнорируются, поэтому к адресу можно безопасно добавлять своё — например метку времени для обхода прокси-кеша.

Что означают поля курсов

  • rate — итоговый курс оператора, по которому он считает тур;
  • base — курс ЦБ РФ, от которого оператор считал;
  • markup_percent — наценка в процентах к курсу ЦБ;
  • actual — фактический курс с сайта оператора, если мы его проверяли; поле появляется не всегда;
  • rate_date — дата, к которой относятся курсы, а не дата запроса.

Числа приходят числами, а не строками: курсы округлены до четырёх знаков, наценки — до трёх. Если запрошенная дата выпала на выходной или праздник, вернутся ближайшие опубликованные курсы, и rate_date честно покажет их дату. Пустого ответа в этом случае не будет.

Коды операторов и стран

Коды нужны для параметров operator и country. Отдельный справочник вести не нужно: актуальный список всегда приходит в самих ответах, поэтому он не может разойтись с данными. Запросите эндпоинт без фильтра — код каждого элемента лежит в поле alias.

Коды туроператоровcurl -H "X-TM-Key: ВАШ_КЛЮЧ" \
  "https://tourmometer.ru/api/v1/rates.php" \
  | jq -r '.data.operators[] | "\(.alias)  \(.title)"'

BGO  Библио-Глобус
PGS  PEGAS Touristik
ANX  Anex Tour
COR  Coral Travel
...
Коды странcurl -H "X-TM-Key: ВАШ_КЛЮЧ" \
  "https://tourmometer.ru/api/v1/countries.php" \
  | jq -r '.data.countries[] | "\(.alias)  \(.title)"'

turkey    Турция
egypt     Египет
uae       ОАЭ
thailand  Таиланд
...

Дальше коды подставляются в фильтр: ?operator=BGO,PGS,ANX или ?country=turkey,egypt,uae. Если ни один из указанных кодов не совпал, придёт ответ 404 с кодом NO_DATA.

Курсы стран отдаются в двух видах сразу: rates.rub — сколько рублей стоит одна единица национальной валюты, rates.per_eur и rates.per_usd — сколько единиц дают за один евро или доллар, rates.per_rub — сколько за 100 рублей. Поле currency.nominal показывает, какой номинал принято указывать для этой валюты.

Как часто запрашивать

Курсы меняются раз в сутки, опрашивать чаще смысла нет. Разумная схема: один запрос утром и один после 17:10 по Москве, когда появляются курсы на завтра. Кешируйте ответ у себя — так вы не упираетесь в лимит и не зависите от нашей доступности в момент, когда ваш клиент оформляет заявку.

Если данные нужны в реальном времени — например, вы показываете их на высоконагруженной странице, — запрашивайте раз в час по расписанию, а страницу стройте из своего кеша. Курс, полученный час назад, ничем не отличается от полученного секунду назад.

Лимиты

Остаток квоты приходит в заголовках каждого ответа:

X-RateLimit-Month: 5000
X-RateLimit-Month-Remaining: 4987

Сутки и месяц считаются по московскому времени: суточный лимит обнуляется в полночь МСК, месячный — в полночь первого числа. Ошибочные запросы в лимит не засчитываются — опечатка в параметре не съедает квоту. При исчерпании лимита приходит код 429; повторять запрос до следующего периода бесполезно, лучше взять данные из своего кеша.

Ошибки

Любая ошибка приходит в одном формате, с машиночитаемым кодом:

{
  "ok": false,
  "error": {
    "code": "RATE_LIMIT_MONTH",
    "message": "Исчерпан месячный лимит запросов"
  }
}
HTTPКодЧто произошло и что делать
401KEY_MISSINGЗаголовок с ключом не передан
401KEY_INVALIDКлюч не найден или секрет неверен — проверьте, что передаёте его целиком, вместе с точкой
402SUBSCRIPTION_EXPIREDСрок доступа истёк, нужна оплата следующего периода
403CLIENT_INACTIVEДоступ приостановлен — напишите нам
403IP_DENIEDЗапрос пришёл с адреса вне списка разрешённых; сообщите новый адрес, и мы его добавим
403SCOPE_DENIEDЭтот раздел данных не входит в ваш тариф
403PLAN_DELAYНа демо-тарифе актуальные данные недоступны
404NO_DATAНа запрошенную дату данных нет
405METHOD_NOT_ALLOWEDПоддерживается только GET
429RATE_LIMIT_DAYИсчерпан суточный лимит
429RATE_LIMIT_MONTHИсчерпан месячный лимит
503DB_UNAVAILABLEВременная недоступность — повторите через минуту

Примеры кода

PHP$ch = curl_init('https://tourmometer.ru/api/v1/rates.php');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['X-TM-Key: ' . getenv('TM_API_KEY')],
    CURLOPT_TIMEOUT        => 10,
]);

$raw  = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
curl_close($ch);

$data = json_decode($raw, true);

if ($code !== 200 || empty($data['ok'])) {
    // берём последние сохранённые курсы из своего кеша
    throw new RuntimeException($data['error']['code'] ?? 'HTTP ' . $code);
}

foreach ($data['data']['operators'] as $op) {
    echo $op['alias'], ' USD ', $op['usd']['rate'], PHP_EOL;
}
Pythonimport os
import requests

r = requests.get(
    "https://tourmometer.ru/api/v1/rates.php",
    headers={"X-TM-Key": os.environ["TM_API_KEY"]},
    timeout=10,
)

data = r.json()

if r.status_code != 200 or not data.get("ok"):
    raise RuntimeError(data.get("error", {}).get("code", r.status_code))

for op in data["data"]["operators"]:
    print(op["alias"], "USD", op["usd"]["rate"])

Когда обновляются данные

ЦБ РФ публикует курсы на следующий рабочий день после 17:00 по Москве. Курсы туроператоров появляются в API в течение нескольких минут после этого. Все даты в ответах — московские.

В выходные и праздники новых значений не выходит: пятничная публикация действует на субботу, воскресенье и понедельник. Поэтому в понедельник утром rate_date покажет пятницу — это не ошибка, а то, как работает сам ЦБ.

Безопасность доступа

Ключ можно привязать к одному или нескольким IP-адресам — тогда даже утекший ключ бесполезен с чужого сервера. Это самая действенная мера, и мы рекомендуем её всем, у кого фиксированный адрес сервера. Сообщите адреса при подключении или напишите позже, если они изменятся.

Секрет ключа у нас не хранится — только его необратимый хеш. Потерянный ключ восстановить нельзя, можно только перевыпустить: старый при этом перестаёт работать. Держите секрет в переменных окружения, а не в коде репозитория.

Все обращения логируются: по журналу видно, с какого адреса и когда забирались данные. Если вы подозреваете утечку — напишите нам, мы перевыпустим ключ и покажем, откуда шли запросы.

Оплата

После заявки мы выставляем счёт на оплату по вашим реквизитам. Доступ открывается в течение рабочего дня с момента поступления денег. Оплата авансовая, за выбранный период. Компания работает на упрощённой системе налогообложения, поэтому НДС не начисляется и счета-фактуры не выставляются.

За неделю до окончания оплаченного периода мы напоминаем о продлении. Если оплата не поступит, доступ приостанавливается — ключ при этом сохраняется, и после оплаты всё продолжает работать без изменений в вашем коде.

Условия использования

Данные предоставляются для использования внутри вашего продукта. Передача, перепродажа или публикация массива данных третьим лицам без отдельного письменного соглашения не допускается. База данных Турмометра охраняется как объект смежных прав изготовителя базы данных (ст. 1333–1334 ГК РФ), и извлечение существенной её части является нарушением.

При публикации отдельных значений на своём сайте укажите источник — ссылку на tourmometer.ru. Полные условия — в публичной оферте.

Заявка на подключение

Отвечаем в тот же рабочий день. Демо-доступ открываем без оплаты.

Не хотите заполнять форму — напишите напрямую: Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.

FAQ

Часто задаваемые вопросы

Чем ваши курсы отличаются от курса ЦБ?

Туроператор не продаёт тур по курсу ЦБ. Он берёт курс ЦБ как основу и добавляет свою наценку — у разных операторов она разная и меняется со временем. API отдаёт и итоговый курс оператора, и базовый курс ЦБ, и размер наценки между ними.

Откуда берутся данные и насколько они точны?

Из открытых источников туроператоров и с их сайтов, ежедневно. Мы сверяем значения и следим за изменениями наценок, но не гарантируем полного совпадения с курсом, который оператор применит в момент конкретного бронирования. Данные информационные, а не финансовая рекомендация.

Можно ли обращаться к API прямо из браузера?

Нет. Ключ попадёт в исходный код страницы, и его увидит любой посетитель. Запрос должен делать ваш сервер, а страница получает данные уже от него. Заголовки CORS API не отдаёт, поэтому из браузера запрос и не пройдёт.

Что будет, если я превышу лимит запросов?

Придёт код 429 и сообщение об исчерпании лимита. Доступ не блокируется — квота обнулится в начале следующих суток или месяца по московскому времени.

Как перейти с демо на платный тариф?

Отправьте заявку на нужный тариф с той же почты. Ключ сохранится — менять что-либо в коде не придётся, изменится только состав данных, которые он видит. Доступ расширяется после оплаты счёта.

У меня меняется IP-адрес сервера. Что делать?

Привязку к адресу можно не включать вовсе или указать диапазон в виде префикса, например 203.0.113.*. Если адрес сменился — напишите, поправим в тот же рабочий день.

Что с данными, если я перестану платить?

Доступ приостанавливается, но карточка и ключ сохраняются. После оплаты всё продолжает работать без изменений в вашем коде. Данные, которые вы уже получили и сохранили у себя, остаются у вас — но публиковать и передавать их дальше по-прежнему нельзя.

Нужен формат данных, которого нет в API. Сделаете?

Напишите, что именно нужно. Если задача общая — добавим в API для всех, если специфичная — обсудим отдельно. Данных у нас больше, чем отдают текущие эндпоинты: есть архив, история наценок и биржевые курсы.