88API88API
User GuideAI ApplicationsAPI ReferenceHelp & Support
API Module Guide

Module utilisateur

Description des fonctionnalités

Le préfixe de l'interface est uniformément http(s)://<your-domain>

HTTPS doit être utilisé dans les environnements de production pour sécuriser les jetons d'authentification. HTTP n'est recommandé que pour les environnements de développement.

Le système de gestion des utilisateurs principal implémente une structure d'autorisation à quatre niveaux (Public/Utilisateur/Administrateur/Root) et une gestion complète du cycle de vie des utilisateurs. Il comprend des fonctionnalités telles que l'inscription/la connexion, le profil personnel, la gestion des jetons, la recharge/le paiement et un système d'affiliation. Il prend en charge 2FA, la vérification des e-mails et diverses méthodes de connexion OAuth.

Enregistrement/Connexion au compte

🔐 Aucune authentification requise

Créer un nouveau compte

  • Nom de l'interface:Enregistrer un nouveau compte
  • Méthode HTTP:POST
  • Chemin/api/user/register
  • Exigence d'authentification:Public
  • Description de la fonction:Crée un nouveau compte utilisateur, prenant en charge la fonctionnalité de vérification des e-mails et de code de référence

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • username (String) : Nom d'utilisateur, obligatoire
  • password (String) : Mot de passe, obligatoire
  • email (String): adresse e-mail, requise lorsque la vérification de l'e-mail est activée
  • verification_code (Chaîne): Code de vérification de l'e-mail, requis lorsque la vérification de l'e-mail est activée
  • aff_code (String) : Code de parrainage, facultatif

Connexion utilisateur

  • Nom de l'interface:Connexion utilisateur
  • Méthode HTTP:POST
  • Chemin/api/user/login
  • Exigence d'authentification:Public
  • Description de la fonction:Connexion au compte utilisateur, prenant en charge l'authentification à deux facteurs (2FA)

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie (No 2FA):

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

✅ Exemple de réponse réussie (2FA requis):

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • username (String) : Nom d'utilisateur, obligatoire
  • password (String) : Mot de passe, obligatoire
  • require_2fa (booléen): indique si une authentification à deux facteurs est requise

Notification de paiement Epay

  • Nom de l'interface : Notification de paiement Epay
  • Méthode HTTP:GET
  • Chemin/api/user/epay/notify
  • Exigence d'authentification:Public
  • Description de la fonction : Gère les notifications de rappel de paiement du système Epay

💡 Exemple de demande:

_// 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_

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • trade_no (String) : Numéro d'ordre de la transaction
  • money (String) : Montant du paiement
  • trade_status (String) : Statut de la transaction
  • sign (String): Vérification de la signature

Répertorier tous les groupes (version non authentifiée)

  • Nom de l'interface:Liste de tous les groupes
  • Méthode HTTP:GET
  • Chemin/api/user/groups
  • Exigence d'authentification:Public
  • Description de la fonction:Récupère des informations sur tous les groupes d'utilisateurs du système, accessibles sans connexion

💡 Exemple de demande:

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

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

data (Objet): Mappage des informations de groupe

  • Clé (Chaîne): Nom du groupe
  • ratio (Nombre/Chaîne): Rapport de groupe, "automatique" (auto) signifie sélection automatique
  • desc (String) : Description du groupe

🔐 Authentification utilisateur requise

Déconnexion

  • Nom de l'interface:Déconnexion
  • Méthode HTTP:GET
  • Chemin/api/user/logout
  • Exigence d'authentification:Utilisateur
  • Description de la fonction:Efface la session utilisateur et se déconnecte

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

Aucun paramètre de requête

Opérations utilisateur en libre-service

🔐 Authentification utilisateur requise

Obtenir les groupes d'utilisateurs actuels

  • Nom de l'interface:Obtenir les groupes d'utilisateurs actuels
  • Méthode HTTP:GET
  • Chemin/api/user/self/groups
  • Exigence d'authentification:Utilisateur
  • Description de la fonction : Récupère les informations de groupe disponibles pour l'utilisateur actuellement connecté, y compris le rapport et la description du groupe

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

data (Objet): Mappage des informations de groupe disponibles pour l'utilisateur group.go:25-48

  • Clé (Chaîne): Nom du groupe
  • ratio (Nombre/Chaîne): Rapport de groupe, "automatique" (auto) signifie sélectionner automatiquement le groupe optimal
  • desc (String) : Description du groupe

Obtenir un profil personnel

  • Nom de l'interface:Obtenir un profil personnel
  • Méthode HTTP:GET
  • Chemin/api/user/self
  • Exigence d'authentification:Utilisateur
  • Description de la fonction:Récupère les informations détaillées de l'utilisateur actuel, y compris les autorisations, le quota, les paramètres, etc.

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • id (Numéro): ID utilisateur
  • username (Chaîne) : Nom d'utilisateur
  • display_name (Chaîne): Nom d'affichage
  • role (Numéro): Rôle utilisateur, 1=Utilisateur normal, 10=Administrateur, 100=Utilisateur racine
  • status (Numéro) : Statut utilisateur, 1=Normal, 2=Désactivé
  • email (Chaîne): Adresse e-mail
  • group (Chaîne): Groupe attribué
  • quota (Nombre): Quota total
  • used_quota (Nombre): Quota utilisé
  • request_count (Nombre): nombre de demandes
  • aff_code (Chaîne): Code d'affiliation
  • aff_count (Nombre): Nombre d'affiliés
  • aff_quota (Nombre): Quota de récompense d'affiliation
  • aff_history_quota (Nombre): Quota d'affiliation historique
  • inviter_id (Numéro): ID de l'invité
  • linux_do_id (Chaîne): ID de compte LinuxDo
  • setting (String): chaîne JSON des paramètres utilisateur
  • stripe_customer (Chaîne): ID client Stripe
  • sidebar_modules (String): chaîne JSON de configuration du module de la barre latérale
  • permissions (Objet): informations sur les autorisations de l'utilisateur

Obtenez la visibilité du modèle

  • Nom de l'interface:Obtenir la visibilité du modèle
  • Méthode HTTP:GET
  • Chemin/api/user/models
  • Exigence d'authentification:Utilisateur
  • Description de la fonction:Récupère la liste des modèles d'IA accessibles à l'utilisateur actuel

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

data (Array): Liste des noms de modèles accessibles à l'utilisateur

Modifier le profil personnel

  • Nom de l'interface:Modifier le profil personnel
  • Méthode HTTP:PUT
  • Chemin/api/user/self
  • Exigence d'authentification:Utilisateur
  • Description de la fonction: met à jour les informations personnelles de l'utilisateur ou les paramètres de la barre latérale

💡 Exemple de demande (mettre à jour les informations personnelles):

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();

💡 Exemple de demande (mettre à jour les paramètres de la barre latérale):

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • display_name (String): Nom d'affichage, facultatif
  • email (String): Adresse e-mail, facultatif
  • password (String) : Nouveau mot de passe, facultatif
  • sidebar_modules (String) : chaîne JSON de configuration du module Sidebar, en option

Supprimer le compte

  • Nom de l'interface:Supprimer le compte
  • Méthode HTTP:DELETE
  • Chemin/api/user/self
  • Exigence d'authentification:Utilisateur
  • Description de la fonction:Supprime le compte utilisateur actuel. Les utilisateurs root ne peuvent pas être supprimés

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

Aucun paramètre de requête

Générer un jeton d'accès au niveau de l'utilisateur

  • Nom de l'interface:Générer un jeton d'accès au niveau de l'utilisateur
  • Méthode HTTP:GET
  • Chemin/api/user/token
  • Exigence d'authentification:Utilisateur
  • Description de la fonction:Génère un nouveau jeton d'accès pour l'utilisateur actuel, utilisé pour les appels API

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

data (String): Jeton d'accès généré

Obtenez des informations sur le code d'affiliation

  • Nom de l'interface:Obtenir des informations sur le code d'affiliation
  • Méthode HTTP:GET
  • Chemin/api/user/aff
  • Exigence d'authentification:Utilisateur
  • Description de la fonction:Récupère ou génère le code d'affiliation de l'utilisateur, utilisé pour inviter de nouveaux utilisateurs à s'inscrire

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

data (String): Le code d'affiliation de l'utilisateur. Si elle n'existe pas, une chaîne aléatoire de 4 caractères sera automatiquement générée

Rechargement direct du quota

  • Nom de l'interface:Rechargement direct du quota
  • Méthode HTTP:POST
  • Chemin/api/user/topup
  • Exigence d'authentification:Utilisateur
  • Description de la fonction:Utilise un code de remboursement pour recharger le quota du compte

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • key (Chaîne): Code de remboursement, obligatoire
  • data (Nombre): renvoie le montant du quota échangé en cas de succès

Soumettre l'ordre de paiement

  • Nom de l'interface:Soumettre l'ordre de paiement
  • Méthode HTTP:POST
  • Chemin/api/user/pay
  • Exigence d'authentification:Utilisateur
  • Description de la fonction:Crée un ordre de paiement en ligne, prenant en charge plusieurs méthodes de paiement

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • amount (Nombre): Montant de la recharge, doit être supérieur ou égal au quota de recharge minimum topup.go:133-136
  • payment_method (String) : Mode de paiement, tel que « alipay », « wxpay », etc.
  • top_up_code (String) : Code de recharge, facultatif
  • data (Objet) : Paramètres du formulaire de paiement
  • url (String): URL de soumission du paiement

Calculer le montant du paiement

  • Nom de l'interface:Calculer le montant du paiement
  • Méthode HTTP:POST
  • Chemin/api/user/amount
  • Exigence d'authentification:Utilisateur
  • Description de la fonction:Calcule le montant réel du paiement correspondant au quota de recharge spécifié

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • amount (Nombre): Montant de recharge, doit être supérieur ou égal au Quota de recharge minimum
  • top_up_code (String) : Code de recharge, facultatif
  • data (String) : Montant réel requis pour le paiement (Yuan)

Transfert de quota d'affiliation

  • Nom de l'interface:Transfert de quota d'affiliation
  • Méthode HTTP:POST
  • Chemin/api/user/aff_transfer
  • Exigence d'authentification:Utilisateur
  • Description de la fonction:Convertit le quota de récompense d'affiliation en quota utilisable

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

quota (Nombre): Le montant de Quota à convertir doit être supérieur ou égal au Quota unitaire minimum

Mettre à jour les paramètres utilisateur

  • Nom de l'interface:Mettre à jour les paramètres utilisateur
  • Méthode HTTP:PUT
  • Chemin/api/user/setting
  • Exigence d'authentification:Utilisateur
  • Description de la fonction: met à jour la configuration des paramètres personnels de l'utilisateur

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • Le corps de la demande peut contenir n'importe quel champ de paramètre utilisateur, soumis au format JSON
  • Les champs spécifiques dépendent des exigences de la page des paramètres du frontend

Gestion des utilisateurs administrateurs

🔐 Authentification administrateur requise

Obtenir la liste de tous les utilisateurs

  • Nom de l'interface:Obtenir la liste de tous les utilisateurs
  • Méthode HTTP:GET
  • Chemin/api/user/
  • Exigence d'authentification:Administrateur
  • Description de la fonction : Pagine et récupère les informations de liste de tous les utilisateurs du système

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • p (Numéro): Numéro de page, par défaut 1
  • page_size (Nombre) : éléments par page, par défaut 20
  • items (Array) : liste d'informations utilisateur
  • total (Nombre) : Nombre total d'utilisateurs
  • page (Numéro): Numéro de la page actuelle
  • page_size (Nombre) : Articles par page

Rechercher des utilisateurs

  • Nom de l'interface:Rechercher des utilisateurs
  • Méthode HTTP:GET
  • Chemin/api/user/search
  • Exigence d'authentification:Administrateur
  • Description de la fonction: recherche les utilisateurs en fonction de mots-clés et de groupes

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • keyword (Chaîne): mot-clé de recherche, peut correspondre au nom d'utilisateur, au nom d'affichage ou à l'adresse e-mail
  • group (String): condition de filtrage des groupes d'utilisateurs
  • p (Numéro): Numéro de page, par défaut 1
  • page_size (Nombre) : éléments par page, par défaut 20

Obtenir des informations sur un seul utilisateur

  • Nom de l'interface:Obtenir des informations sur un seul utilisateur
  • Méthode HTTP:GET
  • Chemin/api/user/:id
  • Exigence d'authentification:Administrateur
  • Description de la fonction:Récupère des informations détaillées sur un utilisateur spécifié, y compris les vérifications d'autorisation

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • id (Numéro): ID utilisateur, transmis via le chemin URL
  • Renvoie les informations complètes sur l'utilisateur, mais les administrateurs ne peuvent pas afficher les informations sur les utilisateurs ayant le même niveau d'autorisation ou un niveau d'autorisation supérieur.

Créer un utilisateur

  • Nom de l'interface:Créer un utilisateur
  • Méthode HTTP:POST
  • Chemin/api/user/
  • Exigence d'authentification:Administrateur
  • Description de la fonction:Crée un nouveau compte utilisateur. Les administrateurs ne peuvent pas créer d'utilisateurs avec des autorisations supérieures ou égales aux leurs.

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • username (String) : Nom d'utilisateur, obligatoire
  • password (String) : Mot de passe, obligatoire
  • display_name (Chaîne): Nom d'affichage, facultatif, par défaut le nom d'utilisateur
  • role (Numéro): rôle d'utilisateur, doit être inférieur au rôle d'administrateur actuel

Opérations de gestion (Désactiver/Réinitialiser, etc.)

  • Nom de l'interface:Opérations de gestion (Désactiver/Réinitialiser, etc.)
  • Méthode HTTP:POST
  • Chemin/api/user/manage
  • Exigence d'authentification:Administrateur
  • Description de la fonction:Effectue des opérations de gestion sur un utilisateur, notamment l'activation, la désactivation, la suppression, la promotion et la rétrogradation.

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • id (Numéro): ID utilisateur cible, obligatoire
  • action (String) : Type d'opération, valeurs obligatoires, facultatives :
  • disable: Désactiver l'utilisateur
  • enable: Activer l'utilisateur
  • delete: Supprimer un utilisateur
  • promote: Promouvoir au rang d'administrateur (utilisateur root uniquement)
  • demote: rétrograder au rang d'utilisateur normal

Mettre à jour l'utilisateur

  • Nom de l'interface:Mettre à jour l'utilisateur
  • Méthode HTTP:PUT
  • Chemin/api/user/
  • Exigence d'authentification:Administrateur
  • Description de la fonction: met à jour les informations utilisateur, y compris les contrôles d'autorisation et la journalisation des modifications de quota.

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • id (Numéro): ID utilisateur, obligatoire
  • username (String) : Nom d'utilisateur, facultatif
  • display_name (String): Nom d'affichage, facultatif
  • email (String): Adresse e-mail, facultatif
  • password (String) : Nouveau mot de passe, facultatif. S'il est vide, le mot de passe n'est pas mis à jour
  • quota (Nombre) : Quota utilisateur, facultatif
  • role (Numéro): rôle d'utilisateur, ne peut pas être supérieur ou égal au rôle d'administrateur actuel
  • status (Numéro): Statut de l'utilisateur, en option

Supprimer un utilisateur

  • Nom de l'interface:Supprimer l'utilisateur
  • Méthode HTTP:DELETE
  • Chemin/api/user/:id
  • Exigence d'authentification:Administrateur
  • Description de la fonction:Supprime définitivement l'utilisateur spécifié. Les administrateurs ne peuvent pas supprimer les utilisateurs ayant un niveau d'autorisation identique ou supérieur.

💡 Exemple de demande:

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();

✅ Exemple de réponse réussie:

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

❗ Exemple de réponse en cas d'échec:

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

🧾 Description du champ:

  • id (Numéro): ID utilisateur, transmis via le chemin URL
  • Effectue une opération de suppression matérielle, irréversible