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

REST API

Справочник REST API V2RayTun: аутентификация, основные эндпоинты, примеры запросов на curl, JavaScript и Python.

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

JWT-токен

Получите токен через эндпоинт авторизации:

Bash
curl -X POST https://panel.example.com/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "your-password"}'

Ответ:

JSON
{
  "accessToken": "eyJhbGciOiJIUzI1NiIs...",
  "refreshToken": "eyJhbGciOiJIUzI1NiIs..."
}

Используйте accessToken в заголовке Authorization:

Bash
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..." \
  https://panel.example.com/api/users

API-токены

Для долгоживущих интеграций создайте 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-операции

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

Bash
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"]
  }'

Получение списка пользователей

Bash
curl "https://panel.example.com/api/users?page=1&limit=20" \
  -H "Authorization: Bearer YOUR_TOKEN"

Обновление пользователя

Bash
curl -X PUT https://panel.example.com/api/users/USER_UUID \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"trafficLimitBytes": 21474836480}'

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

Bash
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

TypeScript
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

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Внутренняя ошибка сервера