88API88API
User GuideAI ApplicationsAPI ReferenceHelp & Support
API Module Guide

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

Mô tả tính năng

Tiền tố API là https://88api.ai

Các giao diện liên quan đến tài khoản, bao gồm đă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. Hỗ trợ 2FA, xác minh email và nhiều phương thức đăng nhập OAuth.

Đă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