Table of Contents
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 управления
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. Типичная интеграция:
- Вызывает
POST /api/usersдля создания ключей новым подписчикам - Периодически опрашивает
GET /api/usersдля мониторинга потребления трафика - Использует
PUT /api/users/{key}/limitдля установки квот - Вызывает
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}