INOTrackбыстрота, надежность и ахуенность

Быстрый старт: от установки до первой конверсии

Весь путь делается в панели: чек-лист «С чего начать» показывает, что уже готово, мастер «Запустить кампанию» собирает оффер, источник, поток и домен в одну связку и отдаёт ссылку для рекламного кабинета и постбек-URL для партнёрской сети. Тот же путь через публичный API (curl, MCP-сервер) — в приложении «Тот же путь через API» в конце.

Инстанс ещё не установлен — сначала установите его (ключа нет — там же пробный период на 7 дней и бесплатные домены inotrack).

1. Войти в панель

Откройте домен панели, который вы указали установщику (или бесплатный, который он выдал), и войдите под первым администратором — логин и пароль из одноразовой сводки в конце установки.

2FA для admin. Если второй фактор у администратора ещё не включён, сразу после входа панель откроет экран «Подключите второй фактор» (QR-код → код из приложения → резервные коды). Вход этим не блокируется, но экран будет появляться при каждом входе, пока фактор не подключён (подробнее — FAQ).

2. «С чего начать»: чек-лист запуска

Пока у трекера нет данных, на дашборде вместо графика — список шагов запуска: что уже сделано (зачёркнуто) и какой шаг следующий, с кнопкой туда, где он делается. Тот же следующий шаг одной строкой показывает пустой отчёт. Шаги:

Шаг Готов, когда Где делается
Источник трафика есть хотя бы один источник «Источники» или мастер
Оффер есть хотя бы один оффер «Офферы» или мастер
Поток с оффером есть поток, в котором есть оффер мастер или «Потоки» → «Новый поток»
Трекер-домен подключён домен под клики «Домены»
Первые клики по потокам пришли клики ссылка потока в объявлении
Постбек рекламодателя есть подключение сети в «Постбеках» «Постбеки» → «Подключить сеть»
Первые конверсии пришла хотя бы одна конверсия «Постбеки» (проверка, карантин)

Шаги «Трекер-домен» и «Постбек рекламодателя» — настройка команды, их делает администратор; баеру они не показываются. Все шаги до потока проще всего пройти одним заходом — мастером: кнопка «Запустить кампанию» под пустым графиком дашборда, в сайдбаре и на странице «Потоки» (горячая клавиша g j).

3. Мастер «Запустить кампанию» (/launch)

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

  1. Оффер — выберите существующий или создайте новый прямо в мастере (рекламодатель заводится в той же шторке). Можно взять несколько офферов — трафик поделится по весам. URL оффера — с макросами (Справочник макросов); {clickid} обязателен, без него постбек будет нечем сматчить с кликом.
  2. Источник — откуда трафик. Источник задаёт click-id площадки, sub-макросы и шаблон ссылки для рекламного кабинета; при создании нового пресет площадки подставится сам. Без шаблона ссылка получится без макросов площадки, а в отчётах не будет её кампаний и объявлений.
  3. Поток — название, веса офферов, по желанию ленд (посетитель сначала видит его, ссылка /f/…) и фильтр ботов (отсев ботов и модерации; набор правил выбирает администратор — сразу или позже на странице потока). ⚠️ Поле мастера «Запасной URL (traffic-back)» и выбор смартлинка рядом с ним сохраняются в trafficback_url потока, который клик-путь сегодня не читает, — это не запасной вариант для клика без оффера. Такие клики (другая страна, ни один оффер не подошёл) уходят в «Запасной вариант» потока, а если он не задан — на общий фоллбэк инстанса. Задайте его после запуска на странице потока: «Запасной адрес и уникальность» → «Запасной вариант» (свой URL, смартлинк, поток или оффер).
  4. Домен и регион — на какой трекер-домен строить ссылку и из каких стран принимать трафик; клики из других стран уйдут в запасной вариант потока (см. выше). По умолчанию ссылка строится на основном домене пула («Домены»); если пул пуст — на INOTRACK_PUBLIC_URL из .env установщика. Нет ни того, ни другого — мастер напишет «Домен не настроен»: добавьте домен в «Домены».
  5. Запуск — сводка «Проверьте и запустите»; после подтверждения мастер создаёт поток.

Роль viewer видит мастер только для чтения: создавать сущности может admin и buyer.

4. Ссылка для рекламного кабинета

После создания потока мастер показывает «Ссылку для кабинета площадки»: полную трекинговую ссылку https://<трекер-домен>/go/<token> уже с макросами площадки из шаблона источника. Скопируйте её целиком и вставьте в объявление. Если в потоке есть ленд, рядом — ссылка через ленд; если подключены edge-ноды по регионам — ссылки по регионам.

Проверить, куда попадёт посетитель, можно кнопкой «Проверить» в чек-листе (проверка клика на странице потока) или вручную:

curl -sI "https://<трекер-домен>/go/<token>?sub1=test-site"
# HTTP/2 302, Location: <URL оффера с подставленными макросами>

5. Постбек для партнёрской сети

Ниже ссылки — «Постбек-URL для кабинета сети»: адрес https://<трекер-домен>/pb/<token> по каждому рекламодателю выбранных офферов и параметры, которые ждёт трекер (ID клика, статус, выплата). Значения параметров подставьте макросами сети в её личном кабинете.

Если у рекламодателя ещё нет подключения, мастер так и пишет. Подключение создаёт администратор: «Постбеки» → «Подключить сеть» — выбрать пресет сети (маппинг параметров подставится сам) или настроить вручную. ⚠️ Проверьте, что в маппинге есть параметр суммы — без него выплата запишется нулём. Детали форматов, статусной модели и дедупа — Постбеки.

Убедиться, что постбек разбирается правильно, можно до первой реальной конверсии: в списке подключений кнопка «Проверить» отправляет пробный постбек без записи — с clickid последнего реального клика по офферам сети — и показывает поток, оффер и сумму.

6. Чек-лист запуска и первая конверсия

Под ссылками — «Чек-лист запуска»: часть пунктов трекер проверяет сам (шаблон ссылки площадки, фильтр ботов, подключение постбека, передача конверсий в площадку), часть отмечаете вы (ссылка вставлена в кабинет, постбек-URL вставлен в кабинет сети, проверка клика, первый клик, расходы).

  • Первый клик — кнопка «Открыть в отчётах» ведёт в отчёт по этому потоку. Клики пишутся в ClickHouse батчами раз в 1–2 секунды: если строки нет сразу, обновите через пару секунд.
  • Первая конверсия — появляется в живой ленте «Конверсии» и в отчётах. Клики есть, а конверсий нет — чек-лист «С чего начать» подсветит шаг «Первые конверсии»: проверьте постбек (шаг 5) и карантин в «Постбеках» — туда попадают постбеки, которые трекер не смог разобрать или сматчить с кликом.
  • Расходы — cost-sync рекламного кабинета или ручной ввод, из карточки источника.

Приложение: тот же путь через API

Всё то же самое можно сделать публичным API — для скриптов, массового заведения и MCP-сервера (работа с трекером из Claude Code, Публичный API). API-токен удобнее выпустить в панели: «Настройки» → «API-токены» (права «Запись» — только у admin); ниже — как получить его без панели.

0. Войти и получить API-токен

Первый администратор создан установщиком (Установка), логин/пароль — из одноразовой сводки в конце установки.

TRACKER=https://panel.example.com

# логин — сохраняем куку сессии в файл
curl -s -c cookies.txt -X POST "$TRACKER/api/internal/auth/login" \
  -H 'Content-Type: application/json' \
  -d '{"email":"[email protected]","password":"<пароль из сводки установщика>"}'

# выпуск API-токена под этой сессией (scope read+write, чтобы управлять сущностями)
curl -s -b cookies.txt -X POST "$TRACKER/api/v1/tokens" \
  -H 'Content-Type: application/json' \
  -d '{"name":"quickstart","scopes":["read","write"]}'

Значение поля token из ответа — сохраните его, оно показывается один раз (дальше хранится только хэш). Дальше все примеры используют его как $TOKEN.

2FA для admin. Если у администратора второй фактор ещё не включён, ответ /login содержит "must_setup_2fa": true, и панель сразу после входа открывает экран «Подключите второй фактор» (QR-код → код из приложения → резервные коды). Вход этим не блокируется: сессия уже выдана, и curl из этого раздела работает как обычно. Через API второй фактор подключается так: POST /2fa/setup → POST /2fa/confirm (см. Публичный API, FAQ). Пока он не подключён, экран будет появляться при каждом входе.

1. Завести рекламодателя

curl -s -X POST "$TRACKER/api/v1/advertisers" \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{
    "name": "Тестовая CPA-сеть",
    "kind": "cpa_network",
    "currency": "USD",
    "hold_days": 30,
    "is_active": true
  }'

В ответе — id рекламодателя, он понадобится офферу.

2. Завести оффер

curl -s -X POST "$TRACKER/api/v1/offers" \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{
    "advertiser_id": 1,
    "name": "Тестовый оффер RU",
    "url": "https://advertiser.example.com/landing?clickid={clickid}&sub1={sub1}",
    "geo": ["RU"],
    "payout_model": "cpa",
    "payout": 25,
    "currency": "USD",
    "status": "active"
  }'

URL оффера — с макросами (полный список — в справочнике макросов); {clickid} обязателен, без него постбек будет нечем сматчить с кликом.

3. Завести источник трафика

curl -s -X POST "$TRACKER/api/v1/sources" \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{
    "name": "Мой сайт",
    "kind": "seo_site",
    "sub_mapping": "{\"sub1\": \"site\", \"sub2\": \"page\"}"
  }'

⚠️ sub_mapping (как и cost_credentials, pixel_config) принимается только как JSON, закодированный строкой — не как вложенный объект. Объект в этом поле ручка отклонит (400 bad_request, json: cannot unmarshal object into Go struct field ... of type string). В ответе на создание/чтение источника то же поле, наоборот, отдаётся как обычный вложенный объект — асимметрия входа/выхода, известная шероховатость API, а не опечатка в примере.

4. Завести поток и получить трекинговую ссылку

Поток связывает источник с офферами. Токен потока (token в ответе) — это и есть короткая ссылка /{token} и полная /go/{token}.

curl -s -X POST "$TRACKER/api/v1/flows" \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{
    "name": "RU — тестовый оффер",
    "source_id": 1,
    "mode": "redirect_302",
    "default_url": "https://example.com/no-offer",
    "offers": [{"offer_id": 1, "weight": 100, "is_active": true}]
  }'

default_url — обязательный fallback: если ни один оффер не подошёл по гео/весам/капам, трафик уходит сюда, а не на 404 (трафик оплачен, терять его нельзя).

Получившаяся трекинговая ссылка:

https://<трекер-домен>/go/<token>?sub1=<site>&sub2=<page>

Без sub1/site_id сайт определяется по привязке потока к единственному сайту, если Referer не определил его раньше. При нескольких привязанных сайтах сайт не угадывается.

Проверка вручную:

curl -sI "https://<трекер-домен>/go/<token>?sub1=test-site"
# HTTP/2 302, Location: <URL оффера с подставленными макросами>

5. Настроить приём постбеков от партнёрской сети

Подробности форматов, макросов и пресетов сетей — Постбеки. Минимальный шаг: создать postback-эндпоинт с токеном под конкретную сеть (эндпоинт для CRUD постбеков проксируется через /api/v1/postback/...):

curl -s -X POST "$TRACKER/api/v1/postback/endpoints" \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{
    "AdvertiserID": 1,
    "Name": "Тестовая CPA-сеть",
    "Preset": "custom",
    "ParamMapping": {"clickid": "clickid", "status": "status", "sum": "sum",
      "status_values": {"lead": "lead", "approved": "approve", "reject": "reject"}},
    "IsActive": true
  }'

⚠️ Обратите внимание на регистр ключей: верхний уровень тела (AdvertiserID, Name, Preset, ParamMapping, IsActive) — с заглавной буквы, а поля внутри ParamMapping (clickid, status, sum, status_values) — с маленькой. Разное соглашение в одном теле — известная шероховатость API, а не опечатка в этом примере.

⚠️ Не забудьте параметр суммы (sum) в маппинге — без него выплата запишется нулём. Детали и защита от этого — Постбеки.

В ответе — токен эндпоинта в поле Token (ответ, как и тело запроса, — с заглавными ключами: ID, Token, Name…; jq -r .token вернёт null). Ссылка для сети:

https://<трекер-домен>/pb/<token>?clickid={clickid}&status=approved&sum=25

Пропишите её (или соответствующий пресет) в личном кабинете сети.

6. Увидеть первый клик в отчёте

Кликните по трекинговой ссылке из шага 4 (или прогоните curl несколько раз), затем:

curl -s -X POST "$TRACKER/api/v1/reports/query" \
  -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' \
  -d '{
    "dimensions": ["flow_id", "offer_id"],
    "metrics": ["clicks", "uniques"],
    "date_from": "2026-09-24",
    "date_to": "2026-09-25"
  }'

⚠️ /reports/query принимает только POST с JSON-телом (GET вернёт 405), и обязательно нужны date_from/date_to (YYYY-MM-DD, включительно) — без них 400 bad_request. Имена измерений — flow_id/offer_id, а не flow/offer (полный список — GET /api/v1/reports/dims, список метрик — GET /api/v1/reports/metrics).

Клики пишутся в буфер и батчатся в ClickHouse раз в 1–2 секунды — если строка не появилась сразу, подождите пару секунд и повторите запрос. Точный набор путей отчётного модуля (/api/v1/reports/...) — см. Публичный API и спецификацию GET /api/v1/openapi.yaml.

Дальше

Поддержка