Référence de l'API
Chaque route que sert l'API NestJS, qui peut l'appeler, et comment fonctionnent la connexion, les permissions, les erreurs, les listes et les limites.
Pour le pack Front + Back
URL de base et format des réponses
Chaque route est servie sous le préfixe /api. En local, l'URL de base est http://localhost:8000/api ; sur un serveur, c'est l'adresse de votre API suivie de /api, la même valeur que le tableau de bord lit dans NEXT_PUBLIC_API_BASE_URL. Les corps de requête sont en JSON, sauf pour l'envoi de fichier. Chaque réponse arrive dans la même enveloppe :
{
"success": true,
"data": { },
"message": ""
}data contient le résultat. message est une courte phrase que certaines écritures remplissent, dans la langue de la requête, et vide sinon. Le contrôle de santé n'exige aucun jeton :
curl http://localhost:8000/api/health{"success":true,"data":{"status":"ok","database":"up"},"message":""}Tant que la base ne répond pas et ne contient pas ses tables, il répond 503 avec "status":"unavailable" et "database":"down". Le contrôle de santé de l'image Docker le lit.
Erreurs
Un échec garde l'enveloppe, avec success: false et le statut HTTP :
{
"success": false,
"data": null,
"message": "That email and password combination didn't work. Please try again.",
"errors": { "email": ["Enter a valid email address (example@domain.com)."] }
}messageest une phrase dans la langue de la requête.errorsest rempli en cas d'échec de validation, avec les problèmes par champ. Un champ de corps que la route ne connaît pas est refusé.- Une route protégée sans jeton, ou avec un jeton expiré, répond
401; un jeton sans la permission répond403.
Listes et pagination
Les routes de liste acceptent page et page_count (ou limit). page_count est plafonné à 100 ; une valeur absente ou invalide revient à la valeur par défaut de la route, 15 pour les utilisateurs et 10 pour les autres.
{ "data": [ ], "page": 1, "limit": 15, "total": 15, "totalPages": 1 }Les utilisateurs arrivent du plus récent au plus ancien par défaut (order=asc l'inverse) ; les projets du plus récemment modifié au plus ancien ; les admins du plus récent au plus ancien ; les paramètres par catégorie ; les rôles par nom.
Langue
Envoyez Accept-Language: ar pour des messages en arabe ; toute autre valeur répond en anglais. Les pays, permissions, paramètres et noms de projets portent les deux langues sous la forme { "en": "…", "ar": "…" } quel que soit l'en-tête, et le client en choisit une.
Connexion
Obtenir un jeton
Envoyez l'e-mail et le mot de passe d'un admin. Une API remplie par le seed accepte le Super Admin du guide d'installation.
Terminalcurl -X POST http://localhost:8000/api/auth/login -H "Content-Type: application/json" -d '{"email":"admin@example.com","password":"Admin@123"}'Réponse{ "success": true, "data": { "access_token": "eyJ…", "token_type": "Bearer", "expires_in": "7d", "admin": { "id": 1, "email": "admin@example.com", "username": "…", "roles": [ ], "permissions": [ ] } }, "message": "Signed in successfully." }L'envoyer à chaque appel
Terminalcurl http://localhost:8000/api/auth/me -H "Authorization: Bearer eyJ…"Résultat attendu:
/api/auth/merenvoie l'admin connecté avec ses rôles et ses permissions.
- Un jeton dure
JWT_EXPIRATION,7dpar défaut. Il n'y a pas de route de rafraîchissement : reconnectez-vous. - Un mauvais e-mail et un mauvais mot de passe reçoivent le même message
401. - Après
RATE_LIMIT_LOGINconnexions échouées (10 par défaut) depuis une même adresse en 15 minutes,POST /api/auth/loginrépond429jusqu'à ce que le plus ancien échec ait 15 minutes. Le compteur est gardé en mémoire, donc un redémarrage le remet à zéro.
| Méthode | Chemin | Qui peut l'appeler | Rôle |
|---|---|---|---|
POST | /api/auth/login | N'importe qui | Connectez-vous avec email et password |
GET | /api/auth/me | Tout administrateur connecté | L'admin connecté, avec ses rôles et ses permissions |
GET | /api/health | N'importe qui | Disponibilité : 200 ou 503 |
Permissions
Chaque route ci-dessous demande Authorization: Bearer avec un jeton, sauf celles marquées Anyone. La plupart demandent aussi une permission, nommée module.action ; un admin détient les permissions de tous ses rôles. Les 25 permissions sont listées dans Écrans, rôles et permissions.
Utilisateurs
Les personnes que sert votre produit, adressées par username. La suppression est une suppression douce.
| Méthode | Chemin | Qui peut l'appeler | Rôle |
|---|---|---|---|
GET | /api/users | Admins avec users.view | Liste, avec search, email, phone, country_id, username, first_name, last_name, from_date, to_date et order |
GET | /api/users/statistic | Admins avec users.view | Totaux : total, deleted, verified et unverified |
GET | /api/users/deleted | Admins avec users.view | Utilisateurs supprimés, avec les mêmes filtres |
GET | /api/users/deleted/:username | Admins avec users.view | Un utilisateur supprimé |
GET | /api/users/:username | Admins avec users.view | Un utilisateur |
POST | /api/users | Admins avec users.create | Créer : first_name, last_name, email, password, et en option username, phone, profile_picture, country_id |
PATCH | /api/users/:username | Admins avec users.update | Modifier n'importe lequel de ces champs |
PATCH | /api/users/:username/change-password | Admins avec users.update | Définir un nouveau mot de passe |
POST | /api/users/:username/make-verified | Admins avec users.verify | Marquer l'e-mail comme vérifié |
POST | /api/users/:username/make-unverified | Admins avec users.verify | Le marquer comme non vérifié |
POST | /api/users/:username/resend-verification-email | Admins avec users.update | Répond succès ; n'envoie aucun courrier, prêt pour votre propre service d'e-mail |
DELETE | /api/users/:username | Admins avec users.delete | Suppression douce |
POST | /api/users/deleted/:username/restore | Admins avec users.restore | Restaurer |
Projets
Les projets portent name, description, environment, status (in-progress, ready ou blocked), version, en option image et icon_name, et translations avec un nom et une description en et ar.
| Méthode | Chemin | Qui peut l'appeler | Rôle |
|---|---|---|---|
GET | /api/projects | Admins avec projects.view | Liste, avec name, status et environment |
GET | /api/projects/statistic | Admins avec projects.view | Totaux par statut |
GET | /api/projects/recent | Admins avec projects.view | Les derniers projets, limit à 5 par défaut |
GET | /api/projects/deleted | Admins avec projects.view | Projets supprimés, avec name |
GET | /api/projects/:id | Admins avec projects.view | Un projet |
POST | /api/projects | Admins avec projects.create | Créer |
PATCH | /api/projects/:id | Admins avec projects.edit | Modifiez |
DELETE | /api/projects/:id | Admins avec projects.delete | Suppression douce |
POST | /api/projects/deleted/:id/restore | Admins avec projects.restore | Restaurer |
Tâches rapides
La liste de tâches de la vue d'ensemble. Chaque admin a la sienne et n'a besoin d'aucune permission : chaque route ne lit et n'écrit que les tâches de l'appelant. Une tâche est text et completed.
| Méthode | Chemin | Qui peut l'appeler | Rôle |
|---|---|---|---|
GET | /api/tasks | Tout administrateur connecté | Vos tâches, de la plus récente à la plus ancienne, avec status. Les champs de pagination se trouvent à côté de data dans l'enveloppe, pas dedans. |
GET | /api/tasks/history | Tout administrateur connecté | Toutes vos tâches, réparties en active et completed |
GET | /api/tasks/stats | Tout administrateur connecté | Vos totaux |
GET | /api/tasks/:id | Tout administrateur connecté | Une tâche |
POST | /api/tasks | Tout administrateur connecté | Créer |
PATCH | /api/tasks/:id | Tout administrateur connecté | Modifiez |
PATCH | /api/tasks/:id/toggle | Tout administrateur connecté | La marquer faite ou non faite |
DELETE | /api/tasks/:id | Tout administrateur connecté | Supprimer |
Admins et votre profil
Les comptes qui se connectent au tableau de bord. :id accepte un identifiant ou un nom d'utilisateur.
| Méthode | Chemin | Qui peut l'appeler | Rôle |
|---|---|---|---|
GET | /api/admins | Admins avec admins.view | Liste, avec email, name et phone |
GET | /api/admins/statistics | Admins avec admins.view | Totaux |
GET | /api/admins/:id | Admins avec admins.view | Un admin, avec ses rôles |
POST | /api/admins | Admins avec admins.create | Créer : first_name, last_name, email, password, password_confirmation, et en option phone, profile_picture, country_id |
PATCH | /api/admins/:id | Admins avec admins.edit | Modifiez |
PATCH | /api/admins/:id/roles | Admins avec admins.assign_roles | Remplacer les rôles : role_ids |
DELETE | /api/admins/:id | Admins avec admins.delete | Supprimer |
PATCH | /api/admins/profile | Admins avec admins.edit | Modifier votre propre profil |
PATCH | /api/admins/profile/password | Tout administrateur connecté | Changer votre propre mot de passe : current_password, password, password_confirmation |
Rôles
| Méthode | Chemin | Qui peut l'appeler | Rôle |
|---|---|---|---|
GET | /api/roles | Admins avec roles.view | Liste, avec name, guard_name, created_from et created_to ; paginée seulement quand page et page_count sont envoyés tous les deux |
GET | /api/roles/statistics | Admins avec roles.view | Totaux |
GET | /api/roles/select | Admins avec roles.view | Tous les rôles, pour une liste déroulante |
GET | /api/roles/permissions | Admins avec roles.view | Toutes les permissions, par module |
GET | /api/roles/:id | Admins avec roles.view | Un rôle, avec ses permissions |
POST | /api/roles | Admins avec roles.create | Créer : name |
PUT | /api/roles/:id | Admins avec roles.edit | Renommer : name |
POST | /api/roles/:id/permissions | Admins avec roles.assign_permissions | Remplacer ce que le rôle accorde : permissions, une liste de noms de permissions. Les détenteurs connectés en sont informés aussitôt. |
DELETE | /api/roles/:id | Admins avec roles.delete | Supprimer |
Réglages de l'application
Des paires clé et valeur avec un nom d'affichage, une description, un type et une catégorie, comme site_name, support_email et maintenance_mode.
| Méthode | Chemin | Qui peut l'appeler | Rôle |
|---|---|---|---|
GET | /api/settings | Admins avec settings.view | Liste, avec search et category |
GET | /api/settings/:key | Admins avec settings.view | Un paramètre |
PATCH | /api/settings/:key | Admins avec settings.edit | Changer sa value |
DELETE | /api/settings/:key | Admins avec settings.edit | La supprimer |
Pays et envois de fichiers
| Méthode | Chemin | Qui peut l'appeler | Rôle |
|---|---|---|---|
GET | /api/helpers/countries | N'importe qui | Les 50 pays sous la forme { value, label, code, phone_code }, libellés dans la langue de la requête |
POST | /api/helpers/upload | Tout administrateur connecté | Envoyer une image en multipart file, avec en option path (le dossier, uploads par défaut) et for (profile, cover, logo ou default) |
L'envoi prend une image d'au plus 10 Mo, la stocke dans votre bucket R2 en JPEG d'au plus 1920 pixels de large, avec une copie redimensionnée pour sa valeur for, et renvoie leurs adresses : original et, par exemple, 250x250. Sans les variables R2, il répond 503 avec « Image uploads are not set up on this server yet. »
L'assistant IA et ses conversations
Inclus avec votre achat. Connectez-vous pour le lire, ou ouvrez-le dans votre téléchargement.
La route de streaming de l'assistant, sa liste de modèles et ses suggestions de départ, et les conversations enregistrées.
Serveur MCP
Inclus avec votre achat. Connectez-vous pour le lire, ou ouvrez-le dans votre téléchargement.
L'endpoint MCP pour les agents de code et la façon dont il est autorisé.
Mises à jour des permissions en direct
Inclus avec votre achat. Connectez-vous pour le lire, ou ouvrez-le dans votre téléchargement.
Le namespace Socket.IO que le tableau de bord écoute, son événement et comment une connexion est autorisée.
Routes du mode démo
Inclus avec votre achat. Connectez-vous pour le lire, ou ouvrez-le dans votre téléchargement.
Les routes qu'un build de démo publique ajoute.