Выбор кабинета и заголовок Client-Login
Сначала определите владельца токена и нужный кабинет. Пользователь должен видеть логин кабинета перед выгрузкой статистики и изменениями. Настройки доступа разбирают штатные скрипты; токен не нужно открывать, копировать в команду или выводить.
Когда нужен заголовок
Для клиентского токена кабинет определяется самим токеном, заголовок Client-Login не отправляется. Для агентского токена он обычно содержит логин клиента агентства. Логин агентства вместо логина рекламодателя не подходит.
| Вызов | Client-Login | Что получается |
|---|---|---|
| Большинство сервисов, включая Campaigns, Ads и Reports | Логин выбранного клиента | Данные и действия клиента |
| AgencyClients | Не передаётся | Список клиентов агентства; отбор логинов задаётся в параметрах |
| Clients | Логин клиента, если нужен клиент | Без заголовка возвращаются сведения о владельце токена |
| Dictionaries | Не передаётся | Общие справочники |
| Changes.checkDictionaries | Не передаётся | Даты изменений общих справочников |
| KeywordsResearch.hasSearchVolume | Не передаётся | Наличие спроса по фразам |
| Changes.check и Changes.checkCampaigns | Логин клиента | Изменения в выбранном кабинете |
Общие справочники одинаковы для кабинетов. При агентском токене запрос без Client-Login оплачивается баллами агентства; с ним — баллами клиента. Use-Operator-Units: true позволяет оплатить запрос к клиенту баллами агентства. С клиентским токеном этот заголовок не используется.
Проверка принадлежности кампании
Ответ Campaigns.get по SelectionCriteria.Ids сам по себе не доказывает принадлежность кампании выбранному клиенту: при агентском доступе запрос может вернуть кампанию другого доступного клиента. Добавление States или Types рядом с Ids этого не исправляет.
Перед работой по идентификатору получите список кампаний выбранного кабинета без отбора по Ids и убедитесь, что кампания в нём есть. Штатные скрипты выполняют эту проверку. Не заменяйте её проверкой одного поля ответа: владельца кампании ответ явно не называет.
Для групп, объявлений, фраз, быстрых ссылок, условий ретаргетинга, наборов минус-фраз и уточнений отбор по идентификаторам ограничивается кабинетом. Из этого нельзя делать вывод о поведении любого другого сервиса.
Ошибки выбора кабинета
8000с упоминаниемClient-Login: отсутствует нужный логин или указан логин агентства вместо клиента.8800с упоминанием заголовка: такого логина нет. Это отличается от ошибки идентификатора кампании.54уAgencyClients.getможет означать клиентский токен; после этого тип доступа уточняется черезClients.get.
В API версии 4 логины передаются в параметрах методов: например, Logins у GetRetargetingGoals и AccountManagement. Заголовки Client-Login и Use-Operator-Units туда не переносятся.
Подробности методов: API_MAP.md. Реализация выбора заголовков: protocol.py.