Référence API
Documentation complète de l'API REST Minispace.
URL de Base
Chaque garderie dispose de sa propre API, accessible via sous-domaine :
https://{slug-garderie}.minispace.app/api
Authentification
Tous les points de terminaison protégés nécessitent un jeton JWT Bearer dans l'en-tête Authorization :
curl -H "Authorization: Bearer VOTRE_TOKEN" \
https://votre-garderie.minispace.app/api/auth/me
Flux de connexion (2 étapes)
Étape 1 — Identifiants
POST /auth/login
{
"email": "[email protected]",
"password": "votremotdepasse"
}
Réponse (quand la 2FA est requise) :
{ "status": "2fa_required" }
Réponse (quand l'appareil de confiance est présent — 2FA ignorée) :
{
"access_token": "eyJ...",
"refresh_token": "eyJ...",
"user": { ... }
}
Étape 2 — Vérifier le code 2FA
POST /auth/verify-2fa
{
"email": "[email protected]",
"code": "123456"
}
Réponse :
{
"access_token": "eyJ...",
"refresh_token": "eyJ...",
"user": {
"id": "uuid",
"email": "[email protected]",
"first_name": "Marie",
"last_name": "Tremblay",
"role": "educateur"
},
"garderie_name": "Garderie Les Étoiles"
}
Renouvellement du jeton
POST /auth/refresh
{ "refresh_token": "eyJ..." }
Retourne un nouvel access_token.
Déconnexion
POST /auth/logout
Révoque le jeton de rafraîchissement et efface le cookie d'appareil de confiance.
Réinitialisation du mot de passe
POST /auth/forgot-password
{ "email": "[email protected]" }
POST /auth/reset-password
{
"token": "token-de-reinitialisation-par-courriel",
"password": "nouveaumotdepasse"
}
Rôles des utilisateurs
| Rôle | Description |
|---|---|
admin_garderie |
Accès administrateur complet dans sa garderie |
educateur |
Peut gérer les journaux, médias, documents et la messagerie |
parent |
Accès en lecture seule aux données de ses enfants ; peut envoyer des messages au personnel |
Points de Terminaison
Authentification
| Méthode | Point de terminaison | Description |
|---|---|---|
POST |
/auth/login |
Étape 1 : courriel + mot de passe |
POST |
/auth/verify-2fa |
Étape 2 : vérifier le code à 6 chiffres |
POST |
/auth/refresh |
Renouveler le jeton d'accès |
POST |
/auth/logout |
Révoquer la session |
GET |
/auth/me |
Obtenir le profil utilisateur actuel |
POST |
/auth/change-password |
Changer son propre mot de passe |
POST |
/auth/update-email |
Changer son propre courriel |
POST |
/auth/invite |
Inviter un utilisateur par courriel (admin) |
GET |
/auth/invitations |
Lister les invitations en attente (admin) |
DELETE |
/auth/invitations/{id} |
Supprimer une invitation (admin) |
POST |
/auth/register |
S'inscrire depuis un jeton d'invitation |
POST |
/auth/forgot-password |
Demander un courriel de réinitialisation |
POST |
/auth/reset-password |
Réinitialiser le mot de passe avec un jeton |
Messages
| Méthode | Point de terminaison | Description |
|---|---|---|
GET |
/messages |
Lister les messages (paginés) |
POST |
/messages |
Envoyer un message |
POST |
/messages/send-to-parents |
Envoyer un message aux parents avec notification |
POST |
/messages/{id}/read |
Marquer un message comme lu |
GET |
/messages/conversations |
Lister tous les fils de conversation |
GET |
/messages/conversation/{user_id} |
Obtenir une conversation individuelle |
GET |
/messages/thread/broadcast |
Obtenir le fil de diffusion |
GET |
/messages/thread/group/{group_id} |
Obtenir le fil de groupe |
GET |
/messages/thread/individual/{parent_id} |
Obtenir le fil individuel |
Envoyer un message :
{
"content": "Bonjour à tous !",
"message_type": "broadcast"
}
Valeurs de message_type : broadcast, group, individual
Pour les messages de groupe, ajoutez "group_id": "uuid".
Pour les messages individuels, ajoutez "recipient_id": "uuid".
Enfants
| Méthode | Point de terminaison | Description |
|---|---|---|
GET |
/children |
Lister les enfants (les parents voient seulement les leurs) |
POST |
/children |
Créer un enfant (admin) |
PUT |
/children/{id} |
Mettre à jour un enfant (admin) |
DELETE |
/children/{id} |
Supprimer un enfant (admin) |
GET |
/children/{id}/parents |
Lister les parents liés d'un enfant |
POST |
/children/{id}/parents |
Lier un parent à un enfant |
DELETE |
/children/{id}/parents/{user_id} |
Délier un parent |
Groupes
| Méthode | Point de terminaison | Description |
|---|---|---|
GET |
/groups |
Lister tous les groupes |
POST |
/groups |
Créer un groupe (admin) |
PUT |
/groups/{id} |
Mettre à jour un groupe (admin) |
DELETE |
/groups/{id} |
Supprimer un groupe (admin) |
PUT |
/groups/{id}/children |
Définir les membres du groupe (admin) |
Journal Quotidien
| Méthode | Point de terminaison | Description |
|---|---|---|
GET |
/journals |
Obtenir les entrées d'une semaine (?child_id=&week_start=YYYY-MM-DD) |
PUT |
/journals |
Créer ou mettre à jour une entrée (personnel) |
POST |
/journals/send-all-to-parents |
Envoyer tous les journaux par courriel |
POST |
/journals/{child_id}/send-to-parents |
Envoyer le journal d'un enfant |
Champs d'entrée de journal :
| Champ | Type | Valeurs |
|---|---|---|
temperature |
enum | ensoleille, nuageux, pluie, neige, orageux |
menu |
string | Texte libre |
appetit |
enum | comme_habitude, peu, beaucoup, refuse |
humeur |
enum | tres_bien, bien, difficile, pleurs |
sommeil_minutes |
integer | Durée en minutes |
sante |
string | Texte libre |
medicaments |
string | Texte libre |
message_educatrice |
string | Texte libre |
observations |
string | Texte libre |
Médias
| Méthode | Point de terminaison | Description |
|---|---|---|
POST |
/media |
Téléverser une photo ou vidéo (multipart) |
GET |
/media |
Lister les médias |
PUT |
/media/{id} |
Mettre à jour légende/visibilité |
DELETE |
/media/{id} |
Supprimer un média |
POST |
/media/bulk |
Suppression ou réassignation en masse |
GET |
/media/files/{path} |
Servir un fichier média |
Valeurs de visibilité : public, group, child, private
Documents
| Méthode | Point de terminaison | Description |
|---|---|---|
POST |
/documents |
Téléverser un document (multipart) |
GET |
/documents |
Lister les documents |
PUT |
/documents/{id} |
Mettre à jour les métadonnées |
DELETE |
/documents/{id} |
Supprimer un document |
Valeurs de catégorie : formulaire, menu, politique, bulletin, autre
Utilisateurs (Admin seulement)
| Méthode | Point de terminaison | Description |
|---|---|---|
GET |
/users |
Lister tous les utilisateurs |
POST |
/users |
Créer un utilisateur directement |
PUT |
/users/{id} |
Mettre à jour le rôle ou le statut |
DELETE |
/users/{id} |
Désactiver ou supprimer un utilisateur |
POST |
/users/{id}/reset-password |
Réinitialiser le mot de passe d'un utilisateur |
Locataire
| Méthode | Point de terminaison | Description |
|---|---|---|
GET |
/tenant/info |
Obtenir le nom et l'URL du logo |
POST |
/tenant/logo |
Téléverser le logo de la garderie (admin) |
DELETE |
/tenant/logo |
Supprimer le logo de la garderie (admin) |
WebSocket
Les messages en temps réel sont livrés via WebSocket :
GET /ws?token=VOTRE_TOKEN_ACCES
Connectez-vous en utilisant votre jeton JWT d'accès comme paramètre de requête.
Limitation de Débit
| Action | Limite |
|---|---|
| Tentatives de connexion | 5 par 15 minutes par courriel |
| Vérification 2FA | 10 par 15 minutes par courriel |
| Mot de passe oublié | 3 par 30 minutes par courriel |
Gestion des Erreurs
Les erreurs suivent un format cohérent :
{
"error": "unauthorized",
"message": "Jeton invalide ou expiré",
"status": 401
}
Codes de statut courants :
| Code | Signification |
|---|---|
400 |
Mauvaise requête — vérifiez le corps de la requête |
401 |
Non autorisé — jeton manquant ou invalide |
403 |
Interdit — permissions insuffisantes |
404 |
Non trouvé |
429 |
Trop de requêtes — limité par le débit |
500 |
Erreur interne du serveur |