Aller au contenu principal
QualiForma
CatalogueDevenir formateurQualiopiIADéveloppeurs
Connexion
  • Catalogue
  • Devenir formateur
  • Qualiopi
  • IA
  • Développeurs
  • Connexion
  • Vue d'ensemble

Démarrage

  • Quickstart
  • Authentification

Référence

  • API Reference (Scalar)

Endpoints

  • Tous les endpoints

Cœur LMS

  • Tenants
  • Utilisateurs
  • Formations
  • Inscriptions
  • Sessions live

Conformité Qualiopi

  • Dashboard Qualiopi
  • Conformité
  • Émargement
  • Questionnaires
  • Réclamations
  • Plans d'amélioration
  • Parcours adaptatifs
  • Compétences formateurs
  • BPF
  • Médiateurs

Paiements & Facturation

  • Paiements
  • Facturation Factur-X
  • Webhooks

Design System

  • Vue d'ensemble
  • Couleurs
  • Typographie
  • Espacement
  • Elevation
  • Motion
  • Radius
  • Composants
  • · Formulaires
  • · Feedback
  • · Navigation
  • · Progression
  • · Données
Swagger UI (s'ouvre dans un nouvel onglet)
  1. Développeurs
  2. Endpoints
  3. Utilisateurs

Utilisateurs

Trois rôles structurent QualiForma : ADMIN pilote le tenant, CREATOR conçoit et anime les formations, LEARNER suit le parcours et signe les émargements. Tous les endpoints respectent l'isolation multi-tenant via le header X-Tenant-ID.

ADMIN

Accès complet au tenant : gestion utilisateurs, facturation, configuration Qualiopi, exports d'audit.

CREATOR

Création et publication de formations, animation des sessions live, suivi des apprenants inscrits.

LEARNER

Consultation du catalogue, inscription, suivi de progression, signature d'émargement, téléchargement des attestations.

Endpoints

get/api/v1/users

Lister les utilisateurs

Retourne la liste paginée des utilisateurs du tenant courant. Filtres possibles par rôle, statut, ou recherche plein texte sur email/nom.

  • Users

Paramètres

NomTypeRequisExempleDescription
pagequerynon1Numéro de page (défaut 1)
limitquerynon25Nombre par page (max 100)
rolequerynonLEARNERFiltre par rôle : ADMIN, CREATOR, LEARNER
statusquerynonACTIVEFiltre par statut : ACTIVE, INVITED, SUSPENDED
qquerynondurandRecherche plein texte (email, prénom, nom)

Réponses

  • 200Liste paginée des utilisateurs
    Réponse 200 · JSON
    {
      "data": [
        {
          "id": "usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
          "email": "sophie.durand@example.fr",
          "firstName": "Sophie",
          "lastName": "Durand",
          "role": "LEARNER",
          "status": "ACTIVE",
          "createdAt": "2026-01-12T10:00:00.000Z"
        },
        {
          "id": "usr_b2c3d4e5-f6a7-8901-bcde-f23456789012",
          "email": "formateur@qualiforma.fr",
          "firstName": "Marc",
          "lastName": "Lefèvre",
          "role": "CREATOR",
          "status": "ACTIVE",
          "createdAt": "2025-09-04T09:30:00.000Z"
        }
      ],
      "meta": {
        "total": 142,
        "page": 1,
        "limit": 25,
        "totalPages": 6
      }
    }
  • 401Non authentifié
    Réponse 401 · JSON
    {
      "statusCode": 401,
      "message": "Unauthorized"
    }
  • 403Rôle ADMIN requis
    Réponse 403 · JSON
    {
      "statusCode": 403,
      "message": "Forbidden — ADMIN role required"
    }

Exemples

GET /api/v1/users · cURL / Shell
curl -X GET https://api.qualiforma.site/api/v1/users?page=1&limit=25&role=LEARNER&status=ACTIVE&q=durand \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo"
GET /api/v1/users · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/users?page=1&limit=25&role=LEARNER&status=ACTIVE&q=durand', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-Tenant-ID': 'qualiforma-demo',
  },
});

if (!response.ok) {
  throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}

const data = await response.json();
console.log(data);
GET /api/v1/users · Python
import requests

response = requests.get(
    'https://api.qualiforma.site/api/v1/users?page=1&limit=25&role=LEARNER&status=ACTIVE&q=durand',
    headers={
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'X-Tenant-ID': 'qualiforma-demo',
    },
    timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
GET /api/v1/users · PHP
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;

$client = new Client(['base_uri' => 'https://api.qualiforma.site/api/v1/']);

try {
    $response = $client->get('users?page=1&limit=25&role=LEARNER&status=ACTIVE&q=durand', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_ACCESS_TOKEN',
            'X-Tenant-ID' => 'qualiforma-demo',
        ],
    ]);
    $data = json_decode($response->getBody()->getContents(), true);
    var_dump($data);
} catch (GuzzleException $e) {
    fwrite(STDERR, $e->getMessage());
}
get/api/v1/users/me

Profil utilisateur courant

Retourne le profil complet de l'utilisateur authentifié (résolu depuis le JWT Bearer). Appelé typiquement après /auth/login pour hydrater le frontend.

  • Users

Réponses

  • 200Profil courant
    Réponse 200 · JSON
    {
      "data": {
        "id": "usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "email": "apprenant@qualiforma.fr",
        "firstName": "Sophie",
        "lastName": "Durand",
        "role": "LEARNER",
        "status": "ACTIVE",
        "avatarUrl": "https://cdn.qualiforma.site/avatars/usr_a1b2.jpg",
        "locale": "fr",
        "tenantId": "tnt_8f3b1c20-4d5e-4a9b-9c20-2c5d8e7f0a1b",
        "tenantSlug": "qualiforma-demo",
        "preferences": {
          "notifications": {
            "email": true,
            "push": false,
            "weeklyDigest": true
          }
        },
        "lastLoginAt": "2026-05-14T18:42:00.000Z"
      }
    }
  • 401Token JWT manquant ou expiré
    Réponse 401 · JSON
    {
      "statusCode": 401,
      "message": "Unauthorized"
    }

Exemples

GET /api/v1/users/me · cURL / Shell
curl -X GET https://api.qualiforma.site/api/v1/users/me \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo"
GET /api/v1/users/me · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/users/me', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-Tenant-ID': 'qualiforma-demo',
  },
});

if (!response.ok) {
  throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}

const data = await response.json();
console.log(data);
GET /api/v1/users/me · Python
import requests

response = requests.get(
    'https://api.qualiforma.site/api/v1/users/me',
    headers={
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'X-Tenant-ID': 'qualiforma-demo',
    },
    timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
GET /api/v1/users/me · PHP
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;

$client = new Client(['base_uri' => 'https://api.qualiforma.site/api/v1/']);

try {
    $response = $client->get('users/me', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_ACCESS_TOKEN',
            'X-Tenant-ID' => 'qualiforma-demo',
        ],
    ]);
    $data = json_decode($response->getBody()->getContents(), true);
    var_dump($data);
} catch (GuzzleException $e) {
    fwrite(STDERR, $e->getMessage());
}
get/api/v1/users/:id

Détail utilisateur

Retourne le profil détaillé d'un utilisateur du tenant. Accessible aux ADMIN, ou aux CREATOR pour les LEARNER inscrits dans leurs formations.

  • Users

Paramètres

NomTypeRequisExempleDescription
idpathouiusr_a1b2c3d4-e5f6-7890-abcd-ef1234567890Identifiant UUID de l'utilisateur

Réponses

  • 200Détail de l'utilisateur
    Réponse 200 · JSON
    {
      "data": {
        "id": "usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "email": "sophie.durand@example.fr",
        "firstName": "Sophie",
        "lastName": "Durand",
        "role": "LEARNER",
        "status": "ACTIVE",
        "enrollmentsCount": 4,
        "completedCoursesCount": 2,
        "createdAt": "2026-01-12T10:00:00.000Z"
      }
    }
  • 404Utilisateur introuvable
    Réponse 404 · JSON
    {
      "statusCode": 404,
      "message": "User not found"
    }

Exemples

GET /api/v1/users/:id · cURL / Shell
curl -X GET https://api.qualiforma.site/api/v1/users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo"
GET /api/v1/users/:id · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-Tenant-ID': 'qualiforma-demo',
  },
});

if (!response.ok) {
  throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}

const data = await response.json();
console.log(data);
GET /api/v1/users/:id · Python
import requests

response = requests.get(
    'https://api.qualiforma.site/api/v1/users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890',
    headers={
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'X-Tenant-ID': 'qualiforma-demo',
    },
    timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
GET /api/v1/users/:id · PHP
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;

$client = new Client(['base_uri' => 'https://api.qualiforma.site/api/v1/']);

try {
    $response = $client->get('users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_ACCESS_TOKEN',
            'X-Tenant-ID' => 'qualiforma-demo',
        ],
    ]);
    $data = json_decode($response->getBody()->getContents(), true);
    var_dump($data);
} catch (GuzzleException $e) {
    fwrite(STDERR, $e->getMessage());
}
post/api/v1/users

Créer un utilisateur

Crée un utilisateur dans le tenant courant. Un email d'invitation est envoyé automatiquement si `sendInvitation` est vrai (par défaut). Le mot de passe est obligatoire pour les rôles ADMIN/CREATOR si l'invitation est désactivée.

  • Users

Corps de requête

Content-Type : application/json

Body · JSON
{
  "email": "nouveau.formateur@qualiforma.fr",
  "firstName": "Camille",
  "lastName": "Rousseau",
  "role": "CREATOR",
  "sendInvitation": true,
  "locale": "fr"
}

Réponses

  • 201Utilisateur créé
    Réponse 201 · JSON
    {
      "data": {
        "id": "usr_c3d4e5f6-a7b8-9012-cdef-345678901234",
        "email": "nouveau.formateur@qualiforma.fr",
        "firstName": "Camille",
        "lastName": "Rousseau",
        "role": "CREATOR",
        "status": "INVITED",
        "createdAt": "2026-05-15T09:30:00.000Z"
      }
    }
  • 409Email déjà utilisé dans ce tenant
    Réponse 409 · JSON
    {
      "statusCode": 409,
      "message": "Email already exists"
    }
  • 422Validation échouée
    Réponse 422 · JSON
    {
      "statusCode": 422,
      "message": "Validation failed",
      "errors": {
        "email": [
          "Email must be a valid email"
        ]
      }
    }

Exemples

POST /api/v1/users · cURL / Shell
curl -X POST https://api.qualiforma.site/api/v1/users \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo" \
  -H "Content-Type: application/json" \
  -d '{
  "email": "nouveau.formateur@qualiforma.fr",
  "firstName": "Camille",
  "lastName": "Rousseau",
  "role": "CREATOR",
  "sendInvitation": true,
  "locale": "fr"
}'
POST /api/v1/users · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/users', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-Tenant-ID': 'qualiforma-demo',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "email": "nouveau.formateur@qualiforma.fr",
    "firstName": "Camille",
    "lastName": "Rousseau",
    "role": "CREATOR",
    "sendInvitation": true,
    "locale": "fr"
  }),
});

if (!response.ok) {
  throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}

const data = await response.json();
console.log(data);
POST /api/v1/users · Python
import requests

response = requests.post(
    'https://api.qualiforma.site/api/v1/users',
    headers={
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'X-Tenant-ID': 'qualiforma-demo',
        'Content-Type': 'application/json',
    },
    json={
        'email': 'nouveau.formateur@qualiforma.fr',
        'firstName': 'Camille',
        'lastName': 'Rousseau',
        'role': 'CREATOR',
        'sendInvitation': True,
        'locale': 'fr',
    },
    timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
POST /api/v1/users · PHP
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;

$client = new Client(['base_uri' => 'https://api.qualiforma.site/api/v1/']);

try {
    $response = $client->post('users', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_ACCESS_TOKEN',
            'X-Tenant-ID' => 'qualiforma-demo',
        ],
        'json' => [
            'email' => 'nouveau.formateur@qualiforma.fr',
            'firstName' => 'Camille',
            'lastName' => 'Rousseau',
            'role' => 'CREATOR',
            'sendInvitation' => true,
            'locale' => 'fr',
        ],
    ]);
    $data = json_decode($response->getBody()->getContents(), true);
    var_dump($data);
} catch (GuzzleException $e) {
    fwrite(STDERR, $e->getMessage());
}
patch/api/v1/users/:id

Mettre à jour un utilisateur

Mise à jour partielle d'un utilisateur. Le changement de rôle est restreint aux ADMIN. L'email ne peut être modifié qu'avec une vérification (envoi d'un lien de confirmation).

  • Users

Paramètres

NomTypeRequisExempleDescription
idpathouiusr_a1b2c3d4-e5f6-7890-abcd-ef1234567890Identifiant UUID de l'utilisateur

Corps de requête

Content-Type : application/json

Body · JSON
{
  "firstName": "Sophie",
  "lastName": "Durand-Martin",
  "role": "CREATOR",
  "status": "ACTIVE"
}

Réponses

  • 200Utilisateur mis à jour
    Réponse 200 · JSON
    {
      "data": {
        "id": "usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "email": "sophie.durand@example.fr",
        "firstName": "Sophie",
        "lastName": "Durand-Martin",
        "role": "CREATOR",
        "status": "ACTIVE",
        "updatedAt": "2026-05-15T09:45:00.000Z"
      }
    }
  • 403Changement de rôle interdit
    Réponse 403 · JSON
    {
      "statusCode": 403,
      "message": "Cannot change role without ADMIN privileges"
    }

Exemples

PATCH /api/v1/users/:id · cURL / Shell
curl -X PATCH https://api.qualiforma.site/api/v1/users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo" \
  -H "Content-Type: application/json" \
  -d '{
  "firstName": "Sophie",
  "lastName": "Durand-Martin",
  "role": "CREATOR",
  "status": "ACTIVE"
}'
PATCH /api/v1/users/:id · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890', {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-Tenant-ID': 'qualiforma-demo',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "firstName": "Sophie",
    "lastName": "Durand-Martin",
    "role": "CREATOR",
    "status": "ACTIVE"
  }),
});

if (!response.ok) {
  throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}

const data = await response.json();
console.log(data);
PATCH /api/v1/users/:id · Python
import requests

response = requests.patch(
    'https://api.qualiforma.site/api/v1/users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890',
    headers={
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'X-Tenant-ID': 'qualiforma-demo',
        'Content-Type': 'application/json',
    },
    json={
        'firstName': 'Sophie',
        'lastName': 'Durand-Martin',
        'role': 'CREATOR',
        'status': 'ACTIVE',
    },
    timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
PATCH /api/v1/users/:id · PHP
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;

$client = new Client(['base_uri' => 'https://api.qualiforma.site/api/v1/']);

try {
    $response = $client->patch('users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_ACCESS_TOKEN',
            'X-Tenant-ID' => 'qualiforma-demo',
        ],
        'json' => [
            'firstName' => 'Sophie',
            'lastName' => 'Durand-Martin',
            'role' => 'CREATOR',
            'status' => 'ACTIVE',
        ],
    ]);
    $data = json_decode($response->getBody()->getContents(), true);
    var_dump($data);
} catch (GuzzleException $e) {
    fwrite(STDERR, $e->getMessage());
}
patch/api/v1/users/me/preferences

Mettre à jour ses préférences

Met à jour les préférences de notification de l'utilisateur authentifié : email, push web, digest hebdomadaire, langue de l'interface.

  • Users

Corps de requête

Content-Type : application/json

Body · JSON
{
  "notifications": {
    "email": true,
    "push": true,
    "weeklyDigest": false
  },
  "locale": "fr"
}

Réponses

  • 200Préférences mises à jour
    Réponse 200 · JSON
    {
      "data": {
        "notifications": {
          "email": true,
          "push": true,
          "weeklyDigest": false
        },
        "locale": "fr",
        "updatedAt": "2026-05-15T09:50:00.000Z"
      }
    }

Exemples

PATCH /api/v1/users/me/preferences · cURL / Shell
curl -X PATCH https://api.qualiforma.site/api/v1/users/me/preferences \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo" \
  -H "Content-Type: application/json" \
  -d '{
  "notifications": {
    "email": true,
    "push": true,
    "weeklyDigest": false
  },
  "locale": "fr"
}'
PATCH /api/v1/users/me/preferences · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/users/me/preferences', {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-Tenant-ID': 'qualiforma-demo',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "notifications": {
      "email": true,
      "push": true,
      "weeklyDigest": false
    },
    "locale": "fr"
  }),
});

if (!response.ok) {
  throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}

const data = await response.json();
console.log(data);
PATCH /api/v1/users/me/preferences · Python
import requests

response = requests.patch(
    'https://api.qualiforma.site/api/v1/users/me/preferences',
    headers={
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'X-Tenant-ID': 'qualiforma-demo',
        'Content-Type': 'application/json',
    },
    json={
        'notifications': {
            'email': True,
            'push': True,
            'weeklyDigest': False,
        },
        'locale': 'fr',
    },
    timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
PATCH /api/v1/users/me/preferences · PHP
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;

$client = new Client(['base_uri' => 'https://api.qualiforma.site/api/v1/']);

try {
    $response = $client->patch('users/me/preferences', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_ACCESS_TOKEN',
            'X-Tenant-ID' => 'qualiforma-demo',
        ],
        'json' => [
            'notifications' => [
                'email' => true,
                'push' => true,
                'weeklyDigest' => false,
            ],
            'locale' => 'fr',
        ],
    ]);
    $data = json_decode($response->getBody()->getContents(), true);
    var_dump($data);
} catch (GuzzleException $e) {
    fwrite(STDERR, $e->getMessage());
}
post/api/v1/users/:id/reset-password

Réinitialiser le mot de passe (admin)

Envoie un email contenant un lien de réinitialisation de mot de passe à l'utilisateur cible. Le lien expire après 1 heure. Seuls les ADMIN peuvent déclencher cette action pour un autre utilisateur.

  • Users

Paramètres

NomTypeRequisExempleDescription
idpathouiusr_a1b2c3d4-e5f6-7890-abcd-ef1234567890Identifiant UUID de l'utilisateur

Réponses

  • 202Email de réinitialisation envoyé
    Réponse 202 · JSON
    {
      "data": {
        "sentAt": "2026-05-15T09:55:00.000Z",
        "expiresInSeconds": 3600
      }
    }
  • 404Utilisateur introuvable
    Réponse 404 · JSON
    {
      "statusCode": 404,
      "message": "User not found"
    }

Exemples

POST /api/v1/users/:id/reset-password · cURL / Shell
curl -X POST https://api.qualiforma.site/api/v1/users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890/reset-password \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo"
POST /api/v1/users/:id/reset-password · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890/reset-password', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-Tenant-ID': 'qualiforma-demo',
  },
});

if (!response.ok) {
  throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}

const data = await response.json();
console.log(data);
POST /api/v1/users/:id/reset-password · Python
import requests

response = requests.post(
    'https://api.qualiforma.site/api/v1/users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890/reset-password',
    headers={
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'X-Tenant-ID': 'qualiforma-demo',
    },
    timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
POST /api/v1/users/:id/reset-password · PHP
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;

$client = new Client(['base_uri' => 'https://api.qualiforma.site/api/v1/']);

try {
    $response = $client->post('users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890/reset-password', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_ACCESS_TOKEN',
            'X-Tenant-ID' => 'qualiforma-demo',
        ],
    ]);
    $data = json_decode($response->getBody()->getContents(), true);
    var_dump($data);
} catch (GuzzleException $e) {
    fwrite(STDERR, $e->getMessage());
}
delete/api/v1/users/:id

Supprimer un utilisateur

Soft-delete d'un utilisateur. Le statut passe à ARCHIVED, l'accès est révoqué, mais les inscriptions et signatures d'émargement sont conservées pour la traçabilité Qualiopi.

  • Users

Paramètres

NomTypeRequisExempleDescription
idpathouiusr_a1b2c3d4-e5f6-7890-abcd-ef1234567890Identifiant UUID de l'utilisateur

Réponses

  • 204Utilisateur archivé (aucun corps de réponse)
  • 409Suppression impossible (dernier ADMIN du tenant)
    Réponse 409 · JSON
    {
      "statusCode": 409,
      "message": "Cannot delete the last ADMIN of a tenant"
    }

Exemples

DELETE /api/v1/users/:id · cURL / Shell
curl -X DELETE https://api.qualiforma.site/api/v1/users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo"
DELETE /api/v1/users/:id · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890', {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-Tenant-ID': 'qualiforma-demo',
  },
});

if (!response.ok) {
  throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}

const data = await response.json();
console.log(data);
DELETE /api/v1/users/:id · Python
import requests

response = requests.delete(
    'https://api.qualiforma.site/api/v1/users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890',
    headers={
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'X-Tenant-ID': 'qualiforma-demo',
    },
    timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
DELETE /api/v1/users/:id · PHP
<?php

use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;

$client = new Client(['base_uri' => 'https://api.qualiforma.site/api/v1/']);

try {
    $response = $client->delete('users/usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_ACCESS_TOKEN',
            'X-Tenant-ID' => 'qualiforma-demo',
        ],
    ]);
    $data = json_decode($response->getBody()->getContents(), true);
    var_dump($data);
} catch (GuzzleException $e) {
    fwrite(STDERR, $e->getMessage());
}
QualiForma

La plateforme de formation professionnelle certifiee Qualiopi.

Plateforme

  • Catalogue
  • Espace formateur
  • Étude de besoin

Societe

  • A propos
  • Contact

Ressources

  • Développeurs
  • Référence API
  • Webhooks

Legal

  • CGV
  • Mentions legales
  • Confidentialite

Catalogue par catégorie

  • Management
  • Digital
  • Communication
  • Langues
  • Sécurité
  • Gestion

Comparatifs

  • QualiForma vs Didask
  • QualiForma vs Edusign
  • QualiForma vs Klaxoon
  • QualiForma vs 360Learning

Glossaire Qualiopi

  • I01 — Conditions d'information
  • I05 — Adaptation des prestations
  • I11 — Évaluations en cours
  • I22 — Compétences des intervenants
  • I30 — Recueil des appréciations
  • Voir les 32 indicateurs →

© 2026 QualiForma. Tous droits reserves.

Certifie Qualiopi