Aller au contenu principal

Formations

CRUD complet sur le catalogue de formations. Requiert le rôle ADMIN ou CREATOR.

Endpoints disponibles

  • GET/api/v1/courses
  • POST/api/v1/courses
  • GET/api/v1/courses/:id
  • PATCH/api/v1/courses/:id
  • DELETE/api/v1/courses/:id

Schéma Course

Champs du modèle Course de l'API REST QualiForma
ChampTypeRequisDescription
idstringNonIdentifiant unique (crs_...)
titlestringOuiTitre de la formation (max 200 chars)
descriptionstringOuiDescription longue (markdown supporté)
pricenumberOuiPrix en centimes (49900 = 499,00 €)
currencystringOuiCode ISO 4217 (EUR, USD...)
statusenumNonDRAFT | PUBLISHED | ARCHIVED
durationnumberNonDurée en heures
levelenumNonBEGINNER | INTERMEDIATE | ADVANCED | EXPERT
languagestringNonCode BCP 47 (fr, en...)
tagsstring[]NonTags pour la recherche
createdAtstringNonISO 8601 — lecture seule
updatedAtstringNonISO 8601 — lecture seule

GET/courses

Retourne la liste paginée des formations du tenant. Paramètres query : page, perPage, status, q (recherche).

Lister les formations · Python
import requests

response = requests.get(
    'https://api.qualiforma.site/api/v1/courses',
    headers={
        'Authorization': f'Bearer {access_token}',
        'X-Tenant-ID': 'votre-tenant'
    },
    params={
        'page': 1,
        'perPage': 20,
        'status': 'PUBLISHED',  # DRAFT | PUBLISHED | ARCHIVED
        'q': 'excel'            # recherche texte (optionnel)
    }
)

result = response.json()
courses = result['data']
total = result['meta']['total']

for c in courses:
    print(f"[{c['status']}] {c['title']}{c['price'] / 100:.2f} €")

POST/courses

Crée une formation avec le statut DRAFT. Requiert ADMIN ou CREATOR.

Créer une formation · Python
course_data = {
    'title': 'Excel Avancé pour Professionnels RH',
    'description': "Maîtrisez les fonctions avancées d'Excel...",
    'price': 49900,          # centimes : 499 €
    'currency': 'EUR',
    'duration': 14,          # heures
    'level': 'INTERMEDIATE', # BEGINNER | INTERMEDIATE | ADVANCED | EXPERT
    'language': 'fr',
    'tags': ['excel', 'rh', 'bureautique'],
    'methods': ['E_LEARNING', 'BLENDED'] # méthodes pédagogiques
}

response = requests.post(
    'https://api.qualiforma.site/api/v1/courses',
    headers={
        'Authorization': f'Bearer {access_token}',
        'X-Tenant-ID': 'votre-tenant',
        'Content-Type': 'application/json'
    },
    json=course_data
)

course = response.json()['data']
print(f"Formation créée : {course['id']} (statut : {course['status']})")
# statut initial = DRAFT

PATCH/courses/:id

Mise à jour partielle (partial update). Envoyer uniquement les champs à modifier. Pour publier : passer status: "PUBLISHED".

Publier une formation · cURL / Shell
TOKEN="eyJhbGci..."
COURSE_ID="crs_abc123"

# Publier une formation (DRAFT → PUBLISHED)
curl -X PATCH "https://api.qualiforma.site/api/v1/courses/$COURSE_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -H 'X-Tenant-ID: votre-tenant' \
  -H 'Content-Type: application/json' \
  -d '{"status": "PUBLISHED"}'

# Réponse 200 :
# { "data": { "id": "crs_abc123", "status": "PUBLISHED", ... } }

Réponses d'erreur

Exemples d'erreurs · JSON
// 401 — Token invalide ou expiré
{
  "statusCode": 401,
  "message": "Token invalide",
  "error": "Unauthorized"
}

// 403 — Rôle insuffisant
{
  "statusCode": 403,
  "message": "Accès refusé : rôle ADMIN ou CREATOR requis",
  "error": "Forbidden"
}

// 422 — Validation métier
{
  "statusCode": 422,
  "message": "Validation failed",
  "errors": {
    "price": ["Le prix doit être supérieur à 0"],
    "title": ["Le titre est requis"]
  }
}