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

Unity Advertiser Public API: что изменилось с сентября 2026

Advertiser Public API заменил Advertising Management API: новая база, id приложений, микродоллары, другие поля. Порядок миграции и что убрано.

Опубликовано
6 мин чтения
6 мин чтения
Українська
English
В статье
  1. Что Unity написала про замену
  2. Новая база и префикс пути
  3. Id приложений: из campaignSetId в UUID
  4. Деньги в микродолларах
  5. Переименованные поля
  6. Маршруты: что склеилось
  7. Что убрали
  8. Порядок миграции
  9. Чего нет в доках
  10. Как это выглядит в DarkCore Ramet

В сентябре 2026 года Advertiser Public API заменил Advertising Management API (/advertise/v1). Если ваши скрипты или сервисы ходят в старый API, их придётся переписывать: у нового другая база и префикс пути, id приложений стали UUID, деньги передаются в микродолларах, часть полей переименована, часть убрана. Даты отключения старого API в документации Unity нет.

Что Unity написала про замену

Запись за сентябрь 2026 на странице What’s new in User Acquisition говорит прямо: Advertiser Public API заменяет Advertising Management API (/advertise/v1), а у кого есть интеграция со старым API, тому нужно перейти на новый. Страница про управление кампаниями через API называет /advertise/v1 предыдущей версией advertiser API. Через новый можно программно управлять приложениями, кампаниями, бидами, source bids и ROAS-целями, бюджетами, креативами и creative packs. В дашборде он лежит в Settings > API management.

Подробную карту переноса Unity вынесла на отдельную страницу, Advertiser API migration reference. Всё ниже про маршруты, поля и порядок взято оттуда. Страница сама говорит, что написана для LLM-агентов, пишущих код, а из даты на ней только пометка «Last updated 2 months ago». Читается как справочник, не как инструкция для людей.

Новая база и префикс пути

Хост остаётся прежним, services.api.unity.com. Меняются база и путь:

prod:    https://services.api.unity.com/ads/advertiser
staging: https://staging.services.api.unity.com/ads/advertiser
Что Старый API Новый API
Префикс пути /advertise/v1 /public/v1
Приложение в пути apps/{campaignSetId} applications/{applicationId}
Авторизация HTTP Basic (ключ service account) HTTP Basic работает, дополнительно принимается Bearer JWT

Пример нового маршрута со страницы Unity:

…/ads/advertiser/public/v1/organizations/{orgId}/applications/{applicationId}/campaigns

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

Id приложений: из campaignSetId в UUID

Раньше приложение определялось через campaignSetId, 24 символа hex. Теперь это applicationId в формате UUID. Unity советует сохранить таблицу соответствия «старый id → новый»: без неё вы не свяжете старые данные с новыми маршрутами.

Id кампаний, креативов и creative packs не меняются, это по-прежнему 24 символа hex. Переживает ли id креатива повторную загрузку, страница не говорит и предлагает проверить самому.

Деньги в микродолларах

Раньше суммы были десятичными строками в долларах. Теперь это целые числа в микродолларах, 1 USD равен 1 000 000. Примеры со страницы Unity: "2500.20" превращается в "2500200000", а бид "0.201" в 201000. Заметьте: в примерах Unity сумма дана в кавычках, бид без. Точный тип поля сверяйте со схемой, а не с этой статьёй.

Цель по ROAS тоже поменялась. Было goal с процентом строкой ("12.34"), стало target с долей числом (0.1234).

Переводить через умножение на 1e6 не стоит: дробное число рядом с границей округления может дать хвост. Надёжнее резать строку:

// "2500.20" -> 2500200000n, "0.201" -> 201000n
// знаки после шестого отбрасываются, отрицательные суммы не проверялись
function usdToMicros(usd) {
  const [whole, frac = ""] = String(usd).split(".");
  return BigInt(whole + frac.padEnd(6, "0").slice(0, 6));
}

Переименованные поля

Выборка из справочника Unity:

Было Стало Заметка
store store + обязательный platform платформу теперь надо указывать
goal optimizationType installs стал cpi, eventOptimization стал appEventConversion
scheduleStart / scheduleEnd start / end
enabled paused смысл перевёрнут
biddingStrategy bidConfigurationMethod automated стал auto
cpiBids[] manualBids[]
sourceBids[] manualSourceBids[]
eventOptimizationBids[] appEventBids[]

Самая дорогая ошибка здесь enabled → paused. Булево значение переносится механически, а смысл у него обратный: если пересадить enabled: true в paused: true, живая кампания встанет на паузу, а выключенная запустится.

Маршруты: что склеилось

Из выбранных Unity примеров:

  • GET …/apps стал GET …/applications.
  • Список кампаний по приложению заменён общим по организации: GET …/organizations/{orgId}/campaigns?appIds={applicationId}.
  • Четыре маршрута бидов (cpi-bids, source-bids, roas-bids, event-optimization-bids) слились в один PATCH …/campaigns/{campaignId}/bids.
  • Бюджет и таргетинг правятся через PATCH …/campaigns/{campaignId}/budget-cap и PATCH …/campaigns/{campaignId}/targeting.
  • Назначение и снятие creative packs стало списочным: PATCH …/assign-creative-pack и DELETE …/unassign-creative-pack.
  • Чтение бидов, бюджета, таргетинга и packs переехало в GET campaign?includeFields=….

Про новый PATCH …/bids Unity пишет, что он заменяет весь набор бидов этого типа: надо слать полный массив, а [] очищает набор. Из этого следует практический вывод: если раньше вы добавляли один source bid отдельным запросом, то теперь отправка одного элемента сотрёт все остальные source bids. Сначала прочитайте текущий набор, потом меняйте и отправляйте целиком.

Что убрали

В новом API нет:

  • Удаления приложения. Unity пишет, что удаление приложений сейчас отключено на всей платформе.
  • Бидов по ретеншну и eligibility: они объявлены устаревшими. Для ROAS eligibility больше не нужна.
  • Части полей таргетинга: limitedAdTracking, connectionType, screenSize, screenDensity, allowedDevices, osMax.
  • Поля приложения adomain.
  • Типа креатива squareVideo: он не поддерживается.

Если ваша связка опиралась на что-то из этого списка, переписывать надо логику, а не только имена полей.

Порядок миграции

Порядок, который предлагает сама страница Unity:

  1. Конфиг: хост и префикс.
  2. Приложения и таблица соответствия id.
  3. Атрибуция.
  4. Креативы.
  5. Creative packs.
  6. Справочные запросы для управления кампаниями.
  7. Кампании: сначала создать только с optimizationType и start, остальное добить через PATCH.
  8. Биды, уже в микродолларах.
  9. Бюджет, тоже в микродолларах.
  10. Таргетинг.
  11. Назначение packs.
  12. Чтение.

Логика понятна: сначала то, на что ссылается остальное (приложения и их id), потом сами кампании, потом всё, что к ним крепится.

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

Страницы, которые мы прочитали, молчат о нескольких вещах, о которых вы спросите в первую очередь:

  • Даты отключения. Ни дата выключения /advertise/v1, ни срок, пока старый API ещё работает, нигде не указаны. Считать, что у вас есть время, нельзя. Считать, что его нет, тоже: просто неизвестно.
  • Лимиты запросов и формат заголовка авторизации. Страница про API-управление отсылает к руководству get started, а оно значений лимитов и заголовка не даёт. Никаких цифр лимитов в этой статье нет, потому что их нет в источнике.
  • Судьба id креативов при повторной загрузке. Unity просит проверить.

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

DarkCore Ramet работает с Unity Ads через официальный Unity API: организацию подключают ключом service account или своим Unity ID. Пары «апка — гео» превращаются в кампании пачкой с превью до отправки, а биды, дневной бюджет и паузы можно править сразу по многим кампаниям и кабинетам. Каждое изменение читается обратно из Unity, прежде чем считается выполненным.

В DarkCore Ramet

Залив по официальному Unity API пачкой

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

Все статьи