API publique (v1)
Pour les écoles, plateformes éducatives et créateurs de contenu. Clés à permissions, OAuth pour les organisations, données enfants toujours pseudonymes.
| Endpoint | Usage | Authentification |
|---|---|---|
POST/v1/orgs/{id}/learners | Créer un apprenant (pseudonyme, classe, langues) | API key |
GET/v1/learners/{id}/progress | Maîtrise par compétence, confusions, fluidité | API key |
POST/v1/learners/{id}/assignments | Assigner un parcours/une unité | API key |
POST/v1/wordlists | Liste de mots → cartes (après revue) | API key |
GET/v1/children/{id}/report.pdf | Rapport PDF | Parent JWT |
POST/v1/webhooks | Événements : unit.completed, mastery.reached, inactivity.7d, subscription.changed | API key |
POST/v1/speech/assess | Évaluer la prononciation d’un mot connu | API key |
GET/v1/content/packs?language=ar | Unités publiées | Public |
GET/v1/content/units/{id} | Unité complète avec cartes | Public |
GET/v1/children/{id}/stats/weekly | Statistiques hebdo parent | Parent JWT |
POST/v1/children/{id}/sync | Synchronisation hors-ligne | Parent JWT |
GET/health | État du service | Public |
curl https://api.alifly.app/v1/learners/lrn_8f2/progress \
-H "Authorization: Bearer sk_live_..."
{
"learner": "lrn_8f2",
"language": "ar",
"tracks": {
"letters": { "mastery": 0.78, "current_unit": "JHK" },
"sounds": { "mastery": 0.61 },
"vowels": { "locked": true }
},
"confusions": [["ح","خ",0.31],["ت","ث",0.18]],
"fluency_ms": 1300
}Authentification
Clés API à permissions read / write / assess pour les organisations. OAuth 2.0 pour les plateformes scolaires. Envoyez la clé dans l’en-tête Authorization: Bearer.
Limites
600 req/min par clé · webhooks signés HMAC · journal d’accès complet · export et suppression des données sur demande (RGPD).
POST/v1/orgs/{id}/learners
Créer un apprenant (pseudonyme, classe, langues)
Requête
{ "pseudonym": "Y. B.", "childId": "ch_…" }Réponse
{ "id": "lrn_8f2", "pseudonym": "Y. B.", "consentByParentAt": null }GET/v1/learners/{id}/progress
Maîtrise par compétence, confusions, fluidité
Réponse
{
"learner": "lrn_8f2",
"language": "ar",
"tracks": {
"letters": { "mastery": 0.78, "current_unit": "JHK" },
"sounds": { "mastery": 0.61 },
"vowels": { "locked": true }
},
"confusions": [["ح","خ",0.31],["ت","ث",0.18]],
"fluency_ms": 1300
}POST/v1/learners/{id}/assignments
Assigner un parcours/une unité
Requête
{ "track": "T1", "unitId": "ar-T1-u2" }Réponse
{ "id": "asg_…", "track": "T1", "unitId": "ar-T1-u2", "createdAt": "2026-09-13T10:00:00Z" }POST/v1/wordlists
Liste de mots → cartes (après revue)
Requête
{ "language": "ar", "learnerId": "lrn_8f2", "words": ["بَيْت", "قَمَر"] }Réponse
{ "id": "wl_…", "status": "review", "words": 2 }GET/v1/children/{id}/report.pdf
Rapport PDF
Réponse
application/pdf
POST/v1/webhooks
Événements : unit.completed, mastery.reached, inactivity.7d, subscription.changed
Requête
{ "url": "https://school.example/hooks/alifly", "events": ["unit.completed", "mastery.reached"] }Réponse
{ "id": "wh_…", "secret": "whsec_…" }POST/v1/speech/assess
Évaluer la prononciation d’un mot connu
Requête
{ "target": "بَيْت", "language": "ar", "audioBase64": "…", "mimeType": "audio/m4a" }Réponse
{ "transcript": "بيت", "score": 0.92, "match": "correct" }GET/v1/content/packs?language=ar
Unités publiées
Réponse
[{ "id": "ar-T1-u1", "track": "T1", "level": 1, "title": { "ar": "ب ت ث" }, "version": 3 }]GET/v1/content/units/{id}
Unité complète avec cartes
GET/v1/children/{id}/stats/weekly
Statistiques hebdo parent
Réponse
{ "minutes": 38, "cards": 142, "accuracy": 0.81, "streak": 5, "perTrack": [...], "confusions": [...], "fluency": [...], "firstGain": "ح/خ" }POST/v1/children/{id}/sync
Synchronisation hors-ligne
GET/health
État du service
Réponse
{ "ok": true }