# 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.

```bash
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

- Боевой: `https://ads.vk.ru`
- Методы: `/api/v2/`

## Авторизация

Тип: 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 | нет | Поиск по тексту объявления (с учётом регистра) |

## Нюансы

- Фильтры в списках задаются префиксом `_` и суффиксами `__in`, `__ne`, `__lt`, `__lte`, `__gt`, `__gte`.
- `ad_groups` нельзя запрашивать через `fields` в списке кампаний.
- Посуточная статистика доступна не больше чем за последние 365 дней.
- Временные токены удаляются автоматически после месяца без использования.
- Есть отдельные эндпоинты статистики по целям (`/api/v2/statistics/goals/...`), in-app событиям (`/api/v2/statistics/inapp/...`) и офлайн-конверсиям.
- Для агентств и менеджеров — ресурсы AgencyClients и ManagerClients и токен с `grant_type=agency_client_credentials`.

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

- [Получить токен доступа к рекламному кабинету](https://mcp-everything.ru/integrations/vk-ads/scenarios/poluchit-token-dostupa-k-reklamnomu.md)
- [Выгрузить статистику кампаний по дням](https://mcp-everything.ru/integrations/vk-ads/scenarios/vygruzit-statistiku-kampaniy-po-dnyam.md)

---

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