REST API
Справочник REST API V2RayTun: аутентификация, основные эндпоинты, примеры запросов на curl, JavaScript и Python.
Аутентификация
JWT-токен
Получите токен через эндпоинт авторизации:
curl -X POST https://panel.example.com/api/auth/login \
-H "Content-Type: application/json" \
-d '{"username": "admin", "password": "your-password"}'Ответ:
{
"accessToken": "eyJhbGciOiJIUzI1NiIs...",
"refreshToken": "eyJhbGciOiJIUzI1NiIs..."
}Используйте accessToken в заголовке Authorization:
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
https://panel.example.com/api/usersAPI-токены
Для долгоживущих интеграций создайте API-токен в панели: Settings → API Tokens → Create Token.
Основные эндпоинты
| Метод | Эндпоинт | Описание |
|---|---|---|
| GET | /api/users | Список пользователей |
| POST | /api/users | Создать пользователя |
| GET | /api/users/:id | Получить пользователя |
| PUT | /api/users/:id | Обновить пользователя |
| DELETE | /api/users/:id | Удалить пользователя |
| GET | /api/nodes | Список узлов |
| POST | /api/nodes | Создать узел |
| GET | /api/hosts | Список хостов |
| GET | /api/squads | Список Squads |
| GET | /api/config-profiles | Список конфигурационных профилей |
CRUD-операции
Создание пользователя
curl -X POST https://panel.example.com/api/users \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"username": "john",
"trafficLimitBytes": 10737418240,
"expireAt": "2025-12-31T23:59:59Z",
"squadIds": ["squad-uuid"]
}'Получение списка пользователей
curl "https://panel.example.com/api/users?page=1&limit=20" \
-H "Authorization: Bearer YOUR_TOKEN"Обновление пользователя
curl -X PUT https://panel.example.com/api/users/USER_UUID \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"trafficLimitBytes": 21474836480}'Удаление пользователя
curl -X DELETE https://panel.example.com/api/users/USER_UUID \
-H "Authorization: Bearer YOUR_TOKEN"Пагинация и фильтрация
Списковые эндпоинты поддерживают параметры:
| Параметр | Описание | Пример |
|---|---|---|
page | Номер страницы | ?page=1 |
limit | Количество на странице | ?limit=20 |
search | Поиск по имени | ?search=john |
sort | Сортировка | ?sort=createdAt |
order | Порядок | ?order=desc |
Примеры на JavaScript
const API_URL = "https://panel.example.com/api";
async function getUsers(token: string) {
const response = await fetch(`${API_URL}/users?page=1&limit=50`, {
headers: { Authorization: `Bearer ${token}` },
});
return response.json();
}
async function createUser(token: string, data: Record<string, unknown>) {
const response = await fetch(`${API_URL}/users`, {
method: "POST",
headers: {
Authorization: `Bearer ${token}`,
"Content-Type": "application/json",
},
body: JSON.stringify(data),
});
return response.json();
}Пример на Python
import requests
API_URL = "https://panel.example.com/api"
TOKEN = "your-jwt-token"
headers = {
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json",
}
# Получить список пользователей
users = requests.get(f"{API_URL}/users", headers=headers).json()
# Создать пользователя
new_user = requests.post(
f"{API_URL}/users",
headers=headers,
json={
"username": "alice",
"trafficLimitBytes": 10737418240,
"expireAt": "2025-12-31T23:59:59Z",
},
).json()Коды ответов
| Код | Описание |
|---|---|
| 200 | Успешный запрос |
| 201 | Ресурс создан |
| 400 | Некорректный запрос |
| 401 | Не авторизован |
| 403 | Доступ запрещён |
| 404 | Ресурс не найден |
| 500 | Внутренняя ошибка сервера |