Séances¶
- GET /api/workouts¶
Obtenir les séances de l'utilisateur authentifié.
Scope :
workouts:readExemple de requêtes :
sans paramètres :
GET /api/workouts/ HTTP/1.1
avec quelques paramètres de requête :
GET /api/workouts?from=2019-07-02&to=2019-07-31&sport_id=1 HTTP/1.1
Exemple de réponses :
renvoyant au moins une séance :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "workouts": [ { "analysis_visibility": "private", "ascent": null, "ave_cadence": null, "ave_hr": null, "ave_power": null, "ave_speed": 18.0, "bounds": [], "creation_date": "Sun, 14 Jul 2019 13:51:01 GMT", "descent": null, "distance": 18.0, "duration": "1:00:00", "equipments": [], "id": "kjxavSTUrJvoAh2wvCeGEF", "liked": false, "likes_count": 0, "map": null, "map_visibility": "private", "max_alt": null, "max_cadence": null, "max_hr": null, "max_power": null, "max_speed": 18.0, "min_alt": null, "modification_date": null, "moving": "1:00:00", "next_workout": null, "notes": "", "pauses": null, "previous_workout": null, "records": [], "segments": [], "sport_id": 1, "suspended": false, "suspended_at": null, "title": "Cycling (Sport) - 2018-01-01 08:00:00", "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_analysis": false, "with_gpx": false, "workout_date": "Mon, 01 Jan 2018 07:00:00 GMT", "workout_visibility": "private" } ] }, "pagination": { "has_next": false, "has_prev": false, "page": 1, "pages": 1, "total": 1 }, "status": "success" }
renvoyant aucune séance
HTTP/1.1 200 OK Content-Type: application/json { "data": { "workouts": [] }, "pagination": { "has_next": false, "has_prev": false, "page": 1, "pages": 0, "total": 0 }, "status": "success" }
avec les statistiques
HTTP/1.1 200 OK Content-Type: application/json { "data": { "statistics": { "all": { "ave_speed": null, "count": 0, "max_speed": null, "total_ascent": null, "total_descent": null, "total_distance": null, "total_duration": null }, "current_page": { "ave_speed": null, "count": 0, "max_speed": null, "total_ascent": null, "total_descent": null, "total_distance": null, "total_duration": null } }, "workouts": [] }, "pagination": { "has_next": false, "has_prev": false, "page": 1, "pages": 0, "total": 0 }, "status": "success" }
- Paramètres de requête:
page (integer) -- page si pagination (par défaut : 1)
per_page (integer) -- nombre de séances par page (par défaut : 5, max : 100)
sport_id (integer) -- identifiant du sport
title (string) -- une partie (ou la totalité) du titre de la séance, la correspondance avec le titre ne tient pas compte des majuscules et des minuscules
from (string) -- date de début (format :
%Y-%m-%d)to (string) -- date de fin (format :
%Y-%m-%d)distance_from (float) -- distance minimale
distance_to (float) -- distance maximale
duration_from (string) -- durée minimale (format :
%H:%M)duration_to (string) -- distance maximale (format :
%H:%M)ave_speed_from (float) -- vitesse moyenne minimale
ave_speed_to (float) -- vitesse moyenne maximale
max_speed_from (float) -- vitesse max. minimale
max_speed_to (float) -- vitesse max. maximale
order (string) -- ordre de tri :
asc,desc(par défaut :desc)order_by (string) -- sorting criteria:
ave_speed,distance,duration,workout_date(default:workout_date)equipment_id (string) -- identifiant de l'équipement (si valeur à
none, seules les séances sans équipements seront renvoyées)notes (string) -- une partie (ou la totalité) des notes de la séance, la correspondance avec les notes ne tient pas compte des majuscules et des minuscules
description (string) -- une partie de la description de la séance, la correspondance avec la description ne tient pas compte des majuscules et des minuscules
return_equipments (boolean) -- renvoie les séances avec l'équipement (par défaut, l'équipement n'est pas renvoyé). Note: Il ne s'agit pas d'un filtre. Attention: nécessaire pour les applications tierces mettant à jour les équipements.
workout_visibility (string) -- visibilité de la séance (
private,followers_onlyoupublic)with_statistics (boolean) -- renvoie les statistics quand la valeur est
true(par défaut les statistiques ne sont pas renvoyées)coordinates (string) -- coordonnées de la localisation séparée par une virgule (latitude, longitude)
radius (integer) -- rayon en km, utilisé uniquement quand la localisation est fournie (défaut: 10)
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
200 OK --
successinvalid durationinvalid value for visibilityinvalid radius, must be an float greater than zero
provide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissions, your account is suspended
500 Internal Server Error --
error, please try again or contact the administrator
- GET /api/workouts/collection¶
Obtenir les séances de l'utilisateur authentifié sous forme d'une feature collection, pour afficher les séances de la liste des séances sur la carte.
Note: la pagination renvoie les valeurs pour toutes les séances (avec ou sans géometries) pour correspondre à la pagination du point d'entrée /api/workouts sur l'interface utilisateur.
Scope :
workouts:readExemple de requêtes :
sans paramètres :
GET /api/workouts/ HTTP/1.1
avec quelques paramètres de requête :
GET /api/workouts?from=2019-07-02&to=2019-07-31&sport_id=1 HTTP/1.1
Exemple de réponses :
renvoyant au moins une séance :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "bbox": [ 6.07355, 44.67822, 6.07442, 44.68095 ], "features": [ { "geometry": { "coordinates": [ [ [ 6.07367, 44.68095 ], [ 6.07367, 44.68091 ], [ 6.07364, 44.6808 ], [ 6.07364, 44.68075 ], [ 6.07364, 44.68071 ], [ 6.07361, 44.68049 ], [ 6.07356, 44.68019 ], [ 6.07355, 44.68014 ], [ 6.07358, 44.67995 ] ], [ [ 6.07364, 44.67977 ], [ 6.07367, 44.67972 ], [ 6.07368, 44.67966 ], [ 6.0737, 44.67961 ], [ 6.07377, 44.67938 ], [ 6.07381, 44.67933 ], [ 6.07385, 44.67922 ], [ 6.0739, 44.67911 ], [ 6.07399, 44.679 ], [ 6.07402, 44.67896 ], [ 6.07408, 44.67884 ], [ 6.07423, 44.67863 ], [ 6.07425, 44.67858 ], [ 6.07434, 44.67842 ], [ 6.07435, 44.67837 ], [ 6.07442, 44.67822 ] ] ], "type": "MultiLineString" }, "properties": { "bounds": [ 44.67822, 6.07355, 44.68095, 6.07442 ], "id": "XZyLvgWdUcxmQYzxZhquqt", "sport_id": 1, "title": null, "workout_visibility": "private" }, "type": "Feature" } ], "type": "FeatureCollection" } "pagination": { "has_next": false, "has_prev": false, "page": 1, "pages": 1, "total": 1 }, "status": "success" }
renvoyant aucune séance
HTTP/1.1 200 OK Content-Type: application/json { "data": { "bbox": [], "features": [], "type": "FeatureCollection" }, "pagination": { "has_next": false, "has_prev": false, "page": 1, "pages": 0, "total": 0 }, "status": "success" }
- Paramètres de requête:
page (integer) -- page si pagination (par défaut : 1)
per_page (integer) -- nombre de séances par page (par défaut : 5, max : 100)
sport_id (integer) -- identifiant du sport
title (string) -- une partie (ou la totalité) du titre de la séance, la correspondance avec le titre ne tient pas compte des majuscules et des minuscules
from (string) -- date de début (format :
%Y-%m-%d)to (string) -- date de fin (format :
%Y-%m-%d)distance_from (float) -- distance minimale
distance_to (float) -- distance maximale
duration_from (string) -- durée minimale (format :
%H:%M)duration_to (string) -- distance maximale (format :
%H:%M)ave_speed_from (float) -- vitesse moyenne minimale
ave_speed_to (float) -- vitesse moyenne maximale
max_speed_from (float) -- vitesse max. minimale
max_speed_to (float) -- vitesse max. maximale
order (string) -- ordre de tri :
asc,desc(par défaut :desc)order_by (string) -- sorting criteria:
ave_speed,distance,duration,workout_date(default:workout_date)equipment_id (string) -- identifiant de l'équipement (si valeur à
none, seules les séances sans équipements seront renvoyées)notes (string) -- une partie (ou la totalité) des notes de la séance, la correspondance avec les notes ne tient pas compte des majuscules et des minuscules
description (string) -- une partie de la description de la séance, la correspondance avec la description ne tient pas compte des majuscules et des minuscules
return_equipments (boolean) -- renvoie les séances avec l'équipement (par défaut, l'équipement n'est pas renvoyé). Note: Il ne s'agit pas d'un filtre. Attention: nécessaire pour les applications tierces mettant à jour les équipements.
workout_visibility (string) -- visibilité de la séance (
private,followers_onlyoupublic)coordinates (string) -- coordonnées de la localisation séparée par une virgule (latitude, longitude)
radius (integer) -- rayon en km, utilisé uniquement quand la localisation est fournie (défaut: 10)
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
200 OK --
successinvalid durationinvalid value for visibilityinvalid radius, must be an float greater than zero
provide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissions, your account is suspended
500 Internal Server Error --
error, please try again or contact the administrator
- GET /api/workouts/global-map¶
Obtenir les séances de l'utilisateur authentifié, avec le point de départ, sous forme d'une feature collection, afin de les afficher sur la carte globale.
Scope :
workouts:readExemple de requêtes :
sans paramètres :
GET /api/workouts/ HTTP/1.1
avec quelques paramètres de requête :
GET /api/workouts?from=2019-07-02&to=2019-07-31&sport_ids=1,2 HTTP/1.1
Exemple de réponses :
renvoyant au moins une séance :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "bbox": [ 6.07367, 44.68095, 6.07367, 44.68095 ], "features": [ { "geometry": { "coordinates": [ 6.07367, 44.68095 ], "type": "Point" }, "properties": { "bounds": [ 44.67822, 6.07355, 44.68095, 6.07442 ], "id": "XZyLvgWdUcxmQYzxZhquqt", "sport_id": 1, "title": null, "workout_visibility": "private" }, "type": "Feature" } ], "limit_exceeded": false, "type": "FeatureCollection" } "status": "success" }
renvoyant aucune séance
HTTP/1.1 200 OK Content-Type: application/json { "data": { "bbox": [], "features": [], "limit_exceeded": false, "type": "FeatureCollection" }, "status": "success" }
- Paramètres de requête:
from (string) -- date de début (format :
%Y-%m-%d)to (string) -- date de fin (format :
%Y-%m-%d)sport_ids (string) -- identifiants des sports séparés par une virgule
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
200 OK --
successinvalid date format, expecting '%Y-%m-%d'invalid sport_ids
provide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissions, your account is suspended
500 Internal Server Error --
error, please try again or contact the administrator
- GET /api/workouts/(string: workout_short_id)¶
Obtenir une séance.
Exemple de requête :
GET /api/workouts/kjxavSTUrJvoAh2wvCeGEF HTTP/1.1
Exemple de réponses :
succès :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "workouts": [ { "analysis_visibility": "private", "ascent": null, "ave_cadence": null, "ave_hr": null, "ave_power": null, "ave_speed": 16, "bounds": [], "creation_date": "Sun, 14 Jul 2019 18:57:14 GMT", "descent": null, "description": null, "distance": 12, "duration": "0:45:00", "equipments": [], "id": "kjxavSTUrJvoAh2wvCeGEF", "liked": false, "likes_count": 0, "map": null, "map_visibility": "private", "max_alt": null, "max_cadence": null, "max_hr": null, "max_power": null, "max_speed": 16, "min_alt": null, "modification_date": "Sun, 14 Jul 2019 18:57:22 GMT", "moving": "0:45:00", "next_workout": 4, "notes": "workout without gpx", "pauses": null, "previous_workout": 3, "records": [], "segments": [], "sport_id": 1, "suspended": false, "suspended_at": null, "title": "biking on sunday morning", "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_analysis": false, "with_gpx": false, "workout_date": "Sun, 07 Jul 2019 07:00:00 GMT", "workout_visibility": "private" } ] }, "status": "success" }
séance non trouvé :
HTTP/1.1 404 NOT FOUND Content-Type: application/json { "data": { "workouts": [] }, "status": "not found" }
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer' pour la séance avec une visibilité
privateetfollowers_only
- Codes d'état:
200 OK --
successprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissionsyou do not have permissions, your account is suspended
404 Not Found --
workout not found
- GET /api/workouts/(string: workout_short_id)/geojson¶
Obtenir le GeoJSON de la séance, quand les segments ont une géométrie.
Exemple de requête :
GET /api/workouts/kjxavSTUrJvoAh2wvCeGEF/geojson HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "geojson": { "type": "MultiLineString", "coordinates": [ [ [6.07367, 44.68095], [6.07367, 44.68091], [6.07364, 44.6808], [6.07361, 44.68049] ], [ [6.07361, 44.68049], [6.07364, 44.6808], [6.07367, 44.68091], [6.07367, 44.68095] ] ] } }, "message": "", "status": "success" }
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer' pour la séance avec une visibilité
privateetfollowers_onlypour la carte
- Codes d'état:
200 OK --
successprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissionsyou do not have permissions, your account is suspended
workout not foundgeojson not found
500 Internal Server Error --
error, please try again or contact the administrator
- GET /api/workouts/(string: workout_short_id)/geojson/segment/(int: segment_id)¶
Obtenir le GeoJSON du segment, quand le segment a une géométrie.
Exemple de requête :
GET /api/workouts/kjxavSTUrJvoAh2wvCeGEF/gpx/segment/1 HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "geojson": { "type": "LineString", "coordinates": [ [6.07367, 44.68095], [6.07367, 44.68091], [6.07364, 44.6808], [6.07361, 44.68049] ] } }, "message": "", "status": "success" }
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
segment_id (integer) -- identifiant du segment
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer' pour la séance avec une visibilité
privateetfollowers_onlypour la carte
- Codes d'état:
200 OK --
success400 Bad Request --
no gpx file for this workoutprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissionsyou do not have permissions, your account is suspended
workout not foundgeojson not found
500 Internal Server Error --
error, please try again or contact the administrator
- GET /api/workouts/(string: workout_short_id)/gpx¶
Obtenir un fichier gpx pour une séance affichée sur une carte avec Leaflet.
Exemple de requête :
GET /api/workouts/kjxavSTUrJvoAh2wvCeGEF/gpx HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "gpx": "gpx file content" }, "message": "", "status": "success" }
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer' pour la séance avec une visibilité
privateetfollowers_onlypour la carte
- Codes d'état:
200 OK --
successprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissionsyou do not have permissions, your account is suspended
workout not foundno gpx file for this workout
500 Internal Server Error --
error, please try again or contact the administrator
- GET /api/workouts/(string: workout_short_id)/gpx/segment/(int: segment_id)¶
Obtenir un fichier gpx pour le segment d'une séance pour l'afficher sur la carte avec Leaflet.
Exemple de requête :
GET /api/workouts/kjxavSTUrJvoAh2wvCeGEF/gpx/segment/1 HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "gpx": "gpx file content" }, "message": "", "status": "success" }
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
segment_id (integer) -- identifiant du segment
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer' pour la séance avec une visibilité
privateetfollowers_onlypour la carte
- Codes d'état:
200 OK --
success400 Bad Request --
no gpx file for this workoutprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissionsyou do not have permissions, your account is suspended
404 Not Found --
workout not found500 Internal Server Error --
error, please try again or contact the administrator
- GET /api/workouts/(string: workout_short_id)/chart_data¶
Récupérer les données d'une séance avec gpx pour les afficher avec Chart.js.
Exemple de requête :
GET /api/workouts/kjxavSTUrJvoAh2wvCeGEF/chart HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "chart_data": [ { "distance": 0, "duration": 0, "elevation": 279.4, "latitude": 51.5078118, "longitude": -0.1232004, "speed": 8.63, "time": "Fri, 14 Jul 2017 13:44:03 GMT" }, { "distance": 7.5, "duration": 7380, "elevation": 280, "latitude": 51.5079733, "longitude": -0.1234538, "speed": 6.39, "time": "Fri, 14 Jul 2017 15:47:03 GMT" } ] }, "message": "", "status": "success" }
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer' pour la séance avec une visibilité
privateetfollowers_onlypour la carte
- Codes d'état:
200 OK --
successprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissionsyou do not have permissions, your account is suspended
workout not foundno gpx file for this workout
500 Internal Server Error --
error, please try again or contact the administrator
- GET /api/workouts/(string: workout_short_id)/chart_data/segment/(int: segment_id)¶
Récupérer les données d'une séance avec gpx pour les afficher avec Chart.js.
Exemple de requête :
GET /api/workouts/kjxavSTUrJvoAh2wvCeGEF/chart/segment/1 HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "chart_data": [ { "distance": 0, "duration": 0, "elevation": 279.4, "latitude": 51.5078118, "longitude": -0.1232004, "speed": 8.63, "time": "Fri, 14 Jul 2017 13:44:03 GMT" }, { "distance": 7.5, "duration": 7380, "elevation": 280, "latitude": 51.5079733, "longitude": -0.1234538, "speed": 6.39, "time": "Fri, 14 Jul 2017 15:47:03 GMT" } ] }, "message": "", "status": "success" }
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
segment_id (integer) -- identifiant du segment
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer' pour la séance avec une visibilité
privateetfollowers_onlypour la carte
- Codes d'état:
200 OK --
success400 Bad Request --
no gpx file for this workoutprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissionsyou do not have permissions, your account is suspended
404 Not Found --
workout not found500 Internal Server Error --
error, please try again or contact the administrator
- GET /api/workouts/map/(map_id)¶
Obtenir l'image de la carte pour les séances avec gpx.
Exemple de requête :
GET /api/workouts/map/fa33f4d996844a5c73ecd1ae24456ab8?1563529507772 HTTP/1.1
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: image/png
- Paramètres:
map_id (string) -- identifiant de la carte de la séance
- Codes d'état:
200 OK --
successprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissions, your account is suspended
404 Not Found --
map does not exist500 Internal Server Error --
error, please try again or contact the administrator
- GET /api/workouts/map_tile/(s)/(z)/(x)/(y).png¶
Obtenir une tuile de la carte à partir du serveur de tuiles.
Exemple de requête :
GET /api/workouts/map_tile/c/13/4109/2930.png HTTP/1.1
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: image/png
- Paramètres:
s (string) -- sous-domaine
z (string) -- zoom
x (string) -- index de la tuile sur l'axe x de la carte
y (string) -- index de la tuile sur l'axe y de la carte
Les codes d'état sont des codes d'état renvoyés par le serveur de tuiles
- GET /api/workouts/(string: workout_short_id)/gpx/download¶
Download gpx file (original or generated by FitTrackee).
Scope :
workouts:readExemple de requête :
GET /api/workouts/kjxavSTUrJvoAh2wvCeGEF/gpx/download HTTP/1.1
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/gpx+xml
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
- Codes d'état:
200 OK --
successprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissions, your account is suspended
workout not foundno gpx file for workout
- GET /api/workouts/(string: workout_short_id)/original/download¶
Téléchager le fichier original (fichier gpx, kml, tcx ou fit).
Scope :
workouts:readExemple de requête :
GET /api/workouts/kjxavSTUrJvoAh2wvCeGEF/original/download HTTP/1.1
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/gpx+xml
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
- Codes d'état:
200 OK --
successprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissions, your account is suspended
workout not foundno original file for workout
- POST /api/workouts¶
Créer une séance à partir d'un fichier gpx.
Scope :
workouts:writeExemple de requête :
POST /api/workouts/ HTTP/1.1 Content-Type: multipart/form-data
Exemple de réponse :
quand le chargement est synchrone
HTTP/1.1 201 CREATED Content-Type: application/json { "data": { "errored_workouts": [], "workouts": [ { "analysis_visibility": "private", "ascent": 435.621, "ave_cadence": null, "ave_hr": null, "ave_power": null, "ave_speed": 13.14, "bounds": [ 43.93706, 4.517587, 43.981933, 4.560627 ], "creation_date": "Sun, 14 Jul 2019 13:51:01 GMT", "descent": 427.499, "description": null, "distance": 23.478, "duration": "2:08:35", "equipments": [], "id": "PsjeeXbJZ2JJNQcTCPxVvF", "liked": false, "likes_count": 0, "map": "ac075ec36dc25dcc20c270d2005f0398", "map_visibility": "private", "max_alt": 158.41, "max_cadence": null, "max_hr": null, "max_power": null, "max_speed": 25.59, "min_alt": 55.03, "modification_date": null, "moving": "1:47:11", "next_workout": "Kd5wyhwLtVozw6o3AU5M4J", "notes": "", "pauses": "0:20:32", "previous_workout": "HgzYFXgvWKCEpdq3vYk67q", "records": [ { "id": 6, "record_type": "AS", "sport_id": 4, "user": "Sam", "value": 13.14, "workout_date": "Tue, 26 Apr 2016 14:42:30 GMT", "workout_id": "PsjeeXbJZ2JJNQcTCPxVvF" }, { "id": 7, "record_type": "FD", "sport_id": 4, "user": "Sam", "value": 23.478, "workout_date": "Tue, 26 Apr 2016 14:42:30 GMT", "workout_id": "PsjeeXbJZ2JJNQcTCPxVvF" }, { "id": 9, "record_type": "LD", "sport_id": 4, "user": "Sam", "value": "1:47:11", "workout_date": "Tue, 26 Apr 2016 14:42:30 GMT", "workout_id": "PsjeeXbJZ2JJNQcTCPxVvF" }, { "id": 10, "record_type": "MS", "sport_id": 4, "user": "Sam", "value": 25.59, "workout_date": "Tue, 26 Apr 2016 14:42:30 GMT", "workout_id": "PsjeeXbJZ2JJNQcTCPxVvF" }, { "id": 8, "record_type": "HA", "sport_id": 4, "user": "Sam", "value": 435.621, "workout_date": "Tue, 26 Apr 2016 14:42:30 GMT", "workout_id": "PsjeeXbJZ2JJNQcTCPxVvF" } ], "segments": [ { "ascent": 435.621, "ave_cadence": null, "ave_hr": null, "ave_power": null, "ave_speed": 13.14, "descent": 427.499, "distance": 23.478, "duration": "2:08:35", "max_alt": 158.41, "max_cadence": null, "max_hr": null, "max_power": null, "max_speed": 25.59, "min_alt": 55.03, "moving": "1:47:11", "pauses": "0:20:32", "segment_id": 0, "workout_id": "PsjeeXbJZ2JJNQcTCPxVvF" } ], "sport_id": 4, "suspended": false, "suspended_at": null, "title": "VTT dans le Gard", "user": { "created_at": "Sun, 31 Dec 2017 09:00:00 GMT", "followers": 0, "following": 0, "nb_workouts": 3, "picture": false, "role": "user", "suspended_at": null, "username": "Sam" }, "weather_end": null, "weather_start": null, "with_analysis": false, "with_gpx": true, "workout_date": "Tue, 26 Apr 2016 14:42:30 GMT", "workout_visibility": "private" } ] }, "status": "success" }
quand le chargement est asynchrone
HTTP/1.1 200 SUCCESS Content-Type: application/json { "data": { "task_id": "JKtd4tpQDgAPwNTsjjPdVh" }, "status": "in_progress" }
- Paramètres de la forme:
file -- fichier de la séance ou archive (extensions autorisées : .gpx, .kml, .kmz, .fit, .tcx, .zip)
data -- id du sport, id de l'équipement, description, titre et notes, par exemple:
{"sport_id": 1, "notes": "", "title": "", "description": "", "analysis_visibility": "private", "map_visibility": "private", "workout_visibility": "private", "equipment_ids": []}. Les guillemets doubles dans les notes, la description et le titre doivent être échappés. La longueur maximale est de 500 caractères pour les notes, de 10000 caractères pour la description et de 255 caractères pour le titre. Dans le cas contraire, ils seront tronqués. Pour equipment_ids, l'id de l'équipement à associer à la séance. Note: pour le moment, seul un équipement peut être associé. Si non fourni et qu'il existe un équipement par défaut pour le sport, l'équipement par défaut sera associé. Les notes, la description, le titre, l'id de l'équipement et la visibilité pour la séance, l'analyse et la carte ne sont pas obligatoires.
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
200 OK -- chargement de l'archive en cours
201 Created -- séance créée
invalid payloadno file partno selected filefile extension not allowederror when parsing fit fileerror when parsing gpx fileerror when parsing kml fileerror when parsing kmz fileerror when parsing tcx filegpx file is invalidno activities in tcx fileno coordinates in tcx fileno laps or no tracks in tcx fileno tracks in gpx fileno tracks in kml file<time> is missing in gpx fileunsupported kml fileno valid segments with GPS found in fit fileequipment_ids must be an array of stringsonly one equipment can be addedequipment with id <equipment_id> does not existinvalid equipment id <equipment_id> for sportequipment with id <equipment_id> is inactiveone or more values, entered or calculated, exceed the limits
provide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissions, your account is suspended
413 Request Entity Too Large --
error during picture update: file size exceeds 1.0MB500 Internal Server Error --
error, please try again or contact the administrator
- POST /api/workouts/no_gpx¶
Créer une séance sans fichier gpx.
Scope :
workouts:writeExemple de requête :
POST /api/workouts/no_gpx HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 201 CREATED Content-Type: application/json { "data": { "workouts": [ { "analysis_visibility": "private", "ascent": null, "ave_cadence": null, "ave_hr": null, "ave_power": 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", "id": "Kd5wyhwLtVozw6o3AU5M4J", "liked": false, "likes_count": 0, "equipments": [], "map": null, "map_visibility": "private", "max_alt": null, "max_cadence": null, "max_hr": null, "max_power": 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., "workout_date": "Mon, 01 Jan 2018 00:00:00 GMT", "workout_id": "kjxavSTUrJvoAh2wvCeGEF" }, { "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" }, "uuid": "kjxavSTUrJvoAh2wvCeGEF" "weather_end": null, "weather_start": null, "with_analysis": false, "with_gpx": false, "workout_date": "Mon, 01 Jan 2018 00:00:00 GMT", "workout_visibility": "private" } ] }, "status": "success" }
- Objet JSON de requête:
ascent (float) -- dénivelé positif de la séance (non obligatoire, à fournir avec le dénivelé positif)
descent (float) -- dénivelé négatif de la séance (non obligatoire, à fournir avec le dénivelé positif)
description (string) -- description de la séance (non obligatoire, longueur max. : 10000 caractères, dans le cas contraire elle sera tronquée)
distance (float) -- distance de la séance en km
duration (integer) -- durée de la séance en secondes
equipment_ids (array of strings) -- l'id de l'équipement à associer à cette séance. Note: pour le moment, un seul équipement peut être associé. Si non fourni et qu'il existe un équipement par défaut pour le sport, l'équipement par défaut sera associé.
notes (string) -- notes (non obligatoire, longueur max. : 500 caractères, dans le cas contraire elles seront tronquées)
sport_id (integer) -- identifiant du sport de la séance
title (string) -- titre de la séance (non obligatoire, longueur max. : 255 caractères, dans le cas contraire il sera tronqué)
workout_date (string) -- date de la séance, dans le fuseau horaire de l'utilisateur (format :
%Y-%m-%d %H:%M)workout_visibility (string) -- visibilité de la séance (
private,followers_onlyoupublic). Non obligatoire, si non fournie utilise la préférence utilisateur.
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
201 Created -- séance créée
invalid payloadequipment_ids must be an array of stringsonly one equipment can be addedequipment with id <equipment_id> does not existinvalid equipment id <equipment_id> for sportequipment with id <equipment_id> is inactiveone or more values, entered or calculated, exceed the limits
provide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissions, your account is suspended
500 Internal Server Error --
error, please try again or contact the administrator
- PATCH /api/workouts/(string: workout_short_id)¶
Mettre à jour une séance.
Scope :
workouts:writeExemple de requête :
PATCH /api/workouts/2oRDfncv6vpRkfp3yrCYHt HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "workouts": [ { "analysis_visibility": "private", "ascent": null, "ave_cadence": null, "ave_hr": null, "ave_power": 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": "2oRDfncv6vpRkfp3yrCYHt", "liked": false, "likes_count": 0, "map": null, "map_visibility": "private", "max_alt": null, "max_cadence": null, "max_hr": null, "max_power": 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": 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" }, "uuid": "kjxavSTUrJvoAh2wvCeGEF" "weather_end": null, "weather_start": null, "with_analysis": false, "with_gpx": false, "workout_date": "Mon, 01 Jan 2018 00:00:00 GMT", "workout_visibility": "private" } ] }, "status": "success" }
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
- Objet JSON de requête:
analysis_visibility (string) -- visibilité pour l'analyse (
private,followers_onlyoupublic)ascent (float) -- dénivelé positif de la séance (seulement pour les séances sans gpx, doit être fourni avec le dénivelé négatif)
descent (float) -- dénivelé négatif de la séance (seulement pour les séances sans gpx, doit être fourni avec le dénivelé positif)
description (string) -- description de la séance (longueur max. : 10000 caractères, dans le cas contraire elle sera tronquée)
distance (float) -- distance de la séance en km (seulement pour les séances sans gpx)
duration (integer) -- durée de la séance en secondes (seulement pour les séances sans gpx)
equipment_ids (array of strings) -- l'id de l'équipement à associer à cette séance (si un équipement est déjà associé, il sera remplacé). Note: pour le moment, un seul équipement peut être associé. Si la liste est vide, l'équipement sera supprimé.
map_visibility (string) -- visibilité de la carte (
private,followers_onlyoupublic)notes (string) -- notes (longueur max. : 500 caractères, dans le cas contraire elles seront tronquées)
sport_id (integer) -- identifiant du sport de la séance
title (string) -- titre de la séance (longueur max. : 255 caractères, dans le cas contraire il sera tronqué)
workout_date (string) -- date de la séance dans le fuseau horaire de l'utilisateur (format :
%Y-%m-%d %H:%M) (seulement pour les séances sans gpx)workout_visibility (string) -- visibilité de la séance (
private,followers_onlyoupublic)
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
200 OK -- séance mise à jour
invalid payloadequipment_ids must be an array of stringsonly one equipment can be addedequipment with id <equipment_id> does not existinvalid equipment id <equipment_id> for sportequipment with id <equipment_id> is inactiveone or more values, entered or calculated, exceed the limits
provide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissions, your account is suspended
404 Not Found --
workout not found500 Internal Server Error --
error, please try again or contact the administrator
- POST /api/workouts/(string: workout_short_id)/refresh¶
Actualiser une séance (créée à partir d'un fichier):
recalculer les données de la séance comme la vitesse max, les pauses...
re-générer le fichier gpx si l'original n'est pas un fichier gpx
mettre à jour les données météo si un fournisseur de données est configuré et que la séance n'a pas de données météo
Scope :
workouts:writeExemple de requête :
POST /api/workouts/kjxavSTUrJvoAh2wvCeGEF/refresh HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 SUCCESS Content-Type: application/json { "data": { "errored_workouts": [], "workouts": [ { "analysis_visibility": "private", "ascent": 435.621, "ave_cadence": null, "ave_hr": null, "ave_power": null, "ave_speed": 13.14, "bounds": [ 43.93706, 4.517587, 43.981933, 4.560627 ], "creation_date": "Sun, 14 Jul 2019 13:51:01 GMT", "descent": 427.499, "description": null, "distance": 23.478, "duration": "2:08:35", "equipments": [], "id": "PsjeeXbJZ2JJNQcTCPxVvF", "liked": false, "likes_count": 0, "map": "ac075ec36dc25dcc20c270d2005f0398", "map_visibility": "private", "max_alt": 158.41, "max_cadence": null, "max_hr": null, "max_power": null, "max_speed": 25.59, "min_alt": 55.03, "modification_date": null, "moving": "1:47:11", "next_workout": "Kd5wyhwLtVozw6o3AU5M4J", "notes": "", "pauses": "0:20:32", "previous_workout": "HgzYFXgvWKCEpdq3vYk67q", "records": [ { "id": 6, "record_type": "AS", "sport_id": 4, "user": "Sam", "value": 13.14, "workout_date": "Tue, 26 Apr 2016 14:42:30 GMT", "workout_id": "PsjeeXbJZ2JJNQcTCPxVvF" }, { "id": 7, "record_type": "FD", "sport_id": 4, "user": "Sam", "value": 23.478, "workout_date": "Tue, 26 Apr 2016 14:42:30 GMT", "workout_id": "PsjeeXbJZ2JJNQcTCPxVvF" }, { "id": 9, "record_type": "LD", "sport_id": 4, "user": "Sam", "value": "1:47:11", "workout_date": "Tue, 26 Apr 2016 14:42:30 GMT", "workout_id": "PsjeeXbJZ2JJNQcTCPxVvF" }, { "id": 10, "record_type": "MS", "sport_id": 4, "user": "Sam", "value": 25.59, "workout_date": "Tue, 26 Apr 2016 14:42:30 GMT", "workout_id": "PsjeeXbJZ2JJNQcTCPxVvF" }, { "id": 8, "record_type": "HA", "sport_id": 4, "user": "Sam", "value": 435.621, "workout_date": "Tue, 26 Apr 2016 14:42:30 GMT", "workout_id": "PsjeeXbJZ2JJNQcTCPxVvF" } ], "segments": [ { "ascent": 435.621, "ave_cadence": null, "ave_hr": null, "ave_power": null, "ave_speed": 13.14, "descent": 427.499, "distance": 23.478, "duration": "2:08:35", "max_alt": 158.41, "max_cadence": null, "max_hr": null, "max_power": null, "max_speed": 25.59, "min_alt": 55.03, "moving": "1:47:11", "pauses": "0:20:32", "segment_id": 0, "workout_id": "PsjeeXbJZ2JJNQcTCPxVvF" } ], "sport_id": 4, "suspended": false, "suspended_at": null, "title": "VTT dans le Gard", "user": { "created_at": "Sun, 31 Dec 2017 09:00:00 GMT", "followers": 0, "following": 0, "nb_workouts": 3, "picture": false, "role": "user", "suspended_at": null, "username": "Sam" }, "weather_end": null, "weather_start": null, "with_analysis": false, "with_gpx": true, "workout_date": "Tue, 26 Apr 2016 14:42:30 GMT", "workout_visibility": "private" } ] }, "status": "success" }
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
200 OK -- séance mise à jour
error when parsing fit fileerror when parsing gpx fileerror when parsing kml fileerror when parsing kmz fileerror when parsing tcx fileone or more values, entered or calculated, exceed the limits
provide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissions, your account is suspended
404 Not Found --
workout not found500 Internal Server Error --
error, please try again or contact the administrator
- DELETE /api/workouts/(string: workout_short_id)¶
Supprimer la séance.
Scope :
workouts:writeExemple de requête :
DELETE /api/workouts/kjxavSTUrJvoAh2wvCeGEF HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 204 NO CONTENT Content-Type: application/json
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
204 No Content -- séance supprimée
provide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissions, your account is suspended
404 Not Found --
workout not found500 Internal Server Error --
error, please try again or contact the administrator
- POST /api/workouts/(string: workout_short_id)/like¶
Ajouter un "like" à une séance.
Scope :
workouts:writeExemple de requête :
POST /api/workouts/HgzYFXgvWKCEpdq3vYk67q/like HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "workouts": [ { "analysis_visibility": "private", "ascent": 231.208, "ave_cadence": null, "ave_hr": null, "ave_power": null, "ave_speed": 13.12, "bounds": [], "creation_date": "Wed, 04 Dec 2024 09:18:26 GMT", "descent": 234.208, "description": null, "distance": 23.41, "duration": "3:32:27", "equipments": [], "id": "HgzYFXgvWKCEpdq3vYk67q", "liked": true, "likes_count": 1, "map": null, "map_visibility": "private", "max_alt": 104.44, "max_cadence": null, "max_hr": null, "max_power": null, "max_speed": 25.59, "min_alt": 19.0, "modification_date": "Wed, 04 Dec 2024 16:45:14 GMT", "moving": "1:47:04", "next_workout": null, "notes": null, "pauses": "1:23:51", "previous_workout": null, "records": [], "segments": [], "sport_id": 1, "suspended": false, "title": "Cycling (Sport) - 2016-04-26 16:42:27", "user": { "created_at": "Sun, 24 Nov 2024 16:52:14 GMT", "followers": 0, "following": 0, "nb_workouts": 1, "picture": false, "role": "user", "suspended_at": null, "username": "Sam" }, "weather_end": null, "weather_start": null, "with_analysis": false, "with_gpx": false, "workout_date": "Tue, 26 Apr 2016 14:42:27 GMT", "workout_visibility": "public" } ] }, "status": "success" }
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
200 OK --
successprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissionsyou do not have permissions, your account is suspended
404 Not Found --
comment not found
- POST /api/workouts/(string: workout_short_id)/like/undo¶
Supprimer le "like" de la séance.
Scope :
workouts:writeExemple de requête :
POST /api/workouts/HgzYFXgvWKCEpdq3vYk67q/like/undo HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "workouts": [ { "analysis_visibility": "private", "ascent": 231.208, "ave_cadence": null, "ave_hr": null, "ave_power": null, "ave_speed": 13.12, "bounds": [], "creation_date": "Wed, 04 Dec 2024 09:18:26 GMT", "descent": 234.208, "description": null, "distance": 23.41, "duration": "3:32:27", "equipments": [], "id": "HgzYFXgvWKCEpdq3vYk67q", "liked": false, "likes_count": 0, "map": null, "map_visibility": "private", "max_alt": 104.44, "max_cadence": null, "max_hr": null, "max_power": null, "max_speed": 25.59, "min_alt": 19.0, "modification_date": "Wed, 04 Dec 2024 16:45:14 GMT", "moving": "1:47:04", "next_workout": null, "notes": null, "pauses": "1:23:51", "previous_workout": null, "records": [], "segments": [], "sport_id": 1, "suspended": false, "title": "Cycling (Sport) - 2016-04-26 16:42:27", "user": { "created_at": "Sun, 24 Nov 2024 16:52:14 GMT", "followers": 0, "following": 0, "nb_workouts": 1, "picture": false, "role": "user", "suspended_at": null, "username": "Sam" }, "weather_end": null, "weather_start": null, "with_analysis": false, "with_gpx": false, "workout_date": "Tue, 26 Apr 2016 14:42:27 GMT", "workout_visibility": "public" } ] }, "status": "success" }
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
200 OK --
successprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissionsyou do not have permissions, your account is suspended
404 Not Found --
comment not found
- GET /api/workouts/(string: workout_short_id)/likes¶
Obtenir la liste des utilisateurs qui ont "liké" la séance
Exemple de requête :
GET /api/workouts/kjxavSTUrJvoAh2wvCeGEF/likes HTTP/1.1
Exemple de réponses :
succès :
HTTP/1.1 200 OK Content-Type: application/json { "data": { "likes": [ { "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" } ] }, "status": "success" }
séance non trouvé :
HTTP/1.1 404 NOT FOUND Content-Type: application/json { "data": { "likes": [] }, "status": "not found" }
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
- 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' pour la séance avec une visibilité
privateetfollowers_only
- Codes d'état:
200 OK --
successprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
you do not have permissionsyou do not have permissions, your account is suspended
404 Not Found --
workout not found
- POST /api/workouts/(string: workout_short_id)/suspension/appeal¶
Faire appel de la suspension de la séance.
Seul l'auteur de la séance peut fait appel de la suspension.
Scope :
workouts:writeExemple de requête :
POST /api/workouts/2oRDfncv6vpRkfp3yrCYHt/suspension/appeal HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 201 CREATED Content-Type: application/json { "status": "success" }
- Paramètres:
workout_short_id (string) -- identifiant court de la séance
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
201 Created -- appel créé
no text providedyou can appeal only onceworkout is not suspendedworkout has no suspension
provide a valid auth tokensignature expired, please log in againinvalid token, please log in again
403 Forbidden --
you do not have permissions404 Not Found --
workout not found500 Internal Server Error --
error, please try again or contact the administrator
- GET /api/workouts/upload-tasks¶
Obtenir les tâches des utilisateurs pour le chargement des archives de séances
Scope :
workouts:readExemple de requête :
sans paramètres :
GET /api/workouts/tasks HTTP/1.1 Content-Type: application/json
avec le paramètre 'page' :
GET /api/workouts/tasks?page=2 HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 SUCCESS Content-Type: application/json { "data": { "tasks": [ { "created_at": "Sun, 30 Mar 2025 10:26:17 GMT", "errored_files": {}, "files_count": 10, "id": "JEiR6cDcADX8bZ6ZeQssnr", "progress": 10, "status": "in_progress", "type": "workouts_archive_upload" } ] }, "pagination": { "has_next": false, "has_prev": false, "page": 1, "pages": 1, "total": 1 }, "status": "success" }
- Paramètres de requête:
page (integer) -- page pour la pagination (par défaut : 1)
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
200 OK --
successprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
- GET /api/workouts/upload-tasks/(string: task_short_id)¶
Obtenir une tâche de chargement d'archive de séances donnée
Scope :
workouts:readExemple de requête :
GET /api/workouts/tasks/JEiR6cDcADX8bZ6ZeQssnr HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 SUCCESS Content-Type: application/json { "task": { "created_at": "Sun, 30 Mar 2025 10:26:17 GMT", "errored_files": {}, "files_count": 10, "id": "JEiR6cDcADX8bZ6ZeQssnr", "progress": 10, "status": "in_progress", "type": "workouts_archive_upload" }, "status": "success" }
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
200 OK --
successprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
no task found
- POST /api/workouts/upload-tasks/(string: task_short_id)/abort¶
Interrompre la tâche en cours de chargement d'archive de séances
Scope :
workouts:writeExemple de requête :
POST /api/workouts/tasks/JEiR6cDcADX8bZ6ZeQssnr/abort HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 200 SUCCESS Content-Type: application/json { "task": { "created_at": "Sun, 30 Mar 2025 10:26:17 GMT", "errored_files": {}, "files_count": 10, "id": "JEiR6cDcADX8bZ6ZeQssnr", "progress": 10, "status": "aborted", "type": "workouts_archive_upload" }, "status": "success" }
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
200 OK --
successonly queued and ongoing tasks can be aborted
provide a valid auth tokensignature expired, please log in againinvalid token, please log in again
no task found
error when aborting task
- DELETE /api/workouts/upload-tasks/(string: task_short_id)¶
Supprimer les tâches de chargement d'archives de séances si le status est 'terminé avec succès' ou 'en erreur'
Scope :
workouts:writeExemple de requête :
DELETE /api/workouts/tasks/JEiR6cDcADX8bZ6ZeQssnr HTTP/1.1 Content-Type: application/json
Exemple de réponse :
HTTP/1.1 204 NO CONTENT Content-Type: application/json
- En-têtes de requête:
Authorization -- Jeton 'OAuth 2.0 Bearer'
- Codes d'état:
200 OK --
successprovide a valid auth tokensignature expired, please log in againinvalid token, please log in again
no task found
500 Internal Server Error --
error, please try again or contact the administrator