حأليفلاي

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.

Documentation OpenAPI interactive
RLS + clés à permissions
Rate limit 600/min
Webhooks signés
EndpointUsageAuthentification
POST/v1/orgs/{id}/learnersCréer un apprenant (pseudonyme, classe, langues)API key
GET/v1/learners/{id}/progressMaîtrise par compétence, confusions, fluiditéAPI key
POST/v1/learners/{id}/assignmentsAssigner un parcours/une unitéAPI key
POST/v1/wordlistsListe de mots → cartes (après revue)API key
GET/v1/children/{id}/report.pdfRapport PDFParent JWT
POST/v1/webhooksÉvénements : unit.completed, mastery.reached, inactivity.7d, subscription.changedAPI key
POST/v1/speech/assessÉvaluer la prononciation d’un mot connuAPI key
GET/v1/content/packs?language=arUnités publiéesPublic
GET/v1/content/units/{id}Unité complète avec cartesPublic
GET/v1/children/{id}/stats/weeklyStatistiques hebdo parentParent JWT
POST/v1/children/{id}/syncSynchronisation hors-ligneParent JWT
GET/healthÉtat du servicePublic
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 }
API publique (v1) · Alifly