---
slug: "vk-api"
name: "VK API"
vendor: "VK"
industry: "communications"
docsUrl: "https://dev.vk.com/ru/api/api-requests"
version: 2
updatedAt: "2026-10-24"
---

# VK API

Отрасль: Связь и уведомления. Актуально на 2026-10-24.

API социальной сети ВКонтакте: пользователи, сообщества, стена, сообщения, фотографии, Long Poll для ботов сообществ и ещё несколько сотен методов (в JSON-схеме VK — 569). Методы вызываются по имени вида `раздел.операция` (например, `users.get`); ответ — JSON с полем `response` или `error`. Здесь собраны основные методы для работы с профилями, сообществами, постами и сообщениями.

## Сценарии

### Бот сообщества: принимать сообщения через Long Poll

Чат-бот в сообщениях сообщества ВКонтакте без публичного сервера: бот сам забирает новые события.

1. В настройках сообщества включи сообщения и Bots Long Poll API (Управление → Работа с API), отметь тип события «Входящее сообщение» и создай ключ доступа сообщества с правом на сообщения.
2. Получи параметры сервера: POST /method/groups.getLongPollServer с group_id и v. В ответе server, key и ts.
3. В цикле делай запрос к адресу server с act=a_check, key, ts и wait=25. В ответе — новый ts и updates; события входящих сообщений имеют type = message_new.
4. Ответь пользователю: POST /method/messages.send с peer_id из события, message и random_id — уникальным числом, иначе VK может посчитать сообщение повтором.
5. Тело запросов — form-urlencoded или multipart, JSON не поддерживается. Параметр v (версия API) обязателен в каждом запросе.

```python
import random, requests

TOKEN, GROUP_ID, V = "<ключ сообщества>", 123456, "5.199"
H = {"Authorization": f"Bearer {TOKEN}"}

def api(method, **params):
    r = requests.post(f"https://api.vk.ru/method/{method}", headers=H, data={**params, "v": V}).json()
    if "error" in r:
        raise RuntimeError(r["error"])
    return r["response"]

lp = api("groups.getLongPollServer", group_id=GROUP_ID)
ts = lp["ts"]
while True:
    resp = requests.get(lp["server"], params={"act": "a_check", "key": lp["key"], "ts": ts, "wait": 25}, timeout=35).json()
    if "failed" in resp:  # ключ устарел — получить новый
        lp = api("groups.getLongPollServer", group_id=GROUP_ID); ts = lp["ts"]; continue
    ts = resp["ts"]
    for u in resp["updates"]:
        if u["type"] == "message_new":
            msg = u["object"]["message"]
            api("messages.send", peer_id=msg["peer_id"], message=f"Вы написали: {msg['text']}", random_id=random.getrandbits(31))
```

### Кнопки в боте сообщества

Клавиатура под полем ввода или под сообщением: «Каталог», «Мой заказ», «Связаться с оператором».

1. Опиши клавиатуру JSON-объектом: buttons — строки кнопок, у каждой action с type = text, label и payload (по нему бот поймёт, что нажали). inline = true показывает кнопки под сообщением.
2. Отправь сообщение с клавиатурой: POST /method/messages.send с peer_id, message, random_id и keyboard — JSON-строкой.
3. Нажатие текстовой кнопки приходит как обычное входящее сообщение message_new — в нём есть payload кнопки.

```bash
curl https://api.vk.ru/method/messages.send \
  -H "Authorization: Bearer $VK_GROUP_TOKEN" \
  --data-urlencode 'peer_id=<peer_id>' \
  --data-urlencode "random_id=$RANDOM$RANDOM" \
  --data-urlencode 'message=Чем помочь?' \
  --data-urlencode 'keyboard={"one_time": false, "buttons": [[
      {"action": {"type": "text", "label": "Каталог", "payload": "{\"cmd\": \"catalog\"}"}, "color": "primary"},
      {"action": {"type": "text", "label": "Мой заказ", "payload": "{\"cmd\": \"order\"}"}, "color": "secondary"}
    ]]}' \
  --data-urlencode 'v=5.199'
```

### Опубликовать пост с картинкой в сообществе

Автопостинг: новости, акции, новые товары — на стену сообщества от его имени.

1. Нужен ключ пользователя — администратора сообщества (wall.post и загрузка фото на стену не работают с ключом сообщества).
2. Получи адрес загрузки: POST /method/photos.getWallUploadServer с group_id. Загрузи файл на upload_url полем photo в multipart-форме.
3. Сохрани фото: POST /method/photos.saveWallPhoto с group_id и значениями photo, server и hash из ответа сервера загрузки. В ответе — owner_id и id фото.
4. Опубликуй пост: POST /method/wall.post с owner_id = -ID сообщества (со знаком минус), from_group = 1, message и attachments = photo<owner_id>_<id>. Для отложенной публикации добавь publish_date в Unix-времени.

```bash
UPLOAD=$(curl -s https://api.vk.ru/method/photos.getWallUploadServer -H "Authorization: Bearer $VK_USER_TOKEN" \
  -d group_id=123456 -d v=5.199 | jq -r .response.upload_url)
R=$(curl -s -F "photo=@promo.jpg" "$UPLOAD")

SAVED=$(curl -s https://api.vk.ru/method/photos.saveWallPhoto -H "Authorization: Bearer $VK_USER_TOKEN" \
  -d group_id=123456 -d v=5.199 \
  --data-urlencode "photo=$(echo "$R" | jq -r .photo)" -d "server=$(echo "$R" | jq -r .server)" -d "hash=$(echo "$R" | jq -r .hash)")

curl https://api.vk.ru/method/wall.post -H "Authorization: Bearer $VK_USER_TOKEN" \
  -d owner_id=-123456 -d from_group=1 -d v=5.199 \
  --data-urlencode 'message=Скидка 20% на всё до воскресенья!' \
  -d "attachments=photo$(echo "$SAVED" | jq -r '.response[0].owner_id')_$(echo "$SAVED" | jq -r '.response[0].id')"
```

### Узнать данные пользователя или сообщества по ссылке

По ссылке vk.com/durov или vk.com/club1 получить ID и профиль — для привязки аккаунта, CRM или проверки.

1. Получи тип и ID объекта по короткому имени: POST /method/utils.resolveScreenName с screen_name (часть ссылки после vk.com/). В ответе type (user, group, application) и object_id.
2. Для пользователя запроси профиль: POST /method/users.get с user_ids и fields — нужными полями (screen_name, city, photo_100, last_seen и др.).
3. Для сообщества — POST /method/groups.getById с group_id.
4. Для таких запросов подходит сервисный ключ приложения — не нужно просить пользователя об авторизации. Профиль может быть приватным — ошибка 30.

```bash
curl https://api.vk.ru/method/utils.resolveScreenName -H "Authorization: Bearer $VK_SERVICE_TOKEN" \
  -d screen_name=durov -d v=5.199

curl https://api.vk.ru/method/users.get -H "Authorization: Bearer $VK_SERVICE_TOKEN" \
  -d user_ids=1 -d fields=screen_name,city,photo_100 -d v=5.199
```

### Выгрузить участников сообщества

Список подписчиков для аналитики или сегментации.

1. Запроси первую тысячу: POST /method/groups.getMembers с group_id, count = 1000 и offset = 0. В ответе count — общее число участников.
2. Листай с шагом offset += 1000, пока не наберёшь всех.
3. Для больших сообществ упакуй до 25 вызовов в один запрос: POST /method/execute с кодом на VKScript — так быстрее и не упрёшься в ограничение частоты (ошибка 6).
4. Если нужны поля участников (город, пол), передай fields — но ответ станет тяжелее.

```bash
curl https://api.vk.ru/method/execute -H "Authorization: Bearer $VK_SERVICE_TOKEN" \
  -d v=5.199 \
  --data-urlencode 'code=var i = 0; var res = []; while (i < 25) { res.push(API.groups.getMembers({"group_id": 123456, "count": 1000, "offset": i * 1000}).items); i = i + 1; } return res;'
```

## Базовые URL

- Боевой: `https://api.vk.ru`
- URL метода: `https://api.vk.ru/method/<имя-API-метода>`

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

Тип: Bearer-токен

Ключ доступа передаётся в каждом запросе в заголовке `Authorization: Bearer <КЛЮЧ_ДОСТУПА>`. Тип ключа указан у каждого метода: ключ пользователя, ключ сообщества или сервисный ключ приложения.

Ответ:

```
curl 'https://api.vk.ru/method/users.get' \
  -H 'Authorization: Bearer <КЛЮЧ_ДОСТУПА>' \
  -F 'user_ids=743784474' \
  -F 'fields=bdate' \
  -F 'v=5.131'
```

## Методы

### POST /method/users.get — Информация о пользователях

Ключи: пользователя, сообщества, сервисный.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `v` | body | string | да | Версия API |
| `user_ids` | body | array | нет | ID или короткие имена пользователей, до 1000; по умолчанию — текущий |
| `fields` | body | array | нет | Доп. поля: screen_name, sex, bdate, city, photo_100, online, last_seen и др. |
| `name_case` | body | string | нет | Падеж имени: nom (по умолчанию), gen, dat, acc, ins, abl |

### POST /method/utils.resolveScreenName — Тип и ID объекта по короткому имени

Ключи: пользователя, сообщества, сервисный.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `v` | body | string | да | Версия API |
| `screen_name` | body | string | да | Короткое имя пользователя, сообщества или приложения |

### POST /method/groups.getById — Информация о сообществах

Ключи: пользователя, сообщества, сервисный.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `v` | body | string | да | Версия API |
| `group_ids` | body | array | нет | ID или короткие имена сообществ |
| `group_id` | body | string | нет | ID или короткое имя одного сообщества |
| `fields` | body | array | нет | Доп. поля сообщества |

### POST /method/groups.getMembers — Участники сообщества

Ключи: пользователя, сообщества, сервисный.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `v` | body | string | да | Версия API |
| `group_id` | body | string | нет | ID или короткое имя сообщества |
| `sort` | body | string | нет | id_asc (по умолчанию), id_desc, time_asc, time_desc |
| `offset` | body | integer | нет | Смещение |
| `count` | body | integer | нет | Количество, по умолчанию и максимум 1000 |
| `fields` | body | array | нет | Доп. поля участников |
| `filter` | body | string | нет | friends, unsure и др. |

### POST /method/wall.get — Записи со стены

Ключи: пользователя, сервисный.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `v` | body | string | да | Версия API |
| `owner_id` | body | integer | нет | ID владельца стены; у сообщества — со знаком минус |
| `domain` | body | string | нет | Короткий адрес пользователя или сообщества |
| `offset` | body | integer | нет | Смещение |
| `count` | body | integer | нет | Число записей, максимум 100 |
| `filter` | body | string | нет | Фильтр записей |
| `extended` | body | boolean | нет | 1 — вернуть также profiles и groups |

### POST /method/wall.post — Публикация записи на стене

Ключ: пользователя. Также публикует предложенные и отложенные записи.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `v` | body | string | да | Версия API |
| `owner_id` | body | integer | нет | ID пользователя или сообщества (со знаком минус) |
| `message` | body | string | нет | Текст записи; обязателен, если нет attachments |
| `attachments` | body | array | нет | Вложения <owner_id>_<media_id> через запятую; обязательны, если нет message |
| `from_group` | body | boolean | нет | 1 — публикация от имени сообщества |
| `signed` | body | boolean | нет | Подписать запись именем автора (для from_group=1) |
| `publish_date` | body | integer | нет | Дата отложенной публикации, Unix time |
| `friends_only` | body | boolean | нет | Только для друзей |
| `post_id` | body | integer | нет | ID отложенной или предложенной записи для публикации |
| `mark_as_ads` | body | boolean | нет | Пометить как рекламу |
| `close_comments` | body | boolean | нет | Закрыть комментарии |

### POST /method/messages.send — Отправка сообщения

Ключи: пользователя, сообщества.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `v` | body | string | да | Версия API |
| `peer_id` | body | integer | нет | Получатель: ID пользователя; 2000000000 + chat_id для беседы; -ID сообщества |
| `peer_ids` | body | array | нет | Несколько получателей, до 100 |
| `user_id` | body | integer | нет | ID пользователя |
| `domain` | body | string | нет | Короткий адрес пользователя |
| `random_id` | body | integer | нет | Уникальный ID для защиты от повторной отправки |
| `message` | body | string | нет | Текст; обязателен, если нет attachment |
| `attachment` | body | string | нет | Вложения <owner_id>_<media_id> через запятую; обязательны, если нет message |
| `reply_to` | body | integer | нет | ID сообщения, на которое отвечаем |
| `forward_messages` | body | array | нет | ID пересылаемых сообщений через запятую |
| `keyboard` | body | string | нет | Клавиатура бота (JSON) |
| `payload` | body | string | нет | Полезная нагрузка |
| `group_id` | body | integer | нет | ID сообщества (с ключом сообщества) |
| `dont_parse_links` | body | boolean | нет | Не создавать сниппеты ссылок |
| `disable_mentions` | body | boolean | нет | Отключить уведомления об упоминаниях |

### POST /method/groups.getLongPollServer — Данные для подключения к Bots Long Poll

Ключи: пользователя, сообщества. Возвращает данные для запросов к Long Poll серверу событий сообщества.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `v` | body | string | да | Версия API |
| `group_id` | body | integer | да | ID сообщества |

### POST /method/photos.getWallUploadServer — Адрес для загрузки фото на стену

Ключ: пользователя. Дальше файл загружается на полученный адрес, затем сохраняется методом `photos.saveWallPhoto`.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `v` | body | string | да | Версия API |
| `group_id` | body | integer | нет | ID сообщества, на стену которого загружается фото |

### POST /method/photos.saveWallPhoto — Сохранение загруженного фото

Ключ: пользователя.

| Параметр | Где | Тип | Обяз. | Описание |
|---|---|---|---|---|
| `v` | body | string | да | Версия API |
| `photo` | body | string | да | Значение photo из ответа сервера загрузки |
| `server` | body | integer | нет | Значение server из ответа сервера загрузки |
| `hash` | body | string | нет | Значение hash из ответа сервера загрузки |
| `user_id` | body | integer | нет | ID пользователя-владельца стены |
| `group_id` | body | integer | нет | ID сообщества-владельца стены |
| `caption` | body | string | нет | Описание фото, до 2048 символов |

### POST /method/execute — Пакетное выполнение кода

Ключи: пользователя, сообщества. Выполняет код, вызывающий несколько методов API за один запрос; ошибка компиляции — код 12.

## Нюансы

- HTTP-методы GET и POST равнозначны; только HTTPS.
- Обязательный во всех запросах параметр `v` — версия API. В документации указана актуальная версия 5.131, а официальная JSON-схема методов VK описывает версию 5.199.
- Тело POST — `application/x-www-form-urlencoded` или `multipart/form-data` (для файлов и данных больше 2 КБ); `application/json` не поддерживается.
- Имя метода чувствительно к регистру.
- Общие параметры для всех методов: `lang` (`ru`, `uk`, `be`, `en`, `es`, `fi`, `de`, `it`) и `test_mode=1`.
- ID сообщества в `owner_id` передаётся со знаком минус.
- Кроме ограничений частоты есть закрытые количественные лимиты на однотипные методы: при превышении метод может стать временно недоступен или потребовать капчу.

## Ошибки

| Код | Описание |
|---|---|
| `1` | Неизвестная ошибка |
| `3` | Неизвестный метод |
| `5` | Ошибка авторизации пользователя |
| `6` | Слишком много запросов в секунду |
| `7` | Нет прав на действие |
| `8` | Неверный запрос |
| `9` | Flood control |
| `10` | Внутренняя ошибка сервера |
| `12` | Ошибка компиляции кода (execute) |
| `14` | Требуется ввод капчи |
| `15` | Доступ запрещён |
| `17` | Требуется валидация |
| `18` | Пользователь удалён или заблокирован |
| `27` | Ошибка авторизации сообщества |
| `28` | Ошибка авторизации приложения |
| `29` | Достигнут лимит запросов |
| `30` | Профиль приватный |
| `36` | Выполнение метода прервано по таймауту |
| `42` | IP не разрешён |

## Ограничения

Методы секции `secure`: до 100 000 пользователей — 8, до 1 000 000 — 20, больше — 35 запросов в секунду. При превышении — ошибка `6`.

## Источники

- [Формат запросов VK API](https://dev.vk.com/ru/api/api-requests)
- [Методы API](https://dev.vk.com/ru/method)
- [VK API JSON Schema (официальный репозиторий VKCOM)](https://github.com/VKCOM/vk-api-schema)

---

Если этого недостаточно — официальная документация: https://dev.vk.com/ru/api/api-requests
JSON: https://mcp-everything.ru/api/integrations/vk-api. MCP: https://mcp-everything.ru/mcp
