Appearance
Documentation
Introduction
Ceci est une documentation concernant toutes les APIs REST publiques disponibles sur Teachizy.
URL racine de l'API REST
https://api.teachizy.fr/api/v1Authentification sur l'API REST
L'authentification passe par une clé d'API générée sur votre compte app.teachizy.fr
Le header HTTP de chaque requête doit contenir la clé suivante :
Authorization: Bearer <token>INFO
Toutes les dates sont renvoyées au format UTC.
Endpoints
Voici la liste des enpoints disponibles
Lister les formations
Requête
GET /externals/automations/trainingsExemple de réponse
json
{
"data": [
{
"uuid": "xxxx-xxxx-xxxx-xxxx",
"name": "nom d'une formation",
"created_at": "2021-01-01 20:00:00"
}
]
}Lister les leçons
INFO
Les leçons de type chapitre ont des sous leçons dans une clé children.
Il n'y a qu'un niveau de children.
Requête
GET /externals/automations/trainings/{uuid}/itemsParamètres
uuid: C'est l'UUID de la formation
Champs
type: une des valeursGENERIC,SECTION,QUIZouTASKS
Exemple de réponse
json
{
"data": [
{
"id": "xx",
"order": 1,
"name": "nom d'une leçon",
"type": "GENERIC"
},
{
"id": "xx",
"order": 2,
"name": "nom d'un chapitre",
"type": "SECTION",
"children": [
{
"id": "xx",
"order": 1,
"name": "nom d'une sous leçon",
"type": "GENERIC"
}
]
}
]
}Infos du Store
Requête
GET /externals/automations/storeChamps
logo: URL du logo, ounullfavicon: URL du favicon, ounull
Exemple de réponse
json
{
"data": {
"uuid": "xx-xx-xx-xx-xx",
"name": "Nom de l'espace de formation",
"description": "desc",
"logo": "http://api.teachizy.fr/storage/xxx/xxx/xxx.png",
"favicon": "http://api.teachizy.fr/storage/xxx/xxx/xxx.png",
"created_at": "2021-01-01 20:00:00"
}
}Inviter un apprenant
Requête
POST /externals/automations/customersjson
{
"firstname": "un prénom",
"lastname": "un nom",
"email": "un email",
"training_uuids": ["uuid", "uuid", ... ]
}Réponses
Tout s'est bien passé
HTTP 200Erreur de validation
HTTP 422Bloquer un apprenant
Requête
POST /externals/blocked-customersjson
{
"email": "email de l'apprenant",
"training_uuids": ["uuid", "uuid", ... ]
}Réponses
Tout s'est bien passé
HTTP 200Erreur de validation
HTTP 422Débloquer un apprenant
Requête
POST /externals/unblocked-customersjson
{
"email": "email de l'apprenant",
"training_uuids": ["uuid", "uuid", ... ]
}Réponses
Tout s'est bien passé
HTTP 200Erreur de validation
HTTP 422Récupérer un apprenant par email
Renvoie le profil complet d'un apprenant et la liste de ses formations (avec inscription, progression, expiration).
Requête
GET /externals/customers?email={email}Paramètres (query)
email(requis) : email de l'apprenant
Champs
custom_fields(apprenant et formation) : objet clé/valeur s'il contient des champs, sinon un tableau vide[]started_at:nullsi non commencéecompleted_at:nullsi non terminéelast_activity_at:nullsi aucune activitéexpiration:nullsi pas de durée d'accèsblocked_at:nullsi non bloquétotal_duration_in_sec: temps passé total, en secondestraining_items_count: nombre de leçonstraining_items_completed_count: nombre de leçons terminéesprogression_percent: progression en %quiz_total_percent: score quiz en %,-1si pas de quiz
Exemple de réponse
json
{
"data": {
"uuid": "xxxx-xxxx-xxxx-xxxx",
"email": "apprenant@example.com",
"firstname": "Prénom",
"lastname": "Nom",
"created_at": "2024-12-22 11:21:42",
"last_login_at": "2026-04-17 12:00:00",
"custom_fields": {
"matricule": "ABC123",
"autoriser_le_partage_d_info": "true"
},
"trainings": [
{
"training": {
"uuid": "xxxx-xxxx-xxxx-xxxx",
"name": "nom de la formation",
"created_at": "2021-01-01 20:00:00"
},
"enrolled_at": "2025-01-01 20:00:00",
"started_at": "2025-01-02 10:00:00",
"completed_at": null,
"last_activity_at": "2026-04-17 12:00:13",
"expiration": null,
"blocked_at": null,
"custom_fields": {
"champ_formation": "valeur"
},
"total_duration_in_sec": 12,
"training_items_count": 9,
"training_items_completed_count": 3,
"progression_percent": 33.33,
"quiz_total_percent": 100
}
]
}
}Réponses
Apprenant trouvé
HTTP 200Email manquant ou mal formé
HTTP 422Apprenant introuvable dans ce store
HTTP 404Exporter les apprenants (liste filtrée et paginée)
Renvoie la liste paginée des apprenants du store. Le payload de chaque apprenant est identique à l'endpoint ci-dessus (profil + formations).
Requête
GET /externals/customers/exportParamètres (query, tous optionnels)
| Paramètre | Type | Effet |
|---|---|---|
training_uuid | uuid | Limite aux apprenants inscrits à cette formation |
status | ACTIVE ou DISABLED | Statut du compte apprenant |
begin | date YYYY-MM-DD | Date min de création de l'apprenant (incluse) |
end | date YYYY-MM-DD | Date max de création de l'apprenant (incluse) |
page | int ≥ 1 | Numéro de page (défaut 1) |
per_page | int ≥ 1 | Taille de page (défaut 500, max 1000) |
INFO
Pour recevoir une erreur de validation au format JSON (HTTP 422) plutôt qu'une redirection, le header Accept: application/json doit être présent.
Exemple de réponse
json
{
"data": [
{
"uuid": "xxxx-xxxx-xxxx-xxxx",
"email": "apprenant@example.com",
"firstname": "Prénom",
"lastname": "Nom",
"created_at": "2024-12-22 11:21:42",
"last_login_at": "2026-04-17 12:00:00",
"custom_fields": {
"matricule": "ABC123"
},
"trainings": [
{
"training": {
"uuid": "xxxx-xxxx-xxxx-xxxx",
"name": "nom de la formation",
"created_at": "2021-01-01 20:00:00"
},
"enrolled_at": "2025-01-01 20:00:00",
"started_at": null,
"completed_at": null,
"last_activity_at": null,
"expiration": null,
"blocked_at": null,
"custom_fields": [],
"total_duration_in_sec": 0,
"training_items_count": 9,
"training_items_completed_count": 0,
"progression_percent": 0,
"quiz_total_percent": -1
}
]
}
],
"links": {
"first": "https://api.teachizy.fr/api/v1/externals/customers/export?page=1",
"last": "https://api.teachizy.fr/api/v1/externals/customers/export?page=12",
"prev": null,
"next": "https://api.teachizy.fr/api/v1/externals/customers/export?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"to": 500,
"last_page": 12,
"per_page": 500,
"total": 5723,
"path": "https://api.teachizy.fr/api/v1/externals/customers/export"
}
}Réponses
Liste retournée (peut être vide)
HTTP 200Filtre invalide (uuid mal formé, status hors valeurs, date hors format)
HTTP 422