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
- Авторизация: логин через curl
- Получение списка записей для удаления
- Массовое удаление клиентов и inbounds
- Заголовки, параметры и значения по умолчанию
- Распространённые ошибки и как их исправить
- Источники
- Заключение
Обзор подключения к 3x-ui API
Представьте: у вас стоит 3x-ui панель, но официальная документация путает пути и порты. Вы в терминале, и нужно быстро залогиниться, чтобы почистить кучу старых клиентов или inbounds. Всё решается curl-командами.
Суть проста. 3x-ui API работает на базе cookie-сессий — никаких JWT-токенов, просто сохраняете куки после логина и используете их в заголовках. По умолчанию панель висит на порту 2053 (проверьте в конфиге), базовый путь для API — /panel/api/. Логин идёт отдельно на /login/.
А что если вы уже пробовали и логин не проходит? Чаще всего виноват порт или отсутствие /panel/api/ в пути. Давайте разберём по шагам — рабочий шаблон, который я проверил на свежей версии.
Сначала базовый пример. Замените your-host на IP или домен сервера:
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 (измените в панели!).
Полный рабочий шаблон:
#!/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, тело не нужно.
Пример:
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}).
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}.
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.
#!/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.
-
404 Not Found — неверный путь. Логин:
/login/(с слешем!). API:/panel/api/inbounds/...— без/panel404. Проверьте:curl -vпокажет точный путь. -
401 Unauthorized — cookie истекли или неверные admin/pass. Решение: relogin,
rm cookie.txt && новый логин. Сессия ~час. -
Connection refused — порт неверный.
netstat -tlnp | grep 2053илиss -tnlp. Дефолт 2053, но может 8080/80. -
SSL certificate problem —
-kрешает. Или настройте правильный cert. -
Empty reply from server — firewall или 3x-ui не запущен.
systemctl status x-ui.
Отладка: всегда -v в curl. Логи 3x-ui: /etc/3x-ui/3x-ui.log.
Пример отладки:
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, и половина проблем уйдёт.
Источники
- 3X-UI Documentation - Postman API Network
- Configuration - MHSanaei/3x-ui Wiki
- GitHub - iamhelitha/3xui-api-client
- how to use api 3x-ui - Stack Overflow
- MHSanaei - Postman
Заключение
С этим шаблоном 3x-ui API под вашим контролем: логин за секунду, массовое удаление скриптом, ошибки — на раз. Главное — порт 2053, путь /panel/api/, cookie через -c/-b. Тестируйте на копии данных, добавьте jq для парсинга. Теперь панель чистая, трафик летает. Удачи с 3x-ui!