Chuyển tới nội dung chính
Version: 4.1

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.

INFORMATION

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 username và password. Body không phải JSON hợp lệ trả về 400 với {"error": "Invalid JSON body"}.
  • Trả về 200 và {"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ề 401 vớ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ề 429 vớ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/whoami bá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.

NOTE

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.

DANGER

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

DANGER

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" }
INFORMATION

Đă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" }
DANGER

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
}

Trạng thái chuyển của một người dùng​

GET /api/import/transfers/{username}

Xem nhật ký chuyển​

GET /api/import/logs/transfer/{log_filename}