Терминальные клиенты берут объявления из того же пула, что и сайты: один GET-запрос на запуск, ответ — готовый текст для stdout. Показ считается сразу, отдельная сессия не нужна.
Добавьте площадку типа TUI / CLIВ кабинете выберите тип «TUI / CLI». Вместо домена укажите идентификатор программы, например myapp-cli.
Запросите объявлениеОдин curl или один HTTP-запрос из вашей программы. Один запрос — один показ, дедупликации нет.
Клик через короткую ссылкуВ ответе — url вида /v1/click/… Откройте его в браузере посетителя: переходит рекламодатель, клик засчитывается.
Если подходящих объявлений нет: json вернёт ad: null, text и ansi — пустой ответ 204. Скрипт должен просто выйти.
Атрибуты
Скрипт заполняет хуки внутри слота. Если хуков нет — соберёт простую ссылку сам. Заголовок и текст объявления обязательны, картинка — нет.
data-hads-slot
Контейнер слота. Значение — имя слота (для вашей аналитики и вёрстки).
data-hads-topic
Свободный hint темы страницы/контекста. Движок в фоне сопоставляет его с каталогом тем и предпочитает подходящие объявления; если hint пустой, ещё не готов или совпадений нет — игнорируется.
data-hads-allow-self
Разрешает показывать объявления других ваших сайтов в том же аккаунте (свой текущий сайт всё равно исключён). Достаточно присутствия атрибута или значений true / 1 / yes.
data-hads-title
Сюда попадёт заголовок объявления.
data-hads-text
Сюда попадёт текст объявления.
data-hads-url
Ссылка объявления (href). Пустой <a> — домен рекламодателя; свой текст или вложенные title/text/image не затираем. Пишите <a data-hads-url></a> (не <a …/>): у <a> нет самозакрытия, лишний пустой якорь скрипт уберёт.
data-hads-source
Доменное имя сайта, которому принадлежит объявление. Хук внутри ссылки: <a data-hads-url><svg…></svg><span data-hads-source></span></a>. Если внутри только элементы без текста и без этого хука — скрипт сам допишет <span class="hads-source">.
data-hads-attribution
Необязательная ссылка на HADS. Пустой <a data-hads-attribution></a> станет ссылкой на hads.dev с текстом hads.dev; свой текст внутри ссылки сохранится.
data-hads-image
URL картинки (src для <img>). JPEG/PNG/WebP, до 100 КБ. Лучше 16:9; в слоте — object-fit: cover.
Картинки
Картинка в объявлении необязательна. Если указана — движок проверяет файл, заливает в хранилище и подставляет публичный URL.
Форматы: JPEG, PNG, WebP.
Размер файла — не больше 100 КБ.
Рекомендуем 16:9 (например 1200×675). Слоты в примерах: карточка 16:9, превью в строке 1:1 — cover обрежет края, важное держите в центре.
Исходный URL должен быть http(s); после загрузки в объявлении будет URL из CDN.
В вёрстке слота задайте рамку (16:9 или 1:1) и object-fit: cover — одна картинка подстроится под разные слоты без искажений.
/* Fit any source size into the slot frame */[data-hads-image]{display: block;width: 100%;height: 100%;object-fit: cover;object-position: center;}
Вёрстка слота
Контент подставляется асинхронно. Заранее зафиксируйте геометрию блока — страница не будет прыгать после загрузки объявления.
Задайте слоту желаемый размер: min-height и при необходимости max-width, чтобы место под рекламу было зарезервировано сразу.
Для картинки всегда задавайте рамку (aspect-ratio или width/height) и object-fit: cover — кадр не разъедется после появления src.
Ограничьте число строк у заголовка и текста (line-clamp) и задайте min-height — блоки с разной длиной копирайта останутся ровными.
Стилируйте пустой слот так же, как заполненный: те же отступы и высота, пока скрипт не подставит данные.
Внутрь хуков (title/text) удобно положить скелетон — серые полоски-плейсхолдеры: скрипт заменяет содержимое целиком, и они исчезнут после загрузки.
<asidedata-hads-slot="inline"class="hads-unit hads-unit--inline"><adata-hads-attributionclass="hads-unit-attribution">Реклама от HADS</a><strongdata-hads-title><spanclass="hads-unit-skeleton hads-unit-skeleton--title"aria-hidden="true"></span></strong><pdata-hads-text><spanclass="hads-unit-skeleton hads-unit-skeleton--text"aria-hidden="true"></span><spanclass="hads-unit-skeleton hads-unit-skeleton--text hads-unit-skeleton--text-short"aria-hidden="true"></span></p><adata-hads-url></a></aside>
Готовые слоты
Выберите формат, посмотрите превью и скопируйте HTML, Tailwind или CSS. В разметке уже есть скелетоны внутри title/text — скрипт заменит их на объявление.
Текстовый блок
Классика в ленте статьи: метка, заголовок, текст и ссылка.
<asidedata-hads-slot="inline"class="hads-unit hads-unit--inline"><adata-hads-attributionclass="hads-unit-attribution">Реклама от HADS</a><strongdata-hads-title><spanclass="hads-unit-skeleton hads-unit-skeleton--title"aria-hidden="true"></span></strong><pdata-hads-text><spanclass="hads-unit-skeleton hads-unit-skeleton--text"aria-hidden="true"></span><spanclass="hads-unit-skeleton hads-unit-skeleton--text hads-unit-skeleton--text-short"aria-hidden="true"></span></p><adata-hads-url></a></aside>
Карточка с картинкой
Если у объявления есть изображение — вертикальная карточка.
<asidedata-hads-slot="card"class="hads-unit hads-unit--card"><adata-hads-attributionclass="hads-unit-attribution">Реклама от HADS</a><imgdata-hads-imagealt=""/><strongdata-hads-title><spanclass="hads-unit-skeleton hads-unit-skeleton--title"aria-hidden="true"></span></strong><pdata-hads-text><spanclass="hads-unit-skeleton hads-unit-skeleton--text"aria-hidden="true"></span><spanclass="hads-unit-skeleton hads-unit-skeleton--text hads-unit-skeleton--text-short"aria-hidden="true"></span></p><adata-hads-url></a></aside>
Строка с превью
Компактный горизонтальный блок для списков и сайдбара.
<asidedata-hads-slot="row"class="hads-unit hads-unit--row"><imgdata-hads-imagealt=""/><divclass="hads-unit-body"><adata-hads-attributionclass="hads-unit-attribution">Реклама от HADS</a><strongdata-hads-title><spanclass="hads-unit-skeleton hads-unit-skeleton--title"aria-hidden="true"></span></strong><pdata-hads-text><spanclass="hads-unit-skeleton hads-unit-skeleton--text"aria-hidden="true"></span><spanclass="hads-unit-skeleton hads-unit-skeleton--text hads-unit-skeleton--text-short"aria-hidden="true"></span></p><adata-hads-url></a></div></aside>
Тизер-ссылка
Заголовок сам является ссылкой — минимум шума.
<asidedata-hads-slot="teaser"class="hads-unit hads-unit--teaser"><adata-hads-attributionclass="hads-unit-attribution">Реклама от HADS</a><adata-hads-url><strongdata-hads-title><spanclass="hads-unit-skeleton hads-unit-skeleton--title"aria-hidden="true"></span></strong></a><pdata-hads-text><spanclass="hads-unit-skeleton hads-unit-skeleton--text"aria-hidden="true"></span><spanclass="hads-unit-skeleton hads-unit-skeleton--text hads-unit-skeleton--text-short"aria-hidden="true"></span></p></aside>
Узкая колонка
Для боковой колонки: короткий текст и явный переход.
<asidedata-hads-slot="rail"class="hads-unit hads-unit--rail"><adata-hads-attributionclass="hads-unit-attribution">Реклама от HADS</a><strongdata-hads-title><spanclass="hads-unit-skeleton hads-unit-skeleton--title"aria-hidden="true"></span></strong><pdata-hads-text><spanclass="hads-unit-skeleton hads-unit-skeleton--text"aria-hidden="true"></span><spanclass="hads-unit-skeleton hads-unit-skeleton--text hads-unit-skeleton--text-short"aria-hidden="true"></span></p><adata-hads-url></a></aside>