REST API · Votway
API SMM-панели: заказы и автоматизация
Создавайте заказы из своих скриптов и сервисов. Ключ — в кабинете: Настройки → API.
Авторизация
Передайте API-ключ в заголовке для каталога, баланса, транзакций и заказов.
POST /api/v1/orders
{
"service_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"link": "https://t.me/channel",
"quantity": 1000
}Платформы и услуги
Сначала платформы и категории, затем услуги. В заказ идёт id услуги (service_id). Смотрите order_type: default — ссылка и quantity; subscription — username и extra.min/max/posts либо пакет link+quantity; autoclick — канал или chat_id; traffic — ссылка, объём и extra с интервалом.
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /catalog/platforms | X-API-Key | Платформы витрины (Telegram, VK, …). id платформы в заказ не передаётся |
| GET | /catalog/categories | X-API-Key | Категории. Поле platform и id — фильтр GET /catalog/services?category_id= |
| GET | /catalog/services?category_id= | X-API-Key | Услуги: id, order_type, min/max, цена. Цены со скидкой владельца ключа |
| GET | /catalog/services/{service_id} | X-API-Key | Одна услуга — отсюда service_id для заказа |
| POST | /catalog/calculate | X-API-Key | Предрасчёт: { service_id, quantity } → amount, currency |
Аккаунт
| Method | Path | Auth | Description |
|---|---|---|---|
| GET | /profile/balance | X-API-Key | Текущий баланс (RUB) |
| GET | /transactions | X-API-Key | История транзакций |
| GET | /transactions/{transaction_id} | X-API-Key | Одна транзакция |
Заказы
Отмена — POST /cancel, если allow_user_cancel. Пауза и возобновление — /stop и /start при can_stop / can_start. Правки автоклика и трафика — PATCH при can_edit. Статус поллите GET, webhook нет. refill пока 501.
| Method | Path | Auth | Description |
|---|---|---|---|
| POST | /orders | X-API-Key | Создать заказ: service_id, link/quantity или extra по order_type услуги |
| GET | /orders | X-API-Key | Список (limit≤300, offset, search, platform, status_group, order_type) |
| GET | /orders/{order_id} | X-API-Key | Статус, прогресс, флаги can_stop/can_start/can_edit, дочерние задачи |
| POST | /orders/{order_id}/cancel | X-API-Key | Отмена, если allow_user_cancel. Ответ: заказ, refund_amount, balance |
| POST | /orders/{order_id}/stop | X-API-Key | Пауза автоклика, трафика или автопостинга, если can_stop |
| POST | /orders/{order_id}/start | X-API-Key | Возобновление, если can_start |
| PATCH | /orders/{order_id} | X-API-Key | Правки автоклика/трафика, если can_edit: клики, интервал, geo, source |
Автоклик: каналы
Для закрытого Telegram: добавьте бота администратором, получите connect-code и опубликуйте код постом в самом канале → channels (chat_id) → POST /orders с chat_id. Для открытого канала укажите @username и используйте check-channel. Для MAX: connect-link → channels → заказ с platform=max и chat_id.
| Method | Path | Auth | Description |
|---|---|---|---|
| POST | /orders/autoclick/check-channel | X-API-Key | Проверка канала: service_id + channel или chat_id |
| POST | /orders/autoclick/telegram/connect-code | X-API-Key | Постоянный персональный код для публикации постом в закрытом Telegram-канале |
| POST | /orders/autoclick/telegram/channels | X-API-Key | Подключённые Telegram-каналы (опц. refresh, chat_id) |
| POST | /orders/autoclick/max/connect-link | X-API-Key | Персональная ссылка подключения MAX |
| POST | /orders/autoclick/max/channels | X-API-Key | Подключённые MAX-каналы (опц. refresh, chat_id) |
Telegram · MAX
API автопостинга
Подключайте Telegram и MAX из своего сервиса: привязывайте аккаунты, проверяйте каналы, оформляйте подписки и управляйте публикациями.
Открыть методы автопостинга в SwaggerВаши клиенты — client_ref
Задайте постоянный идентификатор клиента, например customer_42: от 1 до 64 латинских букв, цифр, дефисов или подчёркиваний. Привязки, каналы и заказы разделяются по client_ref внутри вашего аккаунта. Создайте клиента через PUT перед подключением аккаунта.
Значение self зарезервировано для ваших собственных ресурсов, включая кабинет. Ключи одного владельца работают с теми же клиентами в пределах своих прав. Замена ключа не требует повторного создания клиентов.
Ключ и единый баланс
Получите персональный ключ в кабинете: Настройки → API. Передавайте X-API-Key с вашего сервера. Не передавайте заголовок Authorization вместе с ним и не размещайте ключ в браузере клиентов. Все заказы оплачиваются с баланса владельца ключа в рублях.
Права ключа: catalog:read — каталог и возможности; autopost:read — чтение; autopost:write — изменения. Создание, продление и отмена заказа дополнительно требуют orders:write. Для GET /profile/balance нужно balance:read.
От подключения до первой публикации
- Выберите услугу
Получите service_id услуги автопостинга в каталоге. Запросите GET /autopost/capabilities?service_id=…: здесь режимы публикации, доступные AI-модели и ограничения.
- Создайте клиента
PUT /autopost/clients/customer_42 с именем клиента или пустым объектом создаёт контекст. Повторный PUT обновляет его.
- Подтвердите привязку в боте
POST link-sessions возвращает deep_link. Передайте ссылку клиенту и опрашивайте GET link-sessions по полученному id до status=linked. При expired создайте новую сессию. Для MAX укажите platform=max.
- Проверьте канал и выберите источники
После выдачи боту необходимых прав вызовите channels/check. Нужны permissions=ready и can_order=true. Сохраните UUID id ответа как channel_id. Получите источники через GET sources с service_id или задайте собственные HTTPS-ссылки.
- Оформите заказ
Передайте service_id, channel_id, external_order_id, months и settings. Укажите расписание или таймер. max_amount ограничивает сумму списания; 1500.00 в примере — условный предел, а не тариф.
- Дождитесь результата
202 означает, что команда принята. Опрашивайте URL из Location с интервалом Retry-After до succeeded или failed. По subscription_id успешной операции получите подписку, настройки и очередь. При failed прочитайте error.
Примеры запросов
Пути указаны относительно домена API. Замените ключ, UUID, ссылки, идентификаторы и предел суммы своими значениями. UUID ниже приведены только для примера. Один Idempotency-Key соответствует одной команде.
1. Создать клиента и привязать аккаунт
После POST откройте deep_link из ответа в нужном мессенджере. В GET подставьте id сессии. Привязка требует подтверждения пользователя в боте.
PUT /api/v1/autopost/clients/customer_42
X-API-Key: vw_your_key
Content-Type: application/json
{
"name": "Customer 42"
}
POST /api/v1/autopost/clients/customer_42/link-sessions
X-API-Key: vw_your_key
Idempotency-Key: link-customer42-001
Content-Type: application/json
{
"service_id": "11111111-1111-4111-8111-111111111111",
"platform": "telegram"
}
GET /api/v1/autopost/clients/customer_42/link-sessions/{id}
X-API-Key: vw_your_key2. Подключить канал и получить источники
UUID канала из проверки нужен для channel_id. UUID источников из каталога нужны для source_ids. chat_id мессенджера нельзя подставлять вместо этих UUID.
POST /api/v1/autopost/clients/customer_42/channels/check
X-API-Key: vw_your_key
Idempotency-Key: check-customer42-001
Content-Type: application/json
{
"service_id": "11111111-1111-4111-8111-111111111111",
"platform": "telegram",
"target": "https://t.me/your_channel"
}
GET /api/v1/autopost/clients/customer_42/sources?service_id=11111111-1111-4111-8111-111111111111&kind=catalog
X-API-Key: vw_your_key3. Оформить подписку с расписанием
Пример: новые и старые публикации, по понедельникам в 09:00 и в диапазоне 17:00–19:00 по Москве. Для остальных дней добавьте слоты в days.
POST /api/v1/autopost/clients/customer_42/orders
X-API-Key: vw_your_key
Idempotency-Key: order-customer42-001
Content-Type: application/json
{
"service_id": "11111111-1111-4111-8111-111111111111",
"channel_id": "22222222-2222-4222-8222-222222222222",
"external_order_id": "order-2026-001",
"months": 1,
"max_amount": "1500.00",
"settings": {
"source_selection": {
"type": "catalog",
"source_ids": [
"33333333-3333-4333-8333-333333333333"
]
},
"queue_mode": "new_and_old",
"publication": {
"mode": "schedule",
"timezone": "Europe/Moscow",
"days": {
"1": [
{
"at": "09:00"
},
{
"from": "17:00",
"to": "19:00"
}
]
}
}
}
}4. Проверить операцию, заказ и очередь
Первые строки показывают заголовки ответа, следующие — запросы. Дождитесь конечного статуса операции, затем используйте её order_id и subscription_id. pending и reconciling означают, что команда ещё выполняется.
HTTP/1.1 202 Accepted
Location: /api/v1/autopost/clients/customer_42/operations/{id}
Retry-After: 2
GET /api/v1/autopost/clients/customer_42/operations/{id}
X-API-Key: vw_your_key
GET /api/v1/autopost/clients/customer_42/orders/{order_id}
X-API-Key: vw_your_key
GET /api/v1/autopost/clients/customer_42/subscriptions/{subscription_id}/queue
X-API-Key: vw_your_key5. Переключить подписку на таймер
Сначала прочитайте подписку. Передайте её ETag в If-Match вместе с кавычками; 1 здесь только пример. PATCH возвращает 202: дождитесь завершения операции и проверьте applied_settings_revision.
GET /api/v1/autopost/clients/customer_42/subscriptions/{id}
X-API-Key: vw_your_key
HTTP/1.1 200 OK
ETag: "1"
PATCH /api/v1/autopost/clients/customer_42/subscriptions/{id}/settings
X-API-Key: vw_your_key
If-Match: "1"
Content-Type: application/json
{
"publication": {
"mode": "ad_timer",
"interval_min": 30,
"interval_max": 60
}
}Свои источники и подписи публикаций
Это объект settings для создания заказа или тело PATCH настроек. Для новых источников передавайте source_selection вместе с source_signature_settings. Ключ настройки подписи — ссылка своего источника или UUID источника каталога. В этом примере очередь собирает только новые публикации.
{
"source_selection": {
"type": "custom",
"urls": [
"https://t.me/your_source"
]
},
"queue_mode": "new",
"publication": {
"mode": "ad_timer",
"interval_min": 30,
"interval_max": 60
},
"signature_settings": {
"mode": "append",
"text": "Наш канал",
"url": "https://t.me/your_channel"
},
"source_signature_settings": {
"https://t.me/your_source": {
"mode": "replace",
"url": "https://t.me/your_channel"
}
}
}Правила интеграции
- Повторы запросов
- Все POST требуют Idempotency-Key: 1–128 латинских букв, цифр или символов . _ : -. После тайм-аута повторите прежний URL с тем же ключом и телом. Другое тело с тем же ключом даёт 409 idempotency_conflict. Для новой команды создайте новый ключ. PUT и DELETE этого заголовка не требуют.
- Ваш номер заказа и предел оплаты
- external_order_id обязателен для заказа и каждого продления: 1–128 латинских букв, цифр или символов . _ : -. Он уникален для client_ref. Повтор с теми же параметрами вернёт прежнюю операцию; другие параметры дадут external_order_conflict. max_amount задаётся строкой с двумя знаками после точки; если цена выше, запрос отклоняется с price_changed.
- Изменение настроек
- PATCH требует If-Match из GET подписки. Без него — 428, при устаревшей версии — 412. Перечитайте настройки и согласуйте изменения. Передавайте изменяемый раздел целиком; пропущенные разделы сохраняются. null не допускается. Ориентируйтесь также на actions в подписке.
- Источники и ИИ
- Выбирайте один тип source_selection: catalog с source_ids или custom с urls. Для своих источников поддерживаются HTTPS-ссылки t.me, telegram.me и max.ru. Промпты, модели и индивидуальные настройки ИИ изменяет администратор. При создании заказа и PATCH не передавайте ai_settings или source_settings, даже пустые: запрос будет отклонён. ИИ тарифа работает с сохранёнными настройками.
- Подпись со ссылкой
- signature_settings.mode: off — выключено, remove — удалить найденную подпись, replace — заменить только найденную, append — добавлять свою всегда. text задаёт кликабельный текст (по умолчанию название канала), url — адрес или приглашение (для приватного канала обязателен). Ищем отдельную короткую строку в конце со ссылкой на Telegram/MAX-канал. source_signature_settings задаёт полное переопределение для источника; mode: off отключает общий режим. Правила действуют на ещё не отправленные посты и не обходят остальные рекламные фильтры.
- Расписание и таймер
- В schedule обязательны timezone и days. Дни недели: 1 — понедельник, 7 — воскресенье. Слот — at либо диапазон from/to в формате HH:MM; даты в dates — YYYY-MM-DD. Для ad_timer интервалы задаются в минутах, по умолчанию 30–60. queue_mode по умолчанию new_and_old; new — только новые публикации.
- Подписка и очередь
- Список подписок по умолчанию показывает active и paused; status=all включает остальные. publish-next отправляет следующий пост очереди. При delivery_unknown доставка отдельного поста не подтверждена: он не отправляется повторно и не блокирует следующие публикации. Для диагностики пустой очереди используйте summary и empty_reason. При отмене проверяйте can_cancel, возврат — в refunded_amount заказа.
- Списки и статусы
- Списки возвращают data и next_cursor. Передавайте курсор без изменений с теми же фильтрами, пока он не станет null. limit — от 1 до 100, по умолчанию 50. Webhooks пока нет: проверяйте статусы запросами GET.
- Ошибки автопостинга
- Ответ содержит error: code, message, request_id, retryable и fields. 401 — ключ, 403 — недостаточно прав, 402 — баланс, 404 — ресурс недоступен в данном контексте, 409 — конфликт, 422 — поля запроса. При 429 соблюдайте Retry-After; при 503 повторите с задержкой и тем же ключом. Для поддержки сохраните X-Request-ID.
- Лимиты запросов
- Лимиты учитываются по ключу и общему аккаунту владельца. Создание ссылок привязки и проверка каналов имеют отдельные ограничения. Несколько ключей не увеличивают общий лимит; при ограничении API вернёт 429.
Все 25 операций автопостинга
Добавьте /api/v1 перед путями ниже. Точные параметры, обязательные поля, права ключа и схемы ответов приведены в Swagger. Для capabilities, accounts, channels и sources нужен service_id; для DELETE аккаунта и канала — также service_id в query.
- GET
/autopost/capabilitiesРежимы, платформы, AI-модели и ограничения услуги
- GET
/autopost/clientsКлиенты интеграции
- PUT
/autopost/clients/{client_ref}Создать клиента или обновить имя
- GET
/autopost/clients/{client_ref}Получить клиента
- POST
/autopost/clients/{client_ref}/link-sessionsСоздать сессию привязки
- GET
/autopost/clients/{client_ref}/link-sessions/{id}Проверить подтверждение привязки
- GET
/autopost/clients/{client_ref}/accountsПривязанные аккаунты
- DELETE
/autopost/clients/{client_ref}/accounts/{id}Отвязать аккаунт
- GET
/autopost/clients/{client_ref}/channelsКаналы и их доступность для заказа
- POST
/autopost/clients/{client_ref}/channels/checkПодключить канал и проверить права
- DELETE
/autopost/clients/{client_ref}/channels/{id}Отключить свободный канал
- GET
/autopost/clients/{client_ref}/sourcesКаталог и пользовательские источники
- POST
/autopost/clients/{client_ref}/ordersСоздать заказ; результат — операция
- GET
/autopost/clients/{client_ref}/ordersЗаказы, в том числе поиск по external_order_id
- GET
/autopost/clients/{client_ref}/orders/{id}Статус, сумма и подписка заказа
- POST
/autopost/clients/{client_ref}/orders/{id}/cancelОтменить заказ при can_cancel
- GET
/autopost/clients/{client_ref}/subscriptionsПодписки; по умолчанию активные и на паузе
- GET
/autopost/clients/{client_ref}/subscriptions/{id}Состояние, настройки, ETag и доступные действия
- PATCH
/autopost/clients/{client_ref}/subscriptions/{id}/settingsИзменить настройки с If-Match
- POST
/autopost/clients/{client_ref}/subscriptions/{id}/pauseПриостановить публикации
- POST
/autopost/clients/{client_ref}/subscriptions/{id}/resumeВозобновить публикации
- POST
/autopost/clients/{client_ref}/subscriptions/{id}/publish-nextОтправить следующий пост очереди
- POST
/autopost/clients/{client_ref}/subscriptions/{id}/renewalsПродлить подписку
- GET
/autopost/clients/{client_ref}/subscriptions/{id}/queueПубликации и диагностика очереди
- GET
/autopost/clients/{client_ref}/operations/{id}Проверить выполнение команды
В этом выпуске доступны выбор источников, настройка расписания, таймера и подписей публикаций. Промпты ИИ редактируются только администратором. Отдельное управление источниками, API шаблонов расписания и webhooks пока не входят в контракт.
Swagger
Интерактивная документация: все методы, поля запросов и ответов, примеры тел. Можно сразу выполнить запрос со своим ключом.
Ошибки и лимиты
Для каталога и общих методов заказов ошибки содержат detail. В API автопостинга используется объект error — формат описан выше. 401 — нет или неверный ключ. 429 — подождите и повторите. POST /orders/{id}/refill возвращает 501. Пополнение баланса по ключу недоступно.