Монетизируйте свой MAX-бот

GRAM показывает рекламу вашим пользователям и платит вам 70% от каждого показа. Подключение по API за 5 минут. Токен вашего бота передавать не нужно.

Ваша доля — 70% Токен бота остаётся у вас Статистика в реальном времени Частотные лимиты — без спама

Как это работает

Режим self-serve: ваш бот сам решает, когда показать рекламу, и сам отправляет её своим токеном. Сеть только подбирает объявление и считает деньги. Три шага на каждый показ:

1

Спросить рекламу

POST /pub/v1/ad/next с user_id — сеть подберёт подходящую кампанию и забронирует показ. Деньги ещё не движутся.

2

Отправить своим ботом

Полученное объявление (текст + кнопки) ваш бот отправляет пользователю обычным сообщением — своим токеном.

3

Подтвердить показ

POST /pub/v1/ad/confirm с imp_token — показ засчитан, ваши 70% начислены на кошелёк площадки.

Когда показывать

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

База: https://hubsmaxbot.ru · Авторизация: заголовок Authorization: Bearer <api_key>. Ключ выдаётся при подключении — напишите нам в бота GRAM.

POST/pub/v1/ad/next

Подобрать объявление для пользователя и забронировать показ (тарификации ещё нет).

// запрос
{ "user_id": 123456789 }

// ответ — реклама есть
{
  "ad": {
    "text":    "Забирай бесплатные робуксы!",          // плоский текст
    "html":    "Забирай <b>бесплатные</b> робуксы!",   // с форматированием
    "format":  "html",                                  // "html" | "plain"
    "buttons": [ { "text": "Перейти", "url": "https://max.ru/..." } ]
  },
  "imp_token":  "одноразовый токен показа",
  "expires_in": 600                                    // секунд на подтверждение
}

// ответ — рекламы нет (штатно, не ошибка)
{ "ad": null, "reason": "no_ad" }
  • buttons — до 10 кнопок; рендерите каждую отдельным рядом inline-клавиатуры.
  • format == "html" → отправляйте поле html с format="html"; иначе поле text без формата.
  • reason: no_ad (нет кампаний), user_frequency (человеку рано показывать), platform_paused, platform_daily_cap.

POST/pub/v1/ad/confirm

Подтвердить, что объявление отправлено пользователю. Именно этот вызов засчитывает показ и начисляет ваши 70%.

// запрос
{ "imp_token": "..." }

// ответ
{ "ok": true, "campaign_id": 7 }
  • Идемпотентно — повторный вызов с тем же токеном показ не задвоит.
  • TTL — не подтвердили за expires_in секунд → бронь сгорает, показ не засчитывается.
  • Отправка юзеру не удалась (блокировка бота и т.п.) → просто не подтверждайте — никто ничего не платит.

POST/pub/v1/sendpost — альтернативный push-режим

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

// запрос
{ "user_id": 123456789 }

// ответ
{ "sent": true, "campaign_id": 7 }   // или {"sent": false, "reason": "no_ad"}

GET/pub/v1/stats

Показы и заработок по дням + кошелёк площадки (JSON). Человеческая страница — /pub/stats?key=<api_key>.

POST/pub/v1/payout

Заявка на выплату: {"amount_kop": ...}. История — GET /pub/v1/payouts. Минималка и доступный остаток — в /pub/v1/stats.

Готовый код (Python + aiohttp)

import aiohttp

GRAM = "https://hubsmaxbot.ru"
KEY  = "gram_..."   # ваш api_key

async def _gram(path, payload):
    try:
        async with aiohttp.ClientSession(timeout=aiohttp.ClientTimeout(total=12)) as s:
            async with s.post(GRAM + path, json=payload,
                              headers={"Authorization": f"Bearer {KEY}"}) as r:
                return await r.json() if r.status == 200 else None
    except Exception:
        return None

async def show_gram_ad(api, user_id):
    r = await _gram("/pub/v1/ad/next", {"user_id": user_id})
    if not r or not r.get("ad"):
        return                                    # рекламы нет — молчим
    ad = r["ad"]
    text = ad["html"] if ad.get("format") == "html" else ad["text"]
    fmt  = "html" if ad.get("format") == "html" else None
    rows = [[{"type": "link", "text": b["text"], "url": b["url"]}]
            for b in (ad.get("buttons") or [])[:10] if b.get("url")]
    await api.send_message(user_id, text, buttons=rows, fmt=fmt)   # СВОИМ токеном
    await _gram("/pub/v1/ad/confirm", {"imp_token": r["imp_token"]})

Лимиты API

Деньги и статистика

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

ЧтоКак
Ваша доля70% от расхода рекламодателя по каждому показу в вашем боте
НачислениеМгновенно, в момент подтверждения показа (/ad/confirm)
СтатистикаСтраница /pub/stats?key=… и JSON /pub/v1/stats: показы и доход по дням, кошелёк
ВыплатыЗаявка через POST /pub/v1/payout или через администратора сети

Как подключиться

Полное самообслуживание — ключ выдаётся автоматически, ни с кем списываться не нужно.

Подключить бота →  Войти в кабинет

FAQ площадки

Нужно ли отдавать токен моего бота?
Нет. В режиме self-serve токен остаётся у вас: сеть только отдаёт объявление по API, отправляет его ваш бот сам. Токен нужен только если сами выберете push-режим (сеть шлёт рекламу за вас).
Не заспамит ли реклама моих пользователей?
Нет. Сеть сама держит частотные лимиты: один человек не увидит одну кампанию чаще её настройки частоты (по умолчанию раз в сутки), разные кампании чередуются. Плюс вы сами решаете, в какой момент вашего сценария дёргать показ.
Что за реклама будет показываться?
Короткое сообщение (до 100 символов) + кнопки-ссылки. Каждое объявление проходит ручную модерацию сети: без 18+, азартных игр, финансовых пирамид и прочего мусора. Аудитория сети — до 18 лет, Россия.
Что будет, если я запрошу рекламу, но не отправлю её?
Ничего. Бронь живёт ограниченное время (обычно 10 минут) и сгорает, если показ не подтверждён. Деньги двигаются только по /ad/confirm.
Можно ли отключить рекламу?
Да, мгновенно: перестаёте вызывать API — показов нет. Также площадку можно поставить на паузу на стороне сети (kill-switch), без правок вашего кода.
Как посчитать, сколько я заработаю?
Базовый CPM сети — 300 ₽ за 1000 показов, ваша доля 70% ≈ 210 ₽ с 1000 показов. Дальше зависит от активности вашей аудитории: при ритме «раз в 3–5 действий» активный юзер даёт несколько показов в день.