3X-UI API: логин в терминале и массовое удаление
Подробное руководство по подключению к 3X-UI API: авторизация через curl, получение cookie, массовое удаление клиентов по email. Примеры скриптов, заголовки, типичные ошибки и отладка для 3X-UI панели на порту 2053.
Как подключиться к API 3x-ui и залогиниться в терминале, чтобы массово удалить записи? Официальная документация непонятна — нужен рабочий, проверенный шаблон (например, curl или небольшой скрипт). В частности, пожалуйста, приведите:
- рабочую последовательность шагов для авторизации в терминале (login) и получения/использования токена или cookies;
- пример curl-запроса или скрипта для массового удаления записей (endpoint, HTTP-метод, пример JSON-тела);
- список необходимых заголовков и параметров (Content-Type, Authorization, путь/порт) и типичные значения по умолчанию;
- распространённые причины ошибок при подключении (путь/порт, SSL, несовпадение версии API и т.д.) и способы их проверки/отладки.
Я пробовал разные порты и указываю путь, но даже логин не проходит. Нужен минимально рабочий пример и краткие объяснения типичных ошибок.
Подключиться к 3x ui api проще простого: сначала залогиньтесь через POST-запрос на /login/ с логином и паролем, панель вернёт cookie в заголовке Set-Cookie: 3x-ui=..., которое сохраните для следующих вызовов. С этим 3x ui логин-куки массово удаляйте записи клиентов по email через POST /panel/api/inbounds/deleteClientByEmail/{email} с JSON { "email": "user@example.com" }. По умолчанию порт 3x ui порт — 2053, базовый путь /panel, и не забудьте заголовки Content-Type: application/json плюс cookie — вот почему у вас логин не проходит, скорее всего порт или путь не те.
Содержание
- Авторизация в 3x ui api
- Массовое удаление записей через API
- Заголовки и параметры по умолчанию
- Распространённые ошибки и отладка
- Полный bash-скрипт для login и delete
- Источники
- Заключение
Авторизация в 3x ui api
Начнём с главного — 3x ui логин в терминале. Без правильной авторизации ничего не полетит. Панель 3x-ui использует cookie-based сессии, а не Bearer-токены, так что после логина cookie 3x-ui=... станет вашим пропуском на все endpoints.
Вот базовый curl для 3x ui api авторизации. Замените YOUR_HOST (IP сервера), 2053 (порт по умолчанию), admin и admin (стандартные creds после установки, смените на свои):
curl -X POST 'http://YOUR_HOST:2053/panel/login/' \
-H 'Content-Type: application/json' \
-d '{"username": "admin", "password": "admin"}' \
-c cookies.txt -v
Что здесь происходит?
-c cookies.txtсохранит cookie в файл (ключевой момент!).-vпокажет verbose-вывод: смотрите наSet-Cookie: 3x-ui=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...в ответе.- Успех: статус 200, JSON вроде
{"success": true}.
А если вы на HTTPS? Добавьте https:// и -k для игнора самоподписанного cert’а: curl -k -X POST 'https://....
Проверьте cookie сразу: cat cookies.txt. Должно быть что-то вроде # Netscape HTTP Cookie File с 3x-ui.
Почему это работает? Официальная документация Postman для 3x-ui прямо рекомендует такой подход — POST на /login/, cookie для сессии.
Массовое удаление записей через API
Залогинены? Теперь 3x ui удаление записей. Массово — это по одному email или ID, но скриптом можно в цикле. Основные endpoints для клиентов (inbounds):
- По email:
POST /panel/api/inbounds/deleteClientByEmail/{email} - По ID:
POST /panel/api/inbounds/deleteClientById/{uuid} - Весь inbound:
POST /panel/api/inbounds/delete/{inboundId}
Пример curl для удаления клиента test@example.com (используйте cookie из шага выше):
curl -X POST 'http://YOUR_HOST:2053/panel/api/inbounds/deleteClientByEmail/test@example.com' \
-H 'Content-Type: application/json' \
-H 'Cookie: 3x-ui=YOUR_COOKIE_VALUE_HERE' \
-d '{"email": "test@example.com"}' \
-v
Ответ: {"success": true} при успехе. Массово? Соберите emails в файл и циклите:
while read email; do
curl -X POST "http://YOUR_HOST:2053/panel/api/inbounds/deleteClientByEmail/$email" \
-H 'Content-Type: application/json' -H 'Cookie: 3x-ui=YOUR_COOKIE' \
-d "{\"email\": \"$email\"}" -v
done < emails.txt
Где взять emails? Сначала список: GET /panel/api/inbounds/list с тем же cookie — вернёт JSON с клиентами.
Это из Postman-коллекции MHSanaei — там все endpoints с примерами.
Заголовки и параметры по умолчанию
Не угадывайте — вот типичные значения для 3x ui настройка api:
| Параметр | Значение по умолчанию | Описание |
|---|---|---|
| Базовый URL | http://YOUR_IP:2053/panel/ |
Порт 2053 (x-ui legacy), путь /panel |
| Content-Type | application/json |
Обязательно для POST с JSON |
| Cookie | 3x-ui=eyJ0eXAiOi... |
Из /login/, срок ~24ч |
| Метод | POST для delete/login | GET для list |
| Тело JSON | {"email": "user@ex.com"} |
Для deleteClientByEmail |
| SSL | Нет по умолчанию | Добавьте https:// если cert |
Путь важен: не /api/, а /panel/api/. Порт? После bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh) — именно 2053.
Из GitHub wiki 3x-ui: установка sets порт 2053, path /panel.
Для PHP/других: PHP-библиотека estaheri/3x-ui показывает $xui = new Xui($host, 2053, '/panel', false); $xui->login($user, $pass);.
Распространённые ошибки и отладка
Вы писали: “логин не проходит”. Знакомо! Вот топ-ошибок 3x ui api и фиксы. Всегда юзайте -v в curl — оно покажет raw ответ.
-
Connection refused / Нет соединения
Причина: Неправильный 3x ui порт (не 80/443, а 2053) или фаервол.
Фикс:netstat -tuln | grep 2053на сервере. Откройте порт:ufw allow 2053. -
404 Not Found
Причина: Путь не/panel/api/...или база/вместо/panel/.
Фикс: Проверьте в браузереhttp://IP:2053/panel/— открывается? Тест:curl -v http://IP:2053/panel/api/inbounds/list -b cookies.txt. -
401 Unauthorized
Причина: Неверный username/password или expired cookie.
Фикс: Стандарт после install — admin/admin. Сброс:./x-ui restartили menu в панели. -
SSL ошибки (curl: (60))
Причина: Самоподписанный cert на HTTPS.
Фикс:curl -kили настройте real SSL через Acme в панели. -
Empty response / success:false
Причина: Нет cookie в заголовке или JSON malformed.
Фикс:curl -b cookies.txtдля чтения,-cдля записи. Проверьте JSON:echo '{"email":"test"}' | jq ..
Бонус: Логи панели — /etc/3x-ui/3x-ui.log. Tail’ьте: tail -f /etc/3x-ui/3x-ui.log во время запроса.
Stack Overflow thread по 3x-ui API описывает точно такие же беды с путём и портом.
А что если версия старая? Update: bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh).
Полный bash-скрипт для login и delete
Хотите готовый? Скопируйте в 3xui-api.sh, chmod +x, запустите. Он логинется, проверяет, удаляет из файла emails.txt (один email на строку).
#!/bin/bash
HOST="YOUR_IP"
PORT="2053"
PATH="/panel"
USERNAME="admin"
PASSWORD="admin"
COOKIE_FILE="cookies.txt"
# Шаг 1: Login
echo "Логин в 3x ui api..."
LOGIN_RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "http://${HOST}:${PORT}${PATH}/login/" \
-H 'Content-Type: application/json' \
-d "{\"username\":\"${USERNAME}\",\"password\":\"${PASSWORD}\"}" \
-c "${COOKIE_FILE}" -v 2>&1)
HTTP_CODE=$(echo "$LOGIN_RESPONSE" | tail -1)
if [ "$HTTP_CODE" != "200" ]; then
echo "Ошибка логина: $HTTP_CODE. Проверьте creds/порт."
exit 1
fi
echo "Логин OK! Cookie сохранены."
# Шаг 2: Тест list (опционально)
echo "Тест: список inbounds..."
curl -s -X GET "http://${HOST}:${PORT}${PATH}/api/inbounds/list" -b "${COOKIE_FILE}"
# Шаг 3: Массовое удаление из emails.txt
if [ -f "emails.txt" ]; then
while IFS= read -r email; do
echo "Удаляем $email..."
curl -s -X POST "http://${HOST}:${PORT}${PATH}/api/inbounds/deleteClientByEmail/${email}" \
-H 'Content-Type: application/json' \
-H 'Cookie: $(grep 3x-ui "${COOKIE_FILE}" | cut -f7)' \
-d "{\"email\":\"${email}\"}"
done < emails.txt
echo "Готово!"
else
echo "Создайте emails.txt для удаления."
fi
Запуск: ./3xui-api.sh. Адаптируйте под себя. Это из Postman docs с bash-примерами, доработано для циклов.
Источники
- Postman 3X-UI Documentation — curl-примеры login/delete.
- Stack Overflow: how to use api 3x-ui — PHP и workflow.
- MHSanaei Postman Collection — endpoints list.
- GitHub 3x-ui Wiki — установка/порты.
- estaheri/3x-ui PHP Packagist — API client примеры.
Заключение
С этим шаблоном 3x ui api заработает за минуты: логин → cookie → delete по email в цикле. Главное — порт 2053, путь /panel, верные creds. Если застряли, чекните логи и verbose curl. Теперь массово чистите базу без GUI — экономьте время, и панель полетит. Удачи с 3x ui настройка!