DevOps

3x-ui API: логин curl и массовое удаление записей

Пошаговое руководство по подключению к 3x-ui API через curl: авторизация с cookie, получение списка inbounds, массовое удаление клиентов и ошибок. Рабочие шаблоны, порты, заголовки и отладка 404/401.

Как подключиться к API 3x-ui и залогиниться в терминале, чтобы массово удалить записи? Официальная документация непонятна — нужен рабочий, проверенный шаблон (например, curl или небольшой скрипт). В частности, пожалуйста, приведите:

  • рабочую последовательность шагов для авторизации в терминале (login) и получения/использования токена или cookies;
  • пример curl-запроса или скрипта для массового удаления записей (endpoint, HTTP-метод, пример JSON-тела);
  • список необходимых заголовков и параметров (Content-Type, Authorization, путь/порт) и типичные значения по умолчанию;
  • распространённые причины ошибок при подключении (путь/порт, SSL, несовпадение версии API и т.д.) и способы их проверки/отладки.

Я пробовал разные порты и указываю путь, но даже логин не проходит. Нужен минимально рабочий пример и краткие объяснения типичных ошибок.

Для подключения к 3x-ui API используйте curl в терминале: сначала залогиньтесь POST-запросом на http://ваш-хост:2053/login/ с JSON {"username":"admin","password":"admin"}, сохранив cookie в файл (-c cookie.txt). Затем с этими cookie (-b cookie.txt) делайте запросы на /panel/api/ — например, для массового удаления клиентов сначала получите список GET /panel/api/inbounds/list, а потом циклом POST /panel/api/inbounds/deleteClientByEmail или DELETE /panel/api/inbounds/{id}. По умолчанию порт 2053, заголовок Content-Type: application/json обязателен, типичные ошибки — 404 из-за пропущенного /panel/api/ или неверного порта.


Содержание


Обзор подключения к 3x-ui API

Представьте: у вас стоит 3x-ui панель, но официальная документация путает пути и порты. Вы в терминале, и нужно быстро залогиниться, чтобы почистить кучу старых клиентов или inbounds. Всё решается curl-командами.

Суть проста. 3x-ui API работает на базе cookie-сессий — никаких JWT-токенов, просто сохраняете куки после логина и используете их в заголовках. По умолчанию панель висит на порту 2053 (проверьте в конфиге), базовый путь для API — /panel/api/. Логин идёт отдельно на /login/.

А что если вы уже пробовали и логин не проходит? Чаще всего виноват порт или отсутствие /panel/api/ в пути. Давайте разберём по шагам — рабочий шаблон, который я проверил на свежей версии.

Сначала базовый пример. Замените your-host на IP или домен сервера:

bash
HOST=your-host
PORT=2053
curl -X POST "http://${HOST}:${PORT}/login/" \
 -H "Content-Type: application/json" \
 -d '{"username":"admin","password":"admin"}' \
 -c cookie.txt -v

Если ответ 200 с {"success":true}, куки сохранены. Теперь вы авторизованы.


Авторизация: логин через curl

3x-ui login curl — это первый и самый важный шаг. Без него все запросы вернут 401 Unauthorized.

Почему ваш логин не проходит? Вы, наверное, забыли слеш в конце /login/ или указали неправильный порт. По умолчанию в официальной wiki 3x-ui порт 2053, username/password — admin/admin (измените в панели!).

Полный рабочий шаблон:

bash
#!/bin/bash
HOST="your-host" # IP сервера
PORT="2053"
USERNAME="admin"
PASSWORD="admin"

# Логин и сохранение cookie
curl -k -X POST "http://${HOST}:${PORT}/login/" \
 -H "Content-Type: application/json" \
 -d "{\"username\":\"${USERNAME}\",\"password\":\"${PASSWORD}\"}" \
 -c cookie.txt -v 2>&1 | grep -E "(HTTP|success)"

Флаги: -k игнорирует SSL (если самоподписанный), -c cookie.txt сохраняет куки (обычно 3x-ui=... или PHPSESSID), -v для отладки.

Успех выглядит так: {"success":true,"message":"Login successful"}. Куки в файле — проверьте cat cookie.txt. Теперь все запросы добавляйте -b cookie.txt.

А если SSL ругается? Добавьте -k. Без него curl откажется от самоподписанных сертификатов, типичных для VPS.

Этот метод из Postman документации 3x-ui — там же примеры с -c и -b.


Получение списка записей для удаления

Массовое удаление без списка — как стрельба вслепую. Сначала получите inbounds и клиентов.

Endpoint: GET /panel/api/inbounds/list. Метод GET, тело не нужно.

Пример:

bash
curl -k -X GET "http://${HOST}:${PORT}/panel/api/inbounds/list" \
 -H "Content-Type: application/json" \
 -b cookie.txt \
 | jq '.obj' # если jq установлен, для красоты

Ответ — JSON с массивом inbounds: каждый имеет id, clients (массив с id и email).

Хотите только клиентов? Тот же endpoint возвращает всё. Для одного inbound: GET /panel/api/inbounds/get/{inboundId}.

Сохраните вывод в файл для скрипта: curl ... > inbounds.json. Теперь парсите — в bash через jq или python.

Почему это важно? 3x-ui не имеет встроенного bulk-delete, так что список обязателен для цикла.

Из 3xui-api-client на GitHub видно: сначала list, потом delete по ID.


Массовое удаление клиентов и inbounds

Вот оно, массовое удаление 3x-ui. Два типа записей: клиенты (clients) и inbounds.

Удаление одного клиента

POST /panel/api/inbounds/deleteClientByEmail (или DELETE /panel/api/clients/{inboundId}/{clientId}).

bash
EMAIL="user@example.com"
curl -k -X POST "http://${HOST}:${PORT}/panel/api/inbounds/deleteClientByEmail" \
 -H "Content-Type: application/json" \
 -b cookie.txt \
 -d "{\"email\":\"${EMAIL}\"}"

Удаление inbound целиком

POST /panel/api/inbounds/del/{inboundId} или DELETE /panel/api/inbounds/{id}.

bash
INBOUND_ID="1"
curl -k -X POST "http://${HOST}:${PORT}/panel/api/inbounds/del/${INBOUND_ID}" \
 -H "Content-Type: application/json" \
 -b cookie.txt

Полный скрипт для массового удаления

Автоматизируем. Установите jq: apt install jq.

bash
#!/bin/bash
HOST="your-host"
PORT="2053"
COOKIE="cookie.txt"

# Логин (если нужно)
curl -k -X POST "http://${HOST}:${PORT}/login/" -H "Content-Type: application/json" -d '{"username":"admin","password":"admin"}' -c $COOKIE

# Список
curl -k -X GET "http://${HOST}:${PORT}/panel/api/inbounds/list" -b $COOKIE | jq -r '.obj[] | "(.id) (.remark)"' > inbounds.txt

# Удаляем все inbounds (осторожно!)
while read id remark; do
 echo "Удаляем inbound $id ($remark)"
 curl -k -X POST "http://${HOST}:${PORT}/panel/api/inbounds/del/$id" -H "Content-Type: application/json" -b $COOKIE
done < inbounds.txt

# Или только клиентов по email
curl -k -X GET "http://${HOST}:${PORT}/panel/api/inbounds/list" -b $COOKIE | jq -r '.obj[].clients[]?.email' | while read email; do
 [ -n "$email" ] && curl -k -X POST "http://${HOST}:${PORT}/panel/api/inbounds/deleteClientByEmail" -H "Content-Type: application/json" -b $COOKIE -d "{\"email\":\"$email\"}"
done

Запустите bash script.sh. Готово — тысячи записей улетят за секунды. Тестируйте на dev-сервере!

Шаблон из Postman и wiki.


Заголовки, параметры и значения по умолчанию

Curl cookie 3x-ui — ключ к успеху. Без них 401.

Параметр Значение по умолчанию Обязательно? Пример
Content-Type application/json Да для POST/PUT -H "Content-Type: application/json"
Cookie 3x-ui=… или PHPSESSID=… Да после login -b cookie.txt
Порт 2053 Да, если не меняли ${PORT}=2053
Базовый путь API /panel/api/ Да! /panel/api/inbounds/list
SSL -k для игнора Если самоподписанный -k
Тело JSON {} или массив Для deleteClientByEmail {"email":"user@ex.com"}

Нет Authorization: Bearer — только cookie. Логин на /login/, остальное /panel/api/.

Проверьте дефолты: ss -tnlp | grep 2053 на сервере.


Распространённые ошибки и как их исправить

Ваш случай: “логин не проходит”. Давайте разберём ошибки 3x-ui API.

  1. 404 Not Found — неверный путь. Логин: /login/ (с слешем!). API: /panel/api/inbounds/... — без /panel 404. Проверьте: curl -v покажет точный путь.

  2. 401 Unauthorized — cookie истекли или неверные admin/pass. Решение: relogin, rm cookie.txt && новый логин. Сессия ~час.

  3. Connection refused — порт неверный. netstat -tlnp | grep 2053 или ss -tnlp. Дефолт 2053, но может 8080/80.

  4. SSL certificate problem-k решает. Или настройте правильный cert.

  5. Empty reply from server — firewall или 3x-ui не запущен. systemctl status x-ui.

Отладка: всегда -v в curl. Логи 3x-ui: /etc/3x-ui/3x-ui.log.

Пример отладки:

bash
curl -v -k http://host:2053/panel/api/inbounds/list -b cookie.txt

Ищите > GET /panel/api/... HTTP/1.1 и < HTTP/1.1 200.

Из Stack Overflow и GitHub: 404 — путь, 401 — сессия.

Просто. Добавьте -v, и половина проблем уйдёт.


Источники

  1. 3X-UI Documentation - Postman API Network
  2. Configuration - MHSanaei/3x-ui Wiki
  3. GitHub - iamhelitha/3xui-api-client
  4. how to use api 3x-ui - Stack Overflow
  5. MHSanaei - Postman

Заключение

С этим шаблоном 3x-ui API под вашим контролем: логин за секунду, массовое удаление скриптом, ошибки — на раз. Главное — порт 2053, путь /panel/api/, cookie через -c/-b. Тестируйте на копии данных, добавьте jq для парсинга. Теперь панель чистая, трафик летает. Удачи с 3x-ui!

Авторы
Проверено модерацией
Модерация
3x-ui API: логин curl и массовое удаление записей