Aller au contenu

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": "utilisateur@exemple.com",
  "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": "utilisateur@exemple.com",
  "code": "123456"
}

Réponse :

{
  "access_token": "eyJ...",
  "refresh_token": "eyJ...",
  "user": {
    "id": "uuid",
    "email": "utilisateur@exemple.com",
    "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": "utilisateur@exemple.com" }

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