Ontwikkelaars
API voor docenten
Publiceer en beheer je opleidingen vanuit je eigen tools: lesprogramma, video-uploads, publicatie, studenten, statistieken en inkomsten.
Sleutels maak je aan vanuit je docentenaccount, tabblad „API”. Een sleutel werkt alleen op je eigen opleidingen. De referentie hieronder is in het Frans.
Mettre en ligne et gérer ses formations depuis un script, un outil interne ou une chaîne de production vidéo. Clés créées depuis l'espace formateur (Paramètres > API). Toutes les réponses sont en JSON, les dates en ISO 8601 (UTC).
- Adresse de base :
https://mudey.fr/api/v1 - Authentification : en-tête
Authorization: Bearer mudey_sk_…. Une clé n'agit que sur VOS formations, avec les droits choisis à sa création. - Quota : 300 appels par minute et par clé (en-têtes X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset).
- Spécification OpenAPI à importer dans Postman, Insomnia ou un générateur de client : /api/v1/openapi.json
- Prix en unités de la devise (49.99), durées en secondes, dates ISO 8601 en UTC.
export MUDEY_API_KEY="mudey_sk_..."
curl "https://mudey.fr/api/v1/me" \
-H "Authorization: Bearer $MUDEY_API_KEY"1. Créer la formation et son programme en un seul appel, avec tout ce que demande l'éditeur : informations de base (catégorie et sous-catégorie, données par GET /categories), participants cibles (objectives, requirements, targetAudience), prix, messages et programme. Elle naît en brouillon, invisible du catalogue. Les offres Prime et Business se règlent avec offerTier, primePrice, businessPrice et le tier de chaque module.
export MUDEY_API_KEY="mudey_sk_..."
curl -X POST "https://mudey.fr/api/v1/courses" \
-H "Authorization: Bearer $MUDEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Apprendre TypeScript",
"subtitle": "Des bases aux types avancés, pas à pas",
"description": "Des bases aux types avancés, avec des exercices corrigés à chaque module.",
"language": "fr",
"level": "BEGINNER",
"categoryId": "…",
"subcategoryId": "…",
"primaryTopic": "TypeScript",
"objectives": [
"Typer une application React",
"Écrire des types génériques"
],
"requirements": [
"Connaître les bases de JavaScript"
],
"targetAudience": [
"Développeurs JavaScript",
"Étudiants en informatique"
],
"price": 49.99,
"originalPrice": 89.99,
"welcomeMessage": "Bienvenue ! Commencez par le module 1, à votre rythme.",
"congratulationsMessage": "Bravo, vous avez terminé la formation !",
"sections": [
{
"title": "Les bases",
"lessons": [
{
"title": "Installer TypeScript",
"isFree": true
},
{
"title": "Types primitifs"
},
{
"title": "Mémo des commandes",
"type": "TEXT",
"content": "# Mémo\n..."
}
]
}
]
}'La réponse contient l'identifiant de la formation (id) et celui de chaque leçon (sections[].lessons[].id).
2. Envoyer chaque vidéo directement sur notre stockage : demandez une adresse signée, puis envoyez le fichier par PUT. Le fichier ne passe pas par nos serveurs, la taille n'est donc limitée qu'à 5 Go.
export MUDEY_API_KEY="mudey_sk_..."
export COURSE_ID="..." # à remplacer
curl -X POST "https://mudey.fr/api/v1/courses/$COURSE_ID/uploads" \
-H "Authorization: Bearer $MUDEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"kind": "video",
"fileName": "01-installer.mp4",
"contentType": "video/mp4",
"size": 104857600
}'
# => { "key": "videos/…/01-installer.mp4", "uploadUrl": "https://…", "method": "PUT" }
# uploadUrl reçu à l'étape précédente
curl -X PUT "$UPLOAD_URL" \
-H "Content-Type: video/mp4" \
--upload-file 01-installer.mp43. Rattacher la vidéo à sa leçon avec la clé reçue (nous vérifions que le fichier est bien arrivé) :
export MUDEY_API_KEY="mudey_sk_..."
export COURSE_ID="..." # à remplacer
export LESSON_ID="..." # à remplacer
curl -X PATCH "https://mudey.fr/api/v1/courses/$COURSE_ID/lessons/$LESSON_ID" \
-H "Authorization: Bearer $MUDEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"videoKey": "videos/…/01-installer.mp4",
"durationSeconds": 412
}'4. Ajouter la couverture (kind thumbnail, même principe), posée par PATCH /courses/$COURSE_ID avec thumbnailKey.
5. Publier. Si quelque chose manque, la réponse 422 en donne la liste dans error.details.
export MUDEY_API_KEY="mudey_sk_..."
export COURSE_ID="..." # à remplacer
curl -X POST "https://mudey.fr/api/v1/courses/$COURSE_ID/publish" \
-H "Authorization: Bearer $MUDEY_API_KEY"6. Lancer avec un coupon (facultatif) : code de réduction sur la formation, ou sur toutes vos formations sans courseId.
export MUDEY_API_KEY="mudey_sk_..."
curl -X POST "https://mudey.fr/api/v1/coupons" \
-H "Authorization: Bearer $MUDEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"code": "LANCEMENT-2026",
"courseId": "…",
"discountType": "PERCENTAGE",
"discountValue": 30,
"maxUses": 100,
"expiresAt": "2026-12-31T23:59:59Z"
}'Toute erreur a la même forme. Testez code, stable ; message est rédigé pour un humain et peut évoluer. Chaque réponse porte un en-tête X-Request-Id à nous transmettre en cas de problème.
{ "error": { "code": "validation_error", "message": "Données invalides",
"details": [{ "field": "price", "message": "Number must be greater than or equal to 0" }] } }| 400 | invalid_json | Corps qui n'est pas du JSON. |
| 401 | unauthorized, invalid_key, key_revoked, key_expired | Clé absente ou inutilisable. |
| 403 | insufficient_scope, not_instructor | Droit manquant sur la clé, ou compte qui n'est plus formateur. |
| 404 | not_found | Ressource absente de VOS formations (celles des autres formateurs sont invisibles). |
| 409 | course_has_students, student_data, coupon_used, code_taken | Suppression refusée pour protéger les élèves (dépubliez) ou un coupon déjà utilisé (désactivez) ; code de coupon déjà pris. |
| 413 | file_too_large, payload_too_large | Fichier ou corps trop lourd. |
| 422 | validation_error, not_publishable, invalid_category, invalid_subcategory, invalid_key, file_missing, invalid_order… | Données refusées, details précise. |
| 429 | rate_limited | Quota dépassé : attendre Retry-After secondes. |
- La clé n'est affichée qu'une fois ; nous n'en gardons qu'une empreinte et ne pouvons pas vous la renvoyer.
- Appelez l'API depuis un serveur ou un script, jamais depuis une page web ou une application publiée : la clé y serait lisible.
- Donnez à chaque clé le minimum de droits et une durée de validité ; révoquez-la dès qu'elle a pu fuiter.
- Une clé ne voit que vos formations. Les élèves sont listés sans e-mail ni téléphone.
- Les suppressions qui effaceraient la progression d'élèves sont refusées : dépubliez plutôt.
Referentie van de routes
Compte
Clé utilisée et référentiels.
Formations
Créer, modifier, publier, supprimer.
- getLister mes formations
/courses - postCréer une formation
/courses - getLire une formation complète
/courses/{courseId} - patchModifier une formation
/courses/{courseId} - deleteSupprimer une formation
/courses/{courseId} - postMettre en ligne
/courses/{courseId}/publish - postRetirer du catalogue
/courses/{courseId}/unpublish
Modules
Sections du programme.
Leçons
Contenu du programme.
- postAjouter une leçon
/courses/{courseId}/sections/{sectionId}/lessons - putRéordonner les leçons d'un module
/courses/{courseId}/sections/{sectionId}/lessons/order - getLire une leçon
/courses/{courseId}/lessons/{lessonId} - patchModifier une leçon
/courses/{courseId}/lessons/{lessonId} - deleteSupprimer une leçon
/courses/{courseId}/lessons/{lessonId}
Fichiers
Vidéos, couvertures et ressources, envoyées directement sur S3.
Coupons
Codes de réduction sur vos formations.
Élèves et revenus
Inscriptions, statistiques, relevés.