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. Sessions Live

Sessions Live

Les sessions live QualiForma orchestrent les créneaux de formation synchrones via LiveKit : tokens signés par participant, enregistrement automatique sur iDrive e2, transcription Voxtral (Mistral AI), génération des feuilles d'émargement Qualiopi.

Cycle de vie

SCHEDULED → LIVE (via /start) → ENDED (via /end) — ou CANCELLED tant que la session n'a pas démarré.

Endpoints

get/api/v1/sessions

Lister les sessions live

Retourne la liste paginée des sessions live du tenant. Filtres par formation, statut (SCHEDULED, LIVE, ENDED, CANCELLED) et plage de dates.

  • Sessions

Paramètres

NomTypeRequisExempleDescription
pagequerynon1Numéro de page (défaut 1)
limitquerynon25Nombre par page (max 100)
courseIdquerynoncrs_d4e5f6a7-b8c9-4012-def3-456789012345Filtre par identifiant de formation
statusquerynonSCHEDULEDFiltre par statut : SCHEDULED, LIVE, ENDED, CANCELLED
fromDatequerynon2026-05-01T00:00:00.000ZDate de début minimale (ISO 8601)
toDatequerynon2026-05-31T23:59:59.000ZDate de début maximale (ISO 8601)

Réponses

  • 200Liste paginée des sessions
    Réponse 200 · JSON
    {
      "data": [
        {
          "id": "ses_e5f6a7b8-c9d0-4123-ef45-678901234567",
          "courseId": "crs_d4e5f6a7-b8c9-4012-def3-456789012345",
          "title": "Excel Avancé — Session 3 : Tableaux croisés dynamiques",
          "scheduledAt": "2026-05-22T13:30:00.000Z",
          "durationMinutes": 120,
          "maxParticipants": 25,
          "registeredCount": 18,
          "recordingEnabled": true,
          "status": "SCHEDULED",
          "livekitRoomName": "ses_e5f6a7b8"
        }
      ],
      "meta": {
        "total": 14,
        "page": 1,
        "limit": 25,
        "totalPages": 1
      }
    }

Exemples

GET /api/v1/sessions · cURL / Shell
curl -X GET https://api.qualiforma.site/api/v1/sessions?page=1&limit=25&courseId=crs_d4e5f6a7-b8c9-4012-def3-456789012345&status=SCHEDULED&fromDate=2026-05-01T00%3A00%3A00.000Z&toDate=2026-05-31T23%3A59%3A59.000Z \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo"
GET /api/v1/sessions · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/sessions?page=1&limit=25&courseId=crs_d4e5f6a7-b8c9-4012-def3-456789012345&status=SCHEDULED&fromDate=2026-05-01T00%3A00%3A00.000Z&toDate=2026-05-31T23%3A59%3A59.000Z', {
  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/sessions · Python
import requests

response = requests.get(
    'https://api.qualiforma.site/api/v1/sessions?page=1&limit=25&courseId=crs_d4e5f6a7-b8c9-4012-def3-456789012345&status=SCHEDULED&fromDate=2026-05-01T00%3A00%3A00.000Z&toDate=2026-05-31T23%3A59%3A59.000Z',
    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/sessions · PHP
<?php

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

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

try {
    $response = $client->get('sessions?page=1&limit=25&courseId=crs_d4e5f6a7-b8c9-4012-def3-456789012345&status=SCHEDULED&fromDate=2026-05-01T00%3A00%3A00.000Z&toDate=2026-05-31T23%3A59%3A59.000Z', [
        '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/sessions/:id

Détail session

Retourne les informations complètes d'une session : participants inscrits, formateurs, enregistrements disponibles, transcription, statut d'émargement.

  • Sessions

Paramètres

NomTypeRequisExempleDescription
idpathouises_e5f6a7b8-c9d0-4123-ef45-678901234567Identifiant UUID de la session

Réponses

  • 200Détail de la session
    Réponse 200 · JSON
    {
      "data": {
        "id": "ses_e5f6a7b8-c9d0-4123-ef45-678901234567",
        "courseId": "crs_d4e5f6a7-b8c9-4012-def3-456789012345",
        "title": "Excel Avancé — Session 3",
        "description": "Maîtrise des tableaux croisés dynamiques.",
        "scheduledAt": "2026-05-22T13:30:00.000Z",
        "durationMinutes": 120,
        "maxParticipants": 25,
        "recordingEnabled": true,
        "status": "SCHEDULED",
        "livekitRoomName": "ses_e5f6a7b8",
        "trainers": [
          {
            "id": "usr_b2c3d4e5",
            "firstName": "Marc",
            "lastName": "Lefèvre"
          }
        ],
        "recordings": [],
        "createdAt": "2026-05-02T10:00:00.000Z"
      }
    }
  • 404Session introuvable
    Réponse 404 · JSON
    {
      "statusCode": 404,
      "message": "Session not found"
    }

Exemples

GET /api/v1/sessions/:id · cURL / Shell
curl -X GET https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo"
GET /api/v1/sessions/:id · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567', {
  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/sessions/:id · Python
import requests

response = requests.get(
    'https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567',
    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/sessions/: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('sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567', [
        '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/sessions

Planifier une session

Crée une nouvelle session live attachée à une formation. Le créateur (formateur ou admin) doit avoir le droit d'enseigner la formation. Une convocation est envoyée automatiquement aux apprenants inscrits à la formation si `sendConvocation` est vrai.

  • Sessions

Corps de requête

Content-Type : application/json

Body · JSON
{
  "courseId": "crs_d4e5f6a7-b8c9-4012-def3-456789012345",
  "title": "Excel Avancé — Session 3 : Tableaux croisés dynamiques",
  "description": "Exercices pratiques sur cas concrets. Pré-requis : avoir suivi les sessions 1 et 2.",
  "scheduledAt": "2026-05-22T13:30:00.000Z",
  "durationMinutes": 120,
  "maxParticipants": 25,
  "recordingEnabled": true,
  "sendConvocation": true,
  "trainerIds": [
    "usr_b2c3d4e5-f6a7-8901-bcde-f23456789012"
  ]
}

Réponses

  • 201Session créée
    Réponse 201 · JSON
    {
      "data": {
        "id": "ses_e5f6a7b8-c9d0-4123-ef45-678901234567",
        "courseId": "crs_d4e5f6a7-b8c9-4012-def3-456789012345",
        "title": "Excel Avancé — Session 3",
        "scheduledAt": "2026-05-22T13:30:00.000Z",
        "status": "SCHEDULED",
        "livekitRoomName": "ses_e5f6a7b8",
        "createdAt": "2026-05-15T10:00:00.000Z"
      }
    }
  • 422Validation échouée
    Réponse 422 · JSON
    {
      "statusCode": 422,
      "message": "Validation failed",
      "errors": {
        "scheduledAt": [
          "scheduledAt must be a future date"
        ]
      }
    }

Exemples

POST /api/v1/sessions · cURL / Shell
curl -X POST https://api.qualiforma.site/api/v1/sessions \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo" \
  -H "Content-Type: application/json" \
  -d '{
  "courseId": "crs_d4e5f6a7-b8c9-4012-def3-456789012345",
  "title": "Excel Avancé — Session 3 : Tableaux croisés dynamiques",
  "description": "Exercices pratiques sur cas concrets. Pré-requis : avoir suivi les sessions 1 et 2.",
  "scheduledAt": "2026-05-22T13:30:00.000Z",
  "durationMinutes": 120,
  "maxParticipants": 25,
  "recordingEnabled": true,
  "sendConvocation": true,
  "trainerIds": [
    "usr_b2c3d4e5-f6a7-8901-bcde-f23456789012"
  ]
}'
POST /api/v1/sessions · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/sessions', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-Tenant-ID': 'qualiforma-demo',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "courseId": "crs_d4e5f6a7-b8c9-4012-def3-456789012345",
    "title": "Excel Avancé — Session 3 : Tableaux croisés dynamiques",
    "description": "Exercices pratiques sur cas concrets. Pré-requis : avoir suivi les sessions 1 et 2.",
    "scheduledAt": "2026-05-22T13:30:00.000Z",
    "durationMinutes": 120,
    "maxParticipants": 25,
    "recordingEnabled": true,
    "sendConvocation": true,
    "trainerIds": [
      "usr_b2c3d4e5-f6a7-8901-bcde-f23456789012"
    ]
  }),
});

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

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

response = requests.post(
    'https://api.qualiforma.site/api/v1/sessions',
    headers={
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'X-Tenant-ID': 'qualiforma-demo',
        'Content-Type': 'application/json',
    },
    json={
        'courseId': 'crs_d4e5f6a7-b8c9-4012-def3-456789012345',
        'title': 'Excel Avancé — Session 3 : Tableaux croisés dynamiques',
        'description': 'Exercices pratiques sur cas concrets. Pré-requis : avoir suivi les sessions 1 et 2.',
        'scheduledAt': '2026-05-22T13:30:00.000Z',
        'durationMinutes': 120,
        'maxParticipants': 25,
        'recordingEnabled': True,
        'sendConvocation': True,
        'trainerIds': [
            'usr_b2c3d4e5-f6a7-8901-bcde-f23456789012',
        ],
    },
    timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
POST /api/v1/sessions · PHP
<?php

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

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

try {
    $response = $client->post('sessions', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_ACCESS_TOKEN',
            'X-Tenant-ID' => 'qualiforma-demo',
        ],
        'json' => [
            'courseId' => 'crs_d4e5f6a7-b8c9-4012-def3-456789012345',
            'title' => 'Excel Avancé — Session 3 : Tableaux croisés dynamiques',
            'description' => 'Exercices pratiques sur cas concrets. Pré-requis : avoir suivi les sessions 1 et 2.',
            'scheduledAt' => '2026-05-22T13:30:00.000Z',
            'durationMinutes' => 120,
            'maxParticipants' => 25,
            'recordingEnabled' => true,
            'sendConvocation' => true,
            'trainerIds' => [
                'usr_b2c3d4e5-f6a7-8901-bcde-f23456789012',
            ],
        ],
    ]);
    $data = json_decode($response->getBody()->getContents(), true);
    var_dump($data);
} catch (GuzzleException $e) {
    fwrite(STDERR, $e->getMessage());
}
patch/api/v1/sessions/:id

Modifier une session

Mise à jour partielle (titre, description, horaire, capacité, formateurs). Si la date change de plus d'une heure, une convocation de mise à jour est envoyée aux participants.

  • Sessions

Paramètres

NomTypeRequisExempleDescription
idpathouises_e5f6a7b8-c9d0-4123-ef45-678901234567Identifiant UUID de la session

Corps de requête

Content-Type : application/json

Body · JSON
{
  "scheduledAt": "2026-05-23T13:30:00.000Z",
  "durationMinutes": 150,
  "maxParticipants": 30
}

Réponses

  • 200Session mise à jour
    Réponse 200 · JSON
    {
      "data": {
        "id": "ses_e5f6a7b8-c9d0-4123-ef45-678901234567",
        "scheduledAt": "2026-05-23T13:30:00.000Z",
        "durationMinutes": 150,
        "maxParticipants": 30,
        "updatedAt": "2026-05-15T10:15:00.000Z"
      }
    }

Exemples

PATCH /api/v1/sessions/:id · cURL / Shell
curl -X PATCH https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo" \
  -H "Content-Type: application/json" \
  -d '{
  "scheduledAt": "2026-05-23T13:30:00.000Z",
  "durationMinutes": 150,
  "maxParticipants": 30
}'
PATCH /api/v1/sessions/:id · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567', {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-Tenant-ID': 'qualiforma-demo',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "scheduledAt": "2026-05-23T13:30:00.000Z",
    "durationMinutes": 150,
    "maxParticipants": 30
  }),
});

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

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

response = requests.patch(
    'https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567',
    headers={
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'X-Tenant-ID': 'qualiforma-demo',
        'Content-Type': 'application/json',
    },
    json={
        'scheduledAt': '2026-05-23T13:30:00.000Z',
        'durationMinutes': 150,
        'maxParticipants': 30,
    },
    timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
PATCH /api/v1/sessions/: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('sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_ACCESS_TOKEN',
            'X-Tenant-ID' => 'qualiforma-demo',
        ],
        'json' => [
            'scheduledAt' => '2026-05-23T13:30:00.000Z',
            'durationMinutes' => 150,
            'maxParticipants' => 30,
        ],
    ]);
    $data = json_decode($response->getBody()->getContents(), true);
    var_dump($data);
} catch (GuzzleException $e) {
    fwrite(STDERR, $e->getMessage());
}
delete/api/v1/sessions/:id

Annuler une session

Annule une session planifiée (status → CANCELLED). Tous les participants reçoivent une notification d'annulation. Une session déjà LIVE ou ENDED ne peut pas être annulée.

  • Sessions

Paramètres

NomTypeRequisExempleDescription
idpathouises_e5f6a7b8-c9d0-4123-ef45-678901234567Identifiant UUID de la session

Réponses

  • 204Session annulée (aucun corps de réponse)
  • 409Session déjà démarrée ou terminée
    Réponse 409 · JSON
    {
      "statusCode": 409,
      "message": "Cannot cancel a LIVE or ENDED session"
    }

Exemples

DELETE /api/v1/sessions/:id · cURL / Shell
curl -X DELETE https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo"
DELETE /api/v1/sessions/:id · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567', {
  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/sessions/:id · Python
import requests

response = requests.delete(
    'https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567',
    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/sessions/: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('sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567', [
        '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/sessions/:id/token

Générer un token LiveKit

Génère un token JWT LiveKit signé pour le participant authentifié. Le token contient les permissions adaptées au rôle (LEARNER = peut publier audio/vidéo, CREATOR = peut modérer). Durée de validité : 1 heure.

  • Sessions
  • LiveKit

Paramètres

NomTypeRequisExempleDescription
idpathouises_e5f6a7b8-c9d0-4123-ef45-678901234567Identifiant UUID de la session

Réponses

  • 200Token LiveKit généré
    Réponse 200 · JSON
    {
      "data": {
        "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c3JfYTFiMi4uLi...",
        "url": "wss://livekit.qualiforma.site",
        "roomName": "ses_e5f6a7b8",
        "identity": "usr_a1b2c3d4-e5f6-7890-abcd-ef1234567890",
        "expiresAt": "2026-05-22T14:30:00.000Z",
        "role": "participant"
      }
    }
  • 403Utilisateur non inscrit à la formation
    Réponse 403 · JSON
    {
      "statusCode": 403,
      "message": "Not enrolled in this course"
    }

Exemples

POST /api/v1/sessions/:id/token · cURL / Shell
curl -X POST https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/token \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo"
POST /api/v1/sessions/:id/token · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/token', {
  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/sessions/:id/token · Python
import requests

response = requests.post(
    'https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/token',
    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/sessions/:id/token · PHP
<?php

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

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

try {
    $response = $client->post('sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/token', [
        '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/sessions/:id/start

Démarrer une session

Passe la session du statut SCHEDULED à LIVE. Démarre automatiquement l'enregistrement si `recordingEnabled` est vrai. Seul le formateur ou un ADMIN peut démarrer.

  • Sessions

Paramètres

NomTypeRequisExempleDescription
idpathouises_e5f6a7b8-c9d0-4123-ef45-678901234567Identifiant UUID de la session

Réponses

  • 200Session démarrée
    Réponse 200 · JSON
    {
      "data": {
        "id": "ses_e5f6a7b8-c9d0-4123-ef45-678901234567",
        "status": "LIVE",
        "startedAt": "2026-05-22T13:31:42.000Z",
        "recordingId": "rec_f6a7b8c9-d0e1-4234-fa56-789012345678"
      }
    }

Exemples

POST /api/v1/sessions/:id/start · cURL / Shell
curl -X POST https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/start \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo"
POST /api/v1/sessions/:id/start · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/start', {
  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/sessions/:id/start · Python
import requests

response = requests.post(
    'https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/start',
    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/sessions/:id/start · PHP
<?php

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

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

try {
    $response = $client->post('sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/start', [
        '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/sessions/:id/end

Terminer une session

Passe la session du statut LIVE à ENDED. Stoppe l'enregistrement, déclenche la transcription Voxtral et la génération automatique des feuilles d'émargement.

  • Sessions

Paramètres

NomTypeRequisExempleDescription
idpathouises_e5f6a7b8-c9d0-4123-ef45-678901234567Identifiant UUID de la session

Réponses

  • 200Session terminée
    Réponse 200 · JSON
    {
      "data": {
        "id": "ses_e5f6a7b8-c9d0-4123-ef45-678901234567",
        "status": "ENDED",
        "endedAt": "2026-05-22T15:32:18.000Z",
        "actualDurationMinutes": 121,
        "attendeesCount": 17
      }
    }

Exemples

POST /api/v1/sessions/:id/end · cURL / Shell
curl -X POST https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/end \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo"
POST /api/v1/sessions/:id/end · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/end', {
  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/sessions/:id/end · Python
import requests

response = requests.post(
    'https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/end',
    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/sessions/:id/end · PHP
<?php

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

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

try {
    $response = $client->post('sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/end', [
        '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/sessions/:id/recordings

Lister les enregistrements

Retourne la liste des enregistrements vidéo d'une session avec leurs URLs présignées (valides 1 heure) et le statut de transcription.

  • Sessions

Paramètres

NomTypeRequisExempleDescription
idpathouises_e5f6a7b8-c9d0-4123-ef45-678901234567Identifiant UUID de la session

Réponses

  • 200Liste des enregistrements
    Réponse 200 · JSON
    {
      "data": [
        {
          "id": "rec_f6a7b8c9-d0e1-4234-fa56-789012345678",
          "sessionId": "ses_e5f6a7b8-c9d0-4123-ef45-678901234567",
          "videoUrl": "https://s3.eu-west-4.idrivee2.com/qualiforma-prod/recordings/rec_f6a7.mp4?X-Amz-Signature=...",
          "durationSeconds": 7278,
          "sizeBytes": 1240000000,
          "transcriptionStatus": "COMPLETED",
          "transcriptionUrl": "https://s3.eu-west-4.idrivee2.com/qualiforma-prod/transcriptions/rec_f6a7.vtt?...",
          "createdAt": "2026-05-22T15:32:30.000Z"
        }
      ]
    }

Exemples

GET /api/v1/sessions/:id/recordings · cURL / Shell
curl -X GET https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/recordings \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo"
GET /api/v1/sessions/:id/recordings · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/recordings', {
  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/sessions/:id/recordings · Python
import requests

response = requests.get(
    'https://api.qualiforma.site/api/v1/sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/recordings',
    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/sessions/:id/recordings · PHP
<?php

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

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

try {
    $response = $client->get('sessions/ses_e5f6a7b8-c9d0-4123-ef45-678901234567/recordings', [
        '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