Перейти к содержимому

Ошибка 403 Invalid Credentials в Unity Ads API: нет роли

Ключ service account рабочий, а запросы падают с 403 Invalid Credentials: у аккаунта нет роли. Какие роли нужны и кто может создать ключ.

Опубликовано
5 мин чтения
5 мин чтения
English
В статье
  1. Ключ создан, а запросы падают с 403
  2. Какие роли нужны под какую задачу
  3. Кто может создать ключ
  4. Секрет показывается один раз
  5. Порядок проверки, когда пришёл 403
  6. Чего нет в доках
  7. Как это выглядит в DarkCore Ramet

Ошибка 403 Invalid Credentials при рабочем ключе в документации Unity имеет одну описанную причину: у service account нет роли. Аккаунт без ролей проходит аутентификацию, но каждый его запрос получает 403. Роль назначается отдельно от ключа, и отдельно на каждый ресурс.

Ключ создан, а запросы падают с 403

Сценарий знакомый. В Settings > API management завели service account, выпустили ключ, забрали Key ID и Secret key. Первый же запрос в Advertiser Public API вернул 403 с текстом Invalid Credentials. Читать это как «ключ неверный» не нужно.

Страница Unity про поиск credentials говорит: service account без назначенной роли всё равно аутентифицируется, но каждый его запрос заканчивается 403 и сообщением Invalid Credentials. Роль нужно назначить до того, как вы начнёте пользоваться ключом. Каждая роль даёт одно разрешение.

То же в записи за сентябрь 2026 на странице What’s new in User Acquisition: после создания ключа организационную роль service account нужно назначить, иначе запросы падают с 403 и Invalid Credentials.

Справочник по миграции уточняет: 403 с тем же ключом означает не выданную роль, а не ошибку в запросе. Там же деталь для тех, кто переезжает со старого API: сам ключ не меняется, а нужные роли и разрешения другие. Ключ, который работал с /advertise/v1, стоит перепроверить на роли. Про сам переезд читайте в статье про Advertiser Public API.

Какие роли нужны под какую задачу

Роли лежат в категории User Acquisition. Назначаются они кнопкой + Manage organization roles в разделе Organization roles у service account. Что нужно под задачу, по странице про credentials:

Задача Роль Что закрывает
Интеграция с MMP Advertise Stats API MMP Viewer /reports/mmp
Отчёты Advertise Stats API Viewer /reports/acquisitions, /reports/skan
Управление кампаниями роли Advertise API: Apps, Bids, Budgets, Campaigns, Creative packs, Targeting по роли на каждый ресурс, которым управляете

Обратите внимание на формулировку Unity: запрос к ресурсу, на который у service account нет роли, падает с 403, даже когда запросы к другим ресурсам проходят. По логике этой же фразы, если приложения читаются, а биды нет, роль на приложения у вас есть, а на биды нет.

Массовый запуск трогает сразу несколько ресурсов: кампании, таргетинг, биды, бюджет, назначение креативов. Роли Advertise API нужны на каждый ресурс, которым вы управляете; для запуска кампаний пачкой это, скорее всего, несколько ролей. Какие именно разрешения внутри каждой, Unity на прочитанных нами страницах не раскрывает. Точный минимум придётся подбирать, глядя на ответы API.

Кто может создать ключ

Создавать service accounts и секретные ключи могут только Organization Owners и Organization Managers. Если у вас роль ниже, ключ себе не выпустить: нужен Owner или Manager вашей организации.

Путь такой:

  1. Откройте Settings > API management.
  2. На любой из двух карточек API откройте Service account.
  3. Выберите нужный аккаунт или нажмите + New.
  4. В разделе Keys нажмите + Add key. Дашборд выдаст Key ID и Secret key.
  5. Затем назначьте роли через + Manage organization roles.

Шаг 5 легко пропустить: ключ без роли аутентифицируется, и только потом каждый запрос получает 403.

Секрет показывается один раз

Дашборд показывает Secret key только один раз. Ранее созданные ключи посмотреть нельзя. Key ID и Secret key Unity просит хранить вместе в надёжном месте. Потеряли секрет: создаёте новый ключ.

Отсюда практическое правило для команды. Если ключ выпускал не вы и секрета у вас нет, искать его в дашборде бесполезно, его там нет. Просите человека, у которого он сохранён, либо выпускайте новый ключ через Owner или Manager. Поэтому секрет сохраняйте сразу, в момент выпуска.

Порядок проверки, когда пришёл 403

Идите сверху вниз и останавливайтесь на первом найденном:

  1. Убедитесь, что запросы идут ключом того service account, роли которого вы смотрите. Если аккаунтов несколько, перепутать их проще всего.
  2. Откройте service account и посмотрите Organization roles. Пусто: это и есть причина.
  3. Если роли есть, сверьте их с задачей по таблице выше: роль для отчётов не открывает управление кампаниями, и наоборот.
  4. Выясните, какие ресурсы падают, а какие нет. Ресурс без роли даёт 403 при том, что остальные могут работать.
  5. Если переехали со старого API, пересмотрите роли заново: ключ тот же, а требования к ролям другие.
  6. Способ авторизации причиной не считайте: по справочнику миграции HTTP Basic на новом API по-прежнему работает, дополнительно принимается Bearer JWT.

Новый ключ здесь, скорее всего, не поможет. Unity пишет, что роль назначают service account. Наш вывод, не слова Unity: свежий ключ того же аккаунта эту ошибку, скорее всего, не уберёт.

Чего нет в доках

Прочитанные страницы не отвечают на несколько вопросов, которые возникают при работе с ключами:

  • Как выглядит запрос. На странице про credentials нет ни примера заголовка, ни примера вызова. Руководство get started, на которое ссылается страница про управление кампаниями, тоже не называет заголовок авторизации и значения лимитов запросов.
  • Можно ли заменить ключ на месте (ротация) и отзываются ли старые ключи, когда вы добавили новый.
  • Срок жизни ключа.
  • Какие именно разрешения входят в каждую роль Advertise API.

Пока этого нет в документации, не закладывайте в процессы предположения вроде «старый ключ отзовётся сам».

Как это выглядит в DarkCore Ramet

DarkCore Ramet подключает организации Unity ключом service account или вашим Unity ID, а несколько кабинетов можно вести вместе. Запуск и правки идут через официальный Unity API, поэтому роли service account должны быть выданы в Unity до того, как вы начнёте пользоваться ключом. Каждое изменение читается обратно из Unity, прежде чем считается выполненным.

В DarkCore Ramet

Подключите организацию Unity ключом service account

DarkCore Ramet подключает организации Unity по ключу service account или вашему Unity ID. Запуск и правки идут через официальный Unity API.

Все статьи