Статьи10 мин чтенияПросмотры: 0

API статистики каналов MAX: пошаговое руководство по API.Max

Как забрать статистику каналов MAX через API.Max: ключ, поиск каналов, статистика по 100 каналам за запрос, посты, вебхуки о новых постах, MCP, экономия запросов, ошибки и выбор тарифа — с примерами на Python.

Обложка: четыре шага работы с API.Max — ключ API, первый запрос /v1/me/, статистика каналов, вебхуки и MCP, надпись «API.Max: данные MAX в ваших системах» на малиновом фоне

API.Max — это программный доступ к данным datool.ru о каналах мессенджера MAX: каталогу и карточкам каналов, статистике по дням и постам. Через API статистику каналов MAX можно забрать в свою таблицу, BI-систему, CRM, бота или ИИ-ассистента — без ручных выгрузок и копирования с сайта. Ответы приходят в JSON, ключ один на сотрудника, а начать можно бесплатно.

В этой статье — путь от пустого ключа до рабочей интеграции: как получить ключ, найти канал, забрать статистику сразу по сотне каналов, выгрузить посты, получать новые посты сами собой через вебхуки и не потратить лишние запросы. Все примеры — на Python с библиотекой requests; полный справочник методов с примерами на curl — на docs.datool.ru/api/.

Что можно получить через API.Max

  • Каталог каналов — поиск по названию, рубрикам, территории, числу подписчиков, метке A+, подтверждению владельцем, госканалам, давности последнего поста и индексу качества. Те же фильтры, что в каталоге max.datool.ru/channels/.
  • Карточку канала — название, описание, имя и ссылку, подписчиков, рубрики, территорию, теги, индекс качества и индекс цитируемости, метку A+ и синий знак подтверждения.
  • Статистику по дням — подписчики на конец дня, число постов, просмотры и реакции постов этого дня, рекламные посты. До 100 каналов за один запрос.
  • Посты — текст, просмотры, реакции по эмодзи, признак рекламы, источник репоста и вложения. Страницами до 100 постов.
  • Новые посты по событию — вебхук сам присылает их на ваш сервер.
  • Справочники рубрик и территорий — бесплатно.

Чего в API нет и не будет: личных переписок, сообщений групповых чатов и комментариев — мы их не собираем. У закрытых каналов через API доступна только карточка.

Шаг 1. Получите ключ

Зарегистрируйтесь на hi.datool.ru, откройте «API-ключи» и нажмите «Создать ключ». Полный ключ вида dtk_… показывается один раз — сохраните его в настройках программы или в менеджере паролей.

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

При создании ключа можно поставить отметку «Чтение и запись». Она нужна только для управления вебхуками; для чтения данных хватит обычного ключа. Отметку потом не изменить, поэтому для вебхуков удобно завести отдельный ключ.

Важно

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

Шаг 2. Первый запрос — «Кто я»

Ключ передаётся в заголовке Authorization: Bearer dtk_… (или X-API-Key). Первым удобно вызвать /v1/me/: он бесплатный и показывает тариф, лимит и остаток запросов.

import requests

API = "https://api.datool.ru/v1"
# ключ из кабинета — храните его в настройках, не в коде
HEADERS = {"Authorization": "Bearer dtk_ваш_ключ"}

me = requests.get(f"{API}/me/", headers=HEADERS, timeout=30).json()
# тариф API, сколько запросов осталось и когда лимит обновится
print(me["api_tariff"], me["remaining_period"], me["period_end"])

Если ответ пришёл — ключ работает. Ошибка 401 означает, что ключа нет, он неверный или отозван.

Шаг 3. Найдите каналы

Все остальные методы работают с номером канала в datool.ru — полем id. Получить его можно двумя способами.

Один канал по ссылке. Метод resolve понимает ссылку max.ru/…, @имя и ID чата MAX:

channel = requests.get(
    f"{API}/max/channels/resolve/",
    params={"q": "https://max.ru/citynews"},
    headers=HEADERS,
    timeout=30,
).json()
print(channel["id"], channel["title"], channel["subscribers"])

Подборку каналов по фильтрам. Например, новостные каналы Москвы от 10 тысяч подписчиков, которые писали на этой неделе, — по убыванию индекса качества:

catalog = requests.get(
    f"{API}/max/channels/",
    params={
        "category": "news",          # код рубрики из справочника /max/categories/
        "territory": "ru-mow",       # код территории из /max/territories/
        "subscribers_min": 10000,
        "posted_within_days": 7,
        "ordering": "-quality",
        "limit": 100,
    },
    headers=HEADERS,
    timeout=30,
).json()
ids = [card["id"] for card in catalog["results"]]

Коды рубрик и территорий берите из бесплатных справочников /v1/max/categories/ и /v1/max/territories/. Территория включает своих потомков: по коду федерального округа найдутся каналы всех его регионов.

Шаг 4. Статистика по дням — до 100 каналов за запрос

Метод /v1/max/stats/daily/ отдаёт строки «канал × день»: подписчиков на конец дня, число постов, просмотры и реакции постов этого дня и число рекламных постов. За один запрос — до 100 каналов и до 366 дней, всего не больше 10 000 строк. Стоит такой запрос столько же, сколько запрос по одному каналу, — 1 единицу.

stats = requests.get(
    f"{API}/max/stats/daily/",
    params={
        "channels": ",".join(map(str, ids)),  # до 100 номеров через запятую
        "from": "2026-10-01",
        "to": "2026-10-25",
    },
    headers=HEADERS,
    timeout=30,
).json()

for row in stats["results"]:
    print(row["channel"], row["day"], row["subscribers"], row["views"], row["ad_posts"])
# номера, которых нет или которые вам не видны
print(stats["not_found"])

Дни считаются по московскому времени. Если в какой-то день канал не опрашивали, subscribers придёт как null — это «нет данных», а не ноль, и строить по такому дню падение аудитории не нужно. На бесплатном тарифе «API.Max Тест» доступны последние 30 дней, вся история — с тарифа «Старт».

Шаг 5. Посты канала

Посты отдаются страницами, новые сверху. Берите ссылку на следующую страницу из поля next целиком: курсор в ней помнит фильтры и не даёт повторов, даже если пока вы листаете, в канале выходят новые посты.

url = f"{API}/max/channels/@citynews/posts/"
params = {"from": "2026-10-01", "limit": 100}
posts = []
while url:
    page = requests.get(url, params=params, headers=HEADERS, timeout=30).json()
    posts += page["results"]
    url, params = page["next"], None  # в next уже есть все параметры
print(len(posts), "постов")

У каждого поста — текст, время публикации, просмотры, реакции по эмодзи ({"👍": 180, "🔥": 56}), признак рекламы is_ad, источник репоста и вложения. Фильтр is_ad=true вернёт только рекламные посты — удобно для анализа рекламодателей. Посты открыты с тарифа «API.Max Старт».

Шаг 6. Новые посты без опроса — вебхуки

Опрашивать ленту каждые пять минут — дорого и медленно. Вебхук сам присылает POST-запрос на ваш сервер о каждом новом посте выбранных каналов — обычно через 1–2 минуты после того, как мы его прочитали. Вебхуки открыты с тарифа «API.Max Рост» (1 вебхук до 500 каналов), на «Профи» — 5 вебхуков до 5 000 каналов каждый. Управление вебхуками запросов не тратит.

Создаёт вебхук ключ с отметкой «Чтение и запись» владельца или администратора организации:

hook = requests.post(
    f"{API}/max/webhooks/",
    json={"url": "https://example.com/hooks/datool", "channels": ids[:500]},
    headers=HEADERS,
    timeout=30,
).json()
# секрет подписи показывается один раз — сохраните его
print(hook["id"], hook["secret"])

Три правила надёжного приёмника:

  • Проверяйте подпись. Каждое событие подписано: заголовок X-Datool-Signature содержит время и HMAC-SHA256. Сверяйте подпись до разбора JSON и отклоняйте события старше 5 минут. Готовая функция проверки и приёмник на Flask — в статье «Вебхуки».
  • Отвечайте быстро. Код 2xx за 10 секунд, тяжёлую обработку — после ответа. Иначе мы повторим доставку: через 1, 5, 15 минут, 1, 3, 6 и 12 часов.
  • Будьте готовы к повторам. Одно событие может прийти дважды — сверяйте посты по id.

Если за сутки не прошло ни одной доставки, вебхук выключается, а владельцам и администраторам приходит письмо. Почините сервер и включите вебхук кнопкой на странице «API-ключи» или запросом PATCH с {"is_active": true}.

Данные MAX в ИИ-ассистенте: MCP

Если код писать не хочется, подключите к ассистенту MCP-сервер https://api.datool.ru/v1/mcp/ с тем же ключом. Claude, Cursor и другие клиенты MCP сами найдут канал, посмотрят статистику и посты и ответят на вопрос вроде «как рос канал @citynews в октябре». Каждый вызов инструмента стоит столько же, сколько метод API. Настройка для разных клиентов — в статье «MCP для ИИ-ассистентов» и на странице hi.datool.ru/mcp/.

Как не тратить лишние запросы

Запрос стоит 1 единицу независимо от того, сколько строк он вернул. Отсюда простые правила:

  • Собирайте пачками. Статистика по 100 каналам — 1 запрос, а не 100. Карточки списка каналов — каталогом с ids (до 100 номеров), а не по одной.
  • Берите страницы по 100. У каталога и постов поставьте limit=100: страниц вдвое меньше, чем по умолчанию.
  • Не опрашивайте ленту — подключите вебхук. Новые посты придут сами, и запросы на проверку ленты не понадобятся.
  • Кешируйте справочники и номера каналов. Номер канала в datool.ru не меняется — найдите его один раз через resolve и сохраните.
  • Следите за заголовками. X-Quota-Remaining — остаток за период, X-Quota-Reset — когда начнётся новый, X-RateLimit-Remaining — остаток в эту секунду.

Не тратят лимит запросы без ключа или с неверным ключом, отклонённые по лимиту (429) и не выполненные по нашей вине (500, 503).

Ошибки: как писать надёжный клиент

Ошибка приходит в виде {"detail": "текст", "code": "код"}. Решения в программе принимайте по code, а текст показывайте человеку — по заголовку Accept-Language: en он придёт по-английски.

  • 429 — rate_limited (слишком часто) или quota_exceeded (запросы за период закончились). Подождите столько секунд, сколько указано в заголовке Retry-After.
  • 503 — timeout (выборка слишком большая: сузьте период или число каналов) или unavailable (база временно недоступна: повторите через несколько минут). Такие запросы лимит не тратят.
  • 403 — tariff_required (метод или период закрыт тарифом), closed_channel (посты закрытого канала не отдаются), read_only_key (ключ без права записи).
  • 404 — канала или поста нет, или ваш ключ его не видит.

Полный список кодов — в статье «Ошибки».

Какой тариф выбрать

  • API.Max Тест — бесплатно. 1 000 запросов за 30 дней, 1 запрос в секунду, карточки и статистика за последние 30 дней. Чтобы попробовать и проверить идею.
  • API.Max Старт — 2 990 ₽ в месяц. 100 000 запросов, 5 в секунду, 2 ключа, вся история статистики и посты. Для своих сервисов, ботов и регулярных отчётов.
  • API.Max Рост — 9 990 ₽ в месяц. 300 000 запросов, 10 в секунду, 5 ключей и вебхуки. Для продуктов с аналитикой, которым нужны новые посты сразу.
  • API.Max Профи — 29 990 ₽ в месяц. 1,5 млн запросов, 20 в секунду, 20 ключей и право показывать данные своим клиентам. Для агентств и платформ.
  • API.Max Корпоративный — по договору. От 5 млн запросов и выгрузка базы.

В подписку «Бизнес» уже входит 10 000 запросов в месяц. Месяц лимита — 30 дней с момента оплаты; если лимит кончился раньше, можно докупить пакет 100 000 запросов за 990 ₽. Все тарифы — на странице max.datool.ru/api/.

Частые вопросы

Можно ли получить через API статистику любого канала MAX?

Любого открытого канала, который есть в каталоге datool.ru: карточку, статистику по дням и посты. У закрытого канала через API доступна только карточка. Если нужного канала в каталоге нет, его можно добавить на max.datool.ru/channels/add/.

Как часто обновляются данные в API?

Так же, как на сайте: API отдаёт те же данные, что видны на страницах каналов. Как часто опрашиваются каналы разного размера, описано в статье документации «Откуда данные и как часто обновляются».

Сколько стоит выгрузить всю историю постов канала?

По одному запросу на каждые 100 постов. Канал с 5 000 постов — 50 запросов. На тарифе «Старт» с лимитом 100 000 запросов это капля в месяц.

Можно ли показывать данные API своим клиентам?

Да, с тарифа «API.Max Профи» — в него входит право показывать данные клиентам. На остальных тарифах данные — для собственной работы.

Есть ли готовая библиотека для API?

Отдельной библиотеки нет, но есть схема OpenAPI: https://api.datool.ru/v1/schema/. Из неё генератор соберёт клиент на любом языке, а Postman импортирует все методы. Попробовать запросы без кода можно в Swagger — ссылка на странице справочника методов.

API.Max открыт: создайте бесплатный ключ в кабинете и начните со статьи «Быстрый старт» — первый запрос займёт пару минут.

Евгений Химич
Поделиться

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти