Документация API
Базовый адрес: https://viewks.com/api/v1. API доступен при действующем тарифе Премиум. Передавайте ключ в Authorization: Bearer <ключ> или X-Api-Key. Cookie не используются для авторизации.
Ограничения на ключ: 120 запросов в минуту и 10 созданий заказов в секунду. При превышении ответ 429 содержит Retry-After в секундах. Лимиты действуют в памяти каждого экземпляра сервера.
Заказ: от 100 до 100000 просмотров. Скорости: slow — 30, normal — 10, fast — 5, very_fast — 2, max — 0 секунд. Вместо speed можно указать interval_sec от 0 до 3600, не меньше интервала максимальной скорости тарифа. По умолчанию используется максимальная скорость тарифа. external_id (до 64 символов) уникален для пользователя: повтор вернёт прежний заказ с кодом 200.
Список заказов: необязательные параметры status, kind, page, limit (до 100), since (ISO 8601). Отмена завершённого заказа возвращает 409.
Страницы: link — ссылка VK, views_per_post — 50…100000, auto_views — логическое значение. В PATCH указывайте только изменяемые поля.
POST /orders/:id/pause, /resume и /turbo управляют заказом; turbo: true при создании включает турбо и интервал 0. Турбо доступно один раз на Премиуме от 155 заданий. Пауза занимает слот; через 7 дней заказ отменяется. GET /blacklist возвращает правила, POST /blacklist принимает kind (POST_URL или KEYWORD) и value, DELETE /blacklist/:id удаляет правило. Лимит — 100 правил.
GET /me
curl -H 'Authorization: Bearer KEY' https://viewks.com/api/v1/me{"ok":true,"data":{"tier":"premium","tasks_limit":10,"active_tasks":0,"daily_limit":null,"daily_remaining":null,"ends_at":"2027-01-01T00:00:00.000Z"}}POST /orders
curl -X POST https://viewks.com/api/v1/orders -H 'Authorization: Bearer KEY' -H 'Content-Type: application/json' -d '{"url":"https://vk.com/wall1_2","quantity":100,"speed":"normal","external_id":"job-1"}'{"ok":true,"data":{"id":"ORDER_ID","url":"https://vk.com/wall1_2","kind":"post","quantity":100,"delivered":0,"status":"running","source":"manual","page_id":null,"external_id":"job-1","created_at":"2026-01-01T00:00:00.000Z","updated_at":"2026-01-01T00:00:00.000Z","error":null}}GET /orders
curl -H 'Authorization: Bearer KEY' 'https://viewks.com/api/v1/orders?status=running&limit=20'{"ok":true,"data":[]}GET /orders/:id
curl -H 'Authorization: Bearer KEY' https://viewks.com/api/v1/orders/ORDER_ID{"ok":true,"data":{"id":"ORDER_ID","status":"running"}}POST /orders/:id/cancel
curl -X POST -H 'Authorization: Bearer KEY' https://viewks.com/api/v1/orders/ORDER_ID/cancel{"ok":true,"data":{"id":"ORDER_ID","status":"canceled"}}GET /pages
curl -H 'Authorization: Bearer KEY' https://viewks.com/api/v1/pages{"ok":true,"data":[]}POST /pages
curl -X POST https://viewks.com/api/v1/pages -H 'Authorization: Bearer KEY' -H 'Content-Type: application/json' -d '{"link":"https://vk.com/example","views_per_post":1000,"auto_views":true}'{"ok":true,"data":{"id":"PAGE_ID","autoViews":true,"viewsPerPost":1000}}PATCH /pages/:id
curl -X PATCH https://viewks.com/api/v1/pages/PAGE_ID -H 'Authorization: Bearer KEY' -H 'Content-Type: application/json' -d '{"auto_views":false}'{"ok":true,"data":{"id":"PAGE_ID","autoViews":false}}DELETE /pages/:id
curl -X DELETE -H 'Authorization: Bearer KEY' https://viewks.com/api/v1/pages/PAGE_ID{"ok":true,"data":{"deleted":true}}Ошибки имеют вид {"ok":false,"error":{"code":"not_found","message":"Ресурс не найден."}}.
| 400 | validation | Неверные параметры |
| 401 | unauthorized | Неверный ключ |
| 403 | plan_required, speed_not_allowed, forbidden | Нет доступа |
| 404 | not_found | Ресурс не найден |
| 409 | slots_full, daily_limit, order_final | Лимит или завершённый заказ |
| 422 | invalid_target | Неверная ссылка |
| 429 | rate_limited | Превышена частота |
| 500 | internal_error | Внутренняя ошибка |
Webhook
В кабинете задайте HTTPS-адрес и создайте секрет. При изменении статуса или числа просмотров отправляется order.updated; тестовое событие — ping. Заголовки X-ViewKs-Event и X-ViewKs-Signature содержат событие и sha256=HMAC-SHA256 от исходного тела. При ошибке повторы через 1 минуту, 5 минут, 30 минут и 2 часа; тайм-аут 5 секунд. Перенаправления не выполняются.
Проверяйте подпись по исходным байтам тела до разбора JSON и сравнивайте значения за постоянное время.
Node.js
const crypto = require('node:crypto');
const expected = 'sha256=' + crypto.createHmac('sha256', secret).update(rawBody).digest('hex');
const a = Buffer.from(expected), b = Buffer.from(signature || '');
const valid = a.length === b.length && crypto.timingSafeEqual(a, b);Python
import hashlib, hmac
expected = 'sha256=' + hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
valid = hmac.compare_digest(expected, signature or '')