Utilisateurs¶
- GET /api/users¶
Obtenir tous les utilisateurs (quel que soit le statut de leur compte), si l’utilisateur authentifié a des droits d’administration le courriel est renvoyé.
Ne renvoie les préférences de l’utilisateur que pour l’utilisateur authentifié.
Scope :
users:read
Exemple de requête :
sans paramètres :
GET /api/users HTTP/1.1 Content-Type: application/json
avec quelques paramètres de requête :
GET /api/users?order_by=workouts_count&par_page=5 HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "users": [ { "admin": true, "bio": null, "birth_date": null, "created_at": "Sun, 14 Jul 2019 14:09:58 GMT", "email": "admin@example.com", "first_name": null, "followers": 0, "following": 0, "follows": "false", "is_followed_by": "false", "last_name": null, "location": null, "map_visibility": "private", "nb_sports": 3, "nb_workouts": 6, "picture": false, "records": [ { "id": 9, "record_type": "AS", "sport_id": 1, "user": "admin", "value": 18, "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" }, { "id": 10, "record_type": "FD", "sport_id": 1, "user": "admin", "value": 18, "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" }, { "id": 13, "record_type": "HA", "sport_id": 1, "user": "Sam", "value": 43.97, "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" }, { "id": 11, "record_type": "LD", "sport_id": 1, "user": "admin", "value": "1:01:00", "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" }, { "id": 12, "record_type": "MS", "sport_id": 1, "user": "admin", "value": 18, "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" } ], "sports_list": [ 1, 4, 6 ], "total_distance": 67.895, "total_duration": "6:50:27", "username": "admin", "workouts_visibility": "private" }, { "admin": false, "bio": null, "birth_date": null, "created_at": "Sat, 20 Jul 2019 11:27:03 GMT", "email": "sam@example.com", "first_name": null, "followers": 0, "following": 0, "follows": "false", "is_followed_by": "false", "last_name": null, "location": null, "map_visibility": "private", "nb_sports": 0, "nb_workouts": 0, "picture": false, "records": [], "sports_list": [], "total_distance": 0, "total_duration": "0:00:00", "username": "sam", "workouts_visibility": "private" } ] }, "status": "success" }
- Paramètres de requête:
page (integer) – page si pagination (par défaut : 1)
per_page (integer) – nombre d’utilisateurs par page (par défaut : 10, max : 50)
q (string) – requête sur le nom de l’utilisateur
order (string) – ordre de tri :
asc
,desc
(par défaut :asc
)order_by (string) – critères de tri :
username
,created_at
,workouts_count
,role
,is_active
(par défaut :username
)with_following (boolean) – renvoie les utilisateurs dont le profil est masqué si
true
with_hidden_users (boolean) – renvoie les utilisateurs dont le profil est masqué si
true
(seulement si l’utilisateur a les droits d’administration - pour l’administration des utilisateurswith_inactive (boolean) – renvoie les utilisateurs inactifs si
true
(seulement si l’utilisateur a les droits d’administration - pour l’administration des utilisateurswith_suspended (boolean) – renvoie les utilisateurs suspendus si
true
(seulement si l’utilisateur a les droits d’administration - pour l’administration des utilisateurs
- En-têtes de requête:
Authorization – Jeton “OAuth 2.0 Bearer”
- Codes d’état:
200 OK –
success
provide a valid auth token
signature expired, please log in again
invalid token, please log in again
you do not have permissions, your account is suspended
- GET /api/users/(user_name)¶
Obtenir les informations de l’utilisateur. Si l’utilisateur est authentifié, ce point d’entrée renvoie les relations. Si l’utilisateur a des droits d’administrations, l’email est renvoyé.
Ne renvoie les préférences de l’utilisateur que pour l’utilisateur authentifié.
Scope :
users:read
pour le client OAuth 2.0Exemple de requête :
GET /api/users/admin HTTP/1.1 Content-Type: application/json
Exemple de réponse :
quand l’utilisateur est authentifié
HTTP/1.1 200 OK Content-Type: application/json { "data": [ { "admin": true, "bio": null, "birth_date": null, "created_at": "Sun, 14 Jul 2019 14:09:58 GMT", "email": "admin@example.com", "first_name": null, "followers": 0, "following": 0, "follows": "false", "is_followed_by": "false", "last_name": null, "location": null, "map_visibility": "private", "nb_sports": 3, "nb_workouts": 6, "picture": false, "records": [ { "id": 9, "record_type": "AS", "sport_id": 1, "user": "admin", "value": 18, "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" }, { "id": 10, "record_type": "FD", "sport_id": 1, "user": "admin", "value": 18, "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" }, { "id": 13, "record_type": "HA", "sport_id": 1, "user": "Sam", "value": 43.97, "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" }, { "id": 11, "record_type": "LD", "sport_id": 1, "user": "admin", "value": "1:01:00", "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" }, { "id": 12, "record_type": "MS", "sport_id": 1, "user": "admin", "value": 18, "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" } ], "sports_list": [ 1, 4, 6 ], "total_distance": 67.895, "total_duration": "6:50:27", "username": "admin", "workouts_visibility": "private" } ], "status": "success" }
sans authentification
HTTP/1.1 200 OK Content-Type: application/json { "data": [ { "admin": true, "bio": null, "birth_date": null, "created_at": "Sun, 14 Jul 2019 14:09:58 GMT", "email": "admin@example.com", "first_name": null, "followers": 0, "following": 0, "follows": "false", "is_followed_by": "false", "last_name": null, "location": null, "map_visibility": "private", "nb_workouts": 6, "picture": false, "username": "admin", "workouts_visibility": "private" } ], "status": "success" }
- Paramètres:
user_name (integer) – nom de l’utilisateur
- En-têtes de requête:
Authorization – Jeton “OAuth 2.0 Bearer” si l’utilisateur est authentifié
- Codes d’état:
200 OK –
success
provide a valid auth token
signature expired, please log in again
invalid token, please log in again
you do not have permissions, your account is suspended
user does not exist
- GET /api/users/(user_name)/picture¶
obtenir l’image de l’utilisateur
Exemple de requête :
GET /api/users/admin/picture HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: image/jpeg
- Paramètres:
user_name (integer) – nom de l’utilisateur
- Codes d’état:
200 OK –
success
user does not exist
No picture.
- PATCH /api/users/(user_name)¶
Mise à jour du compte utilisateur.
ajouter/supprimer des droits d’administration (quel que soit le statut du compte d’utilisateur)
réinitialiser le mot de passe (et envoyer un courriel pour mettre à jour le mot de passe de l’utilisateur, si l’envoi activé)
mettre à jour l’adresse électronique de l’utilisateur (et envoyer un message à la nouvelle adresse électronique de l’utilisateur, si l’envoi est activé)
activer le compte d’un utilisateur inactif
désactiver le compte utilisateur après signalement.
Scope :
users:write
Rôle minimum: Administrateur
Exemple de requête :
PATCH /api/users/<user_name> HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "data": [ { "admin": true, "bio": null, "birth_date": null, "created_at": "Sun, 14 Jul 2019 14:09:58 GMT", "email": "admin@example.com", "first_name": null, "followers": 0, "following": 0, "follows": "false", "is_followed_by": "false", "last_name": null, "location": null, "map_visibility": "private", "nb_workouts": 6, "nb_sports": 3, "picture": false, "records": [ { "id": 9, "record_type": "AS", "sport_id": 1, "user": "admin", "value": 18, "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" }, { "id": 10, "record_type": "FD", "sport_id": 1, "user": "admin", "value": 18, "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" }, { "id": 13, "record_type": "HA", "sport_id": 1, "user": "Sam", "value": 43.97, "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" }, { "id": 11, "record_type": "LD", "sport_id": 1, "user": "admin", "value": "1:01:00", "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" }, { "id": 12, "record_type": "MS", "sport_id": 1, "user": "admin", "value": 18, "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" } ], "sports_list": [ 1, 4, 6 ], "total_distance": 67.895, "total_duration": "6:50:27", "username": "admin", "workouts_visibility": "private" } ], "status": "success" }
- Paramètres:
user_name (string) – nom de l’utilisateur
- Objet JSON de requête:
activate (boolean) – (dés-)activer le compte utilisateur
role (boolean) – rôle de l’utilisateur (
user
,admin
,moderator
). Le rôle``owner`` ne peut être donné que via la CLI.new_email (boolean) – nouvelle adresse électronique de l’utilisateur
reset_password (boolean) – réinitialiser le mot de passe de l’utilisateur
- En-têtes de requête:
Authorization – Jeton “OAuth 2.0 Bearer”
- Codes d’état:
200 OK –
success
invalid payload
invalid role
valid email must be provided
new email must be different than current email
provide a valid auth token
signature expired, please log in again
invalid token, please log in again
you do not have permissions
you do not have permissions, your account is suspended
user does not exist
500 Internal Server Error –
error, please try again or contact the administrator
- DELETE /api/users/(user_name)¶
Supprimer un compte utilisateur.
Un utilisateur ne peut supprimer que son propre compte.
Un utilisateur avec des droits d’administration peut supprimer tous les comptes sauf le sien s’il est le seul utilisateur avec des droits d’administration.
Un utilisateur suspendu peut accéder à ce point d’accès.
Scope :
users:write
Exemple de requête :
DELETE /api/users/john_doe HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 204 NO CONTENT Content-Type: application/json
- Paramètres:
user_name (string) – nom de l’utilisateur
- En-têtes de requête:
Authorization – Jeton “OAuth 2.0 Bearer”
- Codes d’état:
204 No Content – compte de l’utilisateur supprimé
provide a valid auth token
signature expired, please log in again
invalid token, please log in again
you do not have permissions
you can not delete your account, no other user has admin rights
user does not exist
500 Internal Server Error –
error, please try again or contact the administrator
- POST /api/users/(user_name)/follow¶
Envoyer une demande de suivi à un utilisateur.
Scope :
follow:write
Exemple de requête :
POST /api/users/john_doe/follow HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "status": "success", "message": "Follow request to user 'john_doe' is sent.", }
- Paramètres:
user_name (string) – nom de l’utilisateur
- En-têtes de requête:
Authorization – Jeton “OAuth 2.0 Bearer”
- Codes d’état:
200 OK – succès
provide a valid auth token
signature expired, please log in again
invalid token, please log in again
you do not have permissions
you do not have permissions, your account is suspended
user does not exist
500 Internal Server Error –
error, please try again or contact the administrator
- POST /api/users/(user_name)/unfollow¶
Arrêter de suivre un utilisateur.
Scope :
follow:write
Exemple de requête :
POST /api/users/john_doe/unfollow HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "status": "success", "message": "Undo for a follow request to user 'john_doe' is sent.", }
- Paramètres:
user_name (string) – nom de l’utilisateur
- En-têtes de requête:
Authorization – Jeton “OAuth 2.0 Bearer”
- Codes d’état:
200 OK – succès
provide a valid auth token
signature expired, please log in again
invalid token, please log in again
you do not have permissions
you do not have permissions, your account is suspended
user does not exist
500 Internal Server Error –
error, please try again or contact the administrator
- GET /api/users/(user_name)/followers¶
Obtenir les utilisateurs suivants l’utilisateur authentifié. Si l’utilisateur a des droits d’administration, l’email est également renvoyé.
Scope :
follow:read
Exemple de requête :
sans paramètres
GET /api/users/sam/followers HTTP/1.1 Content-Type: application/json
avec le paramètre “page” :
GET /api/users/sam/followers?page=1 HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "followers": [ { "admin": false, "bio": null, "birth_date": null, "created_at": "Thu, 02 Dec 2021 17:50:48 GMT", "first_name": null, "followers": 1, "following": 1, "follows": "true", "is_followed_by": "false", "last_name": null, "location": null, "map_visibility": "followers_only", "nb_sports": 0, "nb_workouts": 0, "picture": false, "records": [], "sports_list": [], "total_distance": 0.0, "total_duration": "0:00:00", "username": "JohnDoe", "workouts_visibility": "followers_only" } ] }, "pagination": { "has_next": false, "has_prev": false, "page": 1, "pages": 1, "total": 1 }, "status": "success" }
- Paramètres:
user_name (string) – nom de l’utilisateur
- Paramètres de requête:
page (integer) – page si pagination (par défaut : 1)
- En-têtes de requête:
Authorization – Jeton “OAuth 2.0 Bearer”
- Codes d’état:
200 OK – succès
provide a valid auth token
signature expired, please log in again
invalid token, please log in again
you do not have permissions
you do not have permissions, your account is suspended
user does not exist
- GET /api/users/(user_name)/following¶
Obtenir les utilisateurs suivis par l’utilisateur authentifié. Si l’utilisateur a des droits d’administration, l’email est également renvoyé.
Scope :
follow:read
Exemple de requête :
sans paramètres
GET /api/users/sam/following HTTP/1.1 Content-Type: application/json
avec le paramètre “page” :
GET /api/users/sam/following?page=1 HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "following": [ { "admin": false, "bio": null, "birth_date": null, "created_at": "Thu, 02 Dec 2021 17:50:48 GMT", "first_name": null, "followers": 1, "following": 1, "follows": "false", "is_followed_by": "true", "last_name": null, "location": null, "map_visibility": "followers_only", "nb_sports": 0, "nb_workouts": 0, "picture": false, "records": [], "sports_list": [], "total_distance": 0.0, "total_duration": "0:00:00", "username": "JohnDoe", "workouts_visibility": "followers_only" } ] }, "pagination": { "has_next": false, "has_prev": false, "page": 1, "pages": 1, "total": 1 }, "status": "success" }
- Paramètres:
user_name (string) – nom de l’utilisateur
- Paramètres de requête:
page (integer) – page si pagination (par défaut : 1)
- En-têtes de requête:
Authorization – Jeton “OAuth 2.0 Bearer”
- Codes d’état:
200 OK – succès
provide a valid auth token
signature expired, please log in again
invalid token, please log in again
you do not have permissions
you do not have permissions, your account is suspended
user does not exist
- POST /api/users/(user_name)/block¶
Bloquer un utilisateur
Scope :
users:write
Exemple de requête :
GET /api/users/sam/block HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "status": "success" }
- Paramètres:
user_name (string) – nom de l’utilisateur
- En-têtes de requête:
Authorization – Jeton “OAuth 2.0 Bearer”
- Codes d’état:
200 OK – succès
invalid payload
provide a valid auth token
signature expired, please log in again
invalid token, please log in again
you do not have permissions
you do not have permissions, your account is suspended
user not found
- POST /api/users/(user_name)/unblock¶
Débloquer un utilisateur
Scope :
users:write
Exemple de requête :
GET /api/users/sam/unblock HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "status": "success" }
- Paramètres:
user_name (string) – nom de l’utilisateur
- En-têtes de requête:
Authorization – Jeton “OAuth 2.0 Bearer”
- Codes d’état:
200 OK – succès
provide a valid auth token
signature expired, please log in again
invalid token, please log in again
you do not have permissions
you do not have permissions, your account is suspended
user not found
- GET /api/users/(user_name)/sanctions¶
Obtenir les sanctions de l’utilisateur.
Les sanctions sont renvoyées uniquement si: - l’utilisateur est l’utilisateur authentifié - l’utilisateur a des droits de modération.
Un utilisateur suspendu peut accéder à ce point d’accès.
Scope :
users:read
Exemple de requêtes :
sans paramètres :
GET /api/users/Sam/sanctions HTTP/1.1
avec des paramètres :
GET /api/users/Sam/sanctions?page=2 HTTP/1.1
Exemple de réponses :
si des sanctions existent (réponse avec des droits de modération)
HTTP/1.1 200 OK Content-Type: application/json { "data": { "sanctions": [ { "action_type": "workout_suspension", "appeal": { "approved": null, "created_at": "Wed, 04 Dec 2024 11:00:04 GMT", "id": "2ULe2hWhSnYCS2VHbsikB9", "moderator": null, "reason": null, "text": "<APPEAL TEXT>", "updated_at": null, "user": { "blocked": false, "created_at": "Wed, 04 Dec 2024 09:07:06 GMT", "email": "sam@example.com", "followers": 0, "following": 0, "follows": false, "is_active": true, "is_followed_by": false, "nb_workouts": 1, "picture": false, "role": "user", "suspended_at": null, "username": "Sam" } }, "created_at": "Wed, 04 Dec 2024 10:59:45 GMT", "id": "6dxczvMrhkAR72shUz9Pwd", "moderator": { "blocked": false, "created_at": "Wed, 01 Mar 2023 12:31:17 GMT", "email": "admin@example.com", "followers": 0, "following": 0, "follows": "false", "is_active": true, "is_followed_by": "false", "nb_workouts": 0, "picture": true, "role": "admin", "suspended_at": null, "username": "admin" }, "reason": "<SUSPENSION REASON>", "report_id": 2, "user": { "blocked": false, "created_at": "Sun, 01 Dec 2024 17:27:49 GMT", "email": "sam@example.com", "followers": 0, "following": 0, "follows": "false", "is_active": true, "is_followed_by": "false", "nb_workouts": 1, "picture": false, "role": "user", "suspended_at": null, "username": "Sam" } } ] }, "pagination": { "has_next": false, "has_prev": false, "page": 1, "pages": 1, "total": 1 }, "status": "success" }
si des sanctions existent (réponse pour l’utilisateur authentifié)
HTTP/1.1 200 OK Content-Type: application/json { "data": { "sanctions": [ { "action_type": "workout_suspension", "appeal": { "approved": null, "created_at": "Wed, 04 Dec 2024 16:50:55 GMT", "id": "kcj6hdGQqPKaaKQmfQj8Jv", "reason": null, "text": "<APPEAL TEXT>", "updated_at": null }, "created_at": "Wed, 04 Dec 2024 16:50:44 GMT", "id": "6nvxvAyoh9Zkr8RMXhu54T", "reason": "<SUSPENSION REASON>" } ] }, "pagination": { "has_next": false, "has_prev": false, "page": 1, "pages": 1, "total": 1 }, "status": "success" }
aucune sanction
HTTP/1.1 200 OK Content-Type: application/json { "data": { "sanctions": [] }, "pagination": { "has_next": false, "has_prev": false, "page": 1, "pages": 0, "total": 0 }, "status": "success" }
- Paramètres:
user_name (string) – nom de l’utilisateur
- Paramètres de requête:
page (integer) – page si pagination (par défaut : 1)
- En-têtes de requête:
Authorization – Jeton “OAuth 2.0 Bearer”
- Codes d’état:
200 OK – succès
provide a valid auth token
signature expired, please log in again
invalid token, please log in again
you do not have permissions
user not found
- GET /api/users/(user_name)/workouts¶
Obtenir les 5 dernières séances de l’utilisateur.
Scope :
workouts:read
Exemple de requête :
GET /api/users/Sam/workouts HTTP/1.1
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "workouts": [ { "ascent": null, "ave_speed": 10.0, "bounds": [], "creation_date": "Sun, 14 Jul 2019 13:51:01 GMT", "descent": null, "description": null, "distance": 10.0, "duration": "0:17:04", "equipments": [], "id": "kjxavSTUrJvoAh2wvCeGEF", "liked": false, "likes_count": 0, "map": null, "map_visibility": "private", "max_alt": null, "max_speed": 10.0, "min_alt": null, "modification_date": null, "moving": "0:17:04", "next_workout": 3, "notes": null, "pauses": null, "previous_workout": null, "records": [ { "id": 4, "record_type": "MS", "sport_id": 1, "user": "admin", "value": 10.0, "workout_date": "Mon, 01 Jan 2018 00:00:00 GMT", "workout_id": "kjxavSTUrJvoAh2wvCeGEF" }, { "id": 13, "record_type": "HA", "sport_id": 1, "user": "Sam", "value": 43.97, "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT", "workout_id": "hvYBqYBRa7wwXpaStWR4V2" }, { "id": 3, "record_type": "LD", "sport_id": 1, "user": "admin", "value": "0:17:04", "workout_date": "Mon, 01 Jan 2018 00:00:00 GMT", "workout_id": "kjxavSTUrJvoAh2wvCeGEF" }, { "id": 2, "record_type": "FD", "sport_id": 1, "user": "admin", "value": 10.0, "workout_date": "Mon, 01 Jan 2018 00:00:00 GMT", "workout_id": "kjxavSTUrJvoAh2wvCeGEF" }, { "id": 1, "record_type": "AS", "sport_id": 1, "user": "admin", "value": 10.0, "workout_date": "Mon, 01 Jan 2018 00:00:00 GMT", "workout_id": "kjxavSTUrJvoAh2wvCeGEF" } ], "segments": [], "sport_id": 1, "suspended": false, "suspended_at": null, "title": null, "user": { "created_at": "Sun, 31 Dec 2017 09:00:00 GMT", "followers": 0, "following": 0, "nb_workouts": 1, "picture": false, "role": "user", "suspended_at": null, "username": "Sam" }, "weather_end": null, "weather_start": null, "with_gpx": false, "workout_date": "Mon, 01 Jan 2018 00:00:00 GMT", "workout_visibility": "private" } ] }, "status": "success" }
- Paramètres:
user_name (string) – nom de l’utilisateur
- En-têtes de requête:
Authorization – Jeton “OAuth 2.0 Bearer” si l’utilisateur est authentifié
- Codes d’état:
200 OK – succès
provide a valid auth token
signature expired, please log in again
invalid token, please log in again
you do not have permissions
user not found