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. Compétences formateurs

Compétences formateurs

Critère Qualiopi 5 — qualification des formateurs et intervenants. Déclaration des diplômes, certifications, expériences pro et formations continues. Vérification par ADMIN, suivi des expirations, renouvellements chaînés. Lié au module course-trainers pour garantir qu’un formateur a les compétences requises pour un cours.

Endpoints

get/api/v1/trainer-competencies

Lister les compétences de tous les formateurs

Retourne les compétences déclarées dans le tenant. Filtrable par formateur, type, statut. Réservé aux comptes ADMIN — un formateur ne voit que les siennes via /users/:trainerId/competencies.

  • TrainerCompetencies
  • Qualiopi

Paramètres

NomTypeRequisExempleDescription
trainerIdquerynonusr_trainer_42Filtrer par formateur
typequerynonCERTIFICATIONDIPLOMA | CERTIFICATION | EXPERIENCE_PRO | CONTINUOUS_TRAINING | INTERNAL_TRAINING
statusquerynonVERIFIEDPENDING | VERIFIED | EXPIRED | REJECTED
pagequerynon1—
perPagequerynon20—

Réponses

  • 200Compétences paginées
    Réponse 200 · JSON
    {
      "data": [
        {
          "id": "tcp_a1b2c3",
          "trainerId": "usr_trainer_42",
          "type": "CERTIFICATION",
          "title": "Microsoft Certified : Excel Expert (MOS)",
          "issuedBy": "Microsoft Corporation",
          "issuedDate": "2024-09-14",
          "expiresAt": "2027-09-14",
          "scope": [
            "excel",
            "tcd",
            "macros-vba"
          ],
          "attachmentS3Key": "tenants/qf-demo/competencies/tcp_a1b2c3/mos-excel-expert.pdf",
          "verifiedBy": "usr_admin01",
          "verifiedAt": "2024-09-20T10:00:00Z",
          "status": "VERIFIED"
        }
      ],
      "meta": {
        "total": 1,
        "page": 1,
        "perPage": 20
      }
    }
  • 403Permission insuffisante (rôle ADMIN requis)

Exemples

GET /api/v1/trainer-competencies · cURL / Shell
curl -X GET https://api.qualiforma.site/api/v1/trainer-competencies?trainerId=usr_trainer_42&type=CERTIFICATION&status=VERIFIED&page=1&perPage=20 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo"
GET /api/v1/trainer-competencies · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/trainer-competencies?trainerId=usr_trainer_42&type=CERTIFICATION&status=VERIFIED&page=1&perPage=20', {
  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/trainer-competencies · Python
import requests

response = requests.get(
    'https://api.qualiforma.site/api/v1/trainer-competencies?trainerId=usr_trainer_42&type=CERTIFICATION&status=VERIFIED&page=1&perPage=20',
    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/trainer-competencies · PHP
<?php

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

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

try {
    $response = $client->get('trainer-competencies?trainerId=usr_trainer_42&type=CERTIFICATION&status=VERIFIED&page=1&perPage=20', [
        '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/trainer-competencies/:id

Détail d’une compétence

  • TrainerCompetencies
  • Qualiopi

Paramètres

NomTypeRequisExempleDescription
idpathouitcp_a1b2c3—

Réponses

  • 200Compétence trouvée
    Réponse 200 · JSON
    {
      "data": {
        "id": "tcp_a1b2c3",
        "trainerId": "usr_trainer_42",
        "type": "CERTIFICATION",
        "title": "Microsoft Certified : Excel Expert (MOS)",
        "issuedBy": "Microsoft Corporation",
        "issuedDate": "2024-09-14",
        "expiresAt": "2027-09-14",
        "scope": [
          "excel",
          "tcd",
          "macros-vba"
        ],
        "attachmentS3Key": "tenants/qf-demo/competencies/tcp_a1b2c3/mos-excel-expert.pdf",
        "verifiedBy": "usr_admin01",
        "verifiedAt": "2024-09-20T10:00:00Z",
        "status": "VERIFIED"
      }
    }
  • 404Compétence introuvable

Exemples

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

response = requests.get(
    'https://api.qualiforma.site/api/v1/trainer-competencies/tcp_a1b2c3',
    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/trainer-competencies/: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('trainer-competencies/tcp_a1b2c3', [
        '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/trainer-competencies

Déclarer une compétence

Création d'une compétence par un formateur (auto-déclaration) ou par un admin. Statut initial PENDING, en attente de vérification par un ADMIN.

  • TrainerCompetencies
  • Qualiopi

Corps de requête

Content-Type : application/json

Body · JSON
{
  "trainerId": "usr_trainer_42",
  "type": "CERTIFICATION",
  "title": "Microsoft Certified : Excel Expert (MOS)",
  "issuedBy": "Microsoft Corporation",
  "issuedDate": "2024-09-14",
  "expiresAt": "2027-09-14",
  "scope": [
    "excel",
    "tcd",
    "macros-vba"
  ]
}

Réponses

  • 201Compétence créée
    Réponse 201 · JSON
    {
      "data": {
        "id": "tcp_a1b2c3",
        "status": "PENDING"
      }
    }
  • 400Validation échouée (type invalide, dates incohérentes)

Exemples

POST /api/v1/trainer-competencies · cURL / Shell
curl -X POST https://api.qualiforma.site/api/v1/trainer-competencies \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo" \
  -H "Content-Type: application/json" \
  -d '{
  "trainerId": "usr_trainer_42",
  "type": "CERTIFICATION",
  "title": "Microsoft Certified : Excel Expert (MOS)",
  "issuedBy": "Microsoft Corporation",
  "issuedDate": "2024-09-14",
  "expiresAt": "2027-09-14",
  "scope": [
    "excel",
    "tcd",
    "macros-vba"
  ]
}'
POST /api/v1/trainer-competencies · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/trainer-competencies', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-Tenant-ID': 'qualiforma-demo',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "trainerId": "usr_trainer_42",
    "type": "CERTIFICATION",
    "title": "Microsoft Certified : Excel Expert (MOS)",
    "issuedBy": "Microsoft Corporation",
    "issuedDate": "2024-09-14",
    "expiresAt": "2027-09-14",
    "scope": [
      "excel",
      "tcd",
      "macros-vba"
    ]
  }),
});

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

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

response = requests.post(
    'https://api.qualiforma.site/api/v1/trainer-competencies',
    headers={
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'X-Tenant-ID': 'qualiforma-demo',
        'Content-Type': 'application/json',
    },
    json={
        'trainerId': 'usr_trainer_42',
        'type': 'CERTIFICATION',
        'title': 'Microsoft Certified : Excel Expert (MOS)',
        'issuedBy': 'Microsoft Corporation',
        'issuedDate': '2024-09-14',
        'expiresAt': '2027-09-14',
        'scope': [
            'excel',
            'tcd',
            'macros-vba',
        ],
    },
    timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
POST /api/v1/trainer-competencies · PHP
<?php

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

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

try {
    $response = $client->post('trainer-competencies', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_ACCESS_TOKEN',
            'X-Tenant-ID' => 'qualiforma-demo',
        ],
        'json' => [
            'trainerId' => 'usr_trainer_42',
            'type' => 'CERTIFICATION',
            'title' => 'Microsoft Certified : Excel Expert (MOS)',
            'issuedBy' => 'Microsoft Corporation',
            'issuedDate' => '2024-09-14',
            'expiresAt' => '2027-09-14',
            'scope' => [
                'excel',
                'tcd',
                'macros-vba',
            ],
        ],
    ]);
    $data = json_decode($response->getBody()->getContents(), true);
    var_dump($data);
} catch (GuzzleException $e) {
    fwrite(STDERR, $e->getMessage());
}
patch/api/v1/trainer-competencies/:id

Mettre à jour une compétence

Modifier le périmètre, le titre ou la date d'expiration. Une compétence VERIFIED repasse en PENDING après modification.

  • TrainerCompetencies
  • Qualiopi

Paramètres

NomTypeRequisExempleDescription
idpathouitcp_a1b2c3—

Corps de requête

Content-Type : application/json

Body · JSON
{
  "scope": [
    "excel",
    "tcd",
    "macros-vba",
    "power-query"
  ],
  "expiresAt": "2028-09-14"
}

Réponses

  • 200Compétence mise à jour
  • 404Compétence introuvable

Exemples

PATCH /api/v1/trainer-competencies/:id · cURL / Shell
curl -X PATCH https://api.qualiforma.site/api/v1/trainer-competencies/tcp_a1b2c3 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo" \
  -H "Content-Type: application/json" \
  -d '{
  "scope": [
    "excel",
    "tcd",
    "macros-vba",
    "power-query"
  ],
  "expiresAt": "2028-09-14"
}'
PATCH /api/v1/trainer-competencies/:id · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/trainer-competencies/tcp_a1b2c3', {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-Tenant-ID': 'qualiforma-demo',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "scope": [
      "excel",
      "tcd",
      "macros-vba",
      "power-query"
    ],
    "expiresAt": "2028-09-14"
  }),
});

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

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

response = requests.patch(
    'https://api.qualiforma.site/api/v1/trainer-competencies/tcp_a1b2c3',
    headers={
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'X-Tenant-ID': 'qualiforma-demo',
        'Content-Type': 'application/json',
    },
    json={
        'scope': [
            'excel',
            'tcd',
            'macros-vba',
            'power-query',
        ],
        'expiresAt': '2028-09-14',
    },
    timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
PATCH /api/v1/trainer-competencies/: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('trainer-competencies/tcp_a1b2c3', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_ACCESS_TOKEN',
            'X-Tenant-ID' => 'qualiforma-demo',
        ],
        'json' => [
            'scope' => [
                'excel',
                'tcd',
                'macros-vba',
                'power-query',
            ],
            'expiresAt' => '2028-09-14',
        ],
    ]);
    $data = json_decode($response->getBody()->getContents(), true);
    var_dump($data);
} catch (GuzzleException $e) {
    fwrite(STDERR, $e->getMessage());
}
delete/api/v1/trainer-competencies/:id

Supprimer une compétence

Supprime une compétence. Refus 409 si la compétence couvre un cours actuellement attribué au formateur (intégrité audit Qualiopi).

  • TrainerCompetencies
  • Qualiopi

Paramètres

NomTypeRequisExempleDescription
idpathouitcp_a1b2c3—

Réponses

  • 204Compétence supprimée
  • 409Compétence référencée par un cours actif

Exemples

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

response = requests.delete(
    'https://api.qualiforma.site/api/v1/trainer-competencies/tcp_a1b2c3',
    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/trainer-competencies/: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('trainer-competencies/tcp_a1b2c3', [
        '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/trainer-competencies/:id/verify

Vérifier (valider) une compétence

Un ADMIN valide la compétence après vérification du justificatif. Passe le statut à VERIFIED et renseigne verifiedBy + verifiedAt.

  • TrainerCompetencies
  • Qualiopi

Paramètres

NomTypeRequisExempleDescription
idpathouitcp_a1b2c3—

Corps de requête

Content-Type : application/json

Body · JSON
{
  "decision": "VERIFIED",
  "comment": "Diplôme MOS vérifié sur le portail officiel Microsoft (2024-09-20)."
}

Réponses

  • 200Compétence vérifiée
    Réponse 200 · JSON
    {
      "data": {
        "id": "tcp_a1b2c3",
        "status": "VERIFIED",
        "verifiedBy": "usr_admin01",
        "verifiedAt": "2024-09-20T10:00:00Z"
      }
    }
  • 400Décision invalide (autorisées : VERIFIED | REJECTED)
  • 403Permission insuffisante (rôle ADMIN requis)

Exemples

POST /api/v1/trainer-competencies/:id/verify · cURL / Shell
curl -X POST https://api.qualiforma.site/api/v1/trainer-competencies/tcp_a1b2c3/verify \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo" \
  -H "Content-Type: application/json" \
  -d '{
  "decision": "VERIFIED",
  "comment": "Diplôme MOS vérifié sur le portail officiel Microsoft (2024-09-20)."
}'
POST /api/v1/trainer-competencies/:id/verify · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/trainer-competencies/tcp_a1b2c3/verify', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-Tenant-ID': 'qualiforma-demo',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "decision": "VERIFIED",
    "comment": "Diplôme MOS vérifié sur le portail officiel Microsoft (2024-09-20)."
  }),
});

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

const data = await response.json();
console.log(data);
POST /api/v1/trainer-competencies/:id/verify · Python
import requests

response = requests.post(
    'https://api.qualiforma.site/api/v1/trainer-competencies/tcp_a1b2c3/verify',
    headers={
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'X-Tenant-ID': 'qualiforma-demo',
        'Content-Type': 'application/json',
    },
    json={
        'decision': 'VERIFIED',
        'comment': 'Diplôme MOS vérifié sur le portail officiel Microsoft (2024-09-20).',
    },
    timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
POST /api/v1/trainer-competencies/:id/verify · PHP
<?php

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

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

try {
    $response = $client->post('trainer-competencies/tcp_a1b2c3/verify', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_ACCESS_TOKEN',
            'X-Tenant-ID' => 'qualiforma-demo',
        ],
        'json' => [
            'decision' => 'VERIFIED',
            'comment' => 'Diplôme MOS vérifié sur le portail officiel Microsoft (2024-09-20).',
        ],
    ]);
    $data = json_decode($response->getBody()->getContents(), true);
    var_dump($data);
} catch (GuzzleException $e) {
    fwrite(STDERR, $e->getMessage());
}
post/api/v1/trainer-competencies/:id/attachment

Uploader le justificatif (diplôme/certif PDF)

Upload du fichier justificatif (PDF, JPG, PNG, max 10 MB) qui sera stocké sur S3 (iDrive e2). Retourne l'attachmentS3Key à conserver pour l'audit.

  • TrainerCompetencies
  • Qualiopi

Paramètres

NomTypeRequisExempleDescription
idpathouitcp_a1b2c3—

Corps de requête

Content-Type : multipart/form-data

Body · JSON
{
  "file": "@diplome-mos-excel.pdf (binary)"
}

Réponses

  • 201Fichier uploadé
    Réponse 201 · JSON
    {
      "data": {
        "attachmentS3Key": "tenants/qf-demo/competencies/tcp_a1b2c3/mos-excel-expert.pdf",
        "sizeBytes": 482103,
        "mimeType": "application/pdf"
      }
    }
  • 400Fichier invalide (taille, type MIME)
  • 413Fichier trop volumineux (max 10 MB)

Exemples

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

response = requests.post(
    'https://api.qualiforma.site/api/v1/trainer-competencies/tcp_a1b2c3/attachment',
    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/trainer-competencies/:id/attachment · PHP
<?php

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

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

try {
    $response = $client->post('trainer-competencies/tcp_a1b2c3/attachment', [
        '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/:trainerId/competencies

Compétences d’un formateur

Retourne toutes les compétences déclarées pour un formateur donné. Un formateur peut accéder à ses propres compétences ; les ADMIN voient celles de tous les formateurs du tenant.

  • TrainerCompetencies
  • Qualiopi

Paramètres

NomTypeRequisExempleDescription
trainerIdpathouiusr_trainer_42—

Réponses

  • 200Compétences du formateur
    Réponse 200 · JSON
    {
      "data": [
        {
          "id": "tcp_a1b2c3",
          "trainerId": "usr_trainer_42",
          "type": "CERTIFICATION",
          "title": "Microsoft Certified : Excel Expert (MOS)",
          "issuedBy": "Microsoft Corporation",
          "issuedDate": "2024-09-14",
          "expiresAt": "2027-09-14",
          "scope": [
            "excel",
            "tcd",
            "macros-vba"
          ],
          "attachmentS3Key": "tenants/qf-demo/competencies/tcp_a1b2c3/mos-excel-expert.pdf",
          "verifiedBy": "usr_admin01",
          "verifiedAt": "2024-09-20T10:00:00Z",
          "status": "VERIFIED"
        }
      ]
    }
  • 403Permission insuffisante
  • 404Formateur introuvable

Exemples

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

response = requests.get(
    'https://api.qualiforma.site/api/v1/users/usr_trainer_42/competencies',
    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/:trainerId/competencies · 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_trainer_42/competencies', [
        '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/trainer-competencies/expiring

Compétences expirant dans moins de 90 jours

Retourne les compétences qui arrivent à expiration prochainement, pour alerter les formateurs concernés. Le scheduler quotidien envoie automatiquement des emails de rappel.

  • TrainerCompetencies
  • Qualiopi

Paramètres

NomTypeRequisExempleDescription
windowDaysquerynon90Fenêtre en jours (défaut 90, max 365)

Réponses

  • 200Liste des compétences expirantes
    Réponse 200 · JSON
    {
      "data": [
        {
          "id": "tcp_a1b2c3",
          "trainerId": "usr_trainer_42",
          "title": "Microsoft Certified : Excel Expert (MOS)",
          "expiresAt": "2026-08-14",
          "daysRemaining": 91
        }
      ],
      "meta": {
        "total": 1
      }
    }

Exemples

GET /api/v1/trainer-competencies/expiring · cURL / Shell
curl -X GET https://api.qualiforma.site/api/v1/trainer-competencies/expiring?windowDays=90 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo"
GET /api/v1/trainer-competencies/expiring · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/trainer-competencies/expiring?windowDays=90', {
  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/trainer-competencies/expiring · Python
import requests

response = requests.get(
    'https://api.qualiforma.site/api/v1/trainer-competencies/expiring?windowDays=90',
    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/trainer-competencies/expiring · PHP
<?php

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

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

try {
    $response = $client->get('trainer-competencies/expiring?windowDays=90', [
        '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/trainer-competencies/:id/renew

Renouveler une compétence

Crée une nouvelle compétence (chaînée à la précédente via previousCompetencyId) avec mise à jour de la date d'émission et d'expiration. La compétence d'origine reste archivée pour l'historique audit.

  • TrainerCompetencies
  • Qualiopi

Paramètres

NomTypeRequisExempleDescription
idpathouitcp_a1b2c3—

Corps de requête

Content-Type : application/json

Body · JSON
{
  "issuedDate": "2027-09-10",
  "expiresAt": "2030-09-10",
  "attachmentS3Key": "tenants/qf-demo/competencies/renewals/tcp_a1b2c3-v2.pdf"
}

Réponses

  • 201Compétence renouvelée
    Réponse 201 · JSON
    {
      "data": {
        "id": "tcp_a1b2c3-v2",
        "previousCompetencyId": "tcp_a1b2c3",
        "status": "PENDING"
      }
    }
  • 400Date d’émission antérieure à la compétence renouvelée
  • 404Compétence introuvable

Exemples

POST /api/v1/trainer-competencies/:id/renew · cURL / Shell
curl -X POST https://api.qualiforma.site/api/v1/trainer-competencies/tcp_a1b2c3/renew \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "X-Tenant-ID: qualiforma-demo" \
  -H "Content-Type: application/json" \
  -d '{
  "issuedDate": "2027-09-10",
  "expiresAt": "2030-09-10",
  "attachmentS3Key": "tenants/qf-demo/competencies/renewals/tcp_a1b2c3-v2.pdf"
}'
POST /api/v1/trainer-competencies/:id/renew · JavaScript
const response = await fetch('https://api.qualiforma.site/api/v1/trainer-competencies/tcp_a1b2c3/renew', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
    'X-Tenant-ID': 'qualiforma-demo',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "issuedDate": "2027-09-10",
    "expiresAt": "2030-09-10",
    "attachmentS3Key": "tenants/qf-demo/competencies/renewals/tcp_a1b2c3-v2.pdf"
  }),
});

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

const data = await response.json();
console.log(data);
POST /api/v1/trainer-competencies/:id/renew · Python
import requests

response = requests.post(
    'https://api.qualiforma.site/api/v1/trainer-competencies/tcp_a1b2c3/renew',
    headers={
        'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
        'X-Tenant-ID': 'qualiforma-demo',
        'Content-Type': 'application/json',
    },
    json={
        'issuedDate': '2027-09-10',
        'expiresAt': '2030-09-10',
        'attachmentS3Key': 'tenants/qf-demo/competencies/renewals/tcp_a1b2c3-v2.pdf',
    },
    timeout=30,
)
response.raise_for_status()
data = response.json()
print(data)
POST /api/v1/trainer-competencies/:id/renew · PHP
<?php

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

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

try {
    $response = $client->post('trainer-competencies/tcp_a1b2c3/renew', [
        'headers' => [
            'Authorization' => 'Bearer YOUR_ACCESS_TOKEN',
            'X-Tenant-ID' => 'qualiforma-demo',
        ],
        'json' => [
            'issuedDate' => '2027-09-10',
            'expiresAt' => '2030-09-10',
            'attachmentS3Key' => 'tenants/qf-demo/competencies/renewals/tcp_a1b2c3-v2.pdf',
        ],
    ]);
    $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