3 Management API_ru
ospab edited this page 2026-06-19 15:02:57 +03:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

API управления

English version

OSTP включает встроенный REST API для удалённого управления сервером. Этот API позволяет сторонним панелям (3x-ui, RemnaWave), Telegram-ботам и пользовательским дашбордам управлять пользователями, отслеживать трафик и контролировать сервер.


Включение API

Добавьте inbound с типом api в массив inbounds вашего серверного config.json:

{
  "mode": "server",
  "inbounds": [
    {
      "type": "api",
      "tag": "api-in",
      "listen": "127.0.0.1",
      "port": 9090,
      "token": "ваш-секретный-токен"
    }
  ]
}
Поле Тип По умолчанию Описание
type string обязательное Должно быть "api"
listen string обязательное IP-адрес для прослушивания (например "127.0.0.1")
port u16 обязательное Порт (например 9090)
token string null Bearer-токен для аутентификации. Обязателен для продакшена.

Безопасность: всегда устанавливайте надёжный token в продакшене. Если токен не указан, API считает окружение доверенным.

Совет: привяжите к 127.0.0.1 и используйте реверс-прокси (nginx/caddy) с TLS для удалённого доступа.


Аутентификация

Все запросы требуют заголовок Authorization:

Authorization: Bearer ваш-секретный-токен

Запросы без валидного токена получают 401 Unauthorized.


Эндпоинты

Статус сервера

GET /api/server/status

Возвращает версию сервера, аптайм и количество пользователей.

Ответ:

{
  "version": "0.1.70",
  "uptime_seconds": 3600,
  "total_users": 5,
  "status": "running"
}

Список пользователей

GET /api/users

Возвращает всех пользователей со статистикой трафика.

Ответ:

{
  "users": [
    {
      "key": "c8a6fde902b4e23910cde882b7cf1612",
      "bytes_up": 1048576,
      "bytes_down": 52428800,
      "connections": 3,
      "limit_bytes": 10737418240
    }
  ]
}

Статистика пользователя

GET /api/users/{key}

Возвращает статистику конкретного пользователя.


Создание пользователя

POST /api/users

Тело запроса (опционально):

{
  "key": "свой-ключ-или-оставьте-пустым",
  "limit_bytes": 10737418240
}

Если key не указан, генерируется случайный ключ.

Ответ:

{
  "key": "a1b2c3d4e5f6...",
  "created": true
}

Удаление пользователя

DELETE /api/users/{key}

Удаляет пользователя и его ключ доступа.


Установка лимита трафика

PUT /api/users/{key}/limit

Тело запроса:

{
  "limit_bytes": 5368709120
}

Установите null для снятия лимита.


Сброс счётчиков

POST /api/users/{key}/reset

Обнуляет bytes_up, bytes_down и connections.


Примеры

cURL

# Статус сервера
curl -s -H "Authorization: Bearer mytoken" \
  http://127.0.0.1:9090/api/server/status | jq

# Список пользователей
curl -s -H "Authorization: Bearer mytoken" \
  http://127.0.0.1:9090/api/users | jq

# Создать пользователя с лимитом 10 ГБ
curl -s -X POST \
  -H "Authorization: Bearer mytoken" \
  -H "Content-Type: application/json" \
  -d '{"limit_bytes": 10737418240}' \
  http://127.0.0.1:9090/api/users | jq

# Удалить пользователя
curl -s -X DELETE \
  -H "Authorization: Bearer mytoken" \
  http://127.0.0.1:9090/api/users/c8a6fde902b4e23910cde882b7cf1612

# Установить лимит 5 ГБ
curl -s -X PUT \
  -H "Authorization: Bearer mytoken" \
  -H "Content-Type: application/json" \
  -d '{"limit_bytes": 5368709120}' \
  http://127.0.0.1:9090/api/users/c8a6fde902b4e23910cde882b7cf1612/limit

# Сброс счётчиков
curl -s -X POST \
  -H "Authorization: Bearer mytoken" \
  http://127.0.0.1:9090/api/users/c8a6fde902b4e23910cde882b7cf1612/reset

Python

import requests

API = "http://127.0.0.1:9090"
TOKEN = "ваш-секретный-токен"
HEADERS = {"Authorization": f"Bearer {TOKEN}"}

# Список пользователей
users = requests.get(f"{API}/api/users", headers=HEADERS).json()
for user in users["users"]:
    print(f"Ключ: {user['key'][:8]}... | Вх.{user['bytes_up']} Исх.{user['bytes_down']}")

# Создать пользователя
resp = requests.post(f"{API}/api/users", headers=HEADERS,
                     json={"limit_bytes": 10 * 1024**3})
print(f"Новый ключ: {resp.json()['key']}")

Интеграция с панелями

API спроектирован для совместимости с архитектурой панелей типа 3x-ui и RemnaWave. Типичная интеграция:

  1. Вызывает POST /api/users для создания ключей новым подписчикам
  2. Периодически опрашивает GET /api/users для мониторинга потребления трафика
  3. Использует PUT /api/users/{key}/limit для установки квот
  4. Вызывает DELETE /api/users/{key} при истечении подписки

API подписки

Получение конфигурации клиента

GET /api/subscribe/{access_key}

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

Ответ по умолчанию (Accept: application/json):

{
  "ok": true,
  "data": {
    "mode": "client",
    "server": "example.com:50000",
    "access_key": "c8a6fde902b4e23910cde882b7cf1612",
    "socks5_bind": "127.0.0.1:1088",
    "tun": {"enable": false, "dns": "1.1.1.1"},
    "turn": {"enabled": false},
    "mux": {"enabled": false, "sessions": 1},
    "debug": false
  }
}

Ответ в виде ссылки (Accept: text/plain):

ostp://c8a6fde902b4e23910cde882b7cf1612@example.com:50000

Примеры

# Получить конфиг клиента
curl -s http://127.0.0.1:9090/api/subscribe/c8a6fde902b4e23910cde882b7cf1612 | jq

# Получить share-ссылку
curl -s -H "Accept: text/plain" \
  http://127.0.0.1:9090/api/subscribe/c8a6fde902b4e23910cde882b7cf1612

# Использование с sub-store / NekoBox
# Укажите URL подписки: http://your-server:9090/api/subscribe/{key}

<- Конфигурация | Протокол ->