# Gestion des Utilisateurs

## Récupérer une liste paginée d'utilisateurs

> \### Récupérer une liste paginée d'utilisateurs\
> Ce point de terminaison permet à un administrateur de récupérer une liste paginée d'utilisateurs sous son compte. La réponse inclut des informations détaillées pour chaque utilisateur telles que les attributs personnels, les coordonnées et les métadonnées liées à leur compte.\
> \*\*Exemple d'utilisation :\*\*\
> Envoyez une requête \`GET\` à \`client-management/clients/\` avec le token API-KEY approprié dans l'en-tête d'autorisation.\
> \*\*Structure de la réponse :\*\*\
> \- \*\*users\*\* \*(tableau)\* : Une liste d'objets utilisateur, où chaque objet inclut les champs suivants :\
> &#x20; \- \*\*created\_at\*\* \*(string, date-time)\* : Horodatage de création de l'utilisateur.\
> &#x20; \- \*\*weight\*\* \*(nombre)\* : Poids de l'utilisateur.\
> &#x20; \- \*\*age\*\* \*(string)\* : Âge de l'utilisateur.\
> &#x20; \- \*\*ycom\*\* \*(nombre)\* : Valeur YCOM de l'utilisateur.\
> &#x20; \- \*\*height\*\* \*(nombre)\* : Taille de l'utilisateur.\
> &#x20; \- \*\*phone\*\* \*(string)\* : Numéro de téléphone de l'utilisateur.\
> &#x20; \- \*\*leg\_length\*\* \*(nombre)\* : Longueur de jambe de l'utilisateur.\
> &#x20; \- \*\*display\_name\*\* \*(string)\* : Nom d'affichage de l'utilisateur.\
> &#x20; \- \*\*shoeSize\*\* \*(string)\* : Pointure de l'utilisateur.\
> &#x20; \- \*\*email\*\* \*(string)\* : Adresse e-mail de l'utilisateur.\
> &#x20; \- \*\*gender\*\* \*(string)\* : Genre de l'utilisateur.\
> &#x20; \- \*\*brand\*\* \*(string)\* : Marque associée à l'utilisateur.\
> &#x20; \- \*\*shoeModel\*\* \*(string)\* : Modèle de chaussure de l'utilisateur.\
> &#x20; \- \*\*user\_uid\*\* \*(string)\* : Identifiant unique de l'utilisateur.\
> \
> \*\*Notes :\*\*\
> \- Un token API-KEY valide est requis pour accéder à ce point de terminaison.\
> \- S'il n'y a pas d'utilisateurs ou en cas d'erreur, un message d'erreur approprié est retourné.

```json
{"openapi":"3.1.1","info":{"title":"API WEB AIKYNETIX","version":"v2"},"servers":[{"url":"https://api.aikynetix.app"}],"security":[{"Bearer":[]},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","name":"Authorization","in":"header","description":"Entrez votre token Bearer (authentification Firebase) au format : Bearer <token>"},"ApiKeyAuth":{"type":"apiKey","name":"API-KEY","in":"header","description":"Entrez votre clé API dans l'en-tête : API-KEY: <api_key>"}}},"paths":{"/client-management/clients/":{"get":{"operationId":"client-management_clients_list","summary":"Récupérer une liste paginée d'utilisateurs","description":"### Récupérer une liste paginée d'utilisateurs\nCe point de terminaison permet à un administrateur de récupérer une liste paginée d'utilisateurs sous son compte. La réponse inclut des informations détaillées pour chaque utilisateur telles que les attributs personnels, les coordonnées et les métadonnées liées à leur compte.\n**Exemple d'utilisation :**\nEnvoyez une requête `GET` à `client-management/clients/` avec le token API-KEY approprié dans l'en-tête d'autorisation.\n**Structure de la réponse :**\n- **users** *(tableau)* : Une liste d'objets utilisateur, où chaque objet inclut les champs suivants :\n  - **created_at** *(string, date-time)* : Horodatage de création de l'utilisateur.\n  - **weight** *(nombre)* : Poids de l'utilisateur.\n  - **age** *(string)* : Âge de l'utilisateur.\n  - **ycom** *(nombre)* : Valeur YCOM de l'utilisateur.\n  - **height** *(nombre)* : Taille de l'utilisateur.\n  - **phone** *(string)* : Numéro de téléphone de l'utilisateur.\n  - **leg_length** *(nombre)* : Longueur de jambe de l'utilisateur.\n  - **display_name** *(string)* : Nom d'affichage de l'utilisateur.\n  - **shoeSize** *(string)* : Pointure de l'utilisateur.\n  - **email** *(string)* : Adresse e-mail de l'utilisateur.\n  - **gender** *(string)* : Genre de l'utilisateur.\n  - **brand** *(string)* : Marque associée à l'utilisateur.\n  - **shoeModel** *(string)* : Modèle de chaussure de l'utilisateur.\n  - **user_uid** *(string)* : Identifiant unique de l'utilisateur.\n\n**Notes :**\n- Un token API-KEY valide est requis pour accéder à ce point de terminaison.\n- S'il n'y a pas d'utilisateurs ou en cas d'erreur, un message d'erreur approprié est retourné.","responses":{"200":{"description":"Liste d'utilisateurs récupérée avec succès.","content":{"application/json":{"schema":{"required":["users"],"type":"object","properties":{"users":{"description":"Un tableau d'objets utilisateur.","type":"array","items":{"required":["created_at","weight","age","ycom","height","phone","leg_length","display_name","shoeSize","email","gender","brand","shoeModel","user_uid"],"type":"object","properties":{"created_at":{"description":"Horodatage de création de l'utilisateur.","type":"string","format":"date-time"},"weight":{"description":"Poids de l'utilisateur.","type":"number"},"age":{"description":"Âge de l'utilisateur.","type":"string"},"ycom":{"description":"Valeur YCOM de l'utilisateur.","type":"number"},"height":{"description":"Taille de l'utilisateur.","type":"number"},"phone":{"description":"Numéro de téléphone de l'utilisateur.","type":"string"},"leg_length":{"description":"Longueur de jambe de l'utilisateur.","type":"number"},"display_name":{"description":"Nom d'affichage de l'utilisateur.","type":"string"},"shoeSize":{"description":"Pointure de l'utilisateur.","type":"string"},"email":{"description":"Adresse e-mail de l'utilisateur.","type":"string","format":"email"},"gender":{"description":"Genre de l'utilisateur.","type":"string"},"brand":{"description":"Marque associée à l'utilisateur.","type":"string"},"shoeModel":{"description":"Modèle de chaussure de l'utilisateur.","type":"string"},"profile_photo":{"description":"URL publique de la photo de profil de l'utilisateur.","type":"string","format":"uri"},"user_uid":{"description":"Identifiant unique de l'utilisateur.","type":"string"}}}}}}}}},"400":{"description":"Requête incorrecte - Paramètres de requête invalides ou données requises manquantes.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur détaillé.","type":"string"}}}}}},"401":{"description":"Non autorisé - Token d'accès manquant ou invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur d'autorisation.","type":"string"}}}}}},"403":{"description":"Interdit - L'utilisateur n'a pas les permissions requises.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur d'interdiction.","type":"string"}}}}}},"404":{"description":"Non trouvé - Utilisateurs non trouvés ou échec de la récupération.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur lorsque aucun utilisateur n'est trouvé.","type":"string"}}}}}},"500":{"description":"Erreur interne du serveur - Une erreur inattendue s'est produite.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur détaillé.","type":"string"}}}}}}},"tags":["client-management"]}}}}
```

## Créer un nouvel utilisateur

> \### Créer un nouvel utilisateur\
> Ce point de terminaison permet à un administrateur authentifié de créer un nouvel utilisateur sous son compte. L'administrateur doit fournir l'e-mail et le nom d'affichage de l'utilisateur, et peut éventuellement inclure d'autres champs.\
> \*\*Exemple d'utilisation :\*\*\
> Envoyez une requête \`POST\` à \`/clients/\` avec une charge utile JSON contenant les champs requis. Un token API-KEY valide doit être inclus dans l'en-tête d'autorisation.\
> \### Paramètres de la requête\
> \- \*\*display\_name\*\* (string)\
> \- \*\*email\*\* (string, e-mail valide)\
> \- \*\*age\*\* (integer)\
> \- \*\*gender\*\* (male | female)\
> \- \*\*shoeSize\*\* (float)\
> \- \*\*weight\*\* (float)\
> \- \*\*height\*\* (float)\
> \*\*Structure de la réponse :\*\*\
> En cas de succès (HTTP 201), le point de terminaison retourne un objet JSON avec un champ \`userData\` contenant les clés et types de données suivants :\
> \- \*\*user\_uid\*\* \*(string)\* : Un identifiant unique pour le nouvel utilisateur.\
> \- \*\*display\_name\*\* (string)\
> \- \*\*email\*\* (string, e-mail valide)\
> \- \*\*age\*\* (integer)\
> \- \*\*gender\*\* (male | female)\
> \- \*\*shoeSize\*\* (float)\
> \- \*\*weight\*\* (float)\
> \- \*\*height\*\* (float)\
> \- \*\*profile\_photo\*\* \*(fichier, JPEG/PNG)\* - image optionnelle ; disponible uniquement avec \`multipart/form-data\`.\
> En cas d'erreur (par exemple, paramètres manquants, accès non autorisé ou erreur interne), un objet JSON avec un champ \`error\` (string) est retourné.

```json
{"openapi":"3.1.1","info":{"title":"API WEB AIKYNETIX","version":"v2"},"servers":[{"url":"https://api.aikynetix.app"}],"security":[{"Bearer":[]},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","name":"Authorization","in":"header","description":"Entrez votre token Bearer (authentification Firebase) au format : Bearer <token>"},"ApiKeyAuth":{"type":"apiKey","name":"API-KEY","in":"header","description":"Entrez votre clé API dans l'en-tête : API-KEY: <api_key>"}}},"paths":{"/client-management/clients/":{"post":{"operationId":"client-management_clients_create","summary":"Créer un nouvel utilisateur","description":"### Créer un nouvel utilisateur\nCe point de terminaison permet à un administrateur authentifié de créer un nouvel utilisateur sous son compte. L'administrateur doit fournir l'e-mail et le nom d'affichage de l'utilisateur, et peut éventuellement inclure d'autres champs.\n**Exemple d'utilisation :**\nEnvoyez une requête `POST` à `/clients/` avec une charge utile JSON contenant les champs requis. Un token API-KEY valide doit être inclus dans l'en-tête d'autorisation.\n### Paramètres de la requête\n- **display_name** (string)\n- **email** (string, e-mail valide)\n- **age** (integer)\n- **gender** (male | female)\n- **shoeSize** (float)\n- **weight** (float)\n- **height** (float)\n**Structure de la réponse :**\nEn cas de succès (HTTP 201), le point de terminaison retourne un objet JSON avec un champ `userData` contenant les clés et types de données suivants :\n- **user_uid** *(string)* : Un identifiant unique pour le nouvel utilisateur.\n- **display_name** (string)\n- **email** (string, e-mail valide)\n- **age** (integer)\n- **gender** (male | female)\n- **shoeSize** (float)\n- **weight** (float)\n- **height** (float)\n- **profile_photo** *(fichier, JPEG/PNG)* - image optionnelle ; disponible uniquement avec `multipart/form-data`.\nEn cas d'erreur (par exemple, paramètres manquants, accès non autorisé ou erreur interne), un objet JSON avec un champ `error` (string) est retourné.","responses":{"201":{"description":"Utilisateur créé avec succès.","content":{"application/json":{"schema":{"type":"object","properties":{"userData":{"required":["user_uid","email","display_name"],"type":"object","properties":{"user_uid":{"type":"string"},"display_name":{"type":"string"},"email":{"type":"string"},"age":{"type":"integer"},"gender":{"type":"string"},"shoeSize":{"type":"number","format":"float"},"weight":{"type":"number","format":"float"},"height":{"type":"number","format":"float"},"profile_photo":{"description":"URL publique de la photo de profil de l'utilisateur.","type":"string","format":"uri"},"preferable_activities":{"description":"Liste des activités préférées.","type":"array","items":{"type":"string"}}}}}}}}},"400":{"description":"Requête incorrecte - Paramètres manquants ou invalides.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur détaillé décrivant le problème.","type":"string"}}}}}},"401":{"description":"Non autorisé - Token d'accès manquant ou invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant que le token est manquant ou invalide.","type":"string"}}}}}},"403":{"description":"Interdit - L'utilisateur n'est pas autorisé à créer des utilisateurs.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant des privilèges insuffisants.","type":"string"}}}}}},"404":{"description":"Non trouvé - Limite de création d'utilisateurs atteinte pour le plan Pro.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Limite de création d'utilisateurs atteinte pour le plan Pro","type":"string"}}}}}},"500":{"description":"Erreur interne du serveur - Une erreur inattendue s'est produite.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur détaillé.","type":"string"}}}}}}},"tags":["client-management"],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"display_name":{"type":"string"},"email":{"type":"string"},"age":{"type":"integer"},"gender":{"type":"string"},"shoeSize":{"type":"number"},"weight":{"type":"number"},"height":{"type":"number"},"preferable_activities":{"type":"string","description":"Liste optionnelle encodée en JSON des types d'activités préférés. Valeurs autorisées : 'Running', 'Vertical Jump', 'Weightlifting', 'Mobility Assessment'.\nExemple : `[\"Running\", \"Weightlifting\"]`"},"profile_photo":{"type":"string","description":"Image JPEG/PNG optionnelle."}},"required":["display_name","email","age","gender","shoeSize","weight","height"]}}}}}}}}
```

## Mettre à jour les informations d'un utilisateur

> \### Mettre à jour les informations d'un utilisateur\
> Ce point de terminaison permet à un administrateur authentifié de mettre à jour \*\*certains champs\*\* d'un utilisateur existant, en utilisant \*\*des paramètres de requête\*\*.\
> \*\*Paramètre de requête requis\*\*\
> \- \*\*user\_uid\*\* \*(string)\* - l'UID de l'utilisateur à mettre à jour.\
> \*\*Paramètres de requête optionnels\*\* - fournissez un ou plusieurs des suivants :\
> \- \*\*display\_name\*\* \*(string)\* - nouveau nom d'affichage\
> \- \*\*email\*\* \*(string, e-mail valide)\* - nouvelle adresse e-mail\
> \- \*\*age\*\* \*(integer)\*\
> \- \*\*gender\*\* \*(string, l'un des \`male\`, \`female\`)\*\
> \- \*\*shoeSize\*\* \*(float)\*\
> \- \*\*weight\*\* \*(float)\*\
> \- \*\*height\*\* \*(float)\*\
> \*\*Réponse (HTTP 200)\*\*\
> \`\`\`json { "message": "Informations utilisateur mises à jour avec succès." } \`\`\`\
> Si la validation échoue ou si l'utilisateur n'est pas trouvé, la réponse contient un champ \*\*error\*\* avec des détails.

````json
{"openapi":"3.1.1","info":{"title":"API WEB AIKYNETIX","version":"v2"},"servers":[{"url":"https://api.aikynetix.app"}],"security":[{"Bearer":[]},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","name":"Authorization","in":"header","description":"Entrez votre token Bearer (authentification Firebase) au format : Bearer <token>"},"ApiKeyAuth":{"type":"apiKey","name":"API-KEY","in":"header","description":"Entrez votre clé API dans l'en-tête : API-KEY: <api_key>"}}},"paths":{"/client-management/clients/":{"put":{"operationId":"client-management_clients_update","summary":"Mettre à jour les informations d'un utilisateur","description":"### Mettre à jour les informations d'un utilisateur\nCe point de terminaison permet à un administrateur authentifié de mettre à jour **certains champs** d'un utilisateur existant, en utilisant **des paramètres de requête**.\n**Paramètre de requête requis**\n- **user_uid** *(string)* - l'UID de l'utilisateur à mettre à jour.\n**Paramètres de requête optionnels** - fournissez un ou plusieurs des suivants :\n- **display_name** *(string)* - nouveau nom d'affichage\n- **email** *(string, e-mail valide)* - nouvelle adresse e-mail\n- **age** *(integer)*\n- **gender** *(string, l'un des `male`, `female`)*\n- **shoeSize** *(float)*\n- **weight** *(float)*\n- **height** *(float)*\n**Réponse (HTTP 200)**\n```json { \"message\": \"Informations utilisateur mises à jour avec succès.\" } ```\nSi la validation échoue ou si l'utilisateur n'est pas trouvé, la réponse contient un champ **error** avec des détails.","responses":{"200":{"description":"Informations utilisateur mises à jour avec succès.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"Message de confirmation indiquant la mise à jour réussie.","type":"string"}}}}}},"400":{"description":"Requête incorrecte - Champs requis manquants ou données invalides.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur détaillé décrivant ce qui n'a pas fonctionné.","type":"string"}}}}}},"401":{"description":"Non autorisé - Token d'accès manquant ou invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant que le token est manquant ou invalide.","type":"string"}}}}}},"403":{"description":"Interdit - L'utilisateur n'est pas autorisé à mettre à jour les informations utilisateur.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant des privilèges insuffisants.","type":"string"}}}}}},"500":{"description":"Erreur interne du serveur - Une erreur inattendue s'est produite.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur détaillé.","type":"string"}}}}}}},"tags":["client-management"],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"user_uid":{"type":"string"},"display_name":{"type":"string"},"email":{"type":"string"},"age":{"type":"integer"},"gender":{"type":"string"},"shoeSize":{"type":"number"},"weight":{"type":"number"},"height":{"type":"number"},"preferable_activities":{"type":"string","description":"Liste optionnelle encodée en JSON des types d'activités préférés. Valeurs autorisées : 'Running', 'Vertical Jump', 'Weightlifting', 'Mobility Assessment'.\nExemple : `[\"Running\", \"Weightlifting\"]`"},"profile_photo":{"type":"string","description":"Image JPEG/PNG optionnelle."}},"required":["user_uid"]}}}}}}}}
````

## Supprimer un utilisateur

> \### Supprimer un utilisateur\
> Ce point de terminaison permet à un administrateur authentifié de supprimer un utilisateur de son compte. L'administrateur doit fournir l'identifiant unique de l'utilisateur à supprimer dans le corps de la requête.\
> \*\*Corps de la requête :\*\*\
> \- \*\*user\_uid\*\* \*(string, requis)\* : L'identifiant unique de l'utilisateur à supprimer.\
> \*\*Structure de la réponse :\*\*\
> En cas de succès (HTTP 200), le point de terminaison retourne un objet JSON avec un champ \*\*message\*\* de type string confirmant la suppression. En cas d'erreur (par exemple, si l'UID utilisateur est manquant, l'utilisateur n'est pas trouvé ou une erreur interne se produit), un objet JSON avec un champ \*\*error\*\* (string) est retourné.

```json
{"openapi":"3.1.1","info":{"title":"API WEB AIKYNETIX","version":"v2"},"servers":[{"url":"https://api.aikynetix.app"}],"security":[{"Bearer":[]},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","name":"Authorization","in":"header","description":"Entrez votre token Bearer (authentification Firebase) au format : Bearer <token>"},"ApiKeyAuth":{"type":"apiKey","name":"API-KEY","in":"header","description":"Entrez votre clé API dans l'en-tête : API-KEY: <api_key>"}}},"paths":{"/client-management/clients/":{"delete":{"operationId":"client-management_clients_delete","summary":"Supprimer un utilisateur","description":"### Supprimer un utilisateur\nCe point de terminaison permet à un administrateur authentifié de supprimer un utilisateur de son compte. L'administrateur doit fournir l'identifiant unique de l'utilisateur à supprimer dans le corps de la requête.\n**Corps de la requête :**\n- **user_uid** *(string, requis)* : L'identifiant unique de l'utilisateur à supprimer.\n**Structure de la réponse :**\nEn cas de succès (HTTP 200), le point de terminaison retourne un objet JSON avec un champ **message** de type string confirmant la suppression. En cas d'erreur (par exemple, si l'UID utilisateur est manquant, l'utilisateur n'est pas trouvé ou une erreur interne se produit), un objet JSON avec un champ **error** (string) est retourné.","parameters":[{"schema":{"type":"string"},"name":"user_uid","in":"query","description":"UID de l'utilisateur à supprimer","required":true}],"responses":{"200":{"description":"Utilisateur supprimé avec succès.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"description":"Message de confirmation indiquant que l'utilisateur a été supprimé.","type":"string"}}}}}},"400":{"description":"Requête incorrecte - UID utilisateur requis manquant.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur détaillé indiquant que l'UID utilisateur est manquant.","type":"string"}}}}}},"401":{"description":"Non autorisé - Token d'accès manquant ou invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant que le token est manquant ou invalide.","type":"string"}}}}}},"403":{"description":"Interdit - L'utilisateur n'est pas autorisé à supprimer des utilisateurs.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant des privilèges insuffisants.","type":"string"}}}}}},"404":{"description":"Non trouvé - Utilisateur non trouvé ou non sous l'administrateur.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant que l'utilisateur n'est pas trouvé sous le compte de l'administrateur.","type":"string"}}}}}},"500":{"description":"Erreur interne du serveur - Une erreur inattendue s'est produite.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur détaillé.","type":"string"}}}}}}},"tags":["client-management"]}}}}
```

## Définir / remplacer une note pour un client

> Stocke \*\*une\*\* note par client. Si \*note\* est omise ou vide, la note précédente est effacée (enregistrée comme \`null\`).\
> Structure du document :\
> \`\`\`json "notes": {\
> &#x20; "text": "Tension aux ischio-jambiers - réduire le travail de vitesse pendant 2 semaines",  // ou null\
> &#x20; "updated\_at": "2025-07-14T09:32:11.123Z"\
> } \`\`\`

````json
{"openapi":"3.1.1","info":{"title":"API WEB AIKYNETIX","version":"v2"},"servers":[{"url":"https://api.aikynetix.app"}],"security":[{"Bearer":[]},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","name":"Authorization","in":"header","description":"Entrez votre token Bearer (authentification Firebase) au format : Bearer <token>"},"ApiKeyAuth":{"type":"apiKey","name":"API-KEY","in":"header","description":"Entrez votre clé API dans l'en-tête : API-KEY: <api_key>"}}},"paths":{"/client-management/clients/save-notes/{user_uid}":{"post":{"operationId":"client-management_clients_save-notes_create","summary":"Définir / remplacer une note pour un client","description":"Stocke **une** note par client. Si *note* est omise ou vide, la note précédente est effacée (enregistrée comme `null`).\nStructure du document :\n```json \"notes\": {\n  \"text\": \"Tension aux ischio-jambiers - réduire le travail de vitesse pendant 2 semaines\",  // ou null\n  \"updated_at\": \"2025-07-14T09:32:11.123Z\"\n} ```","parameters":[{"schema":{"type":"string"},"name":"user_uid","in":"path","description":"L'identifiant unique de l'utilisateur.","required":true}],"responses":{"200":{"description":"Note enregistrée / remplacée avec succès.","content":{"application/json":{"schema":{"required":["message"],"type":"object","properties":{"message":{"type":"string"}}}}}},"400":{"description":"Requête incorrecte - L'UID utilisateur est manquant ou invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur décrivant le problème.","type":"string"}}}}}},"401":{"description":"Non autorisé - Token manquant ou invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant que l'authentification a échoué.","type":"string"}}}}}},"403":{"description":"Interdit - Le demandeur n'a pas les privilèges d'administrateur.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant des privilèges insuffisants.","type":"string"}}}}}},"404":{"description":"Non trouvé - L'utilisateur n'est pas trouvé ou n'est pas sous l'administrateur.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant que l'utilisateur n'a pas été trouvé.","type":"string"}}}}}},"500":{"description":"Erreur interne du serveur - Une erreur inattendue s'est produite.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur détaillé.","type":"string"}}}}}}},"tags":["client-management"],"requestBody":{"content":{"application/json":{"schema":{"required":["note"],"type":"object","properties":{"note":{"description":"Texte de note libre (≤ 100 kB). Si omis ou vide, la note est effacée.","type":"string"}}}}},"required":true}}}}}
````

## Filtrer et paginer les utilisateurs

> \### Filtrer et paginer les utilisateurs\
> Ce point de terminaison permet à un administrateur authentifié de filtrer et paginer les utilisateurs sous son compte. Vous pouvez éventuellement spécifier des paramètres de requête pour contrôler la pagination :\
> \- \*\*start\_after\_id\*\* \*(string, optionnel)\* : L'UID après lequel commencer à récupérer les utilisateurs (pour la pagination avant).\
> \- \*\*limit\*\* \*(integer, optionnel)\* : Le nombre maximum d'utilisateurs à récupérer. Par défaut 5 si non fourni.\
> Vous pouvez également filtrer les utilisateurs en fonction de divers critères :\
> \- \*\*admin\_uid\*\* \*(string, optionnel)\* : L'UID de l'administrateur pour filtrer les utilisateurs.\
> \- \*\*start\_date\*\* \*(string, optionnel)\* : Borne inférieure (inclusive) pour la dernière session de l'utilisateur au format \`YYYY-MM-DD\`.\
> \- \*\*end\_date\*\* \*(string, optionnel)\* : Borne supérieure (inclusive) pour la dernière session de l'utilisateur au format \`YYYY-MM-DD\`.\
> \- \*\*gender\*\* \*(string, optionnel)\* : Filtrer par genre (\`male\` ou \`female\`).\
> \- \*\*preferable\_activities\*\* \*(tableau, optionnel)\* : Filtrer par activités préférées de l'utilisateur.\
> \*\*Structure de la réponse (HTTP 200) :\*\*\
> La réponse retourne un objet JSON avec les champs suivants :\
> \- \*\*query\_count\*\* \*(integer)\* : Nombre total d'utilisateurs sous l'administrateur.\
> \- \*\*users\*\* \*(tableau)\* : Un tableau d'objets utilisateur. Chaque objet utilisateur contient :\
> &#x20; \- \*\*created\_at\*\* \*(string, date-time)\* : Horodatage de création de l'utilisateur.\
> &#x20; \- \*\*weight\*\* \*(nombre)\* : Poids de l'utilisateur.\
> &#x20; \- \*\*age\*\* \*(string)\* : Âge de l'utilisateur.\
> &#x20; \- \*\*ycom\*\* \*(nombre)\* : Valeur YCOM de l'utilisateur.\
> &#x20; \- \*\*height\*\* \*(nombre)\* : Taille de l'utilisateur.\
> &#x20; \- \*\*phone\*\* \*(string)\* : Numéro de téléphone de l'utilisateur.\
> &#x20; \- \*\*leg\_length\*\* \*(nombre)\* : Longueur de jambe de l'utilisateur.\
> &#x20; \- \*\*display\_name\*\* \*(string)\* : Nom d'affichage de l'utilisateur.\
> &#x20; \- \*\*shoeSize\*\* \*(string)\* : Pointure de l'utilisateur.\
> &#x20; \- \*\*email\*\* \*(string)\* : Adresse e-mail de l'utilisateur.\
> &#x20; \- \*\*gender\*\* \*(string)\* : Genre de l'utilisateur.\
> &#x20; \- \*\*brand\*\* \*(string)\* : Marque associée à l'utilisateur.\
> &#x20; \- \*\*shoeModel\*\* \*(string)\* : Modèle de chaussure de l'utilisateur.\
> &#x20; \- \*\*user\_uid\*\* \*(string)\* : Identifiant unique de l'utilisateur.\
> \
> \- \*\*first\_uid\*\* \*(string)\* : L'UID du premier utilisateur dans la page actuelle.\
> \- \*\*last\_uid\*\* \*(string)\* : L'UID du dernier utilisateur dans la page actuelle.\
> \*\*Notes :\*\*\
> \- Un token API-KEY valide est requis.\
> \- Si aucun utilisateur n'est trouvé, un message d'erreur est retourné avec le code d'état 404.

```json
{"openapi":"3.1.1","info":{"title":"API WEB AIKYNETIX","version":"v2"},"servers":[{"url":"https://api.aikynetix.app"}],"security":[{"Bearer":[]},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","name":"Authorization","in":"header","description":"Entrez votre token Bearer (authentification Firebase) au format : Bearer <token>"},"ApiKeyAuth":{"type":"apiKey","name":"API-KEY","in":"header","description":"Entrez votre clé API dans l'en-tête : API-KEY: <api_key>"}}},"paths":{"/client-management/clients/filter/":{"get":{"operationId":"client-management_clients_filter_list","summary":"Filtrer et paginer les utilisateurs","description":"### Filtrer et paginer les utilisateurs\nCe point de terminaison permet à un administrateur authentifié de filtrer et paginer les utilisateurs sous son compte. Vous pouvez éventuellement spécifier des paramètres de requête pour contrôler la pagination :\n- **start_after_id** *(string, optionnel)* : L'UID après lequel commencer à récupérer les utilisateurs (pour la pagination avant).\n- **limit** *(integer, optionnel)* : Le nombre maximum d'utilisateurs à récupérer. Par défaut 5 si non fourni.\nVous pouvez également filtrer les utilisateurs en fonction de divers critères :\n- **admin_uid** *(string, optionnel)* : L'UID de l'administrateur pour filtrer les utilisateurs.\n- **start_date** *(string, optionnel)* : Borne inférieure (inclusive) pour la dernière session de l'utilisateur au format `YYYY-MM-DD`.\n- **end_date** *(string, optionnel)* : Borne supérieure (inclusive) pour la dernière session de l'utilisateur au format `YYYY-MM-DD`.\n- **gender** *(string, optionnel)* : Filtrer par genre (`male` ou `female`).\n- **preferable_activities** *(tableau, optionnel)* : Filtrer par activités préférées de l'utilisateur.\n**Structure de la réponse (HTTP 200) :**\nLa réponse retourne un objet JSON avec les champs suivants :\n- **query_count** *(integer)* : Nombre total d'utilisateurs sous l'administrateur.\n- **users** *(tableau)* : Un tableau d'objets utilisateur. Chaque objet utilisateur contient :\n  - **created_at** *(string, date-time)* : Horodatage de création de l'utilisateur.\n  - **weight** *(nombre)* : Poids de l'utilisateur.\n  - **age** *(string)* : Âge de l'utilisateur.\n  - **ycom** *(nombre)* : Valeur YCOM de l'utilisateur.\n  - **height** *(nombre)* : Taille de l'utilisateur.\n  - **phone** *(string)* : Numéro de téléphone de l'utilisateur.\n  - **leg_length** *(nombre)* : Longueur de jambe de l'utilisateur.\n  - **display_name** *(string)* : Nom d'affichage de l'utilisateur.\n  - **shoeSize** *(string)* : Pointure de l'utilisateur.\n  - **email** *(string)* : Adresse e-mail de l'utilisateur.\n  - **gender** *(string)* : Genre de l'utilisateur.\n  - **brand** *(string)* : Marque associée à l'utilisateur.\n  - **shoeModel** *(string)* : Modèle de chaussure de l'utilisateur.\n  - **user_uid** *(string)* : Identifiant unique de l'utilisateur.\n\n- **first_uid** *(string)* : L'UID du premier utilisateur dans la page actuelle.\n- **last_uid** *(string)* : L'UID du dernier utilisateur dans la page actuelle.\n**Notes :**\n- Un token API-KEY valide est requis.\n- Si aucun utilisateur n'est trouvé, un message d'erreur est retourné avec le code d'état 404.","parameters":[{"schema":{"type":"string"},"name":"admin_uid","in":"query","description":"UID de l'administrateur (qui a créé l'utilisateur) pour filtrer les utilisateurs.","required":false},{"schema":{"type":"string"},"name":"start_date","in":"query","description":"Borne inférieure (inclusive) pour *last_session* au format `YYYY-MM-DD`.","required":false},{"schema":{"type":"string"},"name":"end_date","in":"query","description":"Borne supérieure (inclusive) pour *last_session* au format `YYYY-MM-DD`.","required":false},{"schema":{"type":"string","enum":["male","female"]},"name":"gender","in":"query","description":"Filtrer par genre (`male` ou `female`).","required":false},{"schema":{"type":"string"},"name":"preferable_activities","in":"query","description":"Tableau JSON des activités préférées.","required":false},{"schema":{"type":"string"},"name":"start_after_id","in":"query","required":false},{"schema":{"type":"integer"},"name":"limit","in":"query","required":false}],"responses":{"200":{"description":"Liste filtrée d'utilisateurs récupérée avec succès.","content":{"application/json":{"schema":{"required":["query_count","users","first_uid","last_uid"],"type":"object","properties":{"query_count":{"description":"Nombre total d'utilisateurs sous l'administrateur.","type":"integer"},"users":{"description":"Un tableau d'objets utilisateur.","type":"array","items":{"required":["created_at","weight","age","ycom","height","phone","leg_length","display_name","shoeSize","email","gender","brand","shoeModel","user_uid"],"type":"object","properties":{"created_at":{"description":"Horodatage de création de l'utilisateur.","type":"string","format":"date-time"},"weight":{"description":"Poids de l'utilisateur.","type":"number"},"age":{"description":"Âge de l'utilisateur.","type":"string"},"ycom":{"description":"Valeur YCOM de l'utilisateur.","type":"number"},"height":{"description":"Taille de l'utilisateur.","type":"number"},"phone":{"description":"Numéro de téléphone de l'utilisateur.","type":"string"},"leg_length":{"description":"Longueur de jambe de l'utilisateur.","type":"number"},"display_name":{"description":"Nom d'affichage de l'utilisateur.","type":"string"},"shoeSize":{"description":"Pointure de l'utilisateur.","type":"string"},"email":{"description":"Adresse e-mail de l'utilisateur.","type":"string","format":"email"},"gender":{"description":"Genre de l'utilisateur.","type":"string"},"brand":{"description":"Marque associée à l'utilisateur.","type":"string"},"shoeModel":{"description":"Modèle de chaussure de l'utilisateur.","type":"string"},"profile_photo":{"description":"URL publique de la photo de profil de l'utilisateur.","type":"string","format":"uri"},"user_uid":{"description":"Identifiant unique de l'utilisateur.","type":"string"}}}},"first_uid":{"description":"UID du premier utilisateur dans la page actuelle.","type":"string"},"last_uid":{"description":"UID du dernier utilisateur dans la page actuelle.","type":"string"}}}}}},"401":{"description":"Non autorisé - Token d'accès manquant ou invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur d'authentification.","type":"string"}}}}}},"403":{"description":"Interdit - Le demandeur n'a pas les privilèges d'administrateur.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant des privilèges insuffisants.","type":"string"}}}}}},"404":{"description":"Non trouvé - Aucun utilisateur trouvé sous l'administrateur ou une erreur s'est produite lors de la récupération.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant le problème.","type":"string"}}}}}},"500":{"description":"Erreur interne du serveur - Une erreur inattendue s'est produite lors de la récupération.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur détaillé.","type":"string"}}}}}}},"tags":["client-management"]}}}}
```

## Récupérer les détails d'un utilisateur spécifique

> \### Récupérer les détails d'un utilisateur\
> Ce point de terminaison permet à un administrateur authentifié de récupérer des informations détaillées pour un utilisateur spécifique sous son compte. L'utilisateur est identifié par l'identifiant unique \`user\_uid\` fourni dans l'URL.\
> \*\*Paramètre de chemin :\*\*\
> \- \*\*user\_uid\*\* \*(string, requis)\* : L'identifiant unique de l'utilisateur.\
> \*\*Structure de la réponse (HTTP 200) :\*\*\
> Retourne un objet JSON avec les champs et types de données suivants :\
> \- \*\*created\_at\*\* \*(string, date-time)\* : Horodatage de création de l'utilisateur. - \*\*weight\*\* \*(nombre)\* : Poids de l'utilisateur. - \*\*age\*\* \*(string)\* : Âge de l'utilisateur. - \*\*ycom\*\* \*(nombre)\* : Valeur YCOM de l'utilisateur. - \*\*height\*\* \*(nombre)\* : Taille de l'utilisateur. - \*\*phone\*\* \*(string)\* : Numéro de téléphone de l'utilisateur. - \*\*leg\_length\*\* \*(nombre)\* : Longueur de jambe de l'utilisateur. - \*\*display\_name\*\* \*(string)\* : Nom d'affichage de l'utilisateur. - \*\*shoeSize\*\* \*(string)\* : Pointure de l'utilisateur. - \*\*email\*\* \*(string)\* : Adresse e-mail de l'utilisateur. - \*\*gender\*\* \*(string)\* : Genre de l'utilisateur. - \*\*brand\*\* \*(string)\* : Marque associée à l'utilisateur. - \*\*shoeModel\*\* \*(string)\* : Modèle de chaussure de l'utilisateur. - \*\*user\_uid\*\* \*(string)\* : Identifiant unique de l'utilisateur.\
> \*\*Exemple de réponse réussie :\*\*\
> \`\`\`json {\
> &#x20; "created\_at": "2024-12-02T19:17:30.371Z",\
> &#x20; "weight": 79,\
> &#x20; "age": "30",\
> &#x20; "ycom": 1.1,\
> &#x20; "height": 177,\
> &#x20; "phone": "92039023232",\
> &#x20; "leg\_length": 0.9,\
> &#x20; "display\_name": "User1",\
> &#x20; "shoeSize": "8",\
> &#x20; "email": "<user1@gmail.com>",\
> &#x20; "gender": "Male",\
> &#x20; "brand": "Nike",\
> &#x20; "shoeModel": "Peak-smart",\
> &#x20; "user\_uid": "hoEwsdv2fsFs2fav"\
> } \`\`\`\
> \*\*Notes :\*\*\
> \- Un token API-KEY valide avec des privilèges d'administrateur est requis.\
> \- Si l'utilisateur spécifié n'existe pas ou n'est pas sous l'administrateur, une erreur 404 est retournée.

````json
{"openapi":"3.1.1","info":{"title":"API WEB AIKYNETIX","version":"v2"},"servers":[{"url":"https://api.aikynetix.app"}],"security":[{"Bearer":[]},{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"Bearer":{"type":"apiKey","name":"Authorization","in":"header","description":"Entrez votre token Bearer (authentification Firebase) au format : Bearer <token>"},"ApiKeyAuth":{"type":"apiKey","name":"API-KEY","in":"header","description":"Entrez votre clé API dans l'en-tête : API-KEY: <api_key>"}}},"paths":{"/client-management/clients/{user_uid}":{"get":{"operationId":"client-management_clients_read","summary":"Récupérer les détails d'un utilisateur spécifique","description":"### Récupérer les détails d'un utilisateur\nCe point de terminaison permet à un administrateur authentifié de récupérer des informations détaillées pour un utilisateur spécifique sous son compte. L'utilisateur est identifié par l'identifiant unique `user_uid` fourni dans l'URL.\n**Paramètre de chemin :**\n- **user_uid** *(string, requis)* : L'identifiant unique de l'utilisateur.\n**Structure de la réponse (HTTP 200) :**\nRetourne un objet JSON avec les champs et types de données suivants :\n- **created_at** *(string, date-time)* : Horodatage de création de l'utilisateur. - **weight** *(nombre)* : Poids de l'utilisateur. - **age** *(string)* : Âge de l'utilisateur. - **ycom** *(nombre)* : Valeur YCOM de l'utilisateur. - **height** *(nombre)* : Taille de l'utilisateur. - **phone** *(string)* : Numéro de téléphone de l'utilisateur. - **leg_length** *(nombre)* : Longueur de jambe de l'utilisateur. - **display_name** *(string)* : Nom d'affichage de l'utilisateur. - **shoeSize** *(string)* : Pointure de l'utilisateur. - **email** *(string)* : Adresse e-mail de l'utilisateur. - **gender** *(string)* : Genre de l'utilisateur. - **brand** *(string)* : Marque associée à l'utilisateur. - **shoeModel** *(string)* : Modèle de chaussure de l'utilisateur. - **user_uid** *(string)* : Identifiant unique de l'utilisateur.\n**Exemple de réponse réussie :**\n```json {\n  \"created_at\": \"2024-12-02T19:17:30.371Z\",\n  \"weight\": 79,\n  \"age\": \"30\",\n  \"ycom\": 1.1,\n  \"height\": 177,\n  \"phone\": \"92039023232\",\n  \"leg_length\": 0.9,\n  \"display_name\": \"User1\",\n  \"shoeSize\": \"8\",\n  \"email\": \"user1@gmail.com\",\n  \"gender\": \"Male\",\n  \"brand\": \"Nike\",\n  \"shoeModel\": \"Peak-smart\",\n  \"user_uid\": \"hoEwsdv2fsFs2fav\"\n} ```\n**Notes :**\n- Un token API-KEY valide avec des privilèges d'administrateur est requis.\n- Si l'utilisateur spécifié n'existe pas ou n'est pas sous l'administrateur, une erreur 404 est retournée.","parameters":[{"schema":{"type":"string"},"name":"user_uid","in":"path","description":"L'identifiant unique de l'utilisateur.","required":true}],"responses":{"200":{"description":"Détails de l'utilisateur récupérés avec succès.","content":{"application/json":{"schema":{"required":["created_at","weight","age","ycom","height","phone","leg_length","display_name","shoeSize","email","gender","brand","shoeModel","user_uid"],"type":"object","properties":{"created_at":{"description":"Horodatage de création de l'utilisateur.","type":"string","format":"date-time"},"weight":{"description":"Poids de l'utilisateur.","type":"number"},"age":{"description":"Âge de l'utilisateur.","type":"string"},"ycom":{"description":"Valeur YCOM de l'utilisateur.","type":"number"},"height":{"description":"Taille de l'utilisateur.","type":"number"},"phone":{"description":"Numéro de téléphone de l'utilisateur.","type":"string"},"leg_length":{"description":"Longueur de jambe de l'utilisateur.","type":"number"},"display_name":{"description":"Nom d'affichage de l'utilisateur.","type":"string"},"shoeSize":{"description":"Pointure de l'utilisateur.","type":"string"},"email":{"description":"Adresse e-mail de l'utilisateur.","type":"string","format":"email"},"gender":{"description":"Genre de l'utilisateur.","type":"string"},"brand":{"description":"Marque associée à l'utilisateur.","type":"string"},"shoeModel":{"description":"Modèle de chaussure de l'utilisateur.","type":"string"},"profile_photo":{"description":"URL publique de la photo de profil.","type":"string","format":"uri"},"user_uid":{"description":"Identifiant unique de l'utilisateur.","type":"string"}}}}}},"400":{"description":"Requête incorrecte - L'UID utilisateur est manquant ou invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur décrivant le problème.","type":"string"}}}}}},"401":{"description":"Non autorisé - Token manquant ou invalide.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant que l'authentification a échoué.","type":"string"}}}}}},"403":{"description":"Interdit - Le demandeur n'a pas les privilèges d'administrateur.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant des privilèges insuffisants.","type":"string"}}}}}},"404":{"description":"Non trouvé - L'utilisateur n'est pas trouvé ou n'est pas sous l'administrateur.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur indiquant que l'utilisateur n'a pas été trouvé.","type":"string"}}}}}},"500":{"description":"Erreur interne du serveur - Une erreur inattendue s'est produite.","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"description":"Message d'erreur détaillé.","type":"string"}}}}}}},"tags":["client-management"]}}}}
````


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.aikynetix.app/fr/api-documentation/developer-resources-and-api-reference/api-reference/client-management.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
