Cosmo

Cosmo Panel

Управление VPN-клиентами
Cosmo
Cosmo Panel
VPN Management
Серверы
Основной сервер
Тёмная тема
v91
Дашборд
admin
Дашборд

Трафик за 24 часа

Кластер серверов

Загрузка...

Недавняя активность

Скоро истекают

Состояние системы

Клиенты VPN

Список клиентов

Продлить на дн. Трафик ГБ
API ключи

Ключи продавцов

API ключи для биллинга. Документация: Swagger /docs
SDK — Интеграция через API

Клиентские библиотеки

Готовые SDK для интеграции Seller API в ваш сайт, биллинг или бота. Обработка ошибок, автоповторы, rate-limit — всё включено.

Python

pip install cosmo-panel
from cosmo_panel import CosmoClient
client = CosmoClient(api_key="wgp_...", base_url="http://163.5.153.53:8000")
key = client.create_key(name="Иван", days=30, traffic_gb=50)
client.extend_key(key["id"], days=30)
client.delete_key(key["id"])
Файлы

JavaScript / Node.js

npm install cosmo-panel-client
const { CosmoClient } = require('cosmo-panel-client');
const client = new CosmoClient({ apiKey: 'wgp_...', baseUrl: 'http://163.5.153.53:8000' });
const key = await client.createKey({ name: 'Иван', days: 30, trafficGb: 50 });
await client.extendKey(key.id, { days: 30 });
await client.deleteKey(key.id);
Файлы

PHP

composer require cosmo-panel/sdk
$client = new CosmoPanel\Client('wgp_...', 'http://163.5.153.53:8000');
$key = $client->createKey(['name' => 'Иван', 'days' => 30, 'traffic_gb' => 50]);
$client->extendKey($key['id'], ['days' => 30]);
$client->deleteKey($key['id']);
Файлы

Обработка ошибок

Автоповторы при сетевых ошибках (до 3 раз). Экспоненциальный backoff при rate-limit (429). Кастомные исключения с русскими сообщениями. Таймаут запросов: 30 секунд.

Доступные эндпоинты

МетодЭндпоинтОписание
POST/api/v1/keysСоздать ключ
GET/api/v1/keysСписок ключей
GET/api/v1/keys/{id}Детали ключа
GET/api/v1/keys/{id}/configСкачать конфиг
POST/api/v1/keys/{id}/extendПродлить (days)
POST/api/v1/keys/{id}/trafficДобавить трафик (gb)
POST/api/v1/keys/{id}/suspendПриостановить
POST/api/v1/keys/{id}/activateАктивировать
PATCH/api/v1/keys/{id}Изменить
PATCH/api/v1/keys/{id}/featuresФункции
DELETE/api/v1/keys/{id}Удалить
DNS-запросы

Последние запросы

ВремяКлиентIPДомен
Выберите клиента и нажмите Обновить

Топ доменов

#ДоменЗапросов
-
Аудит-лог

Действия администраторов

Webhooks

Колбэки

Инструкция: интеграция с сайтом продавца

Вебхуки связывают панель Cosmo с сайтом продавца: клиент оплатил → создался ключ → панель шлёт события на сайт → сайт показывает статус подписки.

Сайт → Панель

Продавец использует SDK или REST API для управления ключами:

  • POST /api/v1/keys — создать ключ при оплате
  • GET /api/v1/keys — список ключей продавца
  • POST /api/v1/keys/{id}/extend — продлить
  • POST /api/v1/keys/{id}/traffic — докупить трафик

Панель → Сайт

Панель отправляет HTTP POST на URL вебхука при событиях:

  • peer.traffic_updated — изменился остаток трафика
  • peer.expired — подписка истекла
  • peer.deleted — ключ удалён
  • peer.extended — ключ продлён
  • peer.created — ключ создан
  • peer.suspended — приостановлен

Формат вебхука (тело POST)

{
  "event": "peer.traffic_updated",
  "timestamp": "2026-06-14T12:00:00Z",
  "data": {
    "peer_id": "b7438b260314",
    "peer_name": "Иван",
    "traffic_limit_bytes": 107374182400,
    "traffic_used_total": 53687091200,
    "traffic_remaining": 53687091200,
    "status": "active",
    "expires_at": "2026-07-14T23:59:59Z"
  }
}

Проверка подписи

Ваш сервер должен проверять заголовок X-Cosmo-Signature чтобы убедиться что запрос от Cosmo, а не подделка:

import hmac, hashlib
secret = "ваш_webhook_secret"
body = request.get_data(as_text=True)
sig = request.headers.get("X-Cosmo-Signature", "")
expected = "sha256=" + hmac.new(secret.encode(), body.encode(), hashlib.sha256).hexdigest()
if not hmac.compare_digest(sig, expected):
    abort(403)  # подпись не совпала — отклонить

Типичный сценарий

  1. Клиент оплачивает подписку на сайте продавца (ЮKassa / Stripe)
  2. Сайт продавца вызывает POST /api/v1/keys → создаётся VPN-ключ
  3. Сайт показывает клиенту конфиг (QR + .conf) и статус подписки
  4. Панель Cosmo отслеживает трафик, срок действия
  5. При изменении трафика → вебхук peer.traffic_updated на сайт продавца
  6. При истечении → вебхук peer.expired → сайт блокирует доступ / просит оплатить
  7. Клиент продлевает на сайте → POST /api/v1/keys/{id}/extend → ключ снова активен
Администраторы

Пользователи панели

Безопасность

Смена пароля

Двухфакторная аутентификация

Отсканируйте QR-код в Google Authenticator или Authy, затем введите код:

Серверы

Кластер серверов

Настройки

Параметры сервера

Обслуживание Cosmo

Автоопределение IP, установка правил, настройка iptables и маршрутизации.

Обфускация (XOR)

Настройки XOR-обфускации трафика. Используется для обхода DPI. Значения попадают в конфиг клиента и в команду запуска obfs-proxy.

Блокировка рекламы

DNS-сервер для блокировки рекламы. Домены и IP добавляются в blackhole-маршруты клиента.

Обход RU сайтов (сплит-туннелинг)

IP-диапазоны, исключаемые из VPN-туннеля. Трафик к этим IP пойдёт напрямую. Оставьте пустым для авто-списка RU подсетей.

Captive Portal

Страницы-заглушки для заблокированных клиентов (HTTP-трафик редиректится на указанные URL).

Telegram-бот

Email (SMTP)

Резервная копия

Справка

Инструкция по настройке

Создать ключ

Детали

-
Статус
-
Скачано
-
Загружено
-
Остаток

Истекает: -  |  Адрес: -  |  Устройств: -

Последняя активность: -

Выберите дату

Включение/выключение в реальном времени. Конфиг перегенерируется автоматически.

QR

Отсканируйте в приложении Cosmo

Одноразовые и защищённые ссылки для скачивания конфига. Можно отправить клиенту.

История изменений конфигурации. Можно откатить к предыдущей версии.

Добавить Webhook

Добавить администратора

Создать API ключ

Добавить сервер

Перенос клиента

Выберите целевой сервер для переноса клиента. Текущий конфиг будет заменён.