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

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

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

  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_. Для отложенной публикации добавь publish_date в Unix-времени.
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')"

Базовые URL

Авторизация

Тип: 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/wall.post — Публикация записи на стене

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

Параметр Где Тип Обяз. Описание
v body string да Версия API
owner_id body integer нет ID пользователя или сообщества (со знаком минус)
message body string нет Текст записи; обязателен, если нет attachments
attachments body array нет Вложения _ через запятую; обязательны, если нет 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/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 символов

Нюансы

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


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