Перейти к содержимому
GitHubПоддержать

API

У панели есть REST API для ботов, биллинга и мониторинга. Документация к нему встроена в саму панель.

Настройки → Безопасность → API → Открыть. На странице:

  • адрес API и ключи;
  • список всех методов с параметрами, ответами и примерами curl, кнопка «Попробовать» для GET-запросов;
  • «Скачать OpenAPI»: файл mikan-openapi.json, в котором уже прописан адрес вашей панели. Подходит для Postman, Insomnia, Swagger UI и генераторов клиентов.

Адрес API: https://<адрес панели>:<порт>/<секретный путь>/api/v1.

На странице API кнопка Новый ключ:

  • Название.
  • Права: «Чтение» или «Полный доступ».
  • Срок: пока не отзовёте, 30, 90 или 365 дней.
  • Пароль администратора и код 2FA, если она включена.

Ключ показывается один раз, панель хранит только его хеш. Ключи создаются и отзываются только из панели, не через API. При смене пароля ключи администратора можно отозвать галочкой, а mikan reset-password отзывает их всегда.

Права Что можно
Чтение только GET: пользователи, статистика, настройки, метрики. Ссылок подписок и секретных адресов в ответах нет
Полный доступ создавать и продлевать пользователей, менять тарифы и подключения. Без входа, сессий, ключей, журнала аудита, платежей, бота, сертификатов, обновлений и адресов панели: это только из панели

Ключ передаётся в заголовке:

Authorization: Bearer mk_...

Ошибки приходят в формате RFC 9457 (application/problem+json), код ошибки в поле detail.

BASE="https://vpn.example.com:PORT/СЕКРЕТНЫЙ-ПУТЬ/api/v1"
KEY="mk_..."

Список активных пользователей:

curl -H "Authorization: Bearer $KEY" "$BASE/users?state=active&limit=10"

Создать пользователя на тарифе 2:

curl -X POST "$BASE/users" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"name": "Anna", "tariff_id": 2, "contact": "@anna"}'

В ответе пользователь с id и ссылкой на подписку sub_url.

Продлить на 30 дней или на месяц (нужно одно из двух):

curl -X POST "$BASE/users/42/extend" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"days": 30}'

Начислить 10 ГБ, которые действуют до расхода:

curl -X POST "$BASE/users/42/grants" \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"bytes": 10737418240, "lifetime": "used"}'
Метод Путь Что делает
GET /users список: state, q, limit, offset
POST /users создать пользователя по тарифу
GET, PATCH /users/{id} пользователь, изменить
POST /users/{id}/extend продлить: days или months
POST /users/{id}/reset-traffic сбросить трафик
POST /users/{id}/reissue перевыпустить ссылку
POST /users/{id}/grants начислить трафик
POST /users/bulk действие над группой: extend, reset, disable, enable, delete
GET /tariffs тарифы
GET /inbounds подключения
GET /nodes ноды
GET /stats/overview цифры обзора
GET /stats/traffic трафик сервера: range 24h, 7d или 30d
GET /metrics метрики Prometheus

Полный список с телами запросов и ответов смотрите на странице API в панели.