Отрасль: Реклама и аналитика. Актуально на 2026-10-24.
API рекламной платформы VK Реклама: получение токенов доступа (для своего кабинета, агентских и менеджерских клиентов), управление кампаниями и группами объявлений, список объявлений и статистика по объявлениям, кампаниям и пользователям. Ответы — JSON; списки возвращаются с полями count, offset, items.
Первый шаг интеграции: токен для своего кабинета или для клиентов агентства.
curl -X POST https://ads.vk.ru/api/v2/oauth2/token.json \
-d grant_type=client_credentials -d client_id=<client_id> -d client_secret=<client_secret>
# Продление
curl -X POST https://ads.vk.ru/api/v2/oauth2/token.json \
-d grant_type=refresh_token -d refresh_token=<refresh_token> -d client_id=<client_id> -d client_secret=<client_secret>
Показы, клики и расходы по кампаниям — в отчёт или сквозную аналитику.
curl -G "https://ads.vk.ru/api/v2/statistics/campaigns/day.json" \
-H "Authorization: Bearer $VKADS_TOKEN" \
-d id=6617841,6711647 -d date_from=2026-10-01 -d date_to=2026-10-23 -d metrics=base
Запускать типовые кампании из своей системы: под новый товар, город или акцию.
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": []
}'
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}
В ответе: access_token, token_type, scope, expires_in, refresh_token.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
grant_type |
body | string | да | client_credentials, agency_client_credentials, authorization_code или refresh_token |
client_id |
body | string | да | ID клиента API |
client_secret |
body | string | нет | Секрет; нужен для client_credentials, agency_client_credentials, refresh_token |
agency_client_name |
body | string | нет | Клиент агентства/менеджера (или agency_client_id) |
agency_client_id |
body | string | нет | ID клиента агентства/менеджера |
code |
body | string | нет | Код из редиректа для authorization_code |
refresh_token |
body | string | нет | Refresh-токен для продления |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
limit |
query | integer | нет | Число кампаний, по умолчанию 20 |
offset |
query | integer | нет | Смещение |
_id |
query | integer | нет | Фильтр по ID; несколько — _id__in=6617841,6711647 |
_status |
query | string | нет | active, blocked, deleted; также _status__ne, _status__in |
sorting |
query | string | нет | id, name, status; минус — по убыванию, например -id |
Пример ответа:
{
"count": 3,
"offset": 0,
"items": [
{
"id": 6617841,
"name": "New campaign 2022-07-15 17:53"
},
{
"id": 6711647,
"name": "New campaign 2022-08-16 19:49"
},
{
"id": 6711665,
"name": "New campaign 2022-08-16 19:51"
}
]
}
Если 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": []
}
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
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 |
Ответ: 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 |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
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 | нет | Поиск по тексту объявления (с учётом регистра) |
object — banners, campaigns или users; period — day или summary.
В ответе: items[] (id, rows по датам, total) и общий total.
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
object |
path | string | да | banners, campaigns, users |
period |
path | string | да | day или summary |
id |
query | string | да | ID объектов через запятую, до 200 |
date_from |
query | string | нет | Начало периода YYYY-MM-DD (обязателен для day) |
date_to |
query | string | нет | Конец периода включительно (обязателен для day) |
metrics |
query | string | нет | all, base (по умолчанию), events, video, uniques, tps, playable, romi |
attribution |
query | string | нет | Модель атрибуции impression; для summary игнорируется |
| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
object |
path | string | да | banners, campaigns, users |
date_from |
query | string | да | Начало периода YYYY-MM-DD |
date_to |
query | string | нет | Конец периода, по умолчанию текущая дата |
id |
query | string | нет | ID объектов через запятую |
fields |
query | string | нет | Наборы метрик, по умолчанию base |
attribution |
query | string | нет | impression или conversion (по умолчанию) |
campaign_id |
query | string | нет | Фильтр по кампаниям (для статистики объявлений) |
sort_by |
query | string | нет | Сортировка metric.field_name |
d |
query | string | нет | Направление: asc (по умолчанию) или desc |
limit |
query | integer | нет | 1–250, по умолчанию 20 |
offset |
query | integer | нет | Смещение, по умолчанию 0 |
_ и суффиксами __in, __ne, __lt, __lte, __gt, __gte.ad_groups нельзя запрашивать через fields в списке кампаний./api/v2/statistics/goals/...), in-app событиям (/api/v2/statistics/inapp/...) и офлайн-конверсиям.grant_type=agency_client_credentials.| Код | Описание |
|---|---|
400 |
Ошибка валидации |
403 |
Превышен лимит токенов (5 на пару client_id и пользователь) или нет доступа |
Если этого недостаточно — официальная документация: https://ads.vk.ru/en/doc/api/info/Authorization JSON: https://mcp-everything.ru/api/integrations/vk-ads. MCP: https://mcp-everything.ru/mcp