API Яндекс.Директа
API Яндекс.Директа
API Яндекс.Директа — это программный интерфейс, через который внешние приложения (собственные скрипты, CRM, сервисы автоматизации, агентские платформы) читают и меняют объекты рекламных кампаний Яндекс.Директа: сами кампании, группы объявлений, ключевые фразы, ставки, бюджеты, отчёты. По сути, это способ делать всё то же, что делает менеджер руками в веб-кабинете, только машиной и в масштабе.
История
Сам Яндекс.Директ — это сервис контекстной рекламы Яндекса, запущенный в 2001 году. Он был первой массовой системой контекстной рекламы в Рунете и опередил приход в Россию Google AdWords (нынешнего Google Ads) на несколько лет. С самого начала Директ был про самообслуживание: рекламодатель сам заводил кампании, сам подбирал слова, сам выставлял ставки — в отличие от классических медийных агентств с ручным размещением.
Пока рекламодателей было немного и кампании были маленькие, веб-интерфейса хватало. Но довольно быстро появился класс профессиональных пользователей — агентства, крупные интернет-магазины, партнёрские сети, — которым нужно было управлять сотнями кампаний и десятками тысяч ключевых слов. Кликать мышкой в такой ситуации нереально: людям нужен был программный доступ.
Основные вехи (даты приблизительные, я опираюсь на общедоступную документацию и здравый смысл — если тебе важна точность до года, сверься с yandex.ru/dev/direct):
- Середина 2000-х — появляется первая версия API Директа, изначально в виде SOAP-веб-сервиса. Это была эпоха «энтерпрайзной» интеграции, когда SOAP считался стандартом.
- API v4 — версия, которая долго доминировала в 2010-х. Технически поддерживала два формата: JSON-RPC и SOAP. Именно на неё писалось большинство агентских инструментов того времени.
- Примерно 2015 год — Яндекс представил API v5, полностью переработанную архитектуру: чистый JSON поверх HTTPS, ресурсно-ориентированные сервисы (
campaigns,adgroups,ads,keywords,bids,reportsи так далее), новая модель лимитов. Именно v5 стала актуальной надолго. - Постепенное сворачивание v4. Яндекс годами двигал агентства с v4 на v5, ограничивал новые фичи только в v5, а старые методы объявлял устаревшими. К моменту, когда я пишу эту статью, вся новая интеграция делается только на v5.
- Reports API — отдельная подсистема для получения статистики. Отчёты в Директе — это не «обычный запрос-ответ», а асинхронная штука: ты заказываешь отчёт, ждёшь готовности, забираешь файл. Об этом ниже подробнее.
Владелец сервиса — компания Яндекс (в текущем корпоративном контуре). Директ остаётся одним из основных источников выручки для рекламного бизнеса Яндекса, и API — не второстепенная фича, а полноценная точка входа для большого класса партнёров.
Что это такое
Технически API Яндекс.Директа v5 — это набор HTTPS-эндпоинтов, каждый из которых отвечает за свой класс объектов. Ты шлёшь POST-запрос с JSON-телом на URL вроде https://api.direct.yandex.com/json/v5/campaigns, в заголовках передаёшь OAuth-токен и язык интерфейса, в теле — что именно хочешь сделать: получить список, создать, обновить, удалить, приостановить, возобновить.
Логика ресурсов повторяет предметную область Директа:
- Campaigns — кампании (верхний уровень, у каждой свой бюджет, стратегия показов, регион).
- AdGroups — группы объявлений внутри кампании (обычно объединяют объявления с общей темой и общим набором ключей).
- Ads — сами объявления (заголовок, текст, ссылка, картинка для РСЯ).
- Keywords — ключевые фразы, по которым объявление показывается.
- Bids и BidModifiers — ставки и их модификаторы (например, «+30% на мобильных»).
- Reports — статистика (клики, показы, расходы, конверсии).
- Dictionaries — справочники (регионы, валюты, категории).
- И ещё десяток более узких сервисов:
Sitelinks(быстрые ссылки),VCards(визитки),AudienceTargets(аудитории ретаргетинга),Feeds,Leads,Clients,Agencyclientsи другие.
Чем API отличается от соседних вещей:
API vs веб-интерфейс. Веб-интерфейс direct.yandex.ru — это кабинет для человека: ты видишь таблицы, графики, кнопки. Всё, что там есть, теоретически можно сделать и через API, но не наоборот — некоторые тонкие фичи и настройки бывают только в веб-интерфейсе, потому что появляются там раньше, чем в API. Для разовых операций и осмотра глазами веб-интерфейс удобнее; для массовых и повторяющихся — только API.
API vs Direct Commander. Direct Commander — это отдельное десктопное приложение Яндекса для массового редактирования кампаний офлайн: выгрузил из облака к себе, поправил в удобных таблицах, залил обратно. Commander сам под капотом ходит в API. Условно, Commander — это готовый GUI-клиент над API для менеджера, который не хочет писать код.
API vs фиды и XLS-выгрузки. Есть отдельный сценарий динамических объявлений с фидами (feeds) — когда объявления генерируются из товарного XML/CSV. Фиды — это данные, а API — это способ управлять всей остальной обвязкой вокруг них.
Аналогии из жизни
Аналогия с пультом умного дома. Веб-интерфейс Директа — это стенка с физическими выключателями: свет, кондиционер, шторы. API — это протокол умного дома, по которому Siri, HomeKit или скрипт могут послать те же команды удалённо и массово. Ты можешь один раз описать сценарий «когда я ухожу — выключить всё» и повторять его сотнями кампаний.
Где ломается: в умном доме команды обычно исполняются мгновенно и локально. В API Директа между «отправил» и «увидел эффект» есть задержки — модерация объявлений, обновление статистики, репликация. Никакого «мгновенного отклика» нет.
Аналогия с рестораном и кухней. Веб-кабинет — это зал ресторана: официант принимает заказ, приносит блюдо. API — это прямой канал на кухню: ты можешь сам крикнуть повару, что тебе нужно, минуя официанта. Быстрее, гибче, но требует, чтобы ты понимал, как устроена кухня (то есть модель данных Директа), и умел говорить с ней на её языке.
Где ломается: повар всё равно не приготовит блюдо, если у него нет продуктов. API Директа не всесилен: он не может обойти правила модерации, лимиты бюджета, ограничения площадки. «Прямой канал» не значит «безлимитный».
Аналогия с банковским API вместо кассы. Раньше, чтобы перевести деньги, ты шёл в отделение банка. Потом появился банк-клиент. А ещё позже — открытый банковский API (Open Banking): бухгалтерская программа сама забирает выписку и сама делает платежи, не заходя в кабинет. Похожим образом бухгалтерия рекламы (агентство, оптимизатор, in-house-сервис) вместо ежедневного захода в веб-кабинет Директа гоняет данные через API.
Где ломается: банковский API строго регламентирован — там законы, аудит, лицензии. API Директа — коммерческий продукт одной компании, правила которого могут меняться (объявляют устаревшие методы, вводят новые лимиты, меняют структуру ответа). Стабильность есть, но она гарантируется не законом, а желанием Яндекса не сломать экосистему партнёров.
Как это работает
Разберём типичный жизненный цикл интеграции с v5.
Шаг 1. Регистрация приложения. Ты идёшь на страницу разработчика Яндекса и регистрируешь OAuth-приложение: даёшь ему имя, указываешь права (какие сервисы Директа ему нужны — чтение, запись, отчёты, агентские операции), получаешь пару client_id / client_secret. Это удостоверение самого приложения, не конкретного пользователя.
Шаг 2. Авторизация пользователя (OAuth 2.0). Дальше пользователь (тот самый рекламодатель или менеджер агентства) должен разрешить твоему приложению действовать от его имени. Ты формируешь ссылку на страницу OAuth Яндекса вида https://oauth.yandex.ru/authorize?response_type=token&client_id=..., пользователь входит в свой Яндекс-аккаунт, видит запрос «Приложение X просит доступ к вашему Директу», нажимает «Разрешить» — и Яндекс отдаёт OAuth-токен. Этот токен ты хранишь у себя, обычно на стороне сервера, и подставляешь в каждый запрос к API.
Токены живут долго (у Яндекса, насколько я знаю, порядка года по умолчанию), но не вечно: их можно отозвать вручную из настроек аккаунта, они инвалидируются при смене пароля, и вообще любой токен теоретически может внезапно перестать работать. Поэтому нормальная интеграция обязана уметь обнаружить факт «токен умер» и уметь его перевыпустить (или хотя бы уронить внятную ошибку).
Шаг 3. Запрос. Простейший запрос выглядит примерно так (псевдокод):
POST https://api.direct.yandex.com/json/v5/campaigns
Authorization: Bearer <OAUTH_TOKEN>
Accept-Language: ru
Content-Type: application/json; charset=utf-8
{
"method": "get",
"params": {
"SelectionCriteria": {},
"FieldNames": ["Id", "Name", "Status", "State"]
}
}
В ответ приходит JSON со списком кампаний. Обрати внимание на структуру: method + params — это остатки идеологии JSON-RPC, а FieldNames — обязательный список полей, которые ты хочешь получить. API не отдаёт «всё подряд»: ты сам выбираешь, что тебе нужно. Это разумно — экономит трафик и лимиты.
Шаг 4. Лимиты (баллы/units). У Яндекс.Директа исторически работает система «баллов»: каждый вызов метода тратит какое-то количество единиц из дневного бюджета аккаунта. Простые операции дёшевы, массовые (получить много объектов, изменить много ставок) — дороже. Точные тарифы описаны в документации и периодически меняются. В ответе API возвращает служебные заголовки с остатком лимита — их надо мониторить и, при подходе к нулю, притормаживать.
Дополнительно есть rate limit — ограничение количества запросов в единицу времени. Если превысить, вернётся ошибка, и надо будет подождать.
Шаг 5. Отчёты — отдельная история. Reports API работает не так, как остальные сервисы. Ты отправляешь запрос отчёта с параметрами (даты, поля, группировки, фильтры), получаешь ответ с HTTP-статусом:
200— отчёт готов, забирай тело сразу.201или202— отчёт готовится, попробуй ещё раз через N секунд.4xx— ошибка запроса.
Клиент должен уметь опрашивать сервер в цикле, пока статус не станет 200, а потом распарсить TSV/CSV-ответ. Такая схема нужна, потому что тяжёлые отчёты по большим аккаунтам считаются не мгновенно.
Шаг 6. Песочница (sandbox). У Директа есть отдельный тестовый контур — sandbox с собственным URL (https://api-sandbox.direct.yandex.com/). Там можно завести тестовые кампании и объявления, погонять запросы, отладить логику — и ничего не потратить в живой рекламе. Крайне полезная штука, особенно на этапе разработки.
Шаг 7. Обработка ошибок. API возвращает как HTTP-коды (401 — нет авторизации, 429 — слишком часто, 500 — ошибка сервера), так и структурированные ошибки в теле ответа с числовыми кодами и текстовыми описаниями. Хорошая интеграция логирует и то, и другое, различает временные сбои (retryable — можно повторить) и постоянные (неверные параметры, отозванный токен — повторять бесполезно).
Где встречается в обычной жизни
Обычный человек не открывает документацию API Яндекс.Директа. Но он постоянно видит его результаты:
- Реклама «в тему» в поиске Яндекса. Первые несколько результатов по коммерческому запросу с пометкой «реклама» — это Директ. То, что ты видишь именно этот набор объявлений, часто выбирается автоматизированной системой оптимизации, которая крутит ставки через API.
- Баннеры и текстовые блоки на сайтах. Рекламная сеть Яндекса (РСЯ) — миллионы страниц, где показывается тот же самый Директ. Ротацию и таргетинг там тоже во многом задают через API.
- Скидки, которые «догоняют» в интернете. Ты посмотрел ботинки в интернет-магазине — и весь день видишь их в объявлениях. За этим стоит ретаргетинг, а его аудитории и правила часто настраиваются программно.
- Динамические объявления интернет-магазинов. Если у магазина 50 000 товаров, никто не пишет для каждого объявление руками. Товарный фид + автогенерация + управление через API — типичная связка.
- Промо у блогеров и медиа. Крупные медиапаблишеры автоматически подкручивают продвижение своих статей — это тоже часто идёт через API.
Где встречается в IT и бизнесе
Программисты и маркетологи сталкиваются с этим API постоянно:
- Bid management и оптимизаторы ставок. Отдельный класс продуктов, которые смотрят на статистику конверсий и автоматически меняют ставки — раз в час, раз в 15 минут, иногда чаще. Без API это невозможно.
- Массовая генерация кампаний. Есть 10 регионов, 200 категорий товаров, 3 сезона — надо создать 6000 кампаний. Ни один менеджер вручную это не сделает адекватно. Скрипт через API — сделает за час.
- Синхронизация с CRM и товарным каталогом. Товар закончился на складе — надо остановить объявления по нему. Появилась новая модель — надо создать группу. Это связка API Директа с внутренними системами компании.
- Внутренние дашборды и отчётность. Reports API кормит BI-системы: руководство видит, сколько потрачено, сколько получили лидов, какой ROI по каждой кампании.
- Агентские сервисы. Одно агентство ведёт сотни рекламодателей. Через API оно управляет всеми аккаунтами централизованно — из своей внутренней панели.
- Сервисы обучения и аудита. «Проверь мою рекламу» — популярный класс SaaS. Он подключается к аккаунту клиента и через API вычитывает все настройки, ищет ошибки и рекомендации.
Кто пользуется
- Крупные рекламодатели с in-house-командами. Ozon, Wildberries, X5, банки, авиакомпании — у всех есть свои платформы, которые общаются с Директом напрямую через API. Точные цифры я не знаю, но речь про десятки, если не сотни тысяч кампаний.
- Performance-агентства и медиахолдинги. Klondike, Adventum, iConText, Media Direction Group и многие другие — все имеют собственные технологические стеки поверх API Директа.
- Российские SaaS для маркетинга. eLama, K50, Alytics, Origami (список не полный и может устаревать) — платформы бид-менеджмента и автоматизации, чей продукт по сути и есть надстройка над API Директа (и заодно других рекламных систем).
- Сам Яндекс. Direct Commander, инструменты внутри веб-кабинета вроде «Мастера отчётов», рекомендательные сервисы — всё это тоже пользуется теми же публичными API-контрактами (или очень похожими внутренними).
- Мелкие и средние студии и фрилансеры — тоже пишут маленькие скрипты для клиентов: «выгрузить статистику в Google Sheets», «отключать кампании на выходных», «слать алерт в Telegram, если бюджет кончается».
Альтернативы и конкуренты
- Google Ads API. Аналогичный интерфейс для Google Ads. Плюсы: глобальный охват, огромная экосистема инструментов, богатейшая документация. Минусы: очень тяжеловесный (много слоёв абстракций, gRPC, сложная модель ресурсов), для российского рынка после 2022 года — с ограничениями.
- Facebook (Meta) Marketing API. Управление рекламой в Facebook и Instagram. Плюсы: сильный таргетинг по интересам и look-alike. Минусы: постоянно меняющиеся правила, Meta в России ограничена, для локальной аудитории почти нерелевантен.
- API myTarget (VK Реклама). Российский аналог для VK, Одноклассников, Дзена. Плюсы: единственная реальная альтернатива Директу внутри РФ для соцсетевого трафика. Минусы: аудитория и алгоритмы другие — заменить Директ на нём нельзя, только дополнить.
- TikTok Ads API, Telegram Ads. Экзотика с точки зрения контекста, но иногда попадают в один стек управления рекламой.
Замечание: в контексте контекстной рекламы в Рунете у Директа фактически нет прямого конкурента-заменителя. Есть дополнения (VK, Telegram), но именно поисковый контекст в Яндексе покрывает только сам Директ.
Когда НЕ стоит использовать
- Ты рекламодатель с 3 кампаниями и 50 ключами. Веб-интерфейс закроет твои задачи, а поддержка кода и токенов будет стоить больше, чем сэкономленное время. Порог, при котором API окупается, начинается примерно от нескольких десятков кампаний или потребности в ежедневных массовых операциях.
- Тебе нужны фичи, которые в API ещё не завезли. Иногда новая настройка появляется в веб-кабинете за месяцы до того, как её добавят в API. Если для тебя критично — придётся ждать или использовать веб-интерфейс.
- У тебя нет ресурсов на поддержку интеграции. API меняется: устаревают методы, ротируются токены, обновляются схемы данных. Написать и забыть не получится — нужен инженер, который раз в квартал заглядывает в чейнджлог. Если такого ресурса нет, честнее взять готовый SaaS-инструмент, где чужие люди этим занимаются за деньги.
Связанные понятия
- OAuth 2.0 — стандарт делегированной авторизации, по которому Яндекс выдаёт токены доступа для сторонних приложений.
- JSON-RPC — старый протокол вызова методов через JSON, идеологический предок структуры «method + params» в v5.
- REST API — архитектурный стиль веб-API, к которому v5 идейно близок, хотя и не следует ему строго.
- Rate limit — ограничение числа запросов в единицу времени, стандартный механизм защиты серверов от перегрузки.
- Sandbox — тестовое окружение, копия боевого сервиса без реальных денег и последствий.
- Bid management — класс задач и продуктов по автоматическому управлению ставками в аукционе рекламы.
- PPC (pay-per-click) — модель оплаты рекламы за клики, лежащая в основе Директа.
- Ретаргетинг — показ рекламы тем, кто уже как-то взаимодействовал с сайтом или приложением.
Литература и источники
- Официальная документация: yandex.ru/dev/direct — раздел «API Директа v5», начинай отсюда. Там есть справочник методов, справочник ошибок, описание Reports API и sandbox.
- Официальная документация OAuth: yandex.ru/dev/id — как правильно регистрировать приложения и запрашивать токены.
- Wikipedia: статья «Яндекс.Директ» — короткая справка по истории сервиса.
- Direct Commander: страница инструмента на сайте Яндекса — полезно понимать, как он использует API, чтобы не изобретать велосипед.
- Тематические сообщества: искать по запросам «Яндекс.Директ API v5», «yandex direct api python», «direct api reports» — есть небольшие библиотеки-обёртки и туториалы на Habr.
- Официальный чейнджлог API — на той же yandex.ru/dev/direct. Смотреть перед крупным обновлением своей интеграции.
Где встретилось у меня
Вчера во внутреннем сервисе автоматизации рекламы OAuth-токен Яндекс.Директа умер раньше срока и API начал отвечать HTTP 401 — пришлось диагностировать, перевыпустить токен через OAuth-ссылку, разложить его по конфигам, перезапустить сервис через systemd и убедиться сквозной проверкой, что API снова отвечает.
Краткое резюме
- API Яндекс.Директа — программный интерфейс к контекстной рекламе Яндекса; актуальная версия — v5, JSON поверх HTTPS.
- Авторизация через OAuth 2.0: приложение получает токен от имени рекламодателя и подставляет его в заголовок каждого запроса. Токены не вечны — интеграция обязана уметь их перевыпускать.
- Ресурсы API повторяют модель Директа: кампании, группы, объявления, ключи, ставки, отчёты, справочники.
- Есть система «баллов» на запросы и rate limit — за ними надо следить, иначе получишь блокировки.
- Reports API асинхронный: сначала заказ, потом опрос статуса, потом забор файла.
- Для отладки используй sandbox (
api-sandbox.direct.yandex.com) — там не тратятся реальные деньги. - Смысл писать интеграцию появляется при десятках кампаний, массовых операциях или собственных оптимизаторах; для маленькой рекламы веб-кабинета хватит.