API v1 · публичные данные
Профиль ВКонтакте одним запросом
Отправьте ID или короткое имя. Сервис вернёт один файл с публичными полями профиля: город, счётчики, статус, дату рождения, аватар. Без токена ВКонтакте и без постраничной выдачи.
60 запросов в минуту ключ в течение дня данные не хранятся
# один запрос, один файл curl "https://vkuserapi.space/download/vk/tokarev?format=json" \ -H "Authorization: Bearer k_live_7f3a…"
// Node 18+, fetch встроен const r = await fetch("https://vkuserapi.space/download/vk/tokarev", { headers: { Authorization: "Bearer k_live_7f3a…" } }); const profile = await r.json();
# requests, Python 3.8+ r = requests.get("https://vkuserapi.space/download/vk/tokarev", headers={"Authorization": "Bearer k_live_7f3a…"}, timeout=10) profile = r.json()
{ "id": 242341015, "domain": "tokarev", "name": "Артём Токарев", "sex": 2, "city": { "id": 2, "title": "Санкт-Петербург" }, "bdate": "11.2.1994", "photo_200": "https://sun9-14.userapi.com/c514.jpg", "status": "Собираю данные по крупицам", "verified": 0, "followers_count": 4820, "counters": { "friends": 312, "photos": 87, "videos": 4 }, "last_seen": { "platform": 7, "time": 1762251840 }, "exported_at": "2026-11-04T10:22:41Z" }
- x-ratelimit-limit
- 60
- x-ratelimit-remaining
- 41
- x-ratelimit-reset
- 38
Профиль отдаётся одним запросом. Пакет — отдельный эндпоинт.
Один GET, и профиль у вас
Идентификатор или короткое имя идёт прямо в путь. Формат, набор полей и язык
ответа задаются параметрами. Ключ передаётся заголовком
Authorization или параметром key, если так удобнее.
| Параметр | Где | По умолчанию | Что делает |
|---|---|---|---|
| id | путь | обязателен | Числовой ID или короткое имя, например tokarev. |
| format | query | json | json или csv. Пакетный запрос умеет ещё ndjson. |
| fields | query | все | Список полей через запятую. Чем меньше полей, тем быстрее ответ. |
| lang | query | ru | Язык названий города и страны. |
| sep | query | ; | Разделитель для CSV. С точкой с запятой файл открывается в Excel без настроек. |
| key | query / header | — | Ключ доступа. Заголовок приоритетнее параметра. |
Без ключа тоже работает: 10 запросов в минуту с одного адреса. Ключ поднимает потолок до 60 в минуту и снимает привязку к адресу.
Имена совпадают с VK API — код переносится без переименований.
Что приходит в ответе
Имена полей — как в VK API; name и exported_at добавляет сервис. Поле, закрытое настройками
приватности, приходит со значением null — набор ключей от этого не меняется.
| Поле | Тип | Пример | Что это |
|---|---|---|---|
| id | integer | 242341015 | Постоянный номер профиля. Не меняется при смене короткого имени. |
| domain | string | tokarev | Адрес страницы, он же короткое имя. |
| screen_name | string | tokarev | То же, что domain. Оставлено для совместимости. |
| first_name last_name | string | Артём Токарев | Имя и фамилия как в профиле. |
| name | string | Артём Токарев | Склеенные имя и фамилия — удобно для вывода в списке. |
| is_closed | boolean | false | Страница закрыта для тех, кто не в друзьях. |
| sex | integer | 2 | 1 — женский, 2 — мужской, 0 — не указан. |
| bdate | string | 11.2.1994 | Дата рождения, если открыта. Год может отсутствовать. |
| city | object | {id, title} | Город. title — на языке из параметра lang. |
| country | object | {id, title} | Страна. |
| photo_200 | string (url) | sun9-14…jpg | Аватар 200 px. Есть также photo_max_orig. |
| status | string | Собираю данные… | Текст статуса. Может быть пустым. |
| verified | integer | 0 | Подтверждённая страница: 0 или 1. |
| followers_count | integer | 4820 | Подписчики. |
| counters | object | {friends, photos…} | Счётчики: друзья, фотографии, видео, аудио, альбомы. |
| last_seen | object | {platform, time} | Последний визит: платформа и время в Unix. Если скрыт — null. |
| exported_at | string (ISO) | 2026-11-04T…Z | Когда сервис собрал ответ. Наше поле, не из VK. |
Сервис не читает переписки, закрытые страницы и данные, скрытые приватностью. Всё, что приходит, доступно любому посетителю профиля в браузере.
Один профиль — один файл. Страниц нет, дочитывать нечего.
JSON, CSV и NDJSON
JSON сохраняет вложенность как есть. CSV разворачивает вложенные объекты в колонки — его можно открыть в Excel и в Google Таблицах. NDJSON отдаёт по профилю на строку и работает только в пакетном запросе.
{ "id": 242341015, "domain": "tokarev", "city": { "id": 2, "title": "Санкт-Петербург" }, "counters": { "friends": 312, "photos": 87 } }
id;domain;name;sex;city;bdate;followers_count;friends;photos;exported_at 242341015;tokarev;Артём Токарев;2;Санкт-Петербург;11.2.1994;4820;312;87;2026-11-04T10:22:41Z
{"id":242341015,"domain":"tokarev"} {"id":1,"domain":"durov"} {"id":6492,"domain":"team"}
Пакет до 100 профилей
POST /download/batch принимает массив id и отдаёт NDJSON потоком: первая строка приходит, пока остальные ещё собираются. До 100 профилей на ключе, до 1 000 на договоре.
Без пагинации
Ответ — цельный файл, курсора и следующей страницы нет. Если профиль не менялся, условный запрос с If-None-Match вернёт 304 без тела.
Тот же запрос, что вы отправите из кода. Формат и набор полей — параметрами.
Проверить запрос
Введите ID или короткое имя. Ответ и заголовки лимита — те же, что вернёт эндпоинт; в демо-режиме они собираются в браузере, без запроса к серверу.
{
"id": 242341015,
"domain": "tokarev",
"name": "Артём Токарев",
"sex": 2,
"city": { "id": 2, "title": "Санкт-Петербург" },
"bdate": "11.2.1994",
"photo_200": "https://sun9-14.userapi.com/c514.jpg",
"status": "Собираю данные по крупицам",
"verified": 0,
"followers_count": 4820,
"counters": { "friends": 312, "photos": 87, "videos": 4 },
"last_seen": { "platform": 7, "time": 1762251840 },
"exported_at": "2026-11-04T10:22:41Z"
}
- x-ratelimit-limit
- 10
- x-ratelimit-remaining
- 9
- x-ratelimit-reset
- 60
Считаются по ключу и по адресу. Окно — минута, скользящее.
Сколько можно запрашивать
Каждый ответ несёт три заголовка: сколько разрешено, сколько осталось и через
сколько секунд окно сбросится. Условный запрос с If-None-Match тоже расходует лимит, но тело не передаётся.
| Доступ | Запросов в минуту | Пакет | Кому |
|---|---|---|---|
| Без ключа | 10 | — | Проверить перед покупкой, разовые задачи. |
| Ключ | 60 | 100 профилей | Скрипты, боты, выгрузки по расписанию. |
| Договор | от 600 | до 1 000 | Сервисы с постоянным потоком. Выделенный узел. |
Заголовки ответа
x-ratelimit-limit — потолок; x-ratelimit-remaining — остаток; x-ratelimit-reset — секунды до сброса. В браузере они видны благодаря Access-Control-Expose-Headers.
Когда лимит исчерпан
Приходит 429 и заголовок Retry-After. Подождите указанное число секунд, потом повторяйте. Очередь не растёт.
Проверки каждые 30 секунд с трёх точек. Данные — из внутреннего монитора.
Доступность за 90 дней
99,99 % успешных ответов. Один инцидент за квартал: двенадцать минут из-за переполнения очереди на узле выгрузки.
28.09 — 12 минут деградации
-
Двенадцать минут деградации. Очередь на узле выгрузки переполнилась: часть запросов отдавала 503, p95 вырос до 1,4 с. Узел перезапущен, очередь разведена по двум воркерам.
-
Плановые работы. Переезд на новый узел выгрузки, 11 минут. Запросы в это время обслуживал резервный.
История инцидентов ведётся с августа 2026 года. Сообщения о сбоях принимаются на status@vkuserapi.space.
Тело ошибки — всегда JSON с полями code, message и request_id.
Коды ответа
Ошибки приходят в одном формате, поэтому их можно разбирать одним обработчиком.
В request_id — идентификатор конкретного запроса, его стоит указывать
в письме.
| Код | Когда | Что делать |
|---|---|---|
| 200 | Профиль найден и собран. | Читать тело. |
| 304 | Профиль не менялся с прошлого запроса, совпал ETag. | Взять свою копию, тело пустое. |
| 400 | Не разобрали id, формат или список полей. | Проверить параметры, читать message. |
| 401 | Ключ отозван или указан с опечаткой. | Сверить ключ, выпустить новый. |
| 404 | Профиля нет: удалён, заблокирован или не существует. | Не повторять: ответ не изменится. |
| 429 | Лимит исчерпан. | Ждать Retry-After секунд. |
| 503 | Узел перегружен или идёт обновление. | Повторить с паузой 1 → 2 → 4 с. |
{ "code": "rate_limited", "message": "Лимит 10 запросов в минуту исчерпан", "retry_after": 38, "request_id": "req_9f2a4c81" }
Коротко о том, что спрашивают чаще всего.
Частые вопросы
Нужен ли токен ВКонтакте?
Нет. Сервис собирает только то, что видно на публичной странице. Своего токена не требуется, доступ к аккаунту вы не выдаёте.
Вы храните данные профилей?
Нет. Ответ собирается в момент запроса и уходит в HTTP-ответ. В логах остаются идентификатор запроса, время и код ответа — без содержимого профиля.
Что придёт, если профиль закрыт?
Публичные поля с null там, где значение скрыто. Если страница удалена или заблокирована, вернётся 404.
Можно забрать тысячу профилей за раз?
Одним запросом — до 100 в POST /download/batch. Больше — несколькими пакетами с паузой между ними, иначе сработает лимит.
Как получить ключ?
Напишите на keys@vkuserapi.space: откуда будут запросы и сколько примерно в сутки. Ключ выдают вручную, обычно в течение дня.
Нужен ключ?
Напишите, откуда пойдут запросы и сколько их ожидается в сутки. Ответим в течение дня и пришлём ключ с лимитом 60 запросов в минуту.