API VK Рекламы: Создать кампанию с группой объявлений

Сценарий из mcp-everything. Актуально на 2026-10-24.

Запускать типовые кампании из своей системы: под новый товар, город или акцию.

  1. Создай кампанию: POST /api/v2/ad_plans.json с name, objective (цель), date_start, date_end, бюджетами budget_limit_day и budget_limit и autobidding_mode. Без status кампания будет активной — передай status, если её нельзя запускать сразу.
  2. Группы объявлений можно передать сразу в ad_groups или создать отдельно: POST /api/v2/ad_groups.json с name, package_id (формат размещения), targetings и banners.
  3. Ответ 400 — ошибка валидации, подробности в теле. Проверь созданное: GET /api/v2/ad_groups.json и GET /api/v2/banners.json с фильтром _campaign_id.
curl -X POST https://ads.vk.ru/api/v2/ad_plans.json \
  -H "Authorization: Bearer $VKADS_TOKEN" -H 'Content-Type: application/json' \
  -d '{
        "name": "Кружки — осень 2026",
        "status": "blocked",
        "date_start": "2026-11-01 00:00:00",
        "date_end": "2026-11-30 00:00:00",
        "autobidding_mode": "max_goals",
        "budget_limit_day": "1000",
        "budget_limit": "20000",
        "objective": "<цель кампании>",
        "ad_groups": []
      }'

Базовые URL

Авторизация

Тип: OAuth 2.0

Токен получают методом POST /api/v2/oauth2/token.json (application/x-www-form-urlencoded) и передают в заголовке:

Токен живёт сутки (expires_in = 86400) и продлевается через refresh_token. На пару «client_id + пользователь» — не больше 5 токенов одновременно; запрос сверх лимита возвращает HTTP 403.

Authorization: Bearer {access_token}

Методы сценария

POST /api/v2/ad_plans.json — Создание кампании

Если status не передан, ставится active. Ответ: id (и ad_groups, если кампания создана с группами); 400 — ошибка валидации.

Параметр Где Тип Обяз. Описание
name body string нет Название кампании
status body string нет Статус, по умолчанию active
date_start body string нет Дата начала
date_end body string нет Дата окончания
autobidding_mode body string нет Стратегия ставок, например max_goals
budget_limit_day body string нет Дневной бюджет
budget_limit body string нет Общий бюджет
objective body string нет Цель кампании
ad_groups body array нет Группы объявлений

Пример запроса:

POST /api/v2/ad_plans.json
{
    "name": "My new campaign",
    "status": "active",
    "date_start": "2022-04-01 00:00:00",
    "date_end": "2022-04-15 00:00:00",
    "autobidding_mode": "max_goals",
    "budget_limit_day": "1000",
    "budget_limit": "5000",
    "enable_utm": "False",
    "enable_offline_goals": "False",
    "objective": "playersengagement",
    "ad_groups": []
}

GET /api/v2/ad_groups.json — Список групп объявлений

Параметр Где Тип Обяз. Описание
limit query integer нет Число групп, по умолчанию 20
offset query integer нет Смещение
_id query integer нет Фильтр по ID (_id__in)
_status query string нет active, blocked, deleted
_last_updated query string нет Дата обновления с __lt, __lte, __gt, __gte
sorting query string нет id, name, status

POST /api/v2/ad_groups.json — Создание группы объявлений

Ответ: id и banners (если объявления переданы).

Параметр Где Тип Обяз. Описание
name body string нет Название группы
status body string нет По умолчанию active
date_start body string нет Дата начала
date_end body string нет Дата окончания
budget_limit_day body string нет Дневной бюджет
budget_limit body string нет Общий бюджет (кратно budget_limit_step)
package_id body integer нет Пакет (формат размещения)
banners body array нет Объявления: content, urls, textblocks
targetings body object нет Таргетинги: пол, возраст, гео, интересы, pads

GET /api/v2/banners.json — Список объявлений

Параметр Где Тип Обяз. Описание
limit query integer нет По умолчанию 20
offset query integer нет Смещение
_id query integer нет Фильтр по ID (_id__in)
_campaign_id query integer нет Фильтр по кампании (_campaign_id__in)
_status query string нет active, blocked, deleted
_updated query string нет Дата обновления с __lt, __lte, __gt, __gte
_url query string нет Поиск по URL объявления (с учётом регистра)
_textblock query string нет Поиск по тексту объявления (с учётом регистра)

Нюансы

Другие сценарии


Если этого недостаточно — официальная документация: https://ads.vk.ru/en/doc/api/info/Authorization Вся интеграция одним документом: https://mcp-everything.ru/integrations/vk-ads.md