Tenants
QualiForma est une plateforme multi-tenant. Chaque organisation cliente (organisme de formation, cabinet RH, école) dispose de son propre espace isolé : utilisateurs, formations, factures, statistiques Qualiopi.
Résolution du tenant — règle critique
Toute requête API standard doit inclure le header X-Tenant-ID avec le slug du tenant (par exemple qualiforma-demo). Les endpoints sous /admin/* font exception : ils opèrent en cross-tenant et requièrent un JWT super-administrateur.
Endpoints
/api/v1/tenants/currentTenant courant
Retourne le tenant résolu via le header X-Tenant-ID. Endpoint utile pour récupérer la configuration de branding, le plan tarifaire et les feature flags activés.
- Tenants
Réponses
- 200Tenant courant résoluRéponse 200 · JSON
- 401Token JWT manquant ou expiréRéponse 401 · JSON
- 404Header X-Tenant-ID absent ou tenant introuvableRéponse 404 · JSON
Exemples
/api/v1/admin/tenantsLister tous les tenants (super-admin)
Endpoint cross-tenant réservé aux super-administrateurs de la plateforme. Retourne la liste paginée de tous les tenants avec leurs métriques agrégées (nombre d'utilisateurs, formations actives, MRR).
- Tenants
- Admin
Paramètres
| Nom | Type | Requis | Exemple | Description |
|---|---|---|---|---|
| page | query | non | 1 | Numéro de page (défaut 1) |
| limit | query | non | 25 | Nombre par page (max 100) |
| status | query | non | ACTIVE | Filtre par statut : ACTIVE, SUSPENDED, ARCHIVED |
| plan | query | non | PRO | Filtre par plan : STARTER, PRO, ENTERPRISE |
| q | query | non | acme | Recherche plein texte sur nom ou slug |
Réponses
- 200Liste paginée des tenantsRéponse 200 · JSON
- 403Rôle super-admin requisRéponse 403 · JSON
Exemples
/api/v1/admin/tenantsCréer un tenant (super-admin)
Provisionne un nouveau tenant avec son administrateur initial. Le slug doit être unique et URL-safe (kebab-case). Le mot de passe administrateur doit respecter les règles de complexité (min. 12 caractères, mixte).
- Tenants
- Admin
Corps de requête
Content-Type : application/json
Réponses
- 201Tenant créé avec son administrateurRéponse 201 · JSON
- 409Slug déjà utiliséRéponse 409 · JSON
- 422Validation échouéeRéponse 422 · JSON
Exemples
/api/v1/admin/tenants/:idMettre à jour un tenant (super-admin)
Mise à jour partielle d'un tenant : changement de plan, suspension, modification du branding ou des feature flags. Le slug ne peut pas être modifié après création.
- Tenants
- Admin
Paramètres
| Nom | Type | Requis | Exemple | Description |
|---|---|---|---|---|
| id | path | oui | tnt_8f3b1c20-4d5e-4a9b-9c20-2c5d8e7f0a1b | Identifiant UUID du tenant |
Corps de requête
Content-Type : application/json
Réponses
- 200Tenant mis à jourRéponse 200 · JSON
- 404Tenant introuvableRéponse 404 · JSON
Exemples
/api/v1/admin/tenants/:idSupprimer un tenant (soft delete)
Archive un tenant et coupe l'accès à toutes ses ressources. Les données sont conservées 90 jours pour permettre une restauration (purge RGPD automatique au-delà).
- Tenants
- Admin
Paramètres
| Nom | Type | Requis | Exemple | Description |
|---|---|---|---|---|
| id | path | oui | tnt_8f3b1c20-4d5e-4a9b-9c20-2c5d8e7f0a1b | Identifiant UUID du tenant |
Réponses
- 204Tenant archivé (aucun corps de réponse)
- 404Tenant introuvableRéponse 404 · JSON
- 409Suppression impossible (factures impayées par exemple)Réponse 409 · JSON