88API88API
User GuideAI ApplicationsAPI ReferenceHelp & Support
API Module Guide

Mô-đun người dùng

Mô tả tính năng

Tiền tố giao diện thống nhất là http(s)://<your-domain>

Nên sử dụng HTTPS trong môi trường sản xuất để bảo mật mã thông báo xác thực. HTTP chỉ được khuyến nghị cho môi trường phát triển.

Hệ thống quản lý người dùng cốt lõi triển khai cấu trúc quyền bốn cấp (Công khai/Người dùng/Quản trị viên/Root) và quản lý vòng đời người dùng hoàn chỉnh. Nó bao gồm các tính năng như đăng ký/đăng nhập, hồ sơ cá nhân, quản lý mã thông báo, nạp tiền/thanh toán và hệ thống liên kết. Nó hỗ trợ 2FA, xác minh email và các phương thức đăng nhập OAuth khác nhau.

Đăng ký/Đăng nhập tài khoản

🔐 Không cần xác thực

Đăng ký tài khoản mới

  • Tên giao diện:Đăng ký tài khoản mới
  • Phương thức HTTP: POST
  • Đường dẫn:/api/user/register
  • Yêu cầu xác thực:Công khai
  • Mô tả chức năng:Tạo tài khoản người dùng mới, hỗ trợ chức năng xác minh email và mã giới thiệu

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/register', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    username: "newuser",
    password: "password123",
    email: "user@example.com",
    verification_code: "123456",
    aff_code: "INVITE123"
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "User registration successful"
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "The administrator has closed new user registration"
}

🧾 Mô tả trường:

  • username (String): Tên người dùng, bắt buộc
  • password (Chuỗi): Mật khẩu, bắt buộc
  • email (String): Địa chỉ email, bắt buộc khi kích hoạt xác minh email
  • verification_code (String): Mã xác minh email, bắt buộc khi kích hoạt xác minh email
  • aff_code (String): Mã giới thiệu, tùy chọn

Đăng nhập người dùng

  • Tên giao diện:Đăng nhập người dùng
  • Phương thức HTTP: POST
  • Đường dẫn:/api/user/login
  • Yêu cầu xác thực:Công khai
  • Mô tả chức năng:Đăng nhập tài khoản người dùng, hỗ trợ Xác thực hai yếu tố (2FA)

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/login', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    username: "testuser",
    password: "password123"
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công (Không có 2FA):

{
  "success": true,
  "message": "Login successful",
  "data": {
    "token": "user_access_token",
    "user": {
      "id": 1,
      "username": "testuser",
      "role": 1,
      "quota": 1000000
    }
  }
}

✅ Ví dụ phản hồi thành công (Yêu cầu 2FA):

{
  "success": true,
  "message": "Please enter the two-step verification code",
  "data": {
    "require_2fa": true
  }
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "The administrator has turned off password login"
}

🧾 Mô tả trường:

  • username (String): Tên người dùng, bắt buộc
  • password (Chuỗi): Mật khẩu, bắt buộc
  • require_2fa (Boolean): Có cần xác thực hai yếu tố hay không

Thông báo thanh toán Epay

  • Tên giao diện:Thông báo thanh toán Epay
  • Phương thức HTTP: NHẬN
  • Đường dẫn:/api/user/epay/notify
  • Yêu cầu xác thực:Công khai
  • Mô tả chức năng:Xử lý thông báo gọi lại thanh toán từ hệ thống Epay

💡 Ví dụ yêu cầu:

_// Usually called back automatically by the payment system,The front end does not need to actively call  _
_// ExampleURL: /api/user/epay/notify?trade_no=USR1NO123456&money=10.00&trade_status=TRADE_SUCCESS_

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "Payment successful"
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "The order does not exist or has been processed"
}

🧾 Mô tả trường:

  • trade_no (String): Mã lệnh giao dịch
  • money (String): Số tiền thanh toán
  • trade_status (String): Trạng thái giao dịch
  • sign (String): Xác thực chữ ký

Liệt kê tất cả các nhóm (Phiên bản chưa được xác thực)

  • Tên giao diện:Liệt kê tất cả các nhóm
  • Phương thức HTTP: NHẬN
  • Đường dẫn:/api/user/groups
  • Yêu cầu xác thực:Công khai
  • Mô tả chức năng:Lấy thông tin về tất cả các nhóm người dùng trong hệ thống, có thể truy cập mà không cần đăng nhập

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/groups', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": {
    "default": {
      "ratio": 1.0,
      "desc": "Default grouping"
    },
    "vip": {
      "ratio": 0.8,
      "desc": "VIPGroup"
    },
    "auto": {
      "ratio": "automatic",
      "desc": "Automatically select the best grouping"
    }
  }
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Failed to obtain group information"
}

🧾 Mô tả trường:

data (Object): Ánh xạ thông tin nhóm

  • Key (String): Tên nhóm
  • ratio (Số/Chuỗi): Tỷ lệ nhóm, “tự động” (auto) nghĩa là chọn tự động
  • desc (String): Mô tả nhóm

🔐 Yêu cầu xác thực người dùng

Đăng xuất

  • Tên giao diện:Đăng xuất
  • Phương thức HTTP: NHẬN
  • Đường dẫn:/api/user/logout
  • Yêu cầu xác thực:Người dùng
  • Mô tả chức năng:Xóa phiên người dùng và đăng xuất

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/logout', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": ""
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Session clear failed"
}

🧾 Mô tả trường:

Không có tham số yêu cầu

Hoạt động tự phục vụ của người dùng

🔐 Yêu cầu xác thực người dùng

Nhận nhóm của người dùng hiện tại

  • Tên giao diện:Lấy nhóm người dùng hiện tại
  • Phương thức HTTP: NHẬN
  • Đường dẫn:/api/user/self/groups
  • Yêu cầu xác thực:Người dùng
  • Mô tả chức năng:Truy xuất thông tin nhóm có sẵn cho người dùng hiện đang đăng nhập, bao gồm Tỷ lệ nhóm và mô tả

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/self/groups', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": {
    "default": {
      "ratio": 1.0,
      "desc": "Default grouping"
    },
    "vip": {
      "ratio": 0.8,
      "desc": "VIPGroup"
    },
    "auto": {
      "ratio": "automatic",
      "desc": "Automatically select the best grouping"
    }
  }
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Failed to obtain group information"
}

🧾 Mô tả trường:

data (Object): Nhóm ánh xạ thông tin nhóm có sẵn của người dùng.go:25-48

  • Key (String): Tên nhóm
  • ratio (Number/String): Tỷ lệ nhóm, “tự động” (auto) nghĩa là tự động chọn nhóm tối ưu
  • desc (String): Mô tả nhóm

Nhận hồ sơ cá nhân

  • Tên giao diện:Nhận hồ sơ cá nhân
  • Phương thức HTTP: NHẬN
  • Đường dẫn:/api/user/self
  • Yêu cầu xác thực:Người dùng
  • Mô tả chức năng:Truy xuất thông tin chi tiết của người dùng hiện tại, bao gồm quyền, hạn ngạch, cài đặt, v.v.

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/self', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": {
    "id": 1,
    "username": "testuser",
    "display_name": "Test User",
    "role": 1,
    "status": 1,
    "email": "user@example.com",
    "group": "default",
    "quota": 1000000,
    "used_quota": 50000,
    "request_count": 100,
    "aff_code": "ABC123",
    "aff_count": 5,
    "aff_quota": 10000,
    "aff_history_quota": 50000,
    "inviter_id": 0,
    "linux_do_id": "",
    "setting": "{}",
    "stripe_customer": "",
    "sidebar_modules": "{\"chat\":{\"enabled\":true}}",
    "permissions": {
      "can_view_logs": true,
      "can_manage_tokens": true
    }
  }
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Failed to obtain user information"
}

🧾 Mô tả trường:

  • id (Số): ID người dùng
  • username (Chuỗi): Tên người dùng
  • display_name (String): Tên hiển thị
  • role (Số): Vai trò người dùng, 1=Người dùng bình thường, 10=Quản trị viên, 100=Người dùng root
  • status (Số): Trạng thái người dùng, 1=Bình thường, 2=Đã tắt
  • email (Chuỗi): Địa chỉ email
  • group (String): Nhóm được chỉ định
  • quota (Số): Tổng hạn ngạch
  • used_quota (Số): Hạn mức sử dụng
  • request_count (Số): Số lượng yêu cầu
  • aff_code (Chuỗi): Mã liên kết
  • aff_count (Số): Số lượng liên kết
  • aff_quota (Số): Hạn ngạch phần thưởng liên kết
  • aff_history_quota (Số): Hạn ngạch liên kết lịch sử
  • inviter_id (Số): ID người mời
  • linux_do_id (Chuỗi): ID tài khoản LinuxDo
  • setting (String): Chuỗi JSON cài đặt người dùng
  • stripe_customer (Chuỗi): ID khách hàng sọc
  • sidebar_modules (String): Chuỗi JSON cấu hình mô-đun thanh bên
  • permissions (Object): Thông tin quyền của người dùng

Nhận khả năng hiển thị mô hình

  • Tên giao diện:Nhận khả năng hiển thị mô hình
  • Phương thức HTTP: NHẬN
  • Đường dẫn:/api/user/models
  • Yêu cầu xác thực:Người dùng
  • Mô tả chức năng:Truy xuất danh sách các mô hình AI mà người dùng hiện tại có thể truy cập

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/models', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": [
    "gpt-3.5-turbo",
    "gpt-4",
    "claude-3-sonnet",
    "claude-3-haiku"
  ]
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Failed to get model list"
}

🧾 Mô tả trường:

data (Array): Danh sách tên model mà người dùng có thể truy cập

Sửa đổi hồ sơ cá nhân

  • Tên giao diện:Sửa đổi hồ sơ cá nhân
  • Phương thức HTTP: PUT
  • Đường dẫn:/api/user/self
  • Yêu cầu xác thực:Người dùng
  • Mô tả chức năng:Cập nhật thông tin cá nhân của người dùng hoặc cài đặt thanh bên

💡 Ví dụ yêu cầu (Cập nhật thông tin cá nhân):

const response = await fetch('/api/user/self', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    display_name: "New Display Name",
    email: "newemail@example.com"
  })
});
const data = await response.json();

💡 Ví dụ về yêu cầu (Cập nhật cài đặt thanh bên):

const response = await fetch('/api/user/self', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    sidebar_modules: JSON.stringify({
      chat: { enabled: true, playground: true },
      console: { enabled: true, token: true }
    })
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "Update successful"
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Input is illegal"
}

🧾 Mô tả trường:

  • display_name (String): Tên hiển thị, tùy chọn
  • email (String): Địa chỉ email, tùy chọn
  • password (String): Mật khẩu mới, tùy chọn
  • sidebar_modules (String): Chuỗi JSON cấu hình mô-đun thanh bên, tùy chọn

Xóa tài khoản

  • Tên giao diện:Xóa tài khoản
  • Phương thức HTTP: XÓA
  • Đường dẫn:/api/user/self
  • Yêu cầu xác thực:Người dùng
  • Mô tả chức năng:Xóa tài khoản người dùng hiện tại. Người dùng root không thể bị xóa

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/self', {
  method: 'DELETE',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": ""
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Cannot delete super administrator account"
}

🧾 Mô tả trường:

Không có tham số yêu cầu

Tạo mã thông báo truy cập cấp người dùng

  • Tên giao diện:Tạo mã thông báo truy cập cấp người dùng
  • Phương thức HTTP: NHẬN
  • Đường dẫn:/api/user/token
  • Yêu cầu xác thực:Người dùng
  • Mô tả chức năng:Tạo mã thông báo truy cập mới cho người dùng hiện tại, được sử dụng cho lệnh gọi API

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/token', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": "`<YOUR_API_KEY>`"
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Failed to generate token"
}

🧾 Mô tả trường:

data (String): Mã thông báo truy cập được tạo

Nhận thông tin mã liên kết

  • Tên giao diện:Nhận thông tin mã liên kết
  • Phương thức HTTP: NHẬN
  • Đường dẫn:/api/user/aff
  • Yêu cầu xác thực:Người dùng
  • Mô tả chức năng:Truy xuất hoặc tạo mã liên kết của người dùng, được sử dụng để mời người dùng mới đăng ký

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/aff', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": "ABC123"
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Failed to obtain promotion code"
}

🧾 Mô tả trường:

data (Chuỗi): Mã liên kết của người dùng. Nếu nó không tồn tại, một chuỗi ngẫu nhiên gồm 4 ký tự sẽ được tạo tự động

Nạp hạn ngạch trực tiếp

  • Tên giao diện:Nạp tiền theo hạn mức trực tiếp
  • Phương thức HTTP: POST
  • Đường dẫn:/api/user/topup
  • Yêu cầu xác thực:Người dùng
  • Mô tả chức năng:Sử dụng mã đổi thưởng để nạp Hạn ngạch tài khoản

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/topup', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    key: "REDEEM123456"
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "Redemption successful",
  "data": 100000
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "The redemption code is invalid or has been used"
}

🧾 Mô tả trường:

  • key (String): Mã đổi quà, bắt buộc
  • data (Số): Trả về số lượng Quota được quy đổi khi thành công

Gửi lệnh thanh toán

  • Tên giao diện:Gửi lệnh thanh toán
  • Phương thức HTTP: POST
  • Đường dẫn:/api/user/pay
  • Yêu cầu xác thực:Người dùng
  • Mô tả chức năng:Tạo lệnh thanh toán trực tuyến, hỗ trợ nhiều phương thức thanh toán

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/pay', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    amount: 10000,
    payment_method: "alipay",
    top_up_code: ""
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "success",
  "data": {
    "pid": "12345",
    "type": "alipay",
    "out_trade_no": "USR1NO123456",
    "notify_url": "https://example.com/notify",
    "return_url": "https://example.com/return",
    "name": "TUC10000",
    "money": "10.00",
    "sign": "abc123def456"
  },
  "url": "https://pay.example.com/submit"
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "The recharge amount cannot be less than 1000"
}

🧾 Mô tả trường:

  • amount (Số): Số tiền nạp vào, phải lớn hơn hoặc bằng Hạn ngạch nạp tiền tối thiểu topup.go:133-136
  • payment_method (String): Phương thức thanh toán, chẳng hạn như “alipay”, “wxpay”, v.v.
  • top_up_code (String): Mã nạp tiền, tùy chọn
  • data (Đối tượng): Tham số hình thức thanh toán
  • url (String): URL gửi thanh toán

Tính số tiền thanh toán

  • Tên giao diện:Tính toán số tiền thanh toán
  • Phương thức HTTP: POST
  • Đường dẫn:/api/user/amount
  • Yêu cầu xác thực:Người dùng
  • Mô tả chức năng:Tính toán số tiền thanh toán thực tế tương ứng với Hạn ngạch nạp tiền được chỉ định

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/amount', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    amount: 10000,
    top_up_code: ""
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "success",
  "data": "10.00"
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "The recharge amount cannot be less than 1000"
}

🧾 Mô tả trường:

  • amount (Số): Số tiền nạp vào, phải lớn hơn hoặc bằng Hạn mức nạp tối thiểu
  • top_up_code (String): Mã nạp tiền, tùy chọn
  • data (String): Số tiền thực tế cần thanh toán (Yuan)

Chuyển hạn ngạch liên kết

  • Tên giao diện:Chuyển hạn ngạch liên kết
  • Phương thức HTTP: POST
  • Đường dẫn:/api/user/aff_transfer
  • Yêu cầu xác thực:Người dùng
  • Mô tả chức năng:Chuyển đổi Hạn ngạch phần thưởng liên kết thành Hạn ngạch có thể sử dụng được

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/aff_transfer', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    quota: 50000
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "Transfer successful"
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Insufficient invitation quota!"
}

🧾 Mô tả trường:

quota (Number): Số lượng Quota cần chuyển đổi, phải lớn hơn hoặc bằng đơn vị Quota tối thiểu

Cập nhật cài đặt người dùng

  • Tên giao diện:Cập nhật cài đặt người dùng
  • Phương thức HTTP: PUT
  • Đường dẫn:/api/user/setting
  • Yêu cầu xác thực:Người dùng
  • Mô tả chức năng:Cập nhật cấu hình cài đặt cá nhân của người dùng

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/setting', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_user_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    theme: "dark",
    language: "zh-CN",
    notifications: {
      email: true,
      browser: false
    }
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "Settings updated successfully"
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Setting format error"
}

🧾 Mô tả trường:

  • Nội dung yêu cầu có thể chứa bất kỳ trường cài đặt người dùng nào, được gửi ở định dạng JSON
  • Các trường cụ thể tùy thuộc vào yêu cầu của trang cài đặt giao diện người dùng

Quản trị viên Quản lý người dùng

🔐 Yêu cầu xác thực của quản trị viên

Lấy tất cả danh sách người dùng

  • Tên giao diện:Lấy tất cả danh sách người dùng
  • Phương thức HTTP: NHẬN
  • Đường dẫn:/api/user/
  • Yêu cầu xác thực:Quản trị viên
  • Mô tả chức năng:Phân trang và truy xuất thông tin danh sách của tất cả người dùng trong hệ thống

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/?p=1&page_size=20', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": {
    "items": [
      {
        "id": 1,
        "username": "testuser",
        "display_name": "Test User",
        "role": 1,
        "status": 1,
        "email": "user@example.com",
        "group": "default",
        "quota": 1000000,
        "used_quota": 50000,
        "request_count": 100
      }
    ],
    "total": 50,
    "page": 1,
    "page_size": 20
  }
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Failed to get user list"
}

🧾 Mô tả trường:

  • p (Number): Số trang, mặc định là 1
  • page_size (Number): Mục trên mỗi trang, mặc định là 20
  • items (Array): Danh sách thông tin người dùng
  • total (Số): Tổng số người dùng
  • page (Number): Số trang hiện tại
  • page_size (Số): Mục trên mỗi trang

Tìm kiếm người dùng

  • Tên giao diện:Tìm kiếm người dùng
  • Phương thức HTTP: NHẬN
  • Đường dẫn:/api/user/search
  • Yêu cầu xác thực:Quản trị viên
  • Mô tả chức năng:Tìm kiếm người dùng dựa trên từ khóa và Nhóm

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/search?keyword=test&group=default&p=1&page_size=20', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": {
    "items": [
      {
        "id": 1,
        "username": "testuser",
        "display_name": "Test User",
        "role": 1,
        "status": 1,
        "email": "test@example.com",
        "group": "default"
      }
    ],
    "total": 1,
    "page": 1,
    "page_size": 20
  }
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Search user failed"
}

🧾 Mô tả trường:

  • keyword (String): Từ khóa tìm kiếm, có thể khớp với tên người dùng, tên hiển thị hoặc email
  • group (String): Điều kiện lọc Nhóm người dùng
  • p (Number): Số trang, mặc định là 1
  • page_size (Number): Mục trên mỗi trang, mặc định là 20

Nhận thông tin người dùng

  • Tên giao diện:Nhận thông tin người dùng
  • Phương thức HTTP: NHẬN
  • Đường dẫn:/api/user/:id
  • Yêu cầu xác thực:Quản trị viên
  • Mô tả chức năng:Truy xuất thông tin chi tiết cho một người dùng được chỉ định, bao gồm cả kiểm tra quyền

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/123', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": "",
  "data": {
    "id": 123,
    "username": "targetuser",
    "display_name": "Target User",
    "role": 1,
    "status": 1,
    "email": "target@example.com",
    "group": "default",
    "quota": 1000000,
    "used_quota": 50000,
    "request_count": 100,
    "aff_code": "ABC123",
    "aff_count": 5
  }
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Do not have the right to obtain information about users of the same level or higher"
}

🧾 Mô tả trường:

  • id (Number): ID người dùng, được truyền qua đường dẫn URL
  • Trả về thông tin người dùng đầy đủ nhưng quản trị viên không thể xem thông tin của người dùng có cùng cấp quyền trở lên

Tạo người dùng

  • Tên giao diện:Tạo người dùng
  • Phương thức HTTP: POST
  • Đường dẫn:/api/user/
  • Yêu cầu xác thực:Quản trị viên
  • Mô tả chức năng:Tạo tài khoản người dùng mới. Quản trị viên không thể tạo người dùng có quyền lớn hơn hoặc bằng quyền của họ

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    username: "newuser",
    password: "password123",
    display_name: "New User",
    role: 1
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": ""
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Unable to create a user with permissions greater than or equal to your own"
}

🧾 Mô tả trường:

  • username (String): Tên người dùng, bắt buộc
  • password (Chuỗi): Mật khẩu, bắt buộc
  • display_name (String): Tên hiển thị, tùy chọn, mặc định là tên người dùng
  • role (Số): Vai trò người dùng, phải nhỏ hơn vai trò quản trị viên hiện tại

Hoạt động quản lý (Tắt/Đặt lại, v.v.)

  • Tên giao diện:Hoạt động quản lý (Tắt/Đặt lại, v.v.)
  • Phương thức HTTP: POST
  • Đường dẫn:/api/user/manage
  • Yêu cầu xác thực:Quản trị viên
  • Mô tả chức năng:Thực hiện các hoạt động quản lý đối với người dùng, bao gồm bật, tắt, xóa, thăng cấp và hạ cấp

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/manage', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    id: 123,
    action: "disable"
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": ""
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Unable to disable super admin user"
}

🧾 Mô tả trường:

  • id (Số): ID người dùng mục tiêu, bắt buộc
  • action (String): Kiểu thao tác, bắt buộc, giá trị tùy chọn:
  • disable: Vô hiệu hóa người dùng
  • enable: Cho phép người dùng
  • delete: Xóa người dùng
  • promote: Thăng cấp lên Admin (Chỉ dành cho người dùng Root)
  • demote: Hạ cấp xuống người dùng thông thường

Cập nhật người dùng

  • Tên giao diện:Cập nhật người dùng
  • Phương thức HTTP: PUT
  • Đường dẫn:/api/user/
  • Yêu cầu xác thực:Quản trị viên
  • Mô tả chức năng:Cập nhật thông tin người dùng, bao gồm kiểm tra quyền và ghi nhật ký thay đổi hạn mức

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/', {
  method: 'PUT',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  },
  body: JSON.stringify({
    id: 123,
    username: "updateduser",
    display_name: "Updated User",
    email: "updated@example.com",
    quota: 2000000,
    role: 1,
    status: 1
  })
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": ""
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Do not have the right to update user information with the same or higher permission level"
}

🧾 Mô tả trường:

  • id (Số): ID người dùng, bắt buộc
  • username (String): Tên người dùng, tùy chọn
  • display_name (String): Tên hiển thị, tùy chọn
  • email (String): Địa chỉ email, tùy chọn
  • password (String): Mật khẩu mới, tùy chọn. Nếu trống, mật khẩu không được cập nhật
  • quota (Số): Hạn ngạch người dùng, tùy chọn
  • role (Number): Vai trò người dùng, không thể lớn hơn hoặc bằng vai trò quản trị viên hiện tại
  • status (Số): Trạng thái người dùng, tùy chọn

Xóa người dùng

  • Tên giao diện:Xóa người dùng
  • Phương thức HTTP: XÓA
  • Đường dẫn:/api/user/:id
  • Yêu cầu xác thực:Quản trị viên
  • Mô tả chức năng:Xóa cứng người dùng được chỉ định. Quản trị viên không thể xóa người dùng có cùng cấp quyền hoặc cao hơn

💡 Ví dụ yêu cầu:

const response = await fetch('/api/user/123', {
  method: 'DELETE',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer your_admin_token',
    'New-Api-User': 'your_user_id'
  }
});
const data = await response.json();

✅ Ví dụ phản hồi thành công:

{
  "success": true,
  "message": ""
}

❗ Ví dụ về phản hồi thất bại:

{
  "success": false,
  "message": "Do not have permission to delete users with the same permission level or higher"
}

🧾 Mô tả trường:

  • id (Number): ID người dùng, được truyền qua đường dẫn URL
  • Thực hiện thao tác xóa cứng, không thể đảo ngược