Этот документ описывает все доступные API-методы платформы Luna (OpenVK). С его помощью вы сможете написать своё мобильное приложение, десктопный клиент, бота или любой другой инструмент, взаимодействующий с нашей социальной сетью.
API полностью совместим с протоколом VK API (версия 4.100), что означает: если вы знакомы с разработкой под ВКонтакте — вы уже знаете, как работать с нашим API.
Базовый URL: https://luna.hamystudio.ru
Для работы с API вам нужен токен. Чтобы его получить, отправьте POST-запрос на /token:
POST /token
Content-Type: application/x-www-form-urlencoded
grant_type=password&username=ваш_логин&password=ваш_пароль
Ответ (успех):
{
"access_token": "1-abcdef01-23456789-abcdef01-23456789-abcdef01-23456789-abcdef01-23456789-abcdef01-23456789-abcdef01-jill",
"expires_in": 0,
"user_id": 1,
"is_stale": false,
"secret": "..."
}
Если включена двухфакторная аутентификация (2FA):
{
"error": "need_validation",
"error_description": "use app code",
"validation_type": "2fa_app",
"validation_sid": "2fa_1_...",
"phone_mask": "+7 *** *** ** 42",
"redirect_url": "..."
}
В этом случае нужно отправить код из приложения 2FA:
POST /token
grant_type=password&username=логин&password=пароль&code=123456&2fa_supported=1
Добавьте access_token как POST-параметр к любому запросу:
POST /method/users.get
access_token=ВАШ_ТОКЕН&fields=photo_200,status
Или используйте параметр auth_mechanism=roaming если вы авторизованы через браузер (сессионные куки).
Успешный ответ:
{
"response": { ... }
}
Ошибка:
{
"error_code": 5,
"error_msg": "User authorization failed: no access_token passed",
"request_params": [
{"key": "method", "value": "users.get"}
]
}
HTTP-статус при ошибке: 400 Bad API Call.
Получение информации о пользователях.
Параметры:
| Параметр | Тип | По умолчанию | Описание |
|----------|-----|-------------|----------|
| user_ids | string | "0" | ID пользователей через запятую |
| fields | string | "" | Дополнительные поля (см. ниже) |
| offset | int | 0 | Смещение |
| count | int | 100 | Количество (макс. 100) |
Доступные поля (fields):
verified, sex, has_photo, photo_max_orig, photo_max, photo_50, photo_100, photo_200, photo_200_orig, photo_400_orig, status, screen_name, friend_status, last_seen, music, movies, tv, books, city, interests, quotes, games, email, telegram, about, rating, counters, correct_counters, guid, background, reg_date, is_dead, nickname, blacklisted_by_me, blacklisted, custom_fields, bdate
Пример:
POST /method/users.get
user_ids=1,2&fields=photo_200,status,sex
Получение списка подписчиков пользователя. Требуется авторизация.
Параметры: user_id, fields, offset, count
Поиск пользователей. Требуется авторизация.
Параметры:
| Параметр | Тип | Описание |
|----------|-----|----------|
| q | string | Поисковый запрос |
| fields | string | Дополнительные поля |
| offset, count | int | Пагинация |
| city | string | Город |
| hometown | string | Родной город |
| sex | int | 0 — любой, 1 — жен, 2 — муж, 3 — не указано |
| status | int | Семейное положение |
| online | bool | Только онлайн |
| sort | int | Сортировка |
| polit_views | int | Политические взгляды |
| fav_music, fav_films, fav_shows, fav_books, interests | string | Фильтры по интересам |
Пожаловаться на пользователя. Требуется авторизация.
Параметры: user_id, type (spam/insult/etc, по умолч. "spam"), comment
Получить данные своего профиля. Требуется авторизация.
Возвращает: объект с полями first_name, last_name, photo_200, nickname, id, is_verified, status, bdate, sex, screen_name, relation, home_town, audio_status.
Сохранить изменения профиля. Требуется авторизация.
Параметры: first_name, last_name, screen_name, sex (-1 = не менять), relation (-1 = не менять), bdate, bdate_visibility, home_town, status, telegram
Отметить пользователя как онлайн. Требуется авторизация.
Отметить как оффлайн (заглушка). Требуется авторизация.
Счётчики для колокольчика. Требуется авторизация.
Возвращает: {"friends": int, "notifications": int, "messages": int}
Баланс голосов. Требуется авторизация.
Возвращает: {"votes": int}
Настройки платформы. Требуется авторизация.
Возвращает: {"avatar_style", "style", "show_rating", "nsfw_tolerance", "post_view", "main_page"}
Отправить голоса пользователю. Требуется авторизация.
Параметры: receiver (ID получателя), value (количество), message (сообщение)
Добавить/удалить из чёрного списка. Требуется авторизация.
Параметр: owner_id (ID пользователя)
Список заблокированных пользователей. Требуется авторизация.
Параметры: offset, count, fields
Сохранить интересы и предпочтения. Требуется авторизация.
Параметры: interests, fav_music, fav_films, fav_shows, fav_books, fav_quote, fav_games, about
Отправить личное сообщение. Требуется авторизация.
Параметры:
| Параметр | Тип | Описание |
|----------|-----|----------|
| user_id | int | ID получателя |
| peer_id | int | ID диалога |
| domain | string | Экранное имя вместо user_id |
| message | string | Текст сообщения |
| attachment | string | Вложения (формат: type{ownerid}{id}) |
| sticker_id | int | ID стикера |
Возвращает: ID сообщения (int)
Получить историю переписки. Требуется авторизация.
Параметры: user_id или peer_id, offset, count, rev (обратный порядок), extended (включить профили), fields
Список диалогов. Требуется авторизация.
Параметры: offset, count, filter (all/unread/important), extended, fields
Получить сообщения по ID. Требуется авторизация.
Параметры: message_ids (через запятую), preview_length, extended
Удалить сообщения. Требуется авторизация.
Параметры: message_ids (через запятую), spam, delete_for_all
Восстановить сообщение. Требуется авторизация.
Параметр: message_id
Редактировать сообщение. Требуется авторизация.
Параметры: message_id, message, attachment, peer_id
Получить данные для LongPoll-соединения. Требуется авторизация.
Возвращает: {"key": string, "server": string, "ts": int, "pts": int}
Получить обновления через LongPoll. Требуется авторизация.
Параметры: ts (timestamp), preview_length, events_limit, msgs_limit
Список друзей пользователя. Требуется авторизация.
Параметры: user_id, fields, offset, count
Добавить в друзья или отправить заявку. Требуется авторизация.
Параметр: user_id
Возвращает: 1 — заявка отправлена, 2 — взаимные друзья.
Удалить из друзей. Требуется авторизация.
Проверить статус дружбы с пользователями. Требуется авторизация.
Параметр: user_ids (через запятую)
Возвращает: массив {"friend_status": int, "user_id": int}
Заявки в друзья. Требуется авторизация.
Параметры: fields, out (0 — входящие, 1 — исходящие), offset, count, extended
Список групп пользователя. Требуется авторизация.
Параметры: user_id, fields, offset, count, online, filter
Информация о группах по ID.
Параметры: group_ids (через запятую), group_id, fields, offset, count
Поиск групп.
Параметры: q (запрос), offset, count, fields
Вступить/покинуть группу. Требуется авторизация.
Параметр: group_id
Редактировать группу. Требуется авторизация.
Параметры: group_id, title, description, screen_name, website, wall, topics, adminlist, topicsAboveWall, hideFromGlobalFeed, audio
Участники группы. Требуется авторизация.
Параметры: group_id, offset, count, fields
Настройки группы. Требуется авторизация.
Проверить членство в группе. Требуется авторизация.
Параметры: group_id, user_id, extended
Посты на стене. Требуется авторизация.
Параметры:
| Параметр | Тип | Описание |
|----------|-----|----------|
| owner_id | int | ID владельца (отрицательный = группа) |
| domain | string | Экранное имя |
| offset, count | int | Пагинация |
| extended | int | 1 = вернуть профили и группы |
| filter | string | all/owner/others |
| rss | int | 1 = вернуть RSS-ленту |
Посты по ID. Требуется авторизация.
Параметр: posts (формат: "ownerId_postId" через запятую), extended, fields
Создать пост на стене. Требуется авторизация.
Параметры: owner_id, message, copyright, from_group, signed, attachments, post_id (для редактирования), explicit, lat, long, place_name
Репост записи. Требуется авторизация.
Параметры: object (формат: wall{ownerId}_{postId}), message, attachments, group_id, as_group, signed
Возвращает: {"success": 1, "post_id": int, "pretty_id": int, "reposts_count": int, "likes_count": int}
Редактировать пост. Требуется авторизация.
Параметры: owner_id, post_id, message, attachments, copyright, signed, explicit, lat, long, place_name
Удалить/восстановить пост. Требуется авторизация.
Параметры: owner_id, post_id
Закрепить/открепить пост. Требуется авторизация.
Комментарии к посту. Требуется авторизация.
Параметры: owner_id, post_id, need_likes, offset, count, fields, sort (asc/desc), extended
Добавить комментарий. Требуется авторизация.
Параметры: owner_id, post_id, message, attachments, from_group
Редактировать/удалить комментарий. Требуется авторизация.
Пожаловаться на пост/комментарий. Требуется авторизация.
Создать скрытый (рекламный) пост. Требуется авторизация.
Список альбомов. Требуется авторизация.
Параметры: owner_id, album_ids, offset, count, need_system, need_covers, photo_sizes
Фотографии в альбоме. Требуется авторизация.
Параметры: owner_id, album_id, photo_ids, extended, photo_sizes, offset, count
Все фотографии пользователя. Требуется авторизация.
Параметры: owner_id, extended, offset, count, photo_sizes
Фото по ID. Требуется авторизация.
Параметр: photos (формат: "{ownerId}_{photoId}" через запятую)
Управление альбомами. Требуется авторизация.
Удалить фото. Требуется авторизация.
Редактировать описание фото. Требуется авторизация.
Загрузка фотографий (двухэтапный процесс).
Шаг 1: Получить URL через photos.getUploadServer → Шаг 2: POST файл на URL → Шаг 3: photos.save с данными из ответа.
Комментарии к фото. Требуется авторизация.
Список аудиозаписей. Требуется авторизация.
Параметры: owner_id, album_id, audio_ids, need_user, offset, count, uploaded_only, shuffle, shuffle_seed, hash
Поиск музыки. Требуется авторизация.
Параметры: q, auto_complete, lyrics, performer_only, sort, search_own, offset, count, hash
Аудиозаписи по ID. Требуется авторизация.
Параметр: audios (формат: "{ownerId}_{audioId}" через запятую)
Добавить/удалить аудиозапись. Требуется авторизация.
Восстановить удалённую запись. Требуется авторизация.
Редактировать информацию о треке. Требуется авторизация.
Текст песни. Требуется авторизация.
Параметр: lyrics_id
Количество аудиозаписей. Требуется авторизация.
Популярные / Рекомендации. Требуется авторизация.
Отметить прослушивание. Требуется авторизация.
Управление альбомами музыки. Требуется авторизация.
Создание/редактирование/удаление музыкальных альбомов.
Перемещение записей между альбомами.
Закладки альбомов.
Установить музыку в статус. Требуется авторизация.
Список друзей с музыкой в статусе. Требуется авторизация.
Список видеозаписей. Требуется авторизация.
Параметры: owner_id, videos, fields, offset, count, extended
Поиск видео.
Параметры: q, sort, offset, count, extended, fields
Добавить лайк. Требуется авторизация.
Параметры:
| Параметр | Тип | Описание |
|----------|-----|----------|
| type | string | post / comment / video / photo / note |
| owner_id | int | ID владельца |
| item_id | int | ID элемента |
Убрать лайк. Требуется авторизация.
Проверить, лайкнул ли пользователь. Требуется авторизация.
Параметры: user_id, type, owner_id, item_id
Возвращает: {"liked": int, "copied": int}
Список пользователей, лайкнувших элемент. Требуется авторизация.
Параметры: type, owner_id, item_id, extended, offset, count, skip_own
Получить заметки / конкретную заметку. Требуется авторизация.
Создать заметку. Требуется авторизация.
Параметры: title, text
Редактировать заметку. Требуется авторизация.
Параметры: note_id, title, text, privacy, comment_privacy, privacy_view, privacy_comment
Комментарии к заметкам. Требуется авторизация.
Получить информацию об опросе.
Параметры: poll_id, extended, fields
Проголосовать. Требуется авторизация.
Параметры: poll_id, answers_ids (ID вариантов через запятую)
Отменить голос. Требуется авторизация.
Голосовавшие по вариантам. Требуется авторизация.
Создать опрос. Требуется авторизация.
Параметры: question, add_answers (JSON массив), disable_unvote, is_anonymous, is_multiple, end_date
Темы обсуждений группы. Требуется авторизация.
Параметры: group_id, topic_ids, offset, count, extended, preview, preview_length
Создать тему. Требуется авторизация.
Параметры: group_id, title, text, from_group
Редактировать/удалить тему. Требуется авторизация.
Закрепить/открепить тему. Требуется авторизация.
Открыть/закрыть тему. Требуется авторизация.
Комментарии в теме. Требуется авторизация.
Добавить комментарий. Требуется авторизация.
Список документов. Требуется авторизация.
Параметры: count, offset, type, owner_id, return_tags, order
Документы по ID. Требуется авторизация.
Добавить/удалить/восстановить документ. Требуется авторизация.
Редактировать документ. Требуется авторизация.
Параметры: owner_id, doc_id, title, tags, folder_id, owner_hidden
Поиск документов. Требуется авторизация.
Типы и теги документов.
Получить уведомления. Требуется авторизация.
Параметры:
| Параметр | Тип | Описание |
|----------|-----|----------|
| count | int | Количество (макс. 100) |
| offset | int | Смещение |
| archived | int | 0 — новые, 1 — архивные |
| start_from | string | Начать с этой метки |
| filters | string | Фильтр по типам |
| start_time, end_time | int | Временной диапазон |
Типы уведомлений (поле type в ответе):
| Тип | Описание |
|-----|----------|
| like_post | Лайк поста |
| copy_post | Репост |
| comment_post | Комментарий к посту |
| comment_photo | Комментарий к фото |
| comment_video | Комментарий к видео |
| comment_note | Комментарий к заметке |
| wall | Пост на стене |
| mention | Упоминание |
| mention_comment_video | Упоминание в комментарии к видео |
| mention_comment_photo | Упоминание в комментарии к фото |
| make_you_admin | Назначение модератором |
| wall_publish | Публикация предложенного поста |
| new_posts_in_club | Новые посты в клубе |
| sent_gift | Получение подарка |
| voices_transfer | Перевод голосов |
| up_rating | Повышение рейтинга |
Ответ:
{
"items": [
{
"type": "like_post",
"date": 1234567890,
"parent": { "id": 123, "text": "..." },
"feedback": { "from_id": 456 },
"reply": null
}
],
"profiles": [
{ "uid": 456, "first_name": "Имя", "last_name": "Фамилия", "photo": "..." }
],
"groups": [],
"last_viewed": 1234567890
}
Отметить уведомления как просмотренные. Требуется авторизация.
Лента новостей. Требуется авторизация.
Параметры: fields, start_from, start_time, end_time, offset, count, extended
Глобальная лента (все посты). Требуется авторизация.
Лента по типу (top и др.). Требуется авторизация.
Чёрный список в ленте. Требуется авторизация.
Добавить/удалить из скрытых в ленте. Требуется авторизация.
Получить статус пользователя.
Параметры: user_id, group_id
Возвращает: строку или {"status": "текст", "audio": {...}}
Установить статус. Требуется авторизация.
Параметры: text, group_id
Подарки пользователя. Требуется авторизация.
Параметры: user_id, count, offset
Отправить подарок. Требуется авторизация.
Параметры: user_ids, gift_id, message, privacy
Категории подарков.
Подарки в категории.
Отправить жалобу. Требуется авторизация.
Параметры: owner_id, comment, reason, type, report_source
Допустимые типы (type): post, photo, video, group, comment, note, app, user, audio
Текущее время сервера (timestamp).
Преобразовать экранное имя в ID.
Параметр: screen_name
Возвращает: {"object_id": int, "type": "user" / "group"}
Получить пользователя по GUID.
Версия API.
Тест авторизации. Возвращает {"authorized": bool, "auth_with": str, "version": str}.
Статистика платформы.
Параметры: fields (statistics,administrators,popular_groups,links), admin_fields, group_fields
🍗 Крылышки.
Проверить заказ. Требуется авторизация.
Параметры: app_id, amount, signature
Получить ID по маркетинговому ID.
photos.getWallUploadServer → получить URLPOST файл на полученный URLphotos.saveWallPhoto → сохранитьphotos.getOwnerPhotoUploadServer → получить URLPOST файл на URLphotos.saveOwnerPhoto → сохранить| Код | Описание |
|---|---|
| 1 | Неизвестная ошибка |
| 3 | Неизвестный метод |
| 4 | Неверный параметр |
| 5 | Авторизация не пройдена (нет токена) |
| 7 | Неверный grant_type |
| 9 | Rate limit (слишком много запросов) |
| 10 | Обязательный параметр отсутствует |
| 12 | Доступ запрещён |
| 15 | Доступ запрещён (общий) |
| 18 | Аккаунт деактивирован |
| 28 | Неверный логин/пароль или 2FA код |
| 29 | Слишком много нарушений |
| 50 | Пользователь/группа не найдены |
| 52 | Неверное вложение |
| 100 | Параметр некорректен |
| 103 | Неверный screen_name |
| 104 | Не найдено |
| 121 | Неверный хэш |
| 129 | Неверный файл изображения |
| 174 | Нельзя добавить себя в друзья |
| 177 | Пользователь не найден |
| 946 | Не реализовано |
| 950 | Внутренняя ошибка сервера |
Для write-операций (публикация, добавление в друзья, вступление в группы и т.д.) действуют лимиты:
Рекомендация: не делайте более 3-5 write-запросов в секунду. Для read-запросов лимиты значительно выше.
Если вы разрабатываете веб-приложение, можно использовать OAuth flow:
Перенаправьте пользователя на:
/authorize?client_name=МойКлиент&redirect_uri=https://example.com/callback&prefers_postMessage=0
Пользователь подтверит доступ
Ваш redirect_uri получит токен:
https://example.com/callback#access_token=...&user_id=1&expires_in=0
Для JavaScript-приложений используйте prefers_postMessage=1 — токен будет отправлен через window.postMessage.
# Получить токен
curl -X POST "https://luna.hamystudio.ru/token" \
-d "grant_type=password&username=myuser&password=mypass"
# Получить информацию о себе
curl -X POST "https://luna.hamystudio.ru/method/users.get" \
-d "access_token=ВАШ_ТОКЕН&fields=photo_200,status"
# Отправить сообщение
curl -X POST "https://luna.hamystudio.ru/method/messages.send" \
-d "access_token=ВАШ_ТОКЕН&user_id=2&message=Привет!"
# Получить уведомления
curl -X POST "https://luna.hamystudio.ru/method/notifications.get" \
-d "access_token=ВАШ_ТОКЕН&count=20&archived=0"
import requests
BASE_URL = "https://luna.hamystudio.ru"
# Авторизация
token_resp = requests.post(f"{BASE_URL}/token", data={
"grant_type": "password",
"username": "myuser",
"password": "mypass"
}).json()
access_token = token_resp["access_token"]
# Получить свой профиль
profile = requests.post(f"{BASE_URL}/method/account.getProfileInfo", data={
"access_token": access_token
}).json()
print(profile["response"]["first_name"])
# Получить уведомления
notifs = requests.post(f"{BASE_URL}/method/notifications.get", data={
"access_token": access_token,
"count": 20,
"archived": 0
}).json()
for item in notifs["response"]["items"]:
print(f"Тип: {item['type']}, Дата: {item['date']}")
import okhttp3.*
import kotlinx.serialization.json.*
val client = OkHttpClient()
val BASE_URL = "https://luna.hamystudio.ru"
suspend fun getToken(username: String, password: String): String {
val response = client.newCall(
Request.Builder()
.url("$BASE_URL/token")
.post(FormBody.Builder()
.add("grant_type", "password")
.add("username", username)
.add("password", password)
.build())
.build()
).execute()
val json = Json.parseToJsonElement(response.body!!.string()).jsonObject
return json["access_token"]!!.jsonPrimitive.content
}
suspend fun getNotifications(token: String): JsonArray {
val response = client.newCall(
Request.Builder()
.url("$BASE_URL/method/notifications.get")
.post(FormBody.Builder()
.add("access_token", token)
.add("count", "20")
.add("archived", "0")
.build())
.build()
).execute()
val json = Json.parseToJsonElement(response.body!!.string()).jsonObject
return json["response"]!!.jsonObject["items"]!!.jsonArray
}
API учитывает настройки приватности пользователей. Если у пользователя закрытый профиль, вы не получите доступ к его данным, даже зная ID.
Privacy-параметры, которые проверяются:
friends.read — доступ к списку друзейmessages.write — отправка сообщенийaudios.read — доступ к музыкеvideos.read — доступ к видеоnotes.read — доступ к заметкамphotos.read — доступ к фотоwall.write — публикация на стенеgroups.read — доступ к списку группЕсли у вас возникли вопросы по API:
Данный документ лицензирован по CC-BY-SA. Последнее обновление: апрель 2026.