Tài liệu API HiTechAdmin
API HiTechAdmin dùng để quản lý các tuỳ chọn có trong giao diện HiTechAdmin: gói hosting, tài khoản, tên miền, dịch vụ, DNS, email, bảo mật, quản trị máy chủ, v.v. Mọi endpoint API đều yêu cầu xác thực Bearer JWT.
API HiTechAdmin chỉ có trên bản HiTechCloud Enterprise.
Để dùng API, trước tiên hãy bật nó tại trang HiTechAdmin > Cài đặt > Truy cập API hoặc từ terminal bằng lệnh hitechcloudcli api on.
Để tạo token dùng với các endpoint, gửi yêu cầu POST tới /api/ kèm tên người dùng và mật khẩu HiTechAdmin của bạn:
curl -X POST "https://HITECHADMIN_DOMAIN_OR_IP:2087/api/" && \
-H "Content-Type: application/json" -d '{"username":"HITECHADMIN_USERNAME","password":"HITECHADMIN_PASSWORD"}'
Chúng tôi khuyên nên tạo một người dùng quản trị riêng chỉ dành cho API. Bằng cách này, bạn có thể nhanh chóng tạm ngưng hoặc xoá tài khoản đó nếu thông tin đăng nhập của nó bị lộ.
Ví dụ phản hồi kèm token:
{"access_token":"eyJhbGciOiJIUzI1NiIsInRs4CI6IkpXVCJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTc4MDc0OTkwOCwianRpIjoiZDcwZmY2NmEtNDNiOC00OGZkLThiMWEtZDIwYWUwMDNhNjEyIiwidHlwZSI6ImFjY2VzcyIsInN1YiI6Im9wc3VwcG9ydCIsIm5iZiI6MTc4MDc0OTkwOCwiY3NyZiI6IjZlOGRmNGVmLTA0MjktNGNkYy1hNTg5LTJkYzUwMDk2ZDI2NSIsI3V4cCI6MTc4M33c1MDgwOH0.WLQ8rsVOF6pQg07i1fI1lXfd8_cCmryiOjGqg8zgOmw"}
Token này phải được gửi trong header cho mọi endpoint API khác:
-H "Authorization: Bearer YOUR_JWT_TOKEN" -H "Content-Type: application/json"
Về POST /api/
/api/ là route duy nhất của API này nhận tên người dùng và mật khẩu.
Mọi route khác nhận bearer token do nó cấp.
- Nhận một body JSON gồm
usernamevàpassword. Body không phải JSON hợp lệ trả về400với{"error": "Invalid JSON body"}. - Trả về
200và{"access_token": "<jwt>"}. Token là JWT HS256 chỉ có một claim có ý nghĩa là subject — tên người dùng quản trị — và có hiệu lực trong 15 phút. Không có refresh token; hãy xin token mới. - Sai tên người dùng hoặc mật khẩu trả về
401với{"error": "Invalid credentials"}. Hai trường hợp không được phân biệt. - Giới hạn tần suất theo IP, theo kiểu token bucket: 5 yêu cầu ngay lập tức, sau đó
được nạp lại theo tốc độ mà
login_ratelimitđặt trong mục[PANEL]của/etc/hitechcloud/hitechadmin/config/admin.ini(mặc định 5 lần mỗi phút). Vượt quá sẽ trả về429với{"error": "Too many login attempts. Please try again later."}. Bộ đếm nằm trong bộ nhớ, nên khởi động lại HiTechAdmin sẽ xoá chúng. GET /api/là kiểm tra tình trạng và trả lời{"message": "API is working!"}. Route này không cần token.GET /api/whoamibáo danh tính trong token của bạn, và cần có token.
API phải được bật trước, và bị từ chối khi xác thực HTTP Basic đang bật cho HiTechAdmin.
Panel hosting trên cổng 2083 có API riêng, tách biệt, với endpoint đăng nhập
riêng tại POST /api/login, các trường khác và thời hạn token khác.
Xem API HiTechCloud.
💡 Gợi ý: Dùng lệnh hitechcloudcli api list để xem ví dụ sử dụng cho mọi endpoint có trong phiên bản HiTechCloud của bạn.
Một số endpoint dưới đây có tính phá huỷ hoặc đặc quyền cao (khởi động lại máy chủ, đổi mật khẩu SSH root, tắt HiTechAdmin, di chuyển máy chủ, quản lý WAF/tường lửa). Chúng chạy với cùng đặc quyền như chính panel quản trị — hãy giới hạn phạm vi và xoay vòng token API cho phù hợp.
Người dùng
Liệt kê mọi tài khoản
GET /api/users
Ví dụ phản hồi
[
{
"username": "stefan",
"email": "jane@example.com",
"plan_name": "default_plan_nginx"
}
]
Tạo tài khoản
POST /api/users
Nội dung yêu cầu:
{
"email": "jane@example.com",
"username": "stefan",
"password": "s32dsasaq",
"plan_name": "default_plan_nginx"
}
Phản hồi:
{
"response": {
"message": "Successfully added user stefan password: s32dsasaq"
},
"success": true
}
Xem một tài khoản
GET /api/users/{username}
Tạm ngưng / bỏ tạm ngưng / đổi mật khẩu
PATCH /api/users/{username}
Ví dụ nội dung yêu cầu:
{
"action": "suspend",
"password": "NEW_PASSWORD_HERE"
}
Đổi gói
PUT /api/users/{username}
Nội dung yêu cầu:
{
"plan_name": "default_plan_nginx"
}
Xoá tài khoản
DELETE /api/users/{username}
Tự động đăng nhập vào tài khoản người dùng
CONNECT /api/users/{username}
Liệt kê người dùng có IP riêng
GET /api/ips
Liệt kê container của một người dùng
GET /api/users/{username}/containers
Thêm ?stats=1 để nhận số liệu CPU/bộ nhớ/mạng trực tiếp của các container của người dùng đó thay cho khai báo dịch vụ compose.
Quản lý container của một người dùng
POST /api/users/{username}/containers/{action}/{container_name}
{action} là một trong start, stop, restart, cpu, ram.
Nội dung yêu cầu (chỉ cho cpu/ram):
{
"value": "2"
}
Đặt lại quyền về mặc định của gói
POST /api/users/{username}/permissions/reset
Xoá các quyền ghi đè riêng của tài khoản người dùng, để quyền của họ quay về theo mặc định bộ tính năng của gói thay vì một danh sách tuỳ chỉnh riêng.
Xuất — sao lưu toàn bộ tài khoản
GET /api/users/{username}/export/status — có đang sao lưu toàn bộ tài khoản hay không, cùng các tệp lưu trữ sao lưu hiện có (tên, kích thước, thời điểm tạo)
POST /api/users/{username}/export/create — bắt đầu một bản sao lưu toàn bộ tài khoản mới (hitechcloudcli user-backup) ở chế độ nền; bị từ chối với 409 nếu đang có một bản chạy
GET /api/users/{username}/export/download/{filename} — tải xuống một tệp lưu trữ sao lưu
POST /api/users/{username}/export/delete — xoá một tệp lưu trữ sao lưu
Nội dung yêu cầu (xoá):
{ "filename": "alice_backup_2026-08-20_23-31-03.tar.gz" }
Đây cũng chính là bản sao lưu toàn bộ tài khoản bằng một cú bấm mà Trình hướng dẫn sao lưu tự phục vụ của HiTechCloud dùng (Settings → Backup Wizard trên panel của chính người dùng), ở đây được quản trị viên kích hoạt thay cho họ. Khác với trình hướng dẫn tự phục vụ, API này còn hỗ trợ xoá tệp l ưu trữ.
Gói
Liệt kê mọi gói
GET /api/plans
Phản hồi:
{
"plans": [
{
"id": 1,
"name": "ubuntu_nginx_mysql",
"description": "Unlimited disk space and Nginx",
"bandwidth": 100,
"cpu": "1",
"ram": "1g",
"disk_limit": "10 GB",
"storage_file": "0 GB",
"inodes_limit": 1000000,
"db_limit": 0,
"domains_limit": 0,
"websites_limit": 10,
"docker_image": "hitechcloud/nginx"
}
]
}
Tạo gói
POST /api/plans
Nội dung yêu cầu:
{
"name": "Starter",
"description": "Starter hosting plan",
"email_limit": "10",
"max_email_quota": "0",
"max_hourly_email": "0",
"ftp_limit": "5",
"domains_limit": "5",
"websites_limit": "5",
"disk_limit": "5000",
"inodes_limit": "100000",
"db_limit": "5",
"cpu": "1",
"ram": "1",
"bandwidth": "100",
"feature_set": "default"
}
Xem một gói
GET /api/plans/{plan_id}
Sửa gói
PUT /api/plans/{plan_id} (or PATCH)
Nội dung yêu cầu: cùng các trường như Tạo gói — chỉ gửi những trường muốn thay đổi, các trường còn lại dùng giá trị mặc định (0 cho giới hạn, 1 cho cpu/ram, 100 cho băng thông, default cho feature_set).
Xoá gói
DELETE /api/plans/{plan_id}
Tên miền
Liệt kê mọi tên miền
GET /api/domains
Thêm tên miền
POST /api/domains/new
Nội dung yêu cầu:
{
"username": "current_user",
"domain": "example.com",
"docroot": "/var/www/html/example.com"
}
Tạm ngưng tên miền
POST /api/domains/suspend/{domain}
Bỏ tạm ngưng tên miền
POST /api/domains/unsuspend/{domain}
Xoá tên miền
POST /api/domains/delete/{domain}
Xem / cập nhật thư mục gốc
GET /api/domains/docroot/{domain}
POST /api/domains/docroot/{domain}
Nội dung yêu cầu:
{
"docroot": "/var/www/html/newroot"
}
Xem / cập nhật tệp vùng DNS
GET /api/domains/{domain}/dns
POST /api/domains/{domain}/dns
Sửa tệp vùng bind thô. Khi lưu, vùng được kiểm tra bằng named-checkzone và nạp lại — nếu kiểm tra thất bại, phiên bản trước sẽ được tự động khôi phục.
Nội dung yêu cầu:
{
"content": "$TTL 86400\n@ IN SOA ..."
}
Xem / cập nhật cấu hình Caddy của một tên miền
GET /api/domains/{domain}/caddy
POST /api/domains/{domain}/caddy
Cùng cách kiểm tra rồi nạp lại như endpoint vùng DNS, nhưng cho khối cấu hình Caddy của tên miền.
Nội dung yêu cầu:
{
"content": "example.com {\n reverse_proxy ...\n}"
}
Xem / cập nhật cấu hình VirtualHost
GET /api/domains/{domain}/vhost/{username}
POST /api/domains/{domain}/vhost/{username}
Cập nhật tệp vhost nginx/apache/openresty thô của tên miền của người dùng đó và khởi động lại container web server.
Nội dung yêu cầu:
{
"content": "..."
}
SSL: xem trạng thái, yêu cầu AutoSSL, tải lên chứng chỉ tuỳ chỉnh, xem nhật ký
GET /api/domains/{domain}/ssl
POST /api/domains/{domain}/ssl
Nội dung yêu cầu (AutoSSL):
{ "action": "autossl" }
Nội dung yêu cầu (chứng chỉ tuỳ chỉnh — đường dẫn phải nằm trong /var/www/html/):
{
"action": "custom",
"public_path": "/var/www/html/example.com/cert.pem",
"private_path": "/var/www/html/example.com/key.pem"
}
Nội dung yêu cầu (nhật ký cấp chứng chỉ):
{ "action": "logs" }
Xem nhật ký truy cập của tên miền
GET /api/domains/{domain}/log
Hỗ trợ tham số truy vấn ?page=N và ?show_all=true để phân trang.
Xem thống kê GoAccess của tên miền
GET /api/domains/{domain}/stats/{username}
Trả về báo cáo HTML GoAccess đã được tạo sẵn (tạo lại mỗi 24 giờ).
Cụm DNS
GET /api/dns/cluster — xem cấu hình cụm (các IP slave được phép, trạng thái bật)
POST /api/dns/cluster — bật/tắt cụm, hoặc thêm/gỡ một IP slave
Ví dụ nội dung yêu cầu:
{ "action": "create", "ip": "1.2.3.4" }
{ "action": "delete", "ip": "1.2.3.4" }
{ "action": "enable" }
Trạng thái node trong cụm DNS
GET /api/dns/cluster/{ip}
Kiểm tra khả năng kết nối tới một node slave qua rndc trước, nếu không được thì dùng SSH.
Mẫu vùng DNS
GET /api/dns/zone-templates
POST /api/dns/zone-templates
Nội dung yêu cầu:
{
"zone_template_ipv4": "...",
"zone_template_ipv6": "..."
}
Mẫu tệp của tên miền
GET /api/domains/file-templates
POST /api/domains/file-templates
Các mẫu mặc định dùng cho tên miền mới: default_page, suspended_user, suspended_website, docker_nginx_domain, docker_openresty_domain, docker_apache_domain, docker_varnish, docker_caddy. Chỉ gửi những khoá bạn muốn cập nhật.
Mức sử dụng
Thông tin sử dụng API
GET /api/usage
Số liệu sử dụng hiện tại
GET /api/usage/stats
Phản hồi:
{
"usage_stats": "{\"timestamp\": \"2024-09-03\", \"users\": 1, \"domains\": 2, \"websites\": 0}"
}
Mức sử dụng CPU
GET /api/usage/cpu
Ví dụ phản hồi:
{
"core_0": 0,
"core_1": 0
}
Mức sử dụng bộ nhớ
GET /api/usage/memory
Dung lượng đĩa theo người dùng
GET /api/usage/disk
Dung lượng đĩa của máy chủ
GET /api/usage/server
Ví dụ phản hồi:
[
{
"device": "/dev/vda1",
"mountpoint": "/",
"fstype": "ext4",
"total": 123690532864,
"used": 63366230016,
"free": 60307525632,
"percent": 51.2
}
]
Hệ thống
Xem thông tin hệ thống
GET /api/system
Ví dụ phản hồi:
{
"hostname": "stefi",
"os": "Ubuntu 24.04 LTS",
"time": "2024-09-04 15:09:16",
"kernel": "6.8.0-36-generic",
"cpu": "DO-Premium-Intel(x86_64)",
"hitechcloud_version": "0.2.7",
"running_processes": 178,
"package_updates": 98,
"uptime": "18905"
}
Thông tin Docker
GET /api/docker/info
Kết quả thô của lời gọi API info của Docker Engine (container, image, storage driver, v.v.).
Dịch vụ
Liệt kê dịch vụ được giám sát
GET /api/services
Sửa danh sách dịch vụ
PUT /api/services
Ví dụ nội dung yêu cầu:
{
"service1": { "name": "Service One", "status": "active" },
"service2": { "name": "Service Two", "status": "inactive" }
}
Kiểm tra trạng thái dịch vụ
GET /api/services/status
Khởi động dịch vụ
POST /api/service/start/{service_name}
Khởi động lại dịch vụ
POST /api/service/restart/{service_name}
Dừng dịch vụ
POST /api/service/stop/{service_name}
Podman
Toàn bộ thông tin trong một lần
GET /api/services/podman — văn bản podman info, mọi image/volume/network, và dung lượng đĩa trong một lần gọi
Image / volume / network / dung lượng đĩa
GET /api/services/podman/images — mọi image trong kho podman dùng chung (kèm thông tin container hệ thống/người dùng đang dùng, cùng trạng thái kiểm tra cập nhật và quét lỗ hổng)
GET /api/services/podman/volumes
GET /api/services/podman/networks
GET /api/services/podman/disk-usage
Quản lý một image
POST /api/services/podman/images/{action}/{id} — {action} là delete (id là ID đầy đủ của image) hoặc pull (id là tham chiếu repository:tag)
GET /api/services/podman/images/action-status?id={id} — hỏi tiến độ
Không thao tác nào ảnh hưởng tới container đang chạy.
Kiểm tra cập nhật cho một image
GET /api/services/podman/images/check-update?ref={repository:tag}
So sánh digest manifest với registry, rất nhẹ. Chỉ chạy khi được yêu cầu.
Thao tác hàng loạt với image
POST /api/services/podman/images/bulk/{action} — {action} là pull-missing, delete-unused, check-updates hoặc check-vulnerabilities
GET /api/services/podman/images/bulk-status — hỏi tiến độ
Cả bốn thao tác chạy tuần tự ở chế độ nền trên mọi image phù hợp. check-vulnerabilities chạy quét lỗ hổng HIGH/CRITICAL bằng Trivy trên mọi image đã tải về, tự động cài Trivy ở lần dùng đầu tiên nếu chưa có.
Xem chi tiết lỗ hổng của một image
GET /api/services/podman/images/vulnerabilities?ref={repository:tag}
Ví dụ phản hồi
{
"checked": true,
"details": [
{
"id": "CVE-2024-12345",
"package": "openssl",
"installed_version": "1.1.1",
"fixed_version": "1.1.2",
"severity": "CRITICAL",
"title": "Buffer overflow in OpenSSL",
"url": "https://avd.aquasec.com/nvd/cve-2024-12345"
}
]
}
Trả về kết quả đã lưu đệm từ lần chạy hàng loạt check-vulnerabilities gần nhất — endpoint này không bao giờ tự kích hoạt quét. checked là false nếu image đó chưa từng được quét.
Sao lưu
Sao lưu hệ thống
GET /api/backups/system — thiết lập đích/thời hạn lưu giữ, lịch sử chạy, và các tệp lưu trữ hiện có
POST /api/backups/system/settings — { "destination": "/var/backups/hitechcloud", "retention_days": "30" }
POST /api/backups/system/run — bắt đầu một bản sao lưu hệ thống mới chỉ gồm cấu hình (hitechcloudcli backup) ở chế độ nền
POST /api/backups/system/restore/{filename} — khôi phục một tệp lưu trữ ở chế độ nền
POST /api/backups/system/delete/{filename} — xoá một tệp lưu trữ (đồng bộ)
GET /api/backups/system/action-status — hỏi tiến độ của lần chạy/khôi phục
Sao lưu người dùng
GET /api/backups/user — lịch sao lưu tập trung cho từng người dùng (disabled/daily/weekly/monthly)
POST /api/backups/user/settings — { "schedule_choice": "daily" }
GET /api/backups/user/configuration — nội dung thô của backup.env, mẫu dùng khi tạo tài khoản mới
POST /api/backups/user/configuration — { "backup_env": "..." } (chỉ cho người dùng mới — thiết lập riêng của người dùng hiện có không bị ảnh hưởng)
POST /api/backups/user/run — bắt đầu một lần chạy hitechcloudcli docker-backup tập trung ở chế độ nền; bị từ chối với 400 trừ khi lịch là daily/weekly/monthly
GET /api/backups/user/action-status — hỏi tiến độ
disabled nghĩa là mỗi người dùng hosting tự quản lý bản sao lưu từ tài khoản của mình — không có gì chạy tập trung.
Thông báo
Liệt kê thông báo
GET /api/notifications
Ví dụ phản hồi:
[
{ "title": "Update available", "message": "New package updates available." }
]
Đánh dấu thông báo đã đọc
POST /api/notifications/{line_number}/read
Truyền ?command=mark_all_as_read để đánh dấu mọi thông báo đã đọc trong một lần gọi.
Xoá thông báo
DELETE /api/notifications/{line_number}
Truyền ?command=delete_all để xoá toàn bộ nhật ký.
Email
Thiết lập máy chủ mail
GET /api/emails/settings
POST /api/emails/settings
Nội dung yêu cầu (đặt tên miền webmail):
{ "webmail_domain": "webmail.example.com" }
Nội dung yêu cầu (đổi ứng dụng webmail):
{ "webmail_software": "roundcube" }
Nội dung yêu cầu (bật/tắt dịch vụ của máy chủ mail — bất kỳ khoá nào trong ENABLE_POSTFWD, ENABLE_AMAVIS, ENABLE_DNSBL, ENABLE_RSPAMD, ENABLE_SPAMASSASSIN, ENABLE_MTA_STS, ENABLE_OPENDKIM, ENABLE_OPENDMARC, ENABLE_POP3, ENABLE_IMAP, ENABLE_CLAMAV, ENABLE_FAIL2BAN, SMTP_ONLY, ENABLE_SRS):
{ "ENABLE_CLAMAV": "1", "ENABLE_FAIL2BAN": "1" }
Nội dung yêu cầu (đổi vị trí lưu trữ — chỉ được phép khi chưa có hộp thư nào):
{ "storage_type": "custom", "email_storage_location": "/mnt/mail" }
Liệt kê / quản lý hộp thư
GET /api/emails/accounts — liệt kê mọi hộp thư và hạn mức của chúng
POST /api/emails/accounts — cập nhật mật khẩu, hạn mức, hoặc hạn chế gửi/nhận
DELETE /api/emails/accounts — xoá một hoặc nhiều hộp thư
Nội dung yêu cầu (đổi mật khẩu):
{ "action": "password", "email": "user@example.com", "password": "newpass" }
Nội dung yêu cầu (đặt hạn mức, tính bằng MB):
{ "action": "quota-set", "email": "user@example.com", "quota": "1024" }
Nội dung yêu cầu (gỡ hạn mức):
{ "action": "quota-del", "email": "user@example.com" }
Nội dung yêu cầu (hạn chế gửi/nhận):
{ "action": "restrict", "email": "user@example.com", "type": "send", "restrict_action": "add" }
Nội dung yêu cầu (xoá tài khoản):
{ "emails": ["user@example.com"] }
Hàng đợi mail
GET /api/emails/queue — liệt kê thư trong hàng đợi
POST /api/emails/queue — gửi lại hoặc xoá thư trong hàng đợi
Nội dung yêu cầu:
{ "action": "retry", "scope": "all" }
{ "action": "delete", "scope": "selected", "queue_ids": ["ABC123"] }
Giới hạn tần suất email theo tên miền
GET /api/emails/domain-limits — xem quy tắc postfwd (thêm ?hits=example.com để xem các lần chạm giới hạn gần đây của một tên miền)
POST /api/emails/domain-limits — quản lý quy tắc
Nội dung yêu cầu (đặt giới hạn):
{ "action": "update-domain", "domain": "example.com", "username": "user1", "limit": 100 }
Nội dung yêu cầu (đặt lại bộ đếm):
{ "action": "reset-all" }
Các thao tác khác được hỗ trợ: reset-domain, reset-user, delete-domain, delete-user, delete-all. Bạn cũng có thể gửi {"raw_content": "..."} để ghi đè trực tiếp tệp quy tắc postfwd.
Bảo mật
HTTP Basic Auth
GET /api/security/basic-auth
POST /api/security/basic-auth
Nội dung yêu cầu:
{
"basic_auth": "yes",
"basic_auth_username": "admin",
"basic_auth_password": "secret"
}
User-agent bị chặn
GET /api/security/blacklist-useragents
POST /api/security/blacklist-useragents
Nội dung yêu cầu:
{
"blacklist_useragents": "BadBot\nEvilCrawler",
"enabled": "yes"
}
Tắt HiTechAdmin
POST /api/security/disable-admin
Không thể hoàn tác từ giao diện web/API — panel chỉ có thể được bật lại từ terminal (hitechcloudcli admin on). Chỉ dành cho Super Administrator.
ConfigServer Firewall (CSF)
GET /api/security/firewall — kiểm tra CSF đã được cài chưa
POST /api/security/firewall — chuyển một lệnh thô tới backend giao diện CSF
Nội dung yêu cầu:
{ "action": "cf" }
Trạng thái CorazaWAF
GET /api/security/waf
POST /api/security/waf
Nội dung yêu cầu:
{ "status": "yes" }
Bộ quy tắc CorazaWAF
GET /api/security/waf/rules
POST /api/security/waf/rules
Nội dung yêu cầu:
{ "rule_name": "REQUEST-901-INITIALIZATION", "action": "off" }
Xác thực hai yếu tố
GET /api/security/2fa — trả về {"totp_enabled": true}, hoặc một secret + qr_data_uri mới để quét nếu 2FA chưa được bật
POST /api/security/2fa/enable — xác nhận đăng ký
POST /api/security/2fa/disable — tắt 2FA
Nội dung yêu cầu (bật):
{ "secret": "BASE32SECRET", "code": "123456" }
Nội dung yêu cầu (tắt):
{ "password": "your-account-password" }
Passkey
GET /api/security/passkeys — liệt kê passkey của người dùng API đã xác thực
POST /api/security/passkeys — đổi tên một passkey
DELETE /api/security/passkeys — gỡ một passkey
Nội dung yêu cầu:
{ "id": 1, "name": "Yubikey" }
Đăng ký passkey cần một nghi thức WebAuthn trực tiếp trên trình duyệt và không có qua API — hãy dùng giao diện HiTechAdmin để đăng ký khoá mới, rồi quản lý nó tại đây.
Máy chủ
Tác vụ cron
GET /api/server/crons
POST /api/server/crons
Nội dung yêu cầu:
{
"jobs": [
{ "line_number": 1, "schedule": "0 3 * * *", "logging": true }
]
}
SSH
GET /api/server/ssh — trạng thái, cấu hình đang chạy, các khoá được ủy quyền, và thiết lập hiện tại
POST /api/server/ssh — khởi động/dừng/khởi động lại dịch vụ, cập nhật thiết lập, hoặc quản lý các khoá được ủy quyền
Nội dung yêu cầu (thao tác với dịch vụ):
{ "action": "restart" }
Nội dung yêu cầu (thiết lập):
{ "port": "2222", "password_auth": "no", "pubkey_auth": "yes", "permit_root_login": "no" }
Nội dung yêu cầu (thêm/gỡ khoá):
{ "new_key": "ssh-ed25519 AAAA... comment" }
{ "key_to_remove": "ssh-ed25519 AAAA..." }
Toàn bộ cấu hình SSH
GET /api/server/ssh/config — sshd_config thô
POST /api/server/ssh/config — ghi đè tệp này (khởi động lại SSH)
Múi giờ
GET /api/server/timezone
POST /api/server/timezone
Nội dung yêu cầu:
{ "timezone": "Europe/Belgrade" }
Xả bộ nhớ đệm / swap
POST /api/server/memory/drop-cache
POST /api/server/memory/drop-swap
Swap
GET /api/server/swap — tổng/đã dùng/còn trống/phần trăm, mọi thiết bị swap đang hoạt động, ngưỡng cảnh báo, và đã có tệp swap được quản lý hay chưa
POST /api/server/swap/action/{action} — {action} là resize hoặc drop
GET /api/server/swap/action-status — hỏi tiến độ
Nội dung yêu cầu (đổi kích thước):
{ "size_mb": 2048 }
resize tạo lại tệp swap được quản lý (mặc định /swapfile) với kích thước yêu cầu (tối thiểu 128 MB) và bật lại nó, thêm vào /etc/fstab nếu cần. drop chạy swapoff -a; swapon -a — cũng là việc dọn dẹp mà Sentinel tự thực hiện, và tương đương với POST /api/server/memory/drop-swap ở trên.
Trình quản lý tiến trình
GET /api/server/processes — hỗ trợ ?sort=cpu|memory|priority|name|owner|command|pid (thêm tiền tố - để đảo thứ tự)
POST /api/server/processes/{pid}/kill
Node trong cụm
GET /api/server/node
POST /api/server/node
Nội dung yêu cầu:
{ "default_node": "root@1.2.3.4", "default_ssh_key_path": "/root/.ssh/id_rsa" }
Mật khẩu root
POST /api/server/root-password
Nội dung yêu cầu:
{ "password": "newpassword" }
Chỉ dành cho Super Administrator. Đổi mật khẩu SSH root thực sự trên máy chủ.
Khởi động lại
POST /api/server/reboot
Nội dung yêu cầu:
{ "reboot_type": "graceful" }
reboot_type là graceful (chờ rồi reboot) hoặc hard (kích hoạt sysrq). Yêu cầu bị chặn cho tới khi hết thời gian chờ khởi động lại, rồi kết nối bị ngắt.
GET /api/server/reboot/status — dùng để hỏi xem panel đã hoạt động trở lại chưa.
Di chuyển máy chủ
GET /api/server/migrate — kiểm tra trạng thái/nhật ký của một lần di chuyển đang chạy hoặc đã xong: status (running, finished hoặc unknown), result (succeeded hoặc failed khi đã xong), exit_code, detail và output
POST /api/server/migrate — bắt đầu chuyển mọi tài khoản của máy chủ này, cùng thiết lập, gói, quản trị viên và đại lý, sang một máy chủ HiTechCloud mới cài qua SSH. Lần chạy thất bại nếu có tài khoản nào không chuyển được; chạy lại để thử lại, và các tài khoản đã chuyển sẽ được bỏ qua.
Nội dung yêu cầu:
{ "host": "1.2.3.4", "root": "root", "password": "secret" }
Cài đặt
Quản trị viên
GET /api/settings/administrators
POST /api/settings/administrators
Nội dung yêu cầu (tạo — chỉ có ở Enterprise):
{ "action": "create", "username": "newadmin", "password": "secret123" }
Các thao tác khác được hỗ trợ: suspend, unsuspend, delete, rename_user (kèm new_username), reset_password (kèm new_password), disable_2fa, disable_passkeys.
Đại lý
GET /api/settings/resellers
POST /api/settings/resellers
Nội dung yêu cầu (tạo):
{ "action": "create", "username": "reseller1", "password": "secret123" }
Nội dung yêu cầu (cập nhật giới hạn):
{ "action": "update", "username": "reseller1", "allowed_plans": "1,2", "max_accounts": "10", "max_disk_blocks": "1000" }
Các thao tác khác được hỗ trợ: suspend, unsuspend, delete, rename_user, reset_password, disable_2fa, disable_passkeys. Token của đại lý chỉ quản lý được tài khoản của chính mình và chỉ được dùng reset_password.
Công tắc bật tính năng đại lý
GET /api/settings/resellers/enabled
POST /api/settings/resellers/enabled
Nội dung yêu cầu:
{ "enabled": true }
Công tắc bật/tắt tổng quyết định có được tạo tài khoản đại lý hay không — mặc định tắt. Tắt công tắc sẽ bị từ chối với 409 khi vẫn còn tài khoản đại lý; hãy xoá chúng trước.
Thiết lập chung
GET /api/settings/general
POST /api/settings/general
Nội dung yêu cầu:
{ "2083_port": "2083", "2087_port": "2087", "force_domain": "panel.example.com", "dev_mode": "off" }
Mặc định cho tài khoản mới
GET /api/settings/defaults
POST /api/settings/defaults
Nội dung yêu cầu:
{
"values": { "DEFAULT_PHP_VERSION": "8.2", "WEB_SERVER": "nginx" },
"services": ["phpmyadmin"]
}
Mẫu Compose/Env mặc định
GET /api/settings/defaults/files
POST /api/settings/defaults/files
DELETE /api/settings/defaults/files — đặt lại cả hai tệp từ nguồn gốc trên GitHub
Nội dung yêu cầu:
{ "env": "...", "compose": "..." }
Tệp Compose/Env của từng người dùng
GET /api/settings/defaults/files/{username}
POST /api/settings/defaults/files/{username}
Bộ tính năng
GET /api/settings/features — liệt kê các bộ tính năng
GET /api/settings/features/{plan} — xem một bộ
POST /api/settings/features — tạo bộ mới
POST /api/settings/features/{plan} — cập nhật/bật tất cả/tắt tất cả/xoá một bộ
Nội dung yêu cầu (tạo):
{ "feature_name": "my_set" }
Nội dung yêu cầu (cập nhật):
{ "action": "update", "features": ["ftp", "cron"] }
Các thao tác khác: enable_all, disable_all, delete.
Ngôn ngữ
GET /api/settings/locales
POST /api/settings/locales
Nội dung yêu cầu (cài đặt):
{ "locale": "en-us" }
Nội dung yêu cầu (đặt mặc định):
{ "default": "en-us" }
Mô-đun / plugin
GET /api/settings/modules
POST /api/settings/modules
Nội dung yêu cầu:
{ "enabled_modules": ["dns", "malware_scan", "phpmyadmin"] }
Mã tuỳ chỉnh
GET /api/settings/custom-code
POST /api/settings/custom-code
Gửi bất kỳ khoá nào trong: custom_css, custom_js, in_header, in_footer, post_update, pre_startup, custom_section, forbidden_usernames, restricted_domains, howto_guides, wp_themes, wp_plugins, pagespeed_api_key.
{ "custom_css": "body { background: #111; }" }
PHP
GET /api/settings/php
POST /api/settings/php
Nội dung yêu cầu:
{ "php82": "memory_limit=512M\nupload_max_filesize=64M" }
Gửi "options" để cập nhật /etc/hitechcloud/php/options.txt, hoặc phpXY (php56 … php84) để cập nhật php.ini của một phiên bản cụ thể.
Số liệu Caddy
GET /api/settings/caddy/metrics
Trả về số liệu thô định dạng Prometheus từ endpoint /metrics của Caddy.
Tuỳ chọn cập nhật
GET /api/settings/updates — tuỳ chọn hiện tại, phiên bản mới nhất có sẵn, và nhật ký cập nhật
POST /api/settings/updates
Nội dung yêu cầu:
{ "preference": "minor_only" }
preference là một trong minor_and_major, minor_only, major_only, none.
Cập nhật ngay
POST /api/settings/updates/now
Chạy hitechcloudcli update --force ở chế độ nền.
Ghim/hạ phiên bản
GET /api/settings/updates/tags — liệt kê các docker tag có sẵn của hitechcloud/hitechcloud-ui
POST /api/settings/updates/tags
Nội dung yêu cầu:
{ "version": "1.7.60" }
Tuỳ chọn thông báo
GET /api/settings/notifications
POST /api/settings/notifications
Nội dung yêu cầu:
{
"cpu": "90",
"webhook_url": "https://example.com/hook",
"update": "on",
"ssh_whitelist": "1.2.3.4/32\n5.6.7.0/24"
}
Hỗ trợ các ngưỡng dạng số (load, cpu, ram, du, swap, max_total_conn, max_conn_per_ip), webhook_url, email, các trường SMTP (mail_server, mail_port, mail_use_tls, mail_use_ssl, mail_debug, mail_username, mail_password, mail_default_sender), công tắc services, các công tắc sự kiện dạng boolean (update, attack, limit, login, ssh, reboot, dns, cùng mục ACTIONS như admin_create, user_delete, domains_ssl, v.v. — truyền "on"/"off"), và ssh_whitelist (các IP/CIDR ngăn cách bằng dòng mới).
Giấy phép và hỗ trợ
Khoá giấy phép
GET /api/license — khoá hiện tại
POST /api/license — đặt/xác thực một khoá
DELETE /api/license — gỡ giấy phép
Nội dung yêu cầu:
{ "key": "YOUR-LICENSE-KEY" }
Thông tin giấy phép
GET /api/license/info
Xác minh giấy phép
POST /api/license/verify
Tạo báo cáo hỗ trợ
GET /api/support/report
Chạy hitechcloudcli report --public --non-interactive và trả về báo cáo đã tạo.
Nhập và chuyển
Nhập từ bản sao lưu cPanel / CyberPanel
GET /api/import/{panel_type} — liệt kê trạng thái các tác vụ nhập ({panel_type} là cpanel hoặc cyberpanel)
POST /api/import/{panel_type} — bắt đầu nhập ở chế độ nền
Nội dung yêu cầu:
{ "path": "/root/backup-user.tar.gz", "plan_name": "default_plan_apache" }
Xem nhật ký nhập
GET /api/import/logs/account/{log_filename}
Liệt kê tệp sao lưu được phát hiện
GET /api/import/backup-files
Quét /, /home và /root để tìm các tệp backup-*.tar.gz.
Chuyển từ HiTechCloud sang HiTechCloud
GET /api/import/transfers — liệt kê các tệp nhật ký chuyển
POST /api/import/transfers — bắt đầu chuyển
Nội dung yêu cầu:
{
"hitechcloud_username": "newuser",
"server": "1.2.3.4",
"username": "root",
"password": "secret",
"live_transfer": true
}