Настройка OAuth Яндекса
← К аккаунтам Директа · Агенты Яндекса
Архитектура подключения
В системе две сущности:
- Агент — реальный аккаунт Яндекса, под которым вы авторизуете наше приложение через OAuth. У агента хранится refresh-токен.
-
Клиентский аккаунт — конкретный аккаунт Директа
(например,
porg-h3ilikk5от Vitamin.tools), с которого тянутся расходы. У клиента нет своего OAuth — API-запросы идут через токен агента с заголовкомClient-Login: {логин клиента}.
Это позволяет одним OAuth-подключением обслуживать все клиентские аккаунты, к которым у агента есть представительский доступ.
Реальные аккаунты в нашей конфигурации
-
direct-itvbg@yandex.ru— аккаунт-разработчик. На нём зарегистрировано OAuth-приложение и подаётся заявка на API Директа. Сам рекламу не ведёт — только владелец приложения. -
marcar-reklama@yandex.ru— рабочий рекламный аккаунт. В Директе выступает как организация. Все клиентские рекламные аккаунты, создаваемые в Vitamin.tools, цепляются к нему и работают в режиме организации. -
Vitamin.tools — техническое агентство в Директе для всех клиентов
из
marcar-reklama. Через них идёт оплата и представительский доступ.
Подключать агентом нужно тот аккаунт, у которого есть представительский
доступ к нужным клиентам Директа. Если такого доступа нет — приложение
автоматически отрабатывает фолбэк через clients/get и работает
как с прямым рекламодателем (1 клиент = сам агент).
Шаг 1. Создайте приложение на oauth.yandex.ru
- Войдите на Яндекс под аккаунтом
direct-itvbg@yandex.ru(или другим, на котором будет жить приложение) - Откройте https://oauth.yandex.ru/
- Нажмите «Создать приложение»
- Выберите тип «Для авторизации пользователей».
Почему именно этот тип: для нашего OAuth-flow нужен Redirect URI на наш сайт
(callback после подтверждения). Тип «Для доступа к API или отладки» использует
фиксированный https://oauth.yandex.ru/verification_code — для веб-приложения с redirect он не подходит.
Шаг 2. Заполните параметры
- Название: например,
marcar.analytic - Контактная почта: ваш реальный email — на него Яндекс присылает важные уведомления о приложении
-
Платформы → Веб-сервисы → Redirect URI:
https://analytic.tech-marcar.ru/yandex-direct/oauth/callback
Должен точно совпадать со значением, ожидаемым приложением (см.APP_URLв.env). -
Доступ к данным — отметьте оба разрешения:
Яндекс.Директ → Использование API Яндекс.Директа(direct:api) — обязательно для запросов к DirectЯндекс ID → Доступ к логину, имени и фамилии, полу(login:info) — чтобы после OAuth автоматически определять логин агента
- Сохраните. Скопируйте ClientID и пароль приложения (Client secret).
Если забудете отметить direct:api, приложение поймает это сразу при
OAuth-подключении агента и покажет понятную ошибку: «приложение не получило
обязательные права». Без явной отметки токен будет «пустой», и на каждом
запросе к API будет ошибка #1002 «Authorization error».
Шаг 3. Подайте заявку на доступ к API Директа
OAuth-приложение даёт право запрашивать токен с правом direct:api,
но сами API-запросы Direct пропустит только если на ClientID есть одобренная
заявка на доступ.
- В Директе под аккаунтом разработчика (
direct-itvbg) создайте хотя бы одну кампанию (без неё нельзя зайти в настройки API) - Откройте Настройки API → Мои заявки
- Примите пользовательское соглашение API (только при первом заходе)
- Нажмите «Новая заявка» и выберите тип:
- «Тестовый доступ» — мгновенно, но работает только в Песочнице. Подходит для отладки, пока ждёте одобрения полного.
- «Полный доступ» — нужен для production-API. Срок рассмотрения до 7 дней.
- В форме заявки выберите ClientID шага 1, укажите контактную почту, заполните сведения о приложении и отправьте.
До одобрения «Полного доступа» все запросы на api.direct.yandex.com
будут падать с ошибкой авторизации. Чтобы не блокировать разработку — параллельно
включите Песочницу (Шаг 4) и отметьте у агента флажок «Sandbox-режим».
Шаг 4. (Для отладки) Включите Песочницу
Песочница — изолированная среда Direct API с тестовыми данными. Не требует одобрения «Полного доступа», работает с любым валидным OAuth-токеном.
- Под тем же аккаунтом разработчика откройте Настройки API → Песочница
- Нажмите «Начать пользоваться Песочницей»
-
Выберите роль «Агентство» и валюту RUB.
Если выбрать «Клиент» — у вас не будет тестовых клиентов
(
agencyclients/getвернёт пусто), а наша интеграция в этом случае автоматически отработает фолбэк черезclients/getи покажет один тестовый аккаунт. - Установите галочку «Создать тестовые кампании» — Яндекс автоматически создаст 3 тестовых клиентов с 3 кампаниями
- Нажмите «Продолжить»
Песочница не имеет веб-интерфейса — посмотреть тестовые кампании можно только через API. Через месяц без обращений данные удаляются. При смене роли все тестовые данные сбрасываются.
Шаг 5. Пропишите ключи в .env
YANDEX_CLIENT_ID=ваш_client_id YANDEX_CLIENT_SECRET=ваш_client_secret
Шаг 6. Подключите агента
- Откройте /yandex-direct/agents
- Нажмите «+ Подключить агента (OAuth)»
- В окне Яндекса выберите аккаунт, у которого есть представительский доступ
к нужным клиентам Директа (например,
marcar-reklamaили аккаунт-представитель Vitamin.tools) - Подтвердите доступ → вернётесь на карточку агента — токен сохранён
- Если работаете в Песочнице — на карточке агента поставьте галочку
«Sandbox-режим»: запросы пойдут на
api-sandbox.direct.yandex.com
Если в браузере залогинен «не тот» аккаунт Яндекса — добавьте нужный через
passport.yandex.ru/profile (кнопка «Добавить аккаунт»), либо
откройте flow в окне инкогнито и войдите там под нужным.
Шаг 7. Подтяните клиентов и кампании
- На карточке агента нажмите «⤓ Получить клиентов из API».
Приложение сначала вызовет
agencyclients/get, при его недоступности автоматически фолбэкнется наclients/get. - Отметьте нужных клиентов и нажмите «Создать клиентские аккаунты для отмеченных»
- Откройте созданный клиентский аккаунт и нажмите «Синхронизировать кампании»
- Опционально — настройте дефолтный источник или правила маппинга кампаний
Замечания
- Один ClientID обслуживает все клиентские аккаунты — токен лежит у агента.
- Срок access_token — 1 год, refresh_token действует столько же. Перед истечением приложение обновляет токен автоматически.
- В Яндексе Redirect URI должен точно совпадать с тем, что указано
в
APP_URLв.env. Сейчас приложение ожидает:https://analytic.tech-marcar.ru/yandex-direct/oauth/callback - Если у вас несколько разных агентов (под разные группы клиентов) — повторите шаг 6 несколько раз, выбирая в окне Яндекса соответствующий аккаунт.
- Production-API
api.direct.yandex.comработает только при одобренной заявке «Полный доступ» (Шаг 3). До одобрения используйте Sandbox.