diff --git a/sdks/db/cached-method-objects/from-custom-request_wefitter.com.yaml b/sdks/db/cached-method-objects/from-custom-request_wefitter.com.yaml new file mode 100644 index 0000000000..1fd4f06568 --- /dev/null +++ b/sdks/db/cached-method-objects/from-custom-request_wefitter.com.yaml @@ -0,0 +1,2201 @@ +hash: 6ef6f0b14ccbe503c1da8c52ec26afc68b5d56c4269e43774cfcc0e1e1d90f90 +methodObjects: + - url: /insights/bio_age + method: getBioAgeWeekly + httpMethod: get + tag: insights + typeScriptTag: insights + description: Get someones biological age on a weekly basis. + parameters: + - name: startDate + schema: string + required: true + description: '' + example: START_DATE + - name: endDate + schema: string + required: true + description: '' + example: END_DATE + responses: + - statusCode: '200' + description: '' + - url: /loyalty/get_recommended_products + method: getRecommendedProducts + httpMethod: get + tag: loyalty + typeScriptTag: loyalty + description: '' + parameters: + - name: limit + schema: integer + required: false + description: Number of results to return per page. + - name: offset + schema: integer + required: false + description: The initial index from which to return the results. + responses: + - statusCode: '200' + description: '' + - url: /loyalty/get_shoppingcart_link + method: getShoppingcartLink + httpMethod: get + tag: loyalty + typeScriptTag: loyalty + description: '' + parameters: [] + responses: + - statusCode: '200' + description: '' + - url: /app/totals + method: getTotals + httpMethod: get + tag: app + typeScriptTag: app + description: Totals + parameters: [] + responses: + - statusCode: '200' + description: '' + - url: /challenge + method: list + httpMethod: get + tag: challenge + typeScriptTag: challenge + description: List Challenges + parameters: + - name: limit + schema: integer + required: false + description: Number of results to return per page. + - name: offset + schema: integer + required: false + description: The initial index from which to return the results. + - name: recent + schema: integer + required: false + description: Show challenges that have not ended in the last N weeks + responses: + - statusCode: '200' + description: '' + - url: /challenge + method: create + httpMethod: post + tag: challenge + typeScriptTag: challenge + description: Create challenge + parameters: + - name: title + schema: string + required: true + description: '' + example: TITLE + - name: description + schema: string + required: false + description: '' + - name: url + schema: string + required: false + description: '' + - name: public_id + schema: string + required: false + description: '' + - name: slogan + schema: string + required: false + description: '' + - name: start + schema: string + required: true + description: '' + example: START + - name: end + schema: string + required: false + description: '' + - name: type + schema: string + required: true + description: '' + example: TYPE + - name: goal + schema: string + required: true + description: '' + example: GOAL + - name: goal_value + schema: integer + required: false + description: '' + - name: goal_type + schema: string + required: true + description: '' + example: GOAL_TYPE + - name: visibility + schema: string + required: true + description: '' + example: VISIBILITY + - name: num_members + schema: string + required: false + description: '' + - name: calculation_method + schema: string + required: true + description: '' + example: CALCULATION_METHOD + - name: goal_progress + schema: number + required: false + description: '' + - name: enrollment_method + schema: string + required: true + description: '' + example: ENROLLMENT_METHOD + - name: default_enrollment_time + schema: string + required: false + description: '' + - name: repetition + schema: string + required: true + description: '' + example: REPETITION + - name: avatar + schema: string + required: false + description: '' + - name: data_source + schema: string + required: false + description: '' + - name: activity_types + schema: array + required: false + description: '' + - name: current_period_start + schema: string + required: false + description: '' + - name: current_period_end + schema: string + required: false + description: '' + - name: goal_cap + schema: boolean + required: false + description: '' + - name: total_calories + schema: number + required: false + description: '' + - name: total_distance + schema: number + required: false + description: '' + - name: total_steps + schema: number + required: false + description: '' + - name: total_points + schema: number + required: false + description: '' + - name: total_activity_duration + schema: string + required: false + description: '' + responses: + - statusCode: '201' + description: '' + - url: /challenge/{challenge_public_id}/team + method: teamStandingsList + httpMethod: get + tag: challenge + typeScriptTag: challenge + description: Team leaderboard + parameters: + - name: limit + schema: integer + required: false + description: Number of results to return per page. + - name: offset + schema: integer + required: false + description: The initial index from which to return the results. + - name: dateRange + schema: integer + required: false + description: Index of the time period use + responses: + - statusCode: '200' + description: '' + - url: /challenge/{challenge_public_id}/team/{team_public_id} + method: teamContributionList + httpMethod: get + tag: challenge + typeScriptTag: challenge + description: Team contribution + parameters: + - name: dateRange + schema: integer + required: false + description: Index of the time period use + responses: + - statusCode: '200' + description: '' + - url: /challenge/{public_id} + method: delete + httpMethod: delete + tag: challenge + typeScriptTag: challenge + description: Delete challenge + parameters: [] + responses: + - statusCode: '204' + description: '' + - url: /challenge/{public_id} + method: read + httpMethod: get + tag: challenge + typeScriptTag: challenge + description: Get Challenge + parameters: [] + responses: + - statusCode: '200' + description: '' + - url: /challenge/{public_id} + method: partialEdit + httpMethod: patch + tag: challenge + typeScriptTag: challenge + description: Partial edit challenge + parameters: + - name: title + schema: string + required: true + description: '' + example: TITLE + - name: description + schema: string + required: false + description: '' + - name: url + schema: string + required: false + description: '' + - name: public_id + schema: string + required: false + description: '' + - name: slogan + schema: string + required: false + description: '' + - name: start + schema: string + required: true + description: '' + example: START + - name: end + schema: string + required: false + description: '' + - name: type + schema: string + required: true + description: '' + example: TYPE + - name: goal + schema: string + required: true + description: '' + example: GOAL + - name: goal_value + schema: integer + required: false + description: '' + - name: goal_type + schema: string + required: true + description: '' + example: GOAL_TYPE + - name: visibility + schema: string + required: true + description: '' + example: VISIBILITY + - name: num_members + schema: string + required: false + description: '' + - name: calculation_method + schema: string + required: true + description: '' + example: CALCULATION_METHOD + - name: goal_progress + schema: number + required: false + description: '' + - name: enrollment_method + schema: string + required: true + description: '' + example: ENROLLMENT_METHOD + - name: default_enrollment_time + schema: string + required: false + description: '' + - name: repetition + schema: string + required: true + description: '' + example: REPETITION + - name: avatar + schema: string + required: false + description: '' + - name: data_source + schema: string + required: false + description: '' + - name: activity_types + schema: array + required: false + description: '' + - name: current_period_start + schema: string + required: false + description: '' + - name: current_period_end + schema: string + required: false + description: '' + - name: goal_cap + schema: boolean + required: false + description: '' + - name: total_calories + schema: number + required: false + description: '' + - name: total_distance + schema: number + required: false + description: '' + - name: total_steps + schema: number + required: false + description: '' + - name: total_points + schema: number + required: false + description: '' + - name: total_activity_duration + schema: string + required: false + description: '' + responses: + - statusCode: '200' + description: '' + - url: /challenge/{public_id} + method: update + httpMethod: put + tag: challenge + typeScriptTag: challenge + description: Edit challenge + parameters: + - name: title + schema: string + required: true + description: '' + example: TITLE + - name: description + schema: string + required: false + description: '' + - name: url + schema: string + required: false + description: '' + - name: public_id + schema: string + required: false + description: '' + - name: slogan + schema: string + required: false + description: '' + - name: start + schema: string + required: true + description: '' + example: START + - name: end + schema: string + required: false + description: '' + - name: type + schema: string + required: true + description: '' + example: TYPE + - name: goal + schema: string + required: true + description: '' + example: GOAL + - name: goal_value + schema: integer + required: false + description: '' + - name: goal_type + schema: string + required: true + description: '' + example: GOAL_TYPE + - name: visibility + schema: string + required: true + description: '' + example: VISIBILITY + - name: num_members + schema: string + required: false + description: '' + - name: calculation_method + schema: string + required: true + description: '' + example: CALCULATION_METHOD + - name: goal_progress + schema: number + required: false + description: '' + - name: enrollment_method + schema: string + required: true + description: '' + example: ENROLLMENT_METHOD + - name: default_enrollment_time + schema: string + required: false + description: '' + - name: repetition + schema: string + required: true + description: '' + example: REPETITION + - name: avatar + schema: string + required: false + description: '' + - name: data_source + schema: string + required: false + description: '' + - name: activity_types + schema: array + required: false + description: '' + - name: current_period_start + schema: string + required: false + description: '' + - name: current_period_end + schema: string + required: false + description: '' + - name: goal_cap + schema: boolean + required: false + description: '' + - name: total_calories + schema: number + required: false + description: '' + - name: total_distance + schema: number + required: false + description: '' + - name: total_steps + schema: number + required: false + description: '' + - name: total_points + schema: number + required: false + description: '' + - name: total_activity_duration + schema: string + required: false + description: '' + responses: + - statusCode: '200' + description: '' + - url: /challenge/{public_id}/deactivate_member + method: deactivateMember + httpMethod: post + tag: challenge + typeScriptTag: challenge + description: Deactivate member + parameters: + - name: profile + schema: string + required: true + description: A profile public_id is expected + example: PROFILE + - name: team + schema: string + required: false + description: A team public_id is expected + - name: isActive + schema: boolean + required: false + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + - name: profile + schema: string + required: true + description: '' + example: PROFILE + - name: team + schema: string + required: false + description: '' + - name: is_active + schema: boolean + required: false + description: '' + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '201' + description: '' + - url: /challenge/{public_id}/deactivate_member + method: deactivateMember + httpMethod: put + tag: challenge + typeScriptTag: challenge + description: This docstring is used by Django Rest Framework + parameters: + - name: profile + schema: string + required: true + description: '' + example: PROFILE + - name: team + schema: string + required: false + description: '' + - name: is_active + schema: boolean + required: false + description: '' + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '200' + description: '' + - url: /challenge/{public_id}/deactivate_members + method: deactivateMembers + httpMethod: post + tag: challenge + typeScriptTag: challenge + description: Deactivate members + parameters: + - name: profile + schema: string + required: true + description: A profile public_id is expected + example: PROFILE + - name: team + schema: string + required: false + description: A team public_id is expected + - name: isActive + schema: boolean + required: false + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + - name: profiles + schema: array + required: true + description: '' + - name: is_active + schema: boolean + required: false + description: '' + - name: team + schema: string + required: false + description: '' + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '201' + description: '' + - url: /challenge/{public_id}/deactivate_members + method: deactivateMembers + httpMethod: put + tag: challenge + typeScriptTag: challenge + description: This docstring is used by Django Rest Framework + parameters: + - name: profiles + schema: array + required: true + description: '' + - name: is_active + schema: boolean + required: false + description: '' + - name: team + schema: string + required: false + description: '' + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '200' + description: '' + - url: /challenge/{public_id}/leaderboard + method: leaderboard + httpMethod: get + tag: challenge + typeScriptTag: challenge + description: Leaderboard + parameters: + - name: dateRange + schema: integer + required: false + description: Index of the time period use + responses: + - statusCode: '200' + description: '' + - url: /challenge/{public_id}/leaderboard_history + method: getScoresHistory + httpMethod: get + tag: challenge + typeScriptTag: challenge + description: Leaderboard history + parameters: [] + responses: + - statusCode: '200' + description: '' + - url: /challenge/{public_id}/member + method: removeMember + httpMethod: delete + tag: challenge + typeScriptTag: challenge + description: Remove member + parameters: + - name: profile + schema: string + required: true + description: A profile public_id is expected + example: PROFILE + responses: + - statusCode: '204' + description: '' + - url: /challenge/{public_id}/member + method: memberCreate + httpMethod: post + tag: challenge + typeScriptTag: challenge + description: Add member + parameters: + - name: profile + schema: string + required: true + description: '' + example: PROFILE + - name: team + schema: string + required: false + description: '' + - name: is_active + schema: boolean + required: false + description: '' + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '201' + description: '' + - url: /challenge/{public_id}/member + method: memberAdd + httpMethod: put + tag: challenge + typeScriptTag: challenge + description: Add member + parameters: + - name: profile + schema: string + required: true + description: '' + example: PROFILE + - name: team + schema: string + required: false + description: '' + - name: is_active + schema: boolean + required: false + description: '' + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '200' + description: '' + - url: /challenge/{public_id}/members + method: getMembers + httpMethod: get + tag: challenge + typeScriptTag: challenge + description: Get members + parameters: + - name: limit + schema: integer + required: false + description: Number of results to return per page. + - name: offset + schema: integer + required: false + description: The initial index from which to return the results. + responses: + - statusCode: '200' + description: '' + - url: /challenge/{public_id}/members + method: addMembers + httpMethod: post + tag: challenge + typeScriptTag: challenge + description: Add members + parameters: + - name: profiles + schema: array + required: true + description: '' + - name: is_active + schema: boolean + required: false + description: '' + - name: team + schema: string + required: false + description: '' + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '201' + description: '' + - url: /challenge/{public_id}/members + method: addMembers + httpMethod: put + tag: challenge + typeScriptTag: challenge + description: Add members + parameters: + - name: profiles + schema: array + required: true + description: '' + - name: is_active + schema: boolean + required: false + description: '' + - name: team + schema: string + required: false + description: '' + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '200' + description: '' + - url: /challenge/{public_id}/periods + method: periods + httpMethod: get + tag: challenge + typeScriptTag: challenge + description: Periods + parameters: [] + responses: + - statusCode: '200' + description: '' + - url: /challenge/{public_id}/remove_members + method: removeMembers + httpMethod: post + tag: challenge + typeScriptTag: challenge + description: Remove members + parameters: + - name: profiles + schema: array + required: true + description: '' + - name: is_active + schema: boolean + required: false + description: '' + - name: team + schema: string + required: false + description: '' + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '201' + description: '' + - url: /connection/{connection_slug}/connect + method: disconnectWearable + httpMethod: delete + tag: connection + typeScriptTag: connection + description: Disconnect Wearable + parameters: + - name: profile + schema: string + required: true + description: A profile public_id is expected + example: PROFILE + responses: + - statusCode: '200' + description: OK + - url: /connection/{connection_slug}/connect + method: getOAuthUrl + httpMethod: post + tag: connection + typeScriptTag: connection + description: Connect wearable + parameters: + - name: profile + schema: string + required: true + description: '' + example: PROFILE + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '200' + description: '' + - url: /notification/send_to_all + method: sendToAllCreate + httpMethod: post + tag: notification + typeScriptTag: notification + description: Notification to all profiles in app + parameters: + - name: title + schema: string + required: true + description: '' + example: TITLE + - name: body + schema: string + required: true + description: '' + example: BODY + - name: schedule + schema: string + required: false + description: '' + - name: link + schema: string + required: false + description: '' + responses: + - statusCode: '201' + description: '' + - url: /notification/send_to_profiles + method: sendToProfilesCreate + httpMethod: post + tag: notification + typeScriptTag: notification + description: Notification to specific profiles + parameters: + - name: title + schema: string + required: true + description: '' + example: TITLE + - name: body + schema: string + required: true + description: '' + example: BODY + - name: schedule + schema: string + required: false + description: '' + - name: link + schema: string + required: false + description: '' + - name: profiles + schema: array + required: true + description: '' + responses: + - statusCode: '201' + description: '' + - url: /profile + method: list + httpMethod: get + tag: profile + typeScriptTag: profile + description: List Profiles + parameters: + - name: search + schema: string + required: false + description: A search term. + - name: ordering + schema: string + required: false + description: Which field to use when ordering the results. + - name: limit + schema: integer + required: false + description: Number of results to return per page. + - name: offset + schema: integer + required: false + description: The initial index from which to return the results. + responses: + - statusCode: '200' + description: '' + - url: /profile + method: create + httpMethod: post + tag: profile + typeScriptTag: profile + description: Create Profile + parameters: + - name: url + schema: string + required: false + description: '' + - name: public_id + schema: string + required: false + description: '' + - name: given_name + schema: string + required: false + description: '' + - name: family_name + schema: string + required: false + description: '' + - name: nickname + schema: string + required: false + description: '' + - name: gender + schema: string + required: false + description: '' + - name: birthdate + schema: string + required: false + description: '' + - name: zoneinfo + schema: string + required: false + description: '' + - name: locale + schema: string + required: false + description: '' + - name: reference + schema: string + required: true + description: '' + example: REFERENCE + - name: avatar + schema: string + required: false + description: '' + - name: bearer + schema: string + required: false + description: '' + responses: + - statusCode: '201' + description: '' + - url: /profile/{profile_public_id}/activity_segment + method: listActivitySegments + httpMethod: get + tag: profile + typeScriptTag: profile + description: Activity segment + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/biometric + method: listBiometricChanges + httpMethod: get + tag: profile + typeScriptTag: profile + description: Bio Metric + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/biometric_measurement + method: listBiometricChanges + httpMethod: get + tag: profile + typeScriptTag: profile + description: Biometric Measurement + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + - name: measurementType + schema: string + required: true + description: '' + example: MEASUREMENT_TYPE + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/bmi + method: getBmiOverTime + httpMethod: get + tag: profile + typeScriptTag: profile + description: BMI + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/daily_detail + method: getDailyDetail + httpMethod: get + tag: profile + typeScriptTag: profile + description: Daily details + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/daily_summary + method: getDailySummary + httpMethod: get + tag: profile + typeScriptTag: profile + description: Daily Summary + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + - name: deduplicate + schema: boolean + required: false + description: If set to true, duplicates will be aggregated. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/detail_sample + method: getDetailSamples + httpMethod: get + tag: profile + typeScriptTag: profile + description: Detail Sample + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/ecg_recordings + method: getEcgRecordings + httpMethod: get + tag: profile + typeScriptTag: profile + description: Electrocardiograms + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/ecg_recordings/data + method: getEcgRecordingsData + httpMethod: get + tag: profile + typeScriptTag: profile + description: Electrocardiogram data + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/ecg_recordings/pdf + method: getEcgPdf + httpMethod: get + tag: profile + typeScriptTag: profile + description: Electrocardiogram PDF + parameters: + - name: datetime + schema: string + required: true + description: >- + The timestamp when the ECG has been recorded in the format + `yyyymmddhhmmss`. e.g. `20210913132513` + example: DATETIME + - name: source + schema: string + required: true + description: '' + example: SOURCE + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/event + method: listEvents + httpMethod: get + tag: profile + typeScriptTag: profile + description: Event + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/event + method: eventCreate + httpMethod: post + tag: profile + typeScriptTag: profile + description: Create Event + parameters: + - name: description + schema: string + description: '' + - name: timestamp + schema: string + description: '' + - name: points + schema: number + description: '' + responses: + - statusCode: '201' + description: '' + - url: /profile/{profile_public_id}/heartrate_sample + method: getHeartrateSample + httpMethod: get + tag: profile + typeScriptTag: profile + description: Heart Rate Sample + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + - name: heartRateDetail + schema: boolean + required: false + description: If set to true it will add heart_rate_samples field + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/heartrate_summary + method: getHeartRateSummary + httpMethod: get + tag: profile + typeScriptTag: profile + description: Heart Rate Summary + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/height + method: listHeightChanges + httpMethod: get + tag: profile + typeScriptTag: profile + description: Height + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/sleep_detail + method: getSleepDetail + httpMethod: get + tag: profile + typeScriptTag: profile + description: Sleep detail + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/sleep_summary + method: getSleepSummary + httpMethod: get + tag: profile + typeScriptTag: profile + description: Sleep Summary + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + - name: detail + schema: boolean + required: false + description: >- + If set to true and only 1 result is returned, it will add a detail + field + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/stress_samples + method: getStressSamples + httpMethod: get + tag: profile + typeScriptTag: profile + description: Stress Sample + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/stress_summary + method: getStressSummary + httpMethod: get + tag: profile + typeScriptTag: profile + description: Stress Summary + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/track_sample + method: getGpxTrackSamples + httpMethod: get + tag: profile + typeScriptTag: profile + description: Track Sample + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/weight + method: listWeightChanges + httpMethod: get + tag: profile + typeScriptTag: profile + description: Weight + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + responses: + - statusCode: '200' + description: '' + - url: /profile/{profile_public_id}/workout + method: listWorkouts + httpMethod: get + tag: profile + typeScriptTag: profile + description: Workout + parameters: + - name: cursor + schema: string + required: false + description: The pagination cursor value. + - name: pageSize + schema: integer + required: false + description: Number of results to return per page. + - name: dateStart + schema: string + required: false + description: Lower bound of date or timestamp. + - name: dateEnd + schema: string + required: false + description: Upper bound of date or timestamp. + - name: deduplicate + schema: boolean + required: false + description: If set to true, duplicates will be aggregated. + - name: heartRateDetail + schema: boolean + required: false + description: >- + If set to true and page_size is 1, it will add heart_rate_samples + field + responses: + - statusCode: '200' + description: '' + - url: /profile/{public_id} + method: delete + httpMethod: delete + tag: profile + typeScriptTag: profile + description: Delete Profile + parameters: [] + responses: + - statusCode: '204' + description: '' + - url: /profile/{public_id} + method: read + httpMethod: get + tag: profile + typeScriptTag: profile + description: Get Profile + parameters: [] + responses: + - statusCode: '200' + description: '' + - url: /profile/{public_id} + method: updatePartial + httpMethod: patch + tag: profile + typeScriptTag: profile + description: Partial Update + parameters: + - name: url + schema: string + description: '' + - name: public_id + schema: string + description: '' + - name: given_name + schema: string + description: '' + - name: family_name + schema: string + description: '' + - name: nickname + schema: string + description: '' + - name: gender + schema: string + description: '' + - name: birthdate + schema: string + description: '' + - name: zoneinfo + schema: string + description: '' + - name: locale + schema: string + description: '' + - name: total_calories + schema: number + description: '' + - name: total_distance + schema: number + description: '' + - name: total_steps + schema: number + description: '' + - name: total_points + schema: number + description: '' + - name: total_activity_duration + schema: string + description: '' + - name: reference + schema: string + description: '' + - name: teams + schema: array + description: '' + - name: avatar + schema: string + description: '' + - name: created_at + schema: string + description: '' + - name: updated_at + schema: string + description: '' + - name: num_active_challenges + schema: string + description: '' + - name: num_done_challenges + schema: string + description: '' + - name: num_future_challenges + schema: string + description: '' + responses: + - statusCode: '200' + description: '' + - url: /profile/{public_id} + method: update + httpMethod: put + tag: profile + typeScriptTag: profile + description: Update profile + parameters: + - name: url + schema: string + description: '' + - name: public_id + schema: string + description: '' + - name: given_name + schema: string + description: '' + - name: family_name + schema: string + description: '' + - name: nickname + schema: string + description: '' + - name: gender + schema: string + description: '' + - name: birthdate + schema: string + description: '' + - name: zoneinfo + schema: string + description: '' + - name: locale + schema: string + description: '' + - name: total_calories + schema: number + description: '' + - name: total_distance + schema: number + description: '' + - name: total_steps + schema: number + description: '' + - name: total_points + schema: number + description: '' + - name: total_activity_duration + schema: string + description: '' + - name: reference + schema: string + description: '' + - name: teams + schema: array + description: '' + - name: avatar + schema: string + description: '' + - name: created_at + schema: string + description: '' + - name: updated_at + schema: string + description: '' + - name: num_active_challenges + schema: string + description: '' + - name: num_done_challenges + schema: string + description: '' + - name: num_future_challenges + schema: string + description: '' + responses: + - statusCode: '200' + description: '' + - url: /profile/{public_id}/challenge + method: challenge + httpMethod: get + tag: profile + typeScriptTag: profile + description: Challenge + parameters: + - name: recent + schema: integer + required: false + description: Show challenges that have not ended in the last N weeks + - name: dateStart + schema: string + required: false + description: |- + Only return challenges that are active after this time + + Note: this only affects challenges that are not joined. + + Defaults to now + - name: dateEnd + schema: string + required: false + description: |- + Only return challenges that are active before this time + + Note: this only affects challenges that are not joined. + + Defaults to now + responses: + - statusCode: '200' + description: '' + - url: /profile/{public_id}/challenges + method: challenges + httpMethod: get + tag: profile + typeScriptTag: profile + description: This docstring is used by Django Rest Framework + parameters: [] + responses: + - statusCode: '200' + description: '' + - url: /profile/{public_id}/connections + method: connections + httpMethod: get + tag: profile + typeScriptTag: profile + description: Connections + parameters: + - name: redirect + schema: string + required: false + description: >- + After connecting redirect back to this url. + + + Note: has to be a valid http url. For deeplinks (to apps) first + redirect to your own backend and then deeplink from there. + + + Note: the user is only redirected on a successfull connection, + otherwise an error screen is shown. (see redirect_on_error to change + this) + + + Note: if this parameter is omitted, then user will see a generic + success screen. + - name: redirectOnError + schema: boolean + required: false + description: >- + If enabled, then user will also be redirected to the redirect url if + an error occurs + + + Note: a query parameter 'error' is added to the redirect url. Possible + values are access_denied, unknown. New values may be added at anytime + + + Note: for backwards compatibility the default is false, but this will + be changed in the next breaking release + responses: + - statusCode: '200' + description: '' + - url: /team + method: list + httpMethod: get + tag: team + typeScriptTag: team + description: List Teams + parameters: + - name: limit + schema: integer + required: false + description: Number of results to return per page. + - name: offset + schema: integer + required: false + description: The initial index from which to return the results. + responses: + - statusCode: '200' + description: '' + - url: /team + method: create + httpMethod: post + tag: team + typeScriptTag: team + description: Create Team + parameters: + - name: description + schema: string + required: true + description: '' + example: DESCRIPTION + - name: name + schema: string + required: true + description: '' + example: NAME + - name: public_id + schema: string + required: false + description: '' + - name: url + schema: string + required: false + description: '' + - name: num_members + schema: string + required: false + description: '' + - name: members + schema: array + required: false + description: '' + - name: avatar + schema: string + required: false + description: '' + responses: + - statusCode: '201' + description: '' + - url: /team/{public_id} + method: delete + httpMethod: delete + tag: team + typeScriptTag: team + description: Deletes a Team + parameters: [] + responses: + - statusCode: '204' + description: '' + - url: /team/{public_id} + method: read + httpMethod: get + tag: team + typeScriptTag: team + description: Team + parameters: [] + responses: + - statusCode: '200' + description: '' + - url: /team/{public_id} + method: editTeamPartial + httpMethod: patch + tag: team + typeScriptTag: team + description: Partial Edit a Team + parameters: + - name: description + schema: string + required: true + description: '' + example: DESCRIPTION + - name: name + schema: string + required: true + description: '' + example: NAME + - name: public_id + schema: string + required: false + description: '' + - name: url + schema: string + required: false + description: '' + - name: num_members + schema: string + required: false + description: '' + - name: members + schema: array + required: false + description: '' + - name: avatar + schema: string + required: false + description: '' + responses: + - statusCode: '200' + description: '' + - url: /team/{public_id} + method: update + httpMethod: put + tag: team + typeScriptTag: team + description: Edit Team + parameters: + - name: description + schema: string + required: true + description: '' + example: DESCRIPTION + - name: name + schema: string + required: true + description: '' + example: NAME + - name: public_id + schema: string + required: false + description: '' + - name: url + schema: string + required: false + description: '' + - name: num_members + schema: string + required: false + description: '' + - name: members + schema: array + required: false + description: '' + - name: avatar + schema: string + required: false + description: '' + responses: + - statusCode: '200' + description: '' + - url: /team/{public_id}/member + method: removeMember + httpMethod: delete + tag: team + typeScriptTag: team + description: Remove member + parameters: + - name: profile + schema: string + required: true + description: A profile public_id is expected + example: PROFILE + responses: + - statusCode: '204' + description: '' + - url: /team/{public_id}/member + method: addMember + httpMethod: post + tag: team + typeScriptTag: team + description: Add member + parameters: + - name: profile + schema: string + required: true + description: '' + example: PROFILE + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '201' + description: '' + - url: /team/{public_id}/member + method: addMember + httpMethod: put + tag: team + typeScriptTag: team + description: Add member + parameters: + - name: profile + schema: string + required: true + description: '' + example: PROFILE + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '200' + description: '' + - url: /team/{public_id}/members + method: addMembers + httpMethod: post + tag: team + typeScriptTag: team + description: Add members + parameters: + - name: profiles + schema: array + required: true + description: '' + - name: is_active + schema: boolean + required: false + description: '' + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '201' + description: '' + - url: /team/{public_id}/members + method: addMembers + httpMethod: put + tag: team + typeScriptTag: team + description: Add members + parameters: + - name: profiles + schema: array + required: true + description: '' + - name: is_active + schema: boolean + required: false + description: '' + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '200' + description: '' + - url: /team/{public_id}/remove_members + method: removeMembers + httpMethod: post + tag: team + typeScriptTag: team + description: Remove members + parameters: + - name: profiles + schema: array + required: true + description: '' + - name: is_active + schema: boolean + required: false + description: '' + - name: joined + schema: string + required: false + description: '' + responses: + - statusCode: '201' + description: '' + - url: /token + method: create + httpMethod: post + tag: token + typeScriptTag: token + description: Create Token + parameters: + - name: bearer + schema: string + description: '' + responses: + - statusCode: '201' + description: '' +numberOfSchemas: 81 +apiDescription: This is the WeFitter API diff --git a/sdks/db/category-cache.yaml b/sdks/db/category-cache.yaml index 66ed4904bb..39ba0e386f 100644 --- a/sdks/db/category-cache.yaml +++ b/sdks/db/category-cache.yaml @@ -339,3 +339,4 @@ apis: Space Invoices-undefined: Proposal & Invoice Management TheirStack-undefined: Lead Generation Tilled-undefined: Payment Processing + WeFitter-undefined: Fitness diff --git a/sdks/db/custom-request-last-fetched.yaml b/sdks/db/custom-request-last-fetched.yaml index 57ad956e4f..186755d67e 100644 --- a/sdks/db/custom-request-last-fetched.yaml +++ b/sdks/db/custom-request-last-fetched.yaml @@ -319,3 +319,4 @@ lastUpdated: theirstack.com: 2024-03-29T23:20:28.824Z spaceinvoices.com: 2024-03-29T23:20:30.541Z seomonitor.com: 2024-03-29T23:20:31.541Z + wefitter.com: 2024-03-29T23:32:14.393Z diff --git a/sdks/db/custom-request-specs/wefitter.com.yaml b/sdks/db/custom-request-specs/wefitter.com.yaml new file mode 100644 index 0000000000..5a419468b8 --- /dev/null +++ b/sdks/db/custom-request-specs/wefitter.com.yaml @@ -0,0 +1,5617 @@ +openapi: 3.0.0 +info: + title: WeFitter API + description: This is the WeFitter API + termsOfService: https://www.wefitter.com/privacy/ + contact: + email: hello@wefitter.com + license: + name: BSD License + version: v1.3 +security: + - BearerProfile: [] +paths: + /app/totals/: + get: + operationId: app_totals_list + summary: Totals + description: >- + Total values for calories, distance, steps, points and activity duration + over all profiles in the app. + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AppTotals' + tags: + - app + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: [] + /challenge/: + get: + operationId: challenge_list + summary: List Challenges + description: Lists all available challenges + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + - name: recent + in: query + description: Show challenges that have not ended in the last N weeks + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ChallengeList' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + post: + operationId: challenge_create + summary: Create challenge + description: Creates a new challenge + requestBody: + $ref: '#/components/requestBodies/ChallengeDetail' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + parameters: [] + /challenge/{challenge_public_id}/team/: + get: + operationId: challenge_team_list + summary: Team leaderboard + description: > + List the standings of different teams in challenges (don't have to be + team challenges). + + This endpoint returns a list of objects. + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + - name: date_range + in: query + description: Index of the time period use + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/LeaderboardTeam' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: challenge_public_id + in: path + required: true + schema: + type: string + /challenge/{challenge_public_id}/team/{team_public_id}/: + get: + operationId: challenge_team_read + summary: Team contribution + description: | + List team members' contribution to the challenge. + This endpoint returns a list of objects. + parameters: + - name: date_range + in: query + description: Index of the time period use + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/LeaderboardProfile' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: challenge_public_id + in: path + required: true + schema: + type: string + - name: team_public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/: + get: + operationId: challenge_read + summary: Get Challenge + description: Gets a single challenge + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: challenge_update + summary: Edit challenge + description: Edits a challenge + requestBody: + $ref: '#/components/requestBodies/ChallengeDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + patch: + operationId: challenge_partial_update + summary: Partial edit challenge + description: Edits a challenge + requestBody: + $ref: '#/components/requestBodies/ChallengeDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + delete: + operationId: challenge_delete + summary: Delete challenge + description: deletes a challenge + responses: + '204': + description: '' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/deactivate_member/: + post: + operationId: challenge_deactivate_member_create + summary: Deactivate member + description: Deactivate a member from the challenge + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + - name: team + in: query + description: A team public_id is expected + required: false + schema: + type: string + format: uuid + - name: is_active + in: query + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + required: false + schema: + type: boolean + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: challenge_deactivate_member_update + description: This docstring is used by Django Rest Framework + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + tags: + - challenge + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/deactivate_members/: + post: + operationId: challenge_deactivate_members_create + summary: Deactivate members + description: Deactivate multiple members from the challenge + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + - name: team + in: query + description: A team public_id is expected + required: false + schema: + type: string + format: uuid + - name: is_active + in: query + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + required: false + schema: + type: boolean + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: challenge_deactivate_members_update + description: This docstring is used by Django Rest Framework + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/leaderboard/: + get: + operationId: challenge_leaderboard + summary: Leaderboard + description: | + Displays the leaderboard for a challenge. + This endpoint returns a list of objects. + parameters: + - name: date_range + in: query + description: Index of the time period use + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/LeaderboardProfileAndTeam' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/leaderboard_history/: + get: + operationId: challenge_leaderboard_history + summary: Leaderboard history + description: > + Retrieve the scores of the authenticated profile for all periods since + the profile joined the challenge. + + This endpoint returns a list of objects. + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/LeaderboardHistory' + tags: + - challenge + security: + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/member/: + post: + operationId: challenge_member_create + summary: Add member + description: > + Add member to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: challenge_member_update + summary: Add member + description: > + Add member to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + delete: + operationId: challenge_member_delete + summary: Remove member + description: Remove a member from the challenge + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + responses: + '204': + description: '' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/members/: + get: + operationId: challenge_members_read + summary: Get members + description: Get a paginated list of members enrolled to a Challenge + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + post: + operationId: challenge_members_create + summary: Add members + description: >- + Add members to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + + + Note: for the GET/POST endpoint an admin bearer token is required, while + the GET also accepts profile bearer tokens + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + put: + operationId: challenge_members_update + summary: Add members + description: >- + Add members to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + + + Note: for the GET/POST endpoint an admin bearer token is required, while + the GET also accepts profile bearer tokens + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/periods/: + get: + operationId: challenge_periods + summary: Periods + description: | + Get all periods for the challenge. + This endpoint returns a list of objects. + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengePeriod' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/remove_members/: + post: + operationId: challenge_remove_members + summary: Remove members + description: Remove members from the challenge + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /connection/{connection_slug}/connect/: + post: + operationId: connection_connect_create + summary: Connect wearable + description: Get OAuth URL for this connection. + requestBody: + $ref: '#/components/requestBodies/ProfileAsProfilePublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/AppConnectionUrl' + tags: + - connection + deprecated: false + delete: + operationId: connection_connect_delete + summary: Disconnect Wearable + description: Disconnect a wearables connection + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + responses: + '200': + description: OK + tags: + - connection + deprecated: false + parameters: + - name: connection_slug + in: path + required: true + schema: + type: string + /insights/bio_age: + get: + operationId: insights_bio_age_read + summary: Get someones biological age on a weekly basis. + description: '' + parameters: + - name: start_date + in: query + required: true + schema: + type: string + format: date + - name: end_date + in: query + required: true + schema: + type: string + format: date + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BioAge' + tags: + - insights + parameters: [] + /loyalty/get_recommended_products: + get: + operationId: loyalty_get_recommended_products_list + description: '' + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/RecommendedProducts' + tags: + - loyalty + parameters: [] + /loyalty/get_shoppingcart_link: + get: + operationId: loyalty_get_shoppingcart_link_read + description: '' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ShoppingCart' + tags: + - loyalty + parameters: [] + /notification/send_to_all/: + post: + operationId: notification_send_to_all_create + summary: Notification to all profiles in app + description: Send a notification to all registered devices in the app. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Notification' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Notification' + tags: + - notification + security: + - BearerAdmin: [] + deprecated: false + parameters: [] + /notification/send_to_profiles/: + post: + operationId: notification_send_to_profiles_create + summary: Notification to specific profiles + description: >- + Send a notification to all registered devices for the specified + profiles. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationForProfiles' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationForProfiles' + tags: + - notification + security: + - BearerAdmin: [] + deprecated: false + parameters: [] + /profile/: + get: + operationId: profile_list + summary: List Profiles + description: Lists all available profiles + parameters: + - name: search + in: query + description: A search term. + required: false + schema: + type: string + - name: ordering + in: query + description: Which field to use when ordering the results. + required: false + schema: + type: string + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ProfileList' + tags: + - profile + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + post: + operationId: profile_create + summary: Create Profile + description: > + + Creates a new profile. + + The bearer field contains a profile bearer token. When this is used in + the Authorization header actions are performed + + as that profile, which will also enable access to private data. + + Using a profile bearer token disables administrative features such as + creating profiles, making this token safe + + for 'public' use. + + A profile bearer token has no expiration, so it remains valid as long as + the profile is active. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileCreated' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileCreated' + tags: + - profile + security: + - BearerAdmin: [] + deprecated: false + parameters: [] + /profile/{profile_public_id}/activity_segment/: + get: + operationId: profile_activity_segment_list + summary: Activity segment + description: Lists segments of activities and small non-workout-like movements. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Activity' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/biometric/: + get: + operationId: profile_biometric_list + summary: Bio Metric + description: Lists changes in weight, height and bmi for the profile. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BioMetric' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/biometric_measurement/: + get: + operationId: profile_biometric_measurement_list + summary: Biometric Measurement + description: List changes in biometric measurements for the profile. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: measurement_type + in: query + required: true + schema: + type: string + enum: + - BLOOD_PRESSURE + - BODY_FAT + - BODY_FAT_MASS + - GLUCOSE + - SYSTOLIC_BP + - DIASTOLIC_BP + - PULSE_BP + - TEMPERATURE + - BLOOD_OXYGEN + - HRV + - VO2_MAX + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BiometricMeasurement' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/bmi/: + get: + operationId: profile_bmi_list + summary: BMI + description: Presents the Body-Mass-Index over time. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BMI' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/daily_detail/: + get: + operationId: profile_daily_detail_list + summary: Daily details + description: Intraday data measured at a single point in time. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/DailyDetail' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/daily_summary/: + get: + operationId: profile_daily_summary_list + summary: Daily Summary + description: Provides summarized data per day. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: deduplicate + in: query + description: If set to true, duplicates will be aggregated. + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/DailySummary' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/detail_sample/: + get: + operationId: profile_detail_sample_list + summary: Detail Sample + description: Presents detail samples. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/DetailSample' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/ecg_recordings/: + get: + operationId: profile_ecg_recordings_list + summary: Electrocardiograms + description: | + + This endpoint returns a list of ECG recordings. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ECGRecordings' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/ecg_recordings/data/: + get: + operationId: profile_ecg_recordings_data_list + summary: Electrocardiogram data + description: > + + This endpoint returns an ECG recording with data as an array of tuples + `[(time, value)]`. + + Set the argument `date_end` to request a specific recording or leave it + empty to receive the latest recording. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ECGRecording' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/ecg_recordings/pdf/: + get: + operationId: profile_ecg_recordings_pdf_list + summary: Electrocardiogram PDF + description: >- + Returns a PDF with generated ECG charts from a specific source and time. + Contact api-support@wefitter.com to gain access. + parameters: + - name: datetime + in: query + description: >- + The timestamp when the ECG has been recorded in the format + `yyyymmddhhmmss`. e.g. `20210913132513` + required: true + schema: + type: string + format: date-time + - name: source + in: query + required: true + schema: + type: string + enum: + - NONE + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + responses: + '200': + description: '' + tags: + - profile + security: + - BearerProfile: [] + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/event/: + get: + operationId: profile_event_list + summary: Event + description: Lists events, generic actions for which points have been awarded. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Event' + tags: + - profile + deprecated: false + post: + operationId: profile_event_create + summary: Create Event + description: Create a new event for the profile. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Event' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Event' + tags: + - profile + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/heartrate_sample/: + get: + operationId: profile_heartrate_sample_list + summary: Heart Rate Sample + description: Heart Rate measured at a single point in time. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: heart_rate_detail + in: query + description: If set to true it will add heart_rate_samples field + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/HeartRateSample' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/heartrate_summary/: + get: + operationId: profile_heartrate_summary_list + summary: Heart Rate Summary + description: Presents heart rate information. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/HeartRateSummary' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/height/: + get: + operationId: profile_height_list + summary: Height + description: Lists changes in height for the profile. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Height' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/sleep_detail/: + get: + operationId: profile_sleep_detail_list + summary: Sleep detail + description: Provides sleep detail data. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SleepDetail' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/sleep_summary/: + get: + operationId: profile_sleep_summary_list + summary: Sleep Summary + description: Provides summarized sleep data. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: detail + in: query + description: >- + If set to true and only 1 result is returned, it will add a detail + field + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SleepSummary' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/stress_samples/: + get: + operationId: profile_stress_samples_list + summary: Stress Sample + description: Presents stress samples. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/StressSample' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/stress_summary/: + get: + operationId: profile_stress_summary_list + summary: Stress Summary + description: Presents stress summaries. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/StressSummary' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/track_sample/: + get: + operationId: profile_track_sample_list + summary: Track Sample + description: Presents GPX track samples. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TrackSample' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/weight/: + get: + operationId: profile_weight_list + summary: Weight + description: Lists changes in weight for the profile. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Weight' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/workout/: + get: + operationId: profile_workout_list + summary: Workout + description: >- + Lists workouts associated with the profile. Used to be known as + Activity. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: deduplicate + in: query + description: If set to true, duplicates will be aggregated. + required: false + schema: + type: boolean + - name: heart_rate_detail + in: query + description: >- + If set to true and page_size is 1, it will add heart_rate_samples + field + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Workout' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{public_id}/: + get: + operationId: profile_read + summary: Get Profile + description: Gets a single profile + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + tags: + - profile + deprecated: false + put: + operationId: profile_update + summary: Update profile + description: Updates the specified profile, excluding ID, team and public id. + requestBody: + $ref: '#/components/requestBodies/ProfileDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + tags: + - profile + deprecated: false + patch: + operationId: profile_partial_update + summary: Partial Update + description: Performs a partial update + requestBody: + $ref: '#/components/requestBodies/ProfileDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + tags: + - profile + deprecated: false + delete: + operationId: profile_delete + summary: Delete Profile + description: Deletes the specified profile, if created by the app. + responses: + '204': + description: '' + tags: + - profile + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /profile/{public_id}/challenge/: + get: + operationId: profile_challenge + summary: Challenge + description: > + Provides a list of challenges where the profile can participate and is + already participating in. + + + This endpoint returns a list of objects. + parameters: + - name: recent + in: query + description: Show challenges that have not ended in the last N weeks + required: false + schema: + type: integer + - name: date_start + in: query + description: |- + Only return challenges that are active after this time + + Note: this only affects challenges that are not joined. + + Defaults to now + required: false + x-nullable: true + schema: + type: string + format: date-time + - name: date_end + in: query + description: |- + Only return challenges that are active before this time + + Note: this only affects challenges that are not joined. + + Defaults to now + required: false + x-nullable: true + schema: + type: string + format: date-time + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileChallengeList' + tags: + - profile + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /profile/{public_id}/challenges/: + get: + operationId: profile_challenges + description: This docstring is used by Django Rest Framework + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileChallengeList' + tags: + - profile + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /profile/{public_id}/connections/: + get: + operationId: profile_connections + summary: Connections + description: | + Lists the connections available for a profile and their "state". + This endpoint returns a list of objects. + parameters: + - name: redirect + in: query + description: >- + After connecting redirect back to this url. + + + Note: has to be a valid http url. For deeplinks (to apps) first + redirect to your own backend and then deeplink from there. + + + Note: the user is only redirected on a successfull connection, + otherwise an error screen is shown. (see redirect_on_error to change + this) + + + Note: if this parameter is omitted, then user will see a generic + success screen. + required: false + schema: + type: string + minLength: 1 + - name: redirect_on_error + in: query + description: >- + If enabled, then user will also be redirected to the redirect url if + an error occurs + + + Note: a query parameter 'error' is added to the redirect url. + Possible values are access_denied, unknown. New values may be added + at anytime + + + Note: for backwards compatibility the default is false, but this + will be changed in the next breaking release + required: false + schema: + type: boolean + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAppConnectionList' + tags: + - profile + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /team/: + get: + operationId: team_list + summary: List Teams + description: List all available teams + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/TeamList' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + post: + operationId: team_create + summary: Create Team + description: Creates a new team + requestBody: + $ref: '#/components/requestBodies/TeamDetail' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: [] + /team/{public_id}/: + get: + operationId: team_read + summary: Team + description: Get a single team + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: team_update + summary: Edit Team + description: Creates a new team + requestBody: + $ref: '#/components/requestBodies/TeamDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + patch: + operationId: team_partial_update + summary: Partial Edit a Team + description: Creates a new team + requestBody: + $ref: '#/components/requestBodies/TeamDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + delete: + operationId: team_delete + summary: Deletes a Team + description: Deletes an existing team + responses: + '204': + description: '' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /team/{public_id}/member/: + post: + operationId: team_member_create + summary: Add member + description: Add member to a team + requestBody: + $ref: '#/components/requestBodies/ProfileAsProfilePublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicId' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: team_member_update + summary: Add member + description: Add member to a team + requestBody: + $ref: '#/components/requestBodies/ProfileAsProfilePublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicId' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + delete: + operationId: team_member_delete + summary: Remove member + description: Remove a member from the team + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + responses: + '204': + description: '' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /team/{public_id}/members/: + post: + operationId: team_members_create + summary: Add members + description: Add members to a team + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsList' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + tags: + - team + security: + - BearerAdmin: [] + deprecated: false + put: + operationId: team_members_update + summary: Add members + description: Add members to a team + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsList' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + tags: + - team + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /team/{public_id}/remove_members/: + post: + operationId: team_remove_members + summary: Remove members + description: Remove members from the team + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsList' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + tags: + - team + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /token/: + post: + operationId: token_create + summary: Create Token + description: > + + In order to create a token, perform a POST request to this endpoint, + example:
+ + + + + + +
Application ID123
Application SecretABC
Authorization header formatAuthorization: base64(app_id:app_secret)
Expected resultAuthorization: MTIzOkFCQw==
+ + For testing purposes, a CURL can be used: + +
+
+        curl -X POST -H "Authorization: Basic MTIzOkFCQw=="
+        https://api.wefitter.com/api/v1.3/token/
+
+        # alternatively
+
+        curl -X POST --user 123:ABC https://api.wefitter.com/api/v1.3/token/
+
+        
+ + + The response to a successful request should look like this: + +
+
+        {
+            "bearer": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOiIxNTY2NTYxMzk2IiwiaWF0IjoxNTE2MjM5MDIyfQ.14x12h5VMJjAV2kFB5cCrfFmZhryBAYGk9N-vhyDl00"
+        }
+
+        
+ requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Token' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Token' + tags: + - token + security: + - Basic: [] + deprecated: false + parameters: [] +tags: + - name: profile + description: > + + Profiles are containers for wearables data. + + The profiles can be seen as an extension of users in a different system. + + Profiles are anonymous objects which can participate in teams and + challenges. + + + Keep in mind, listing profiles and creating profiles need an + administrative bearer token, all profile specific actions + + need a seperate bearer token that is returned after creating a profile. + This bearer token is used in place of the + + administrative bearer token. (see profile create action for more + information) + - name: challenge + description: >+ + + WeFitter API’s challenge engine will bring endless engagement to your + platform. + + For more information about the possibilities in challenges please go to + https://www.wefitter.com/en-us/features/gamification/ + + + Challenges have multilanguage support on the fields: `Title`, `Slogan`, + and `Description`. + + By default, challenges get the default-language that is configured in the + app. Whenever a challenge is requested through the API this challenge will + be presented in the default language. + + If another language is preferred, this can be requested by adding the + header parameter `Accept-Language` stating the language short code (ex. + `en` for english). If this language short code is not present in the title + of the challenge, the default language will be returned. + + + These translation fields contain JSON strings, for example: + + ```{"en":"this is the English title","nl":"this is the Dutch title"}``` + + So to create a multilanguage challenge, please provide the title, slogan, + and description field as json strings, be aware that because of + serialization this should be formed with backward slashes: + + + + + + +
+ { + + + "title": "{\"en\":\"this is the English title\", \"nl\":\"this is the + dutch title\"}", + + + "slogan": "{\"en\":\"this is the English title\", \"nl\":\"this is the + dutch slogan\"}", + + + "description": "{\"en\":\"this is the English title\", \"nl\":\"this is + the dutch description\"}", + + + } + +
+ + - name: connection + description: Connections are the links between profiles and their wearables. + - name: token + description: > + +

+ + Before any calls can be made to wefitter, BasicAuth is needed to verify + the identity of the requesting party. + + This call will result into a Bearer token which has administrator + privileges and is valid for 1 day. + + This token can be used to create profiles, challenges, etc. + +

+ + +

+ + The returned bearer is a JWT (JSON Web Token). + +

+ - name: notification + description: | + Send a notification to all devices for the specified profiles + The data will be sent to the client in the following format: + ``` + { + "app": , + "title": , + "body": <body>, + "link": <optional link> + } + ``` +servers: + - url: https://api.wefitter.com/api/v1.3 +components: + requestBodies: + TeamDetail: + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + required: true + ChallengeDetail: + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + required: true + ProfileAsProfilePublicIdAndTeamAsTeamPublicId: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId' + required: true + ProfilePublicIdsListAndTeamAsPublicId: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + required: true + ProfileAsProfilePublicId: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicId' + required: true + ProfileDetail: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + required: true + ProfilePublicIdsList: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + required: true + securitySchemes: + Basic: + type: http + description: >- + Basic Authentication is used to create administrator bearer tokens. + + + Once a bearer token has been made, remove this auth. ('logout' in + Swagger') + scheme: basic + BearerProfile: + type: apiKey + name: Authorization + in: header + description: >- + Bearer authentication for logged-in profiles. + + + When using the GUI, please don't forget to prefix your bearer tokens + with the text 'bearer', followed by a space. + BearerAdmin: + type: apiKey + name: Authorization + in: header + description: >- + Bearer authentication for administrators. + + + When using the GUI, please don't forget to prefix your bearer tokens + with the text 'bearer', followed by a space. + schemas: + AppTotals: + type: object + properties: + total_calories: + title: Total calories + type: number + total_distance: + title: Total distance + type: number + total_steps: + title: Total steps + type: number + total_points: + title: Total points + type: number + total_activity_duration: + title: Total activity duration + type: string <iso8601 duration> + minLength: 1 + ChallengeActivityType: + required: + - activity_type + type: object + properties: + activity_type: + title: Activity type + type: string + enum: + - RUNNING + - CROSSFIT + - CYCLING + - SWIMMING + - OTHER + - ROWING + - WALKING + - MINDFULNESS + - YOGA + - STRENGTH_TRAINING + ChallengeList: + required: + - title + - start + - type + - goal + - goal_type + - visibility + - repetition + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + title: + title: Title + type: string + minLength: 1 + slogan: + title: Slogan + type: string + description: + title: Description + type: string + start: + title: Start + type: string + format: date-time + end: + title: End + type: string + format: date-time + nullable: true + type: + title: Type + type: string + enum: + - INDIVIDUAL + - GROUP + - TEAM + goal: + title: Goal + type: string + enum: + - DAILY + - TOTAL + - WEEKLY + - MONTHLY + goal_value: + title: Goal value + type: integer + maximum: 2147483647 + minimum: -2147483648 + nullable: true + goal_type: + title: Goal type + type: string + enum: + - POINTS + - DISTANCE + - CALORIES + - DURATION + - STEPS + visibility: + title: Visibility + type: string + enum: + - PUBLIC + - PRIVATE + num_members: + title: Num members + type: string + readOnly: true + repetition: + title: Repetition + type: string + enum: + - NONE + - STREAK + - STICKTOIT + - GOALBREAKER + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + data_source: + title: Data source + type: string + readOnly: true + minLength: 1 + activity_types: + type: array + items: + $ref: '#/components/schemas/ChallengeActivityType' + current_period_start: + title: Current period start + description: >- + The start (exclusive) of the current period. Null if the challenge + has not started yet. + type: string + format: date-time + readOnly: true + current_period_end: + title: Current period end + description: >- + The end (exclusive) of the current period. Null if the challenge end + has passed. + type: string + format: date-time + readOnly: true + goal_cap: + title: Goal cap + description: Whether scores should be unable to surpass the goal value. + type: boolean + ChallengeDetail: + required: + - title + - start + - type + - goal + - goal_type + - visibility + - calculation_method + - enrollment_method + - repetition + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + title: + title: Title + type: string + minLength: 1 + slogan: + title: Slogan + type: string + description: + title: Description + type: string + start: + title: Start + type: string + format: date-time + end: + title: End + type: string + format: date-time + nullable: true + type: + title: Type + type: string + enum: + - INDIVIDUAL + - GROUP + - TEAM + goal: + title: Goal + type: string + enum: + - DAILY + - TOTAL + - WEEKLY + - MONTHLY + goal_value: + title: Goal value + type: integer + maximum: 2147483647 + minimum: -2147483648 + nullable: true + goal_type: + title: Goal type + type: string + enum: + - POINTS + - DISTANCE + - CALORIES + - DURATION + - STEPS + visibility: + title: Visibility + type: string + enum: + - PUBLIC + - PRIVATE + num_members: + title: Num members + type: string + readOnly: true + calculation_method: + title: Calculation method + type: string + enum: + - SUM + - AVERAGE + goal_progress: + title: Goal progress + description: >- + Progress towards the goal, from perspective of profile whose bearer + is used for authentication: can be an individual/team/global score. + When goal is duration, this is the duration in seconds. When an + admin token is used, returns 0.0. + type: number + readOnly: true + enrollment_method: + title: Enrollment method + type: string + enum: + - AUTOMATIC + - MANUAL + default_enrollment_time: + title: Default enrollment time + type: string + enum: + - CHALLENGE_START + - ENROLLMENT_TIME + repetition: + title: Repetition + type: string + enum: + - NONE + - STREAK + - STICKTOIT + - GOALBREAKER + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + data_source: + title: Data source + type: string + readOnly: true + minLength: 1 + activity_types: + type: array + items: + $ref: '#/components/schemas/ChallengeActivityType' + current_period_start: + title: Current period start + description: >- + The start (exclusive) of the current period. Null if the challenge + has not started yet. + type: string + format: date-time + readOnly: true + current_period_end: + title: Current period end + description: >- + The end (exclusive) of the current period. Null if the challenge end + has passed. + type: string + format: date-time + readOnly: true + goal_cap: + title: Goal cap + description: Whether scores should be unable to surpass the goal value. + type: boolean + total_calories: + title: Total calories + type: number + readOnly: true + total_distance: + title: Total distance + type: number + readOnly: true + total_steps: + title: Total steps + type: number + readOnly: true + total_points: + title: Total points + type: number + readOnly: true + total_activity_duration: + title: Total activity duration + type: string <iso8601 duration> + readOnly: true + minLength: 1 + LeaderboardTeam: + required: + - name + - avatar + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + num_members: + title: Num members + type: string + readOnly: true + score: + title: Score + type: number + readOnly: true + position: + title: Position + type: integer + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + TeamProfile: + description: Team of which this profile is a member of + required: + - name + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + LeaderboardProfile: + required: + - avatar + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + name: + title: Name + type: string + readOnly: true + minLength: 1 + gender: + title: Gender + type: string + enum: + - M + - F + - X + teams: + description: Team of which this profile is a member of + type: array + items: + $ref: '#/components/schemas/TeamProfile' + readOnly: true + reference: + title: Reference + type: string + readOnly: true + minLength: 1 + score: + title: Score + type: number + readOnly: true + position: + title: Position + type: integer + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + ProfileAsProfilePublicIdAndTeamAsTeamPublicId: + required: + - profile + type: object + properties: + profile: + title: Profile + description: A profile public_id is expected + type: string + format: uuid + team: + title: Team + description: A team public_id is expected + type: string + format: uuid + is_active: + title: Is active + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + type: boolean + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + ProfilePublicIdsListAndTeamAsPublicId: + required: + - profiles + type: object + properties: + profiles: + type: array + items: + type: string + format: uuid + is_active: + title: Is active + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + type: boolean + team: + title: Team + description: A team public_id is expected + type: string + format: uuid + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + LeaderboardProfileAndTeam: + required: + - avatar + type: object + properties: + name: + title: Name + type: string + readOnly: true + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + score: + title: Score + type: number + readOnly: true + position: + title: Position + type: integer + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + LeaderboardHistory: + type: object + properties: + score: + title: Score + type: number + readOnly: true + start: + title: Start + type: string + format: date-time + readOnly: true + end: + title: End + type: string + format: date-time + readOnly: true + ChallengePeriod: + type: object + properties: + start: + title: Start + type: string + format: date-time + readOnly: true + end: + title: End + type: string + format: date-time + readOnly: true + ProfileAsProfilePublicId: + required: + - profile + type: object + properties: + profile: + title: Profile + description: A profile public_id is expected + type: string + format: uuid + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + AppConnectionUrl: + required: + - next + type: object + properties: + next: + title: Next + type: string + format: uri + minLength: 1 + BioAge: + required: + - start + - end + - bio_age + type: object + properties: + start: + title: Start + type: string + format: date + end: + title: End + type: string + format: date + bio_age: + title: Bio age + type: number + RecommendedProducts: + required: + - name + type: object + properties: + article_number: + title: Article number + type: integer + maximum: 9223372036854776000 + minimum: -9223372036854776000 + name: + title: Name + type: string + maxLength: 255 + minLength: 1 + price: + title: Price + type: number + nullable: true + description: + title: Description + type: string + maxLength: 200 + ShoppingCart: + required: + - redirect_url + type: object + properties: + redirect_url: + title: Redirect url + type: string + maxLength: 256 + minLength: 1 + Notification: + required: + - title + - body + type: object + properties: + title: + title: Title + type: string + maxLength: 512 + minLength: 1 + body: + title: Body + type: string + maxLength: 2048 + minLength: 1 + schedule: + title: Schedule + description: date and time to send notification + type: string + format: date-time + nullable: true + link: + title: Link + type: string + maxLength: 1024 + NotificationForProfiles: + required: + - title + - body + - profiles + type: object + properties: + title: + title: Title + type: string + maxLength: 512 + minLength: 1 + body: + title: Body + type: string + maxLength: 2048 + minLength: 1 + schedule: + title: Schedule + description: date and time to send notification + type: string + format: date-time + nullable: true + link: + title: Link + type: string + maxLength: 1024 + profiles: + type: array + items: + description: The profiles to send the push notification to + type: string + format: uuid + ProfileList: + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + name: + title: Name + type: string + readOnly: true + minLength: 1 + gender: + title: Gender + type: string + enum: + - M + - F + - X + teams: + description: Team of which this profile is a member of + type: array + items: + $ref: '#/components/schemas/TeamProfile' + readOnly: true + reference: + title: Reference + type: string + maxLength: 255 + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + ProfileCreated: + required: + - reference + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + given_name: + title: Given name + type: string + maxLength: 100 + family_name: + title: Family name + type: string + maxLength: 100 + nickname: + title: Nickname + type: string + maxLength: 100 + gender: + title: Gender + type: string + enum: + - M + - F + - X + birthdate: + title: Birthdate + type: string + format: date + nullable: true + zoneinfo: + title: Zoneinfo + type: string + readOnly: true + locale: + title: Locale + type: string + maxLength: 5 + reference: + title: Reference + type: string + maxLength: 256 + minLength: 1 + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + bearer: + title: Bearer + description: >- + Used for authenticating as a profile. Make this the active + Authorization bearer to perform actions using this profile. + type: string + readOnly: true + minLength: 1 + HeartRateSummaryLinked: + type: object + properties: + min: + title: Min + description: Minimum heart rate. + type: integer + nullable: true + max: + title: Max + description: Maximum heart rate. + type: integer + nullable: true + average: + title: Average + description: Average heart rate. + type: integer + nullable: true + resting: + title: Resting + description: Resting heart rate. + type: integer + nullable: true + Activity: + required: + - timestamp + - source + - type + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + type: + title: Type + description: Type of the activity. + type: string + enum: + - RUNNING + - CROSSFIT + - CYCLING + - SWIMMING + - OTHER + - ROWING + - WALKING + - MINDFULNESS + - YOGA + - STRENGTH_TRAINING + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + steps: + title: Steps + description: Steps taken. + type: number + nullable: true + elevation: + title: Elevation + description: Elevation gained during the workout. + type: number + nullable: true + speed: + title: Speed + description: Average speed during the workout + type: number + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + points: + title: Points + description: Points earned. + type: number + nullable: true + in_outdoor: + title: In_outdoor + description: in- or outdoor-activity. + type: string + nullable: true + heart_rate_summary: + $ref: '#/components/schemas/HeartRateSummaryLinked' + BioMetric: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + weight: + title: Weight + description: Weight in kg. + type: number + nullable: true + height: + title: Height + description: Height in cm. + type: number + nullable: true + bmi: + title: Bmi + description: >- + Body Mass Index, automatically calculated if not entered and both + weight and height are available. + type: number + nullable: true + BiometricMeasurement: + required: + - timestamp + - source + - measurement_type + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + end: + title: End + description: End time of the measurement. + type: string + format: date-time + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + measurement_type: + title: Measurement_type + description: Type of biometric measurement. + type: string + minLength: 1 + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + value: + title: Value + description: Value of this measurement. + type: number + nullable: true + unit: + title: Unit + description: Unit of this measurement + type: string + nullable: true + BMI: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + bmi: + title: Bmi + description: >- + Body Mass Index, automatically calculated if not entered and both + weight and height are available. + type: number + nullable: true + DailyDetail: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + description: Duration of the measurement. + type: string + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + steps: + title: Steps + description: Steps taken. + type: integer + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + StressSummaryLinked: + required: + - stress_qualifier + type: object + properties: + stress_qualifier: + title: Stress qualifier + description: Qualifier describing stress level. + type: string + enum: + - UNKNOWN + - CALM + - BALANCED + - STRESSFUL + - VERY_STRESSFUL + average_stress_level: + title: Average_stress_level + description: Average stress level. + type: integer + nullable: true + max_stress_level: + title: Max_stress_level + description: Maximum stress level. + type: integer + nullable: true + rest_stress_duration: + title: Rest stress duration + description: Time at restful stress level. + type: string <iso8601 duration> + minLength: 1 + low_stress_duration: + title: Low stress duration + description: Time at low stress level. + type: string <iso8601 duration> + minLength: 1 + medium_stress_duration: + title: Medium stress duration + description: Time at medium stress level. + type: string <iso8601 duration> + minLength: 1 + high_stress_duration: + title: High stress duration + description: Time at high stress level. + type: string <iso8601 duration> + minLength: 1 + stress_duration: + title: Stress duration + description: Total time in stress. + type: string <iso8601 duration> + minLength: 1 + DailySummary: + required: + - date + - source + type: object + properties: + date: + title: Date + description: Date of the summary. + type: string + format: date + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + steps: + title: Steps + description: Steps taken. + type: number + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + active_calories: + title: Active_calories + description: Active calorie burn. + type: number + nullable: true + bmr_calories: + title: Bmr_calories + description: BMR calorie burn. + type: number + nullable: true + points: + title: Points + description: Points earned. + type: number + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + heart_rate_summary: + $ref: '#/components/schemas/HeartRateSummaryLinked' + stress_summary: + $ref: '#/components/schemas/StressSummaryLinked' + DetailSample: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + activity_type: + title: Activity_type + type: string + nullable: true + activity_id: + title: Activity_id + type: string + nullable: true + distance: + title: Distance + type: number + nullable: true + calories: + title: Calories + type: number + nullable: true + heart_rate: + title: Heart_rate + type: number + nullable: true + ECGRecordings: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + description: Duration of the measurement. + type: string + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + sample_frequency: + title: Sample_frequency + description: Sampling frequency of heart beats as integer in Hz. + type: integer + nullable: true + sample_count: + title: Sample_count + description: Sample count of heart beats as integer. + type: integer + nullable: true + ECGRecording: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + description: Duration of the measurement. + type: string + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + sample_frequency: + title: Sample_frequency + description: Sampling frequency of heart beats as integer in Hz. + type: integer + nullable: true + sample_count: + title: Sample_count + description: Sample count of heart beats as integer. + type: integer + nullable: true + data: + description: >- + ECG data, represented as [[time (s), value (mcV)], [time2 (s), + value2 (mcV)]), .. + type: array + items: + type: string + nullable: true + nullable: true + Event: + type: object + properties: + timestamp: + title: Timestamp + description: Time at which the action was performed. + type: string + format: date-time + points: + title: Points + description: Amount of points awarded for the action. + type: number + nullable: true + description: + title: Description + description: Title / description of the action. + type: string + nullable: true + HeartRateSample: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + value: + title: Value + description: Measured heart rate in beats/min. + type: integer + nullable: true + min: + title: Min + description: Minimum value measured in the time window. + type: integer + nullable: true + max: + title: Max + description: Maximum value measured in the time window. + type: integer + nullable: true + HeartRateSummary: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + min: + title: Min + description: Minimum heart rate. + type: integer + nullable: true + max: + title: Max + description: Maximum heart rate. + type: integer + nullable: true + average: + title: Average + description: Average heart rate. + type: integer + nullable: true + resting: + title: Resting + description: Resting heart rate. + type: integer + nullable: true + Height: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + height: + title: Height + description: Height in cm. + type: number + nullable: true + SleepDetail: + required: + - timestamp + - source + - level + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + timestamp_end: + title: Timestamp end + description: Ending time of the measurement. + type: string + format: date-time + level: + title: Level + description: Sleep level + type: string + enum: + - AWAKE + - LIGHT + - DEEP + - REM + - UNKNOWN + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + SleepDetailMinimal: + required: + - timestamp + - level + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + timestamp_end: + title: Timestamp end + description: Ending time of the measurement. + type: string + format: date-time + level: + title: Level + description: Sleep level + type: string + enum: + - AWAKE + - LIGHT + - DEEP + - REM + - UNKNOWN + SleepSummary: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + timestamp_end: + title: Timestamp end + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + awake: + title: Awake + description: Time awake. + type: string <iso8601 duration> + minLength: 1 + light: + title: Light + description: Time in light sleep. + type: string <iso8601 duration> + minLength: 1 + deep: + title: Deep + description: Time in deep sleep. + type: string <iso8601 duration> + minLength: 1 + rem: + title: Rem + description: Time in REM sleep. + type: string <iso8601 duration> + minLength: 1 + sleep_score: + title: Sleep_score + description: Sleep score + type: integer + nullable: true + detail: + type: array + items: + $ref: '#/components/schemas/SleepDetailMinimal' + total_time_in_sleep: + title: Total time in sleep + type: string <iso8601 duration> + minLength: 1 + StressSample: + required: + - timestamp + - source + - stress_value + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + stress_value: + title: Stress_value + description: Stress value. + type: integer + StressSummary: + required: + - timestamp + - source + - stress_qualifier + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + stress_qualifier: + title: Stress qualifier + description: Qualifier describing stress level. + type: string + enum: + - UNKNOWN + - CALM + - BALANCED + - STRESSFUL + - VERY_STRESSFUL + average_stress_level: + title: Average_stress_level + description: Average stress level. + type: integer + nullable: true + max_stress_level: + title: Max_stress_level + description: Maximum stress level. + type: integer + nullable: true + rest_stress_duration: + title: Rest stress duration + description: Time at restful stress level. + type: string <iso8601 duration> + minLength: 1 + low_stress_duration: + title: Low stress duration + description: Time at low stress level. + type: string <iso8601 duration> + minLength: 1 + medium_stress_duration: + title: Medium stress duration + description: Time at medium stress level. + type: string <iso8601 duration> + minLength: 1 + high_stress_duration: + title: High stress duration + description: Time at high stress level. + type: string <iso8601 duration> + minLength: 1 + stress_duration: + title: Stress duration + description: Total time in stress. + type: string <iso8601 duration> + minLength: 1 + TrackSample: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + activity_type: + title: Activity_type + type: string + nullable: true + activity_id: + title: Activity_id + type: string + nullable: true + distance: + title: Distance + type: number + nullable: true + calories: + title: Calories + type: number + nullable: true + Weight: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + weight: + title: Weight + description: Weight in kg. + type: number + nullable: true + Workout: + required: + - timestamp + - source + - type + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + type: + title: Type + description: Type of the activity. + type: string + enum: + - RUNNING + - CROSSFIT + - CYCLING + - SWIMMING + - OTHER + - ROWING + - WALKING + - MINDFULNESS + - YOGA + - STRENGTH_TRAINING + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + steps: + title: Steps + description: Steps taken. + type: number + nullable: true + elevation: + title: Elevation + description: Elevation gained during the workout. + type: number + nullable: true + speed: + title: Speed + description: Average speed during the workout + type: number + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + points: + title: Points + description: Points earned. + type: number + nullable: true + in_outdoor: + title: In_outdoor + description: in- or outdoor-activity. + type: string + nullable: true + heart_rate_summary: + $ref: '#/components/schemas/HeartRateSummaryLinked' + ProfileDetail: + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + given_name: + title: Given name + type: string + maxLength: 100 + family_name: + title: Family name + type: string + maxLength: 100 + nickname: + title: Nickname + type: string + maxLength: 100 + gender: + title: Gender + type: string + enum: + - M + - F + - X + birthdate: + title: Birthdate + type: string + format: date + nullable: true + zoneinfo: + title: Zoneinfo + type: string + readOnly: true + locale: + title: Locale + type: string + maxLength: 5 + total_calories: + title: Total calories + type: number + total_distance: + title: Total distance + type: number + total_steps: + title: Total steps + type: number + total_points: + title: Total points + type: number + total_activity_duration: + title: Total activity duration + type: string <iso8601 duration> + readOnly: true + minLength: 1 + reference: + title: Reference + type: string + maxLength: 255 + teams: + description: Team of which this profile is a member of + type: array + items: + $ref: '#/components/schemas/TeamProfile' + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + created_at: + title: Created at + type: string + format: date-time + readOnly: true + updated_at: + title: Updated at + type: string + format: date-time + readOnly: true + num_active_challenges: + title: Num active challenges + type: string + readOnly: true + num_done_challenges: + title: Num done challenges + type: string + readOnly: true + num_future_challenges: + title: Num future challenges + type: string + readOnly: true + EnrollmentInformation: + type: object + properties: + team: + title: Team + type: string + readOnly: true + minLength: 1 + team_public_id: + title: Team public id + type: string + readOnly: true + minLength: 1 + team_size: + title: Team size + type: integer + readOnly: true + leaderboard_rank: + title: Leaderboard rank + description: >- + Current or final rank among the participants of the challenge as + determined by the relevant score. + type: integer + readOnly: true + leaderboard_score: + title: Leaderboard score + description: The profile's current or final score. + type: number + readOnly: true + ProfileChallengeList: + required: + - title + - start + - type + - goal + - goal_type + - visibility + - repetition + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + title: + title: Title + type: string + minLength: 1 + slogan: + title: Slogan + type: string + description: + title: Description + type: string + start: + title: Start + type: string + format: date-time + end: + title: End + type: string + format: date-time + nullable: true + type: + title: Type + type: string + enum: + - INDIVIDUAL + - GROUP + - TEAM + goal: + title: Goal + type: string + enum: + - DAILY + - TOTAL + - WEEKLY + - MONTHLY + goal_value: + title: Goal value + type: integer + maximum: 2147483647 + minimum: -2147483648 + nullable: true + goal_type: + title: Goal type + type: string + enum: + - POINTS + - DISTANCE + - CALORIES + - DURATION + - STEPS + visibility: + title: Visibility + type: string + enum: + - PUBLIC + - PRIVATE + num_members: + title: Num members + type: string + readOnly: true + leaderboard_rank: + title: Leaderboard rank + description: >- + Current or final rank among the participants of the challenge as + determined by the relevant score. + type: integer + readOnly: true + leaderboard_score: + title: Leaderboard score + description: The profile's current or final score. + type: number + readOnly: true + is_participating: + title: Is participating + description: Does the current profile participate in this challenge? + type: boolean + readOnly: true + enrollment: + $ref: '#/components/schemas/EnrollmentInformation' + repetition: + title: Repetition + type: string + enum: + - NONE + - STREAK + - STICKTOIT + - GOALBREAKER + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + data_source: + title: Data source + type: string + readOnly: true + minLength: 1 + activity_types: + type: array + items: + $ref: '#/components/schemas/ChallengeActivityType' + current_period_start: + title: Current period start + description: >- + The start (exclusive) of the current period. Null if the challenge + has not started yet. + type: string + format: date-time + readOnly: true + current_period_end: + title: Current period end + description: >- + The end (exclusive) of the current period. Null if the challenge end + has passed. + type: string + format: date-time + readOnly: true + goal_cap: + title: Goal cap + description: Whether scores should be unable to surpass the goal value. + type: boolean + joined: + title: Joined + description: The timestamp when the profile joined the challenge. + type: string + format: date-time + readOnly: true + ProfileAppConnectionList: + type: object + properties: + display_name: + title: Display name + type: string + readOnly: true + url: + title: Url + type: string + readOnly: true + minLength: 1 + connected: + title: Connected + type: string + enum: + - CONNECTED + - ERROR + - NOT_CONNECTED + readOnly: true + connection_slug: + title: Connection slug + type: string + readOnly: true + minLength: 1 + img_url: + title: Img url + type: string + readOnly: true + minLength: 1 + created_at: + title: Created at + type: string + format: date-time + readOnly: true + updated_at: + title: Updated at + type: string + format: date-time + readOnly: true + TeamList: + required: + - name + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + num_members: + title: Num members + type: string + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + ProfileTeam: + description: List of members in this team + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + name: + title: Name + type: string + readOnly: true + minLength: 1 + reference: + title: Reference + type: string + maxLength: 255 + TeamDetail: + required: + - name + - description + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + num_members: + title: Num members + type: string + readOnly: true + members: + description: List of members in this team + type: array + items: + $ref: '#/components/schemas/ProfileTeam' + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + description: + title: Description + type: string + minLength: 1 + ProfilePublicIdsList: + required: + - profiles + type: object + properties: + profiles: + type: array + items: + type: string + format: uuid + is_active: + title: Is active + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + type: boolean + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + Token: + type: object + properties: + bearer: + title: Bearer + type: string + readOnly: true + minLength: 1 diff --git a/sdks/db/fixed-specs-cache/we-fitter-fixed-spec.yaml b/sdks/db/fixed-specs-cache/we-fitter-fixed-spec.yaml new file mode 100644 index 0000000000..cf5f876064 --- /dev/null +++ b/sdks/db/fixed-specs-cache/we-fitter-fixed-spec.yaml @@ -0,0 +1,5646 @@ +publishJson: + company: WeFitter + serviceName: false + sdkName: we-fitter-{language}-sdk + clientName: WeFitter + metaDescription: >- + WeFitter helps digital health platforms improve business performance, + engagement and data insights introducing an aggregator API that provides + connections with todays most used fitness app's, wearables & gamification + elements. + + + WeFitter's easy to integrate API will boost up user engagement and gives + insight in users health profiles in order to personalize content, offerings + and health advise. + + + WeFitter is build by Thunderbyte.AI, a Dutch Al/ ML organisation with over + 12 years of experience in building digital health products. + + + Ask for a demo > business@wefitter.com + apiStatusUrls: inherit + homepage: wefitter.com + developerDocumentation: www.wefitter.com/en-us/developers/documentation/ + categories: + - health_data +rawSpecString: | + openapi: 3.0.0 + info: + title: WeFitter API + description: This is the WeFitter API + termsOfService: https://www.wefitter.com/privacy/ + contact: + email: hello@wefitter.com + license: + name: BSD License + version: v1.3 + security: + - BearerProfile: [] + paths: + /app/totals/: + get: + operationId: app_totals_list + summary: Totals + description: >- + Total values for calories, distance, steps, points and activity duration + over all profiles in the app. + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AppTotals' + tags: + - app + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: [] + /challenge/: + get: + operationId: challenge_list + summary: List Challenges + description: Lists all available challenges + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + - name: recent + in: query + description: Show challenges that have not ended in the last N weeks + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ChallengeList' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + post: + operationId: challenge_create + summary: Create challenge + description: Creates a new challenge + requestBody: + $ref: '#/components/requestBodies/ChallengeDetail' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + parameters: [] + /challenge/{challenge_public_id}/team/: + get: + operationId: challenge_team_list + summary: Team leaderboard + description: > + List the standings of different teams in challenges (don't have to be + team challenges). + + This endpoint returns a list of objects. + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + - name: date_range + in: query + description: Index of the time period use + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/LeaderboardTeam' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: challenge_public_id + in: path + required: true + schema: + type: string + /challenge/{challenge_public_id}/team/{team_public_id}/: + get: + operationId: challenge_team_read + summary: Team contribution + description: | + List team members' contribution to the challenge. + This endpoint returns a list of objects. + parameters: + - name: date_range + in: query + description: Index of the time period use + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/LeaderboardProfile' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: challenge_public_id + in: path + required: true + schema: + type: string + - name: team_public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/: + get: + operationId: challenge_read + summary: Get Challenge + description: Gets a single challenge + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: challenge_update + summary: Edit challenge + description: Edits a challenge + requestBody: + $ref: '#/components/requestBodies/ChallengeDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + patch: + operationId: challenge_partial_update + summary: Partial edit challenge + description: Edits a challenge + requestBody: + $ref: '#/components/requestBodies/ChallengeDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + delete: + operationId: challenge_delete + summary: Delete challenge + description: deletes a challenge + responses: + '204': + description: '' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/deactivate_member/: + post: + operationId: challenge_deactivate_member_create + summary: Deactivate member + description: Deactivate a member from the challenge + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + - name: team + in: query + description: A team public_id is expected + required: false + schema: + type: string + format: uuid + - name: is_active + in: query + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + required: false + schema: + type: boolean + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: challenge_deactivate_member_update + description: This docstring is used by Django Rest Framework + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + tags: + - challenge + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/deactivate_members/: + post: + operationId: challenge_deactivate_members_create + summary: Deactivate members + description: Deactivate multiple members from the challenge + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + - name: team + in: query + description: A team public_id is expected + required: false + schema: + type: string + format: uuid + - name: is_active + in: query + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + required: false + schema: + type: boolean + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: challenge_deactivate_members_update + description: This docstring is used by Django Rest Framework + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/leaderboard/: + get: + operationId: challenge_leaderboard + summary: Leaderboard + description: | + Displays the leaderboard for a challenge. + This endpoint returns a list of objects. + parameters: + - name: date_range + in: query + description: Index of the time period use + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/LeaderboardProfileAndTeam' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/leaderboard_history/: + get: + operationId: challenge_leaderboard_history + summary: Leaderboard history + description: > + Retrieve the scores of the authenticated profile for all periods since + the profile joined the challenge. + + This endpoint returns a list of objects. + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/LeaderboardHistory' + tags: + - challenge + security: + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/member/: + post: + operationId: challenge_member_create + summary: Add member + description: > + Add member to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: challenge_member_update + summary: Add member + description: > + Add member to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + delete: + operationId: challenge_member_delete + summary: Remove member + description: Remove a member from the challenge + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + responses: + '204': + description: '' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/members/: + get: + operationId: challenge_members_read + summary: Get members + description: Get a paginated list of members enrolled to a Challenge + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + post: + operationId: challenge_members_create + summary: Add members + description: >- + Add members to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + + + Note: for the GET/POST endpoint an admin bearer token is required, while + the GET also accepts profile bearer tokens + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + put: + operationId: challenge_members_update + summary: Add members + description: >- + Add members to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + + + Note: for the GET/POST endpoint an admin bearer token is required, while + the GET also accepts profile bearer tokens + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/periods/: + get: + operationId: challenge_periods + summary: Periods + description: | + Get all periods for the challenge. + This endpoint returns a list of objects. + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengePeriod' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/remove_members/: + post: + operationId: challenge_remove_members + summary: Remove members + description: Remove members from the challenge + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /connection/{connection_slug}/connect/: + post: + operationId: connection_connect_create + summary: Connect wearable + description: Get OAuth URL for this connection. + requestBody: + $ref: '#/components/requestBodies/ProfileAsProfilePublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/AppConnectionUrl' + tags: + - connection + deprecated: false + delete: + operationId: connection_connect_delete + summary: Disconnect Wearable + description: Disconnect a wearables connection + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + responses: + '200': + description: OK + tags: + - connection + deprecated: false + parameters: + - name: connection_slug + in: path + required: true + schema: + type: string + /insights/bio_age: + get: + operationId: insights_bio_age_read + summary: Get someones biological age on a weekly basis. + description: '' + parameters: + - name: start_date + in: query + required: true + schema: + type: string + format: date + - name: end_date + in: query + required: true + schema: + type: string + format: date + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BioAge' + tags: + - insights + parameters: [] + /loyalty/get_recommended_products: + get: + operationId: loyalty_get_recommended_products_list + description: '' + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/RecommendedProducts' + tags: + - loyalty + parameters: [] + /loyalty/get_shoppingcart_link: + get: + operationId: loyalty_get_shoppingcart_link_read + description: '' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ShoppingCart' + tags: + - loyalty + parameters: [] + /notification/send_to_all/: + post: + operationId: notification_send_to_all_create + summary: Notification to all profiles in app + description: Send a notification to all registered devices in the app. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Notification' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Notification' + tags: + - notification + security: + - BearerAdmin: [] + deprecated: false + parameters: [] + /notification/send_to_profiles/: + post: + operationId: notification_send_to_profiles_create + summary: Notification to specific profiles + description: >- + Send a notification to all registered devices for the specified + profiles. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationForProfiles' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationForProfiles' + tags: + - notification + security: + - BearerAdmin: [] + deprecated: false + parameters: [] + /profile/: + get: + operationId: profile_list + summary: List Profiles + description: Lists all available profiles + parameters: + - name: search + in: query + description: A search term. + required: false + schema: + type: string + - name: ordering + in: query + description: Which field to use when ordering the results. + required: false + schema: + type: string + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ProfileList' + tags: + - profile + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + post: + operationId: profile_create + summary: Create Profile + description: > + + Creates a new profile. + + The bearer field contains a profile bearer token. When this is used in + the Authorization header actions are performed + + as that profile, which will also enable access to private data. + + Using a profile bearer token disables administrative features such as + creating profiles, making this token safe + + for 'public' use. + + A profile bearer token has no expiration, so it remains valid as long as + the profile is active. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileCreated' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileCreated' + tags: + - profile + security: + - BearerAdmin: [] + deprecated: false + parameters: [] + /profile/{profile_public_id}/activity_segment/: + get: + operationId: profile_activity_segment_list + summary: Activity segment + description: Lists segments of activities and small non-workout-like movements. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Activity' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/biometric/: + get: + operationId: profile_biometric_list + summary: Bio Metric + description: Lists changes in weight, height and bmi for the profile. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BioMetric' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/biometric_measurement/: + get: + operationId: profile_biometric_measurement_list + summary: Biometric Measurement + description: List changes in biometric measurements for the profile. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: measurement_type + in: query + required: true + schema: + type: string + enum: + - BLOOD_PRESSURE + - BODY_FAT + - BODY_FAT_MASS + - GLUCOSE + - SYSTOLIC_BP + - DIASTOLIC_BP + - PULSE_BP + - TEMPERATURE + - BLOOD_OXYGEN + - HRV + - VO2_MAX + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BiometricMeasurement' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/bmi/: + get: + operationId: profile_bmi_list + summary: BMI + description: Presents the Body-Mass-Index over time. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BMI' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/daily_detail/: + get: + operationId: profile_daily_detail_list + summary: Daily details + description: Intraday data measured at a single point in time. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/DailyDetail' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/daily_summary/: + get: + operationId: profile_daily_summary_list + summary: Daily Summary + description: Provides summarized data per day. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: deduplicate + in: query + description: If set to true, duplicates will be aggregated. + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/DailySummary' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/detail_sample/: + get: + operationId: profile_detail_sample_list + summary: Detail Sample + description: Presents detail samples. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/DetailSample' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/ecg_recordings/: + get: + operationId: profile_ecg_recordings_list + summary: Electrocardiograms + description: | + + This endpoint returns a list of ECG recordings. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ECGRecordings' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/ecg_recordings/data/: + get: + operationId: profile_ecg_recordings_data_list + summary: Electrocardiogram data + description: > + + This endpoint returns an ECG recording with data as an array of tuples + `[(time, value)]`. + + Set the argument `date_end` to request a specific recording or leave it + empty to receive the latest recording. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ECGRecording' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/ecg_recordings/pdf/: + get: + operationId: profile_ecg_recordings_pdf_list + summary: Electrocardiogram PDF + description: >- + Returns a PDF with generated ECG charts from a specific source and time. + Contact api-support@wefitter.com to gain access. + parameters: + - name: datetime + in: query + description: >- + The timestamp when the ECG has been recorded in the format + `yyyymmddhhmmss`. e.g. `20210913132513` + required: true + schema: + type: string + format: date-time + - name: source + in: query + required: true + schema: + type: string + enum: + - NONE + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + responses: + '200': + description: '' + tags: + - profile + security: + - BearerProfile: [] + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/event/: + get: + operationId: profile_event_list + summary: Event + description: Lists events, generic actions for which points have been awarded. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Event' + tags: + - profile + deprecated: false + post: + operationId: profile_event_create + summary: Create Event + description: Create a new event for the profile. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Event' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Event' + tags: + - profile + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/heartrate_sample/: + get: + operationId: profile_heartrate_sample_list + summary: Heart Rate Sample + description: Heart Rate measured at a single point in time. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: heart_rate_detail + in: query + description: If set to true it will add heart_rate_samples field + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/HeartRateSample' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/heartrate_summary/: + get: + operationId: profile_heartrate_summary_list + summary: Heart Rate Summary + description: Presents heart rate information. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/HeartRateSummary' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/height/: + get: + operationId: profile_height_list + summary: Height + description: Lists changes in height for the profile. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Height' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/sleep_detail/: + get: + operationId: profile_sleep_detail_list + summary: Sleep detail + description: Provides sleep detail data. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SleepDetail' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/sleep_summary/: + get: + operationId: profile_sleep_summary_list + summary: Sleep Summary + description: Provides summarized sleep data. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: detail + in: query + description: >- + If set to true and only 1 result is returned, it will add a detail + field + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SleepSummary' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/stress_samples/: + get: + operationId: profile_stress_samples_list + summary: Stress Sample + description: Presents stress samples. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/StressSample' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/stress_summary/: + get: + operationId: profile_stress_summary_list + summary: Stress Summary + description: Presents stress summaries. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/StressSummary' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/track_sample/: + get: + operationId: profile_track_sample_list + summary: Track Sample + description: Presents GPX track samples. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TrackSample' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/weight/: + get: + operationId: profile_weight_list + summary: Weight + description: Lists changes in weight for the profile. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Weight' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/workout/: + get: + operationId: profile_workout_list + summary: Workout + description: >- + Lists workouts associated with the profile. Used to be known as + Activity. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: deduplicate + in: query + description: If set to true, duplicates will be aggregated. + required: false + schema: + type: boolean + - name: heart_rate_detail + in: query + description: >- + If set to true and page_size is 1, it will add heart_rate_samples + field + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Workout' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{public_id}/: + get: + operationId: profile_read + summary: Get Profile + description: Gets a single profile + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + tags: + - profile + deprecated: false + put: + operationId: profile_update + summary: Update profile + description: Updates the specified profile, excluding ID, team and public id. + requestBody: + $ref: '#/components/requestBodies/ProfileDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + tags: + - profile + deprecated: false + patch: + operationId: profile_partial_update + summary: Partial Update + description: Performs a partial update + requestBody: + $ref: '#/components/requestBodies/ProfileDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + tags: + - profile + deprecated: false + delete: + operationId: profile_delete + summary: Delete Profile + description: Deletes the specified profile, if created by the app. + responses: + '204': + description: '' + tags: + - profile + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /profile/{public_id}/challenge/: + get: + operationId: profile_challenge + summary: Challenge + description: > + Provides a list of challenges where the profile can participate and is + already participating in. + + + This endpoint returns a list of objects. + parameters: + - name: recent + in: query + description: Show challenges that have not ended in the last N weeks + required: false + schema: + type: integer + - name: date_start + in: query + description: |- + Only return challenges that are active after this time + + Note: this only affects challenges that are not joined. + + Defaults to now + required: false + x-nullable: true + schema: + type: string + format: date-time + - name: date_end + in: query + description: |- + Only return challenges that are active before this time + + Note: this only affects challenges that are not joined. + + Defaults to now + required: false + x-nullable: true + schema: + type: string + format: date-time + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileChallengeList' + tags: + - profile + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /profile/{public_id}/challenges/: + get: + operationId: profile_challenges + description: This docstring is used by Django Rest Framework + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileChallengeList' + tags: + - profile + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /profile/{public_id}/connections/: + get: + operationId: profile_connections + summary: Connections + description: | + Lists the connections available for a profile and their "state". + This endpoint returns a list of objects. + parameters: + - name: redirect + in: query + description: >- + After connecting redirect back to this url. + + + Note: has to be a valid http url. For deeplinks (to apps) first + redirect to your own backend and then deeplink from there. + + + Note: the user is only redirected on a successfull connection, + otherwise an error screen is shown. (see redirect_on_error to change + this) + + + Note: if this parameter is omitted, then user will see a generic + success screen. + required: false + schema: + type: string + minLength: 1 + - name: redirect_on_error + in: query + description: >- + If enabled, then user will also be redirected to the redirect url if + an error occurs + + + Note: a query parameter 'error' is added to the redirect url. + Possible values are access_denied, unknown. New values may be added + at anytime + + + Note: for backwards compatibility the default is false, but this + will be changed in the next breaking release + required: false + schema: + type: boolean + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAppConnectionList' + tags: + - profile + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /team/: + get: + operationId: team_list + summary: List Teams + description: List all available teams + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/TeamList' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + post: + operationId: team_create + summary: Create Team + description: Creates a new team + requestBody: + $ref: '#/components/requestBodies/TeamDetail' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: [] + /team/{public_id}/: + get: + operationId: team_read + summary: Team + description: Get a single team + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: team_update + summary: Edit Team + description: Creates a new team + requestBody: + $ref: '#/components/requestBodies/TeamDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + patch: + operationId: team_partial_update + summary: Partial Edit a Team + description: Creates a new team + requestBody: + $ref: '#/components/requestBodies/TeamDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + delete: + operationId: team_delete + summary: Deletes a Team + description: Deletes an existing team + responses: + '204': + description: '' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /team/{public_id}/member/: + post: + operationId: team_member_create + summary: Add member + description: Add member to a team + requestBody: + $ref: '#/components/requestBodies/ProfileAsProfilePublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicId' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: team_member_update + summary: Add member + description: Add member to a team + requestBody: + $ref: '#/components/requestBodies/ProfileAsProfilePublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicId' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + delete: + operationId: team_member_delete + summary: Remove member + description: Remove a member from the team + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + responses: + '204': + description: '' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /team/{public_id}/members/: + post: + operationId: team_members_create + summary: Add members + description: Add members to a team + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsList' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + tags: + - team + security: + - BearerAdmin: [] + deprecated: false + put: + operationId: team_members_update + summary: Add members + description: Add members to a team + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsList' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + tags: + - team + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /team/{public_id}/remove_members/: + post: + operationId: team_remove_members + summary: Remove members + description: Remove members from the team + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsList' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + tags: + - team + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /token/: + post: + operationId: token_create + summary: Create Token + description: > + + In order to create a token, perform a POST request to this endpoint, + example:<br/> + + <table><tbody> + <tr><td>Application ID</td><td>123</td></tr> + <tr><td>Application Secret</td><td>ABC</td></tr> + <tr><td>Authorization header format</td><td>Authorization: base64(app_id:app_secret)</td></tr> + <tr><td>Expected result</td><td>Authorization: MTIzOkFCQw==</td></tr> + </tbody></table> + + For testing purposes, a CURL can be used: + + <pre> + + curl -X POST -H "Authorization: Basic MTIzOkFCQw==" + https://api.wefitter.com/api/v1.3/token/ + + # alternatively + + curl -X POST --user 123:ABC https://api.wefitter.com/api/v1.3/token/ + + </pre> + + + The response to a successful request should look like this: + + <pre> + + { + "bearer": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOiIxNTY2NTYxMzk2IiwiaWF0IjoxNTE2MjM5MDIyfQ.14x12h5VMJjAV2kFB5cCrfFmZhryBAYGk9N-vhyDl00" + } + + </pre> + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Token' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Token' + tags: + - token + security: + - Basic: [] + deprecated: false + parameters: [] + tags: + - name: profile + description: > + + Profiles are containers for wearables data. + + The profiles can be seen as an extension of users in a different system. + + Profiles are anonymous objects which can participate in teams and + challenges. + + + Keep in mind, listing profiles and creating profiles need an + administrative bearer token, all profile specific actions + + need a seperate bearer token that is returned after creating a profile. + This bearer token is used in place of the + + administrative bearer token. (see profile create action for more + information) + - name: challenge + description: >+ + + WeFitter API’s challenge engine will bring endless engagement to your + platform. + + For more information about the possibilities in challenges please go to + https://www.wefitter.com/en-us/features/gamification/ + + + Challenges have multilanguage support on the fields: `Title`, `Slogan`, + and `Description`. + + By default, challenges get the default-language that is configured in the + app. Whenever a challenge is requested through the API this challenge will + be presented in the default language. + + If another language is preferred, this can be requested by adding the + header parameter `Accept-Language` stating the language short code (ex. + `en` for english). If this language short code is not present in the title + of the challenge, the default language will be returned. + + + These translation fields contain JSON strings, for example: + + ```{"en":"this is the English title","nl":"this is the Dutch title"}``` + + So to create a multilanguage challenge, please provide the title, slogan, + and description field as json strings, be aware that because of + serialization this should be formed with backward slashes: + + + + <table><tbody> + <tr><td> + { + + + "title": "{\"en\":\"this is the English title\", \"nl\":\"this is the + dutch title\"}", + + + "slogan": "{\"en\":\"this is the English title\", \"nl\":\"this is the + dutch slogan\"}", + + + "description": "{\"en\":\"this is the English title\", \"nl\":\"this is + the dutch description\"}", + + + } + + </td></tr> + + </tbody></table> + + - name: connection + description: Connections are the links between profiles and their wearables. + - name: token + description: > + + <p> + + Before any calls can be made to wefitter, BasicAuth is needed to verify + the identity of the requesting party. + + This call will result into a Bearer token which has administrator + privileges and is valid for 1 day. + + This token can be used to create profiles, challenges, etc. + + </p> + + + <p> + + The returned bearer is a JWT (<a + href="https://en.wikipedia.org/wiki/JSON_Web_Token">JSON Web Token</a>). + + </p> + - name: notification + description: | + Send a notification to all devices for the specified profiles + The data will be sent to the client in the following format: + ``` + { + "app": <app public id>, + "title": <title>, + "body": <body>, + "link": <optional link> + } + ``` + servers: + - url: https://api.wefitter.com/api/v1.3 + components: + requestBodies: + TeamDetail: + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + required: true + ChallengeDetail: + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + required: true + ProfileAsProfilePublicIdAndTeamAsTeamPublicId: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId' + required: true + ProfilePublicIdsListAndTeamAsPublicId: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + required: true + ProfileAsProfilePublicId: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicId' + required: true + ProfileDetail: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + required: true + ProfilePublicIdsList: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + required: true + securitySchemes: + Basic: + type: http + description: >- + Basic Authentication is used to create administrator bearer tokens. + + + Once a bearer token has been made, remove this auth. ('logout' in + Swagger') + scheme: basic + BearerProfile: + type: apiKey + name: Authorization + in: header + description: >- + Bearer authentication for logged-in profiles. + + + When using the GUI, please don't forget to prefix your bearer tokens + with the text 'bearer', followed by a space. + BearerAdmin: + type: apiKey + name: Authorization + in: header + description: >- + Bearer authentication for administrators. + + + When using the GUI, please don't forget to prefix your bearer tokens + with the text 'bearer', followed by a space. + schemas: + AppTotals: + type: object + properties: + total_calories: + title: Total calories + type: number + total_distance: + title: Total distance + type: number + total_steps: + title: Total steps + type: number + total_points: + title: Total points + type: number + total_activity_duration: + title: Total activity duration + type: string <iso8601 duration> + minLength: 1 + ChallengeActivityType: + required: + - activity_type + type: object + properties: + activity_type: + title: Activity type + type: string + enum: + - RUNNING + - CROSSFIT + - CYCLING + - SWIMMING + - OTHER + - ROWING + - WALKING + - MINDFULNESS + - YOGA + - STRENGTH_TRAINING + ChallengeList: + required: + - title + - start + - type + - goal + - goal_type + - visibility + - repetition + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + title: + title: Title + type: string + minLength: 1 + slogan: + title: Slogan + type: string + description: + title: Description + type: string + start: + title: Start + type: string + format: date-time + end: + title: End + type: string + format: date-time + nullable: true + type: + title: Type + type: string + enum: + - INDIVIDUAL + - GROUP + - TEAM + goal: + title: Goal + type: string + enum: + - DAILY + - TOTAL + - WEEKLY + - MONTHLY + goal_value: + title: Goal value + type: integer + maximum: 2147483647 + minimum: -2147483648 + nullable: true + goal_type: + title: Goal type + type: string + enum: + - POINTS + - DISTANCE + - CALORIES + - DURATION + - STEPS + visibility: + title: Visibility + type: string + enum: + - PUBLIC + - PRIVATE + num_members: + title: Num members + type: string + readOnly: true + repetition: + title: Repetition + type: string + enum: + - NONE + - STREAK + - STICKTOIT + - GOALBREAKER + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + data_source: + title: Data source + type: string + readOnly: true + minLength: 1 + activity_types: + type: array + items: + $ref: '#/components/schemas/ChallengeActivityType' + current_period_start: + title: Current period start + description: >- + The start (exclusive) of the current period. Null if the challenge + has not started yet. + type: string + format: date-time + readOnly: true + current_period_end: + title: Current period end + description: >- + The end (exclusive) of the current period. Null if the challenge end + has passed. + type: string + format: date-time + readOnly: true + goal_cap: + title: Goal cap + description: Whether scores should be unable to surpass the goal value. + type: boolean + ChallengeDetail: + required: + - title + - start + - type + - goal + - goal_type + - visibility + - calculation_method + - enrollment_method + - repetition + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + title: + title: Title + type: string + minLength: 1 + slogan: + title: Slogan + type: string + description: + title: Description + type: string + start: + title: Start + type: string + format: date-time + end: + title: End + type: string + format: date-time + nullable: true + type: + title: Type + type: string + enum: + - INDIVIDUAL + - GROUP + - TEAM + goal: + title: Goal + type: string + enum: + - DAILY + - TOTAL + - WEEKLY + - MONTHLY + goal_value: + title: Goal value + type: integer + maximum: 2147483647 + minimum: -2147483648 + nullable: true + goal_type: + title: Goal type + type: string + enum: + - POINTS + - DISTANCE + - CALORIES + - DURATION + - STEPS + visibility: + title: Visibility + type: string + enum: + - PUBLIC + - PRIVATE + num_members: + title: Num members + type: string + readOnly: true + calculation_method: + title: Calculation method + type: string + enum: + - SUM + - AVERAGE + goal_progress: + title: Goal progress + description: >- + Progress towards the goal, from perspective of profile whose bearer + is used for authentication: can be an individual/team/global score. + When goal is duration, this is the duration in seconds. When an + admin token is used, returns 0.0. + type: number + readOnly: true + enrollment_method: + title: Enrollment method + type: string + enum: + - AUTOMATIC + - MANUAL + default_enrollment_time: + title: Default enrollment time + type: string + enum: + - CHALLENGE_START + - ENROLLMENT_TIME + repetition: + title: Repetition + type: string + enum: + - NONE + - STREAK + - STICKTOIT + - GOALBREAKER + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + data_source: + title: Data source + type: string + readOnly: true + minLength: 1 + activity_types: + type: array + items: + $ref: '#/components/schemas/ChallengeActivityType' + current_period_start: + title: Current period start + description: >- + The start (exclusive) of the current period. Null if the challenge + has not started yet. + type: string + format: date-time + readOnly: true + current_period_end: + title: Current period end + description: >- + The end (exclusive) of the current period. Null if the challenge end + has passed. + type: string + format: date-time + readOnly: true + goal_cap: + title: Goal cap + description: Whether scores should be unable to surpass the goal value. + type: boolean + total_calories: + title: Total calories + type: number + readOnly: true + total_distance: + title: Total distance + type: number + readOnly: true + total_steps: + title: Total steps + type: number + readOnly: true + total_points: + title: Total points + type: number + readOnly: true + total_activity_duration: + title: Total activity duration + type: string <iso8601 duration> + readOnly: true + minLength: 1 + LeaderboardTeam: + required: + - name + - avatar + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + num_members: + title: Num members + type: string + readOnly: true + score: + title: Score + type: number + readOnly: true + position: + title: Position + type: integer + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + TeamProfile: + description: Team of which this profile is a member of + required: + - name + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + LeaderboardProfile: + required: + - avatar + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + name: + title: Name + type: string + readOnly: true + minLength: 1 + gender: + title: Gender + type: string + enum: + - M + - F + - X + teams: + description: Team of which this profile is a member of + type: array + items: + $ref: '#/components/schemas/TeamProfile' + readOnly: true + reference: + title: Reference + type: string + readOnly: true + minLength: 1 + score: + title: Score + type: number + readOnly: true + position: + title: Position + type: integer + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + ProfileAsProfilePublicIdAndTeamAsTeamPublicId: + required: + - profile + type: object + properties: + profile: + title: Profile + description: A profile public_id is expected + type: string + format: uuid + team: + title: Team + description: A team public_id is expected + type: string + format: uuid + is_active: + title: Is active + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + type: boolean + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + ProfilePublicIdsListAndTeamAsPublicId: + required: + - profiles + type: object + properties: + profiles: + type: array + items: + type: string + format: uuid + is_active: + title: Is active + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + type: boolean + team: + title: Team + description: A team public_id is expected + type: string + format: uuid + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + LeaderboardProfileAndTeam: + required: + - avatar + type: object + properties: + name: + title: Name + type: string + readOnly: true + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + score: + title: Score + type: number + readOnly: true + position: + title: Position + type: integer + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + LeaderboardHistory: + type: object + properties: + score: + title: Score + type: number + readOnly: true + start: + title: Start + type: string + format: date-time + readOnly: true + end: + title: End + type: string + format: date-time + readOnly: true + ChallengePeriod: + type: object + properties: + start: + title: Start + type: string + format: date-time + readOnly: true + end: + title: End + type: string + format: date-time + readOnly: true + ProfileAsProfilePublicId: + required: + - profile + type: object + properties: + profile: + title: Profile + description: A profile public_id is expected + type: string + format: uuid + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + AppConnectionUrl: + required: + - next + type: object + properties: + next: + title: Next + type: string + format: uri + minLength: 1 + BioAge: + required: + - start + - end + - bio_age + type: object + properties: + start: + title: Start + type: string + format: date + end: + title: End + type: string + format: date + bio_age: + title: Bio age + type: number + RecommendedProducts: + required: + - name + type: object + properties: + article_number: + title: Article number + type: integer + maximum: 9223372036854776000 + minimum: -9223372036854776000 + name: + title: Name + type: string + maxLength: 255 + minLength: 1 + price: + title: Price + type: number + nullable: true + description: + title: Description + type: string + maxLength: 200 + ShoppingCart: + required: + - redirect_url + type: object + properties: + redirect_url: + title: Redirect url + type: string + maxLength: 256 + minLength: 1 + Notification: + required: + - title + - body + type: object + properties: + title: + title: Title + type: string + maxLength: 512 + minLength: 1 + body: + title: Body + type: string + maxLength: 2048 + minLength: 1 + schedule: + title: Schedule + description: date and time to send notification + type: string + format: date-time + nullable: true + link: + title: Link + type: string + maxLength: 1024 + NotificationForProfiles: + required: + - title + - body + - profiles + type: object + properties: + title: + title: Title + type: string + maxLength: 512 + minLength: 1 + body: + title: Body + type: string + maxLength: 2048 + minLength: 1 + schedule: + title: Schedule + description: date and time to send notification + type: string + format: date-time + nullable: true + link: + title: Link + type: string + maxLength: 1024 + profiles: + type: array + items: + description: The profiles to send the push notification to + type: string + format: uuid + ProfileList: + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + name: + title: Name + type: string + readOnly: true + minLength: 1 + gender: + title: Gender + type: string + enum: + - M + - F + - X + teams: + description: Team of which this profile is a member of + type: array + items: + $ref: '#/components/schemas/TeamProfile' + readOnly: true + reference: + title: Reference + type: string + maxLength: 255 + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + ProfileCreated: + required: + - reference + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + given_name: + title: Given name + type: string + maxLength: 100 + family_name: + title: Family name + type: string + maxLength: 100 + nickname: + title: Nickname + type: string + maxLength: 100 + gender: + title: Gender + type: string + enum: + - M + - F + - X + birthdate: + title: Birthdate + type: string + format: date + nullable: true + zoneinfo: + title: Zoneinfo + type: string + readOnly: true + locale: + title: Locale + type: string + maxLength: 5 + reference: + title: Reference + type: string + maxLength: 256 + minLength: 1 + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + bearer: + title: Bearer + description: >- + Used for authenticating as a profile. Make this the active + Authorization bearer to perform actions using this profile. + type: string + readOnly: true + minLength: 1 + HeartRateSummaryLinked: + type: object + properties: + min: + title: Min + description: Minimum heart rate. + type: integer + nullable: true + max: + title: Max + description: Maximum heart rate. + type: integer + nullable: true + average: + title: Average + description: Average heart rate. + type: integer + nullable: true + resting: + title: Resting + description: Resting heart rate. + type: integer + nullable: true + Activity: + required: + - timestamp + - source + - type + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + type: + title: Type + description: Type of the activity. + type: string + enum: + - RUNNING + - CROSSFIT + - CYCLING + - SWIMMING + - OTHER + - ROWING + - WALKING + - MINDFULNESS + - YOGA + - STRENGTH_TRAINING + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + steps: + title: Steps + description: Steps taken. + type: number + nullable: true + elevation: + title: Elevation + description: Elevation gained during the workout. + type: number + nullable: true + speed: + title: Speed + description: Average speed during the workout + type: number + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + points: + title: Points + description: Points earned. + type: number + nullable: true + in_outdoor: + title: In_outdoor + description: in- or outdoor-activity. + type: string + nullable: true + heart_rate_summary: + $ref: '#/components/schemas/HeartRateSummaryLinked' + BioMetric: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + weight: + title: Weight + description: Weight in kg. + type: number + nullable: true + height: + title: Height + description: Height in cm. + type: number + nullable: true + bmi: + title: Bmi + description: >- + Body Mass Index, automatically calculated if not entered and both + weight and height are available. + type: number + nullable: true + BiometricMeasurement: + required: + - timestamp + - source + - measurement_type + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + end: + title: End + description: End time of the measurement. + type: string + format: date-time + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + measurement_type: + title: Measurement_type + description: Type of biometric measurement. + type: string + minLength: 1 + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + value: + title: Value + description: Value of this measurement. + type: number + nullable: true + unit: + title: Unit + description: Unit of this measurement + type: string + nullable: true + BMI: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + bmi: + title: Bmi + description: >- + Body Mass Index, automatically calculated if not entered and both + weight and height are available. + type: number + nullable: true + DailyDetail: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + description: Duration of the measurement. + type: string + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + steps: + title: Steps + description: Steps taken. + type: integer + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + StressSummaryLinked: + required: + - stress_qualifier + type: object + properties: + stress_qualifier: + title: Stress qualifier + description: Qualifier describing stress level. + type: string + enum: + - UNKNOWN + - CALM + - BALANCED + - STRESSFUL + - VERY_STRESSFUL + average_stress_level: + title: Average_stress_level + description: Average stress level. + type: integer + nullable: true + max_stress_level: + title: Max_stress_level + description: Maximum stress level. + type: integer + nullable: true + rest_stress_duration: + title: Rest stress duration + description: Time at restful stress level. + type: string <iso8601 duration> + minLength: 1 + low_stress_duration: + title: Low stress duration + description: Time at low stress level. + type: string <iso8601 duration> + minLength: 1 + medium_stress_duration: + title: Medium stress duration + description: Time at medium stress level. + type: string <iso8601 duration> + minLength: 1 + high_stress_duration: + title: High stress duration + description: Time at high stress level. + type: string <iso8601 duration> + minLength: 1 + stress_duration: + title: Stress duration + description: Total time in stress. + type: string <iso8601 duration> + minLength: 1 + DailySummary: + required: + - date + - source + type: object + properties: + date: + title: Date + description: Date of the summary. + type: string + format: date + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + steps: + title: Steps + description: Steps taken. + type: number + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + active_calories: + title: Active_calories + description: Active calorie burn. + type: number + nullable: true + bmr_calories: + title: Bmr_calories + description: BMR calorie burn. + type: number + nullable: true + points: + title: Points + description: Points earned. + type: number + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + heart_rate_summary: + $ref: '#/components/schemas/HeartRateSummaryLinked' + stress_summary: + $ref: '#/components/schemas/StressSummaryLinked' + DetailSample: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + activity_type: + title: Activity_type + type: string + nullable: true + activity_id: + title: Activity_id + type: string + nullable: true + distance: + title: Distance + type: number + nullable: true + calories: + title: Calories + type: number + nullable: true + heart_rate: + title: Heart_rate + type: number + nullable: true + ECGRecordings: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + description: Duration of the measurement. + type: string + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + sample_frequency: + title: Sample_frequency + description: Sampling frequency of heart beats as integer in Hz. + type: integer + nullable: true + sample_count: + title: Sample_count + description: Sample count of heart beats as integer. + type: integer + nullable: true + ECGRecording: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + description: Duration of the measurement. + type: string + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + sample_frequency: + title: Sample_frequency + description: Sampling frequency of heart beats as integer in Hz. + type: integer + nullable: true + sample_count: + title: Sample_count + description: Sample count of heart beats as integer. + type: integer + nullable: true + data: + description: >- + ECG data, represented as [[time (s), value (mcV)], [time2 (s), + value2 (mcV)]), .. + type: array + items: + type: string + nullable: true + nullable: true + Event: + type: object + properties: + timestamp: + title: Timestamp + description: Time at which the action was performed. + type: string + format: date-time + points: + title: Points + description: Amount of points awarded for the action. + type: number + nullable: true + description: + title: Description + description: Title / description of the action. + type: string + nullable: true + HeartRateSample: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + value: + title: Value + description: Measured heart rate in beats/min. + type: integer + nullable: true + min: + title: Min + description: Minimum value measured in the time window. + type: integer + nullable: true + max: + title: Max + description: Maximum value measured in the time window. + type: integer + nullable: true + HeartRateSummary: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + min: + title: Min + description: Minimum heart rate. + type: integer + nullable: true + max: + title: Max + description: Maximum heart rate. + type: integer + nullable: true + average: + title: Average + description: Average heart rate. + type: integer + nullable: true + resting: + title: Resting + description: Resting heart rate. + type: integer + nullable: true + Height: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + height: + title: Height + description: Height in cm. + type: number + nullable: true + SleepDetail: + required: + - timestamp + - source + - level + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + timestamp_end: + title: Timestamp end + description: Ending time of the measurement. + type: string + format: date-time + level: + title: Level + description: Sleep level + type: string + enum: + - AWAKE + - LIGHT + - DEEP + - REM + - UNKNOWN + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + SleepDetailMinimal: + required: + - timestamp + - level + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + timestamp_end: + title: Timestamp end + description: Ending time of the measurement. + type: string + format: date-time + level: + title: Level + description: Sleep level + type: string + enum: + - AWAKE + - LIGHT + - DEEP + - REM + - UNKNOWN + SleepSummary: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + timestamp_end: + title: Timestamp end + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + awake: + title: Awake + description: Time awake. + type: string <iso8601 duration> + minLength: 1 + light: + title: Light + description: Time in light sleep. + type: string <iso8601 duration> + minLength: 1 + deep: + title: Deep + description: Time in deep sleep. + type: string <iso8601 duration> + minLength: 1 + rem: + title: Rem + description: Time in REM sleep. + type: string <iso8601 duration> + minLength: 1 + sleep_score: + title: Sleep_score + description: Sleep score + type: integer + nullable: true + detail: + type: array + items: + $ref: '#/components/schemas/SleepDetailMinimal' + total_time_in_sleep: + title: Total time in sleep + type: string <iso8601 duration> + minLength: 1 + StressSample: + required: + - timestamp + - source + - stress_value + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + stress_value: + title: Stress_value + description: Stress value. + type: integer + StressSummary: + required: + - timestamp + - source + - stress_qualifier + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + stress_qualifier: + title: Stress qualifier + description: Qualifier describing stress level. + type: string + enum: + - UNKNOWN + - CALM + - BALANCED + - STRESSFUL + - VERY_STRESSFUL + average_stress_level: + title: Average_stress_level + description: Average stress level. + type: integer + nullable: true + max_stress_level: + title: Max_stress_level + description: Maximum stress level. + type: integer + nullable: true + rest_stress_duration: + title: Rest stress duration + description: Time at restful stress level. + type: string <iso8601 duration> + minLength: 1 + low_stress_duration: + title: Low stress duration + description: Time at low stress level. + type: string <iso8601 duration> + minLength: 1 + medium_stress_duration: + title: Medium stress duration + description: Time at medium stress level. + type: string <iso8601 duration> + minLength: 1 + high_stress_duration: + title: High stress duration + description: Time at high stress level. + type: string <iso8601 duration> + minLength: 1 + stress_duration: + title: Stress duration + description: Total time in stress. + type: string <iso8601 duration> + minLength: 1 + TrackSample: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + activity_type: + title: Activity_type + type: string + nullable: true + activity_id: + title: Activity_id + type: string + nullable: true + distance: + title: Distance + type: number + nullable: true + calories: + title: Calories + type: number + nullable: true + Weight: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + weight: + title: Weight + description: Weight in kg. + type: number + nullable: true + Workout: + required: + - timestamp + - source + - type + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + type: + title: Type + description: Type of the activity. + type: string + enum: + - RUNNING + - CROSSFIT + - CYCLING + - SWIMMING + - OTHER + - ROWING + - WALKING + - MINDFULNESS + - YOGA + - STRENGTH_TRAINING + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + steps: + title: Steps + description: Steps taken. + type: number + nullable: true + elevation: + title: Elevation + description: Elevation gained during the workout. + type: number + nullable: true + speed: + title: Speed + description: Average speed during the workout + type: number + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + points: + title: Points + description: Points earned. + type: number + nullable: true + in_outdoor: + title: In_outdoor + description: in- or outdoor-activity. + type: string + nullable: true + heart_rate_summary: + $ref: '#/components/schemas/HeartRateSummaryLinked' + ProfileDetail: + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + given_name: + title: Given name + type: string + maxLength: 100 + family_name: + title: Family name + type: string + maxLength: 100 + nickname: + title: Nickname + type: string + maxLength: 100 + gender: + title: Gender + type: string + enum: + - M + - F + - X + birthdate: + title: Birthdate + type: string + format: date + nullable: true + zoneinfo: + title: Zoneinfo + type: string + readOnly: true + locale: + title: Locale + type: string + maxLength: 5 + total_calories: + title: Total calories + type: number + total_distance: + title: Total distance + type: number + total_steps: + title: Total steps + type: number + total_points: + title: Total points + type: number + total_activity_duration: + title: Total activity duration + type: string <iso8601 duration> + readOnly: true + minLength: 1 + reference: + title: Reference + type: string + maxLength: 255 + teams: + description: Team of which this profile is a member of + type: array + items: + $ref: '#/components/schemas/TeamProfile' + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + created_at: + title: Created at + type: string + format: date-time + readOnly: true + updated_at: + title: Updated at + type: string + format: date-time + readOnly: true + num_active_challenges: + title: Num active challenges + type: string + readOnly: true + num_done_challenges: + title: Num done challenges + type: string + readOnly: true + num_future_challenges: + title: Num future challenges + type: string + readOnly: true + EnrollmentInformation: + type: object + properties: + team: + title: Team + type: string + readOnly: true + minLength: 1 + team_public_id: + title: Team public id + type: string + readOnly: true + minLength: 1 + team_size: + title: Team size + type: integer + readOnly: true + leaderboard_rank: + title: Leaderboard rank + description: >- + Current or final rank among the participants of the challenge as + determined by the relevant score. + type: integer + readOnly: true + leaderboard_score: + title: Leaderboard score + description: The profile's current or final score. + type: number + readOnly: true + ProfileChallengeList: + required: + - title + - start + - type + - goal + - goal_type + - visibility + - repetition + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + title: + title: Title + type: string + minLength: 1 + slogan: + title: Slogan + type: string + description: + title: Description + type: string + start: + title: Start + type: string + format: date-time + end: + title: End + type: string + format: date-time + nullable: true + type: + title: Type + type: string + enum: + - INDIVIDUAL + - GROUP + - TEAM + goal: + title: Goal + type: string + enum: + - DAILY + - TOTAL + - WEEKLY + - MONTHLY + goal_value: + title: Goal value + type: integer + maximum: 2147483647 + minimum: -2147483648 + nullable: true + goal_type: + title: Goal type + type: string + enum: + - POINTS + - DISTANCE + - CALORIES + - DURATION + - STEPS + visibility: + title: Visibility + type: string + enum: + - PUBLIC + - PRIVATE + num_members: + title: Num members + type: string + readOnly: true + leaderboard_rank: + title: Leaderboard rank + description: >- + Current or final rank among the participants of the challenge as + determined by the relevant score. + type: integer + readOnly: true + leaderboard_score: + title: Leaderboard score + description: The profile's current or final score. + type: number + readOnly: true + is_participating: + title: Is participating + description: Does the current profile participate in this challenge? + type: boolean + readOnly: true + enrollment: + $ref: '#/components/schemas/EnrollmentInformation' + repetition: + title: Repetition + type: string + enum: + - NONE + - STREAK + - STICKTOIT + - GOALBREAKER + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + data_source: + title: Data source + type: string + readOnly: true + minLength: 1 + activity_types: + type: array + items: + $ref: '#/components/schemas/ChallengeActivityType' + current_period_start: + title: Current period start + description: >- + The start (exclusive) of the current period. Null if the challenge + has not started yet. + type: string + format: date-time + readOnly: true + current_period_end: + title: Current period end + description: >- + The end (exclusive) of the current period. Null if the challenge end + has passed. + type: string + format: date-time + readOnly: true + goal_cap: + title: Goal cap + description: Whether scores should be unable to surpass the goal value. + type: boolean + joined: + title: Joined + description: The timestamp when the profile joined the challenge. + type: string + format: date-time + readOnly: true + ProfileAppConnectionList: + type: object + properties: + display_name: + title: Display name + type: string + readOnly: true + url: + title: Url + type: string + readOnly: true + minLength: 1 + connected: + title: Connected + type: string + enum: + - CONNECTED + - ERROR + - NOT_CONNECTED + readOnly: true + connection_slug: + title: Connection slug + type: string + readOnly: true + minLength: 1 + img_url: + title: Img url + type: string + readOnly: true + minLength: 1 + created_at: + title: Created at + type: string + format: date-time + readOnly: true + updated_at: + title: Updated at + type: string + format: date-time + readOnly: true + TeamList: + required: + - name + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + num_members: + title: Num members + type: string + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + ProfileTeam: + description: List of members in this team + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + name: + title: Name + type: string + readOnly: true + minLength: 1 + reference: + title: Reference + type: string + maxLength: 255 + TeamDetail: + required: + - name + - description + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + num_members: + title: Num members + type: string + readOnly: true + members: + description: List of members in this team + type: array + items: + $ref: '#/components/schemas/ProfileTeam' + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + description: + title: Description + type: string + minLength: 1 + ProfilePublicIdsList: + required: + - profiles + type: object + properties: + profiles: + type: array + items: + type: string + format: uuid + is_active: + title: Is active + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + type: boolean + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + Token: + type: object + properties: + bearer: + title: Bearer + type: string + readOnly: true + minLength: 1 +konfigCliVersion: 1.38.34 diff --git a/sdks/db/fixed-specs/we-fitter-fixed-spec.yaml b/sdks/db/fixed-specs/we-fitter-fixed-spec.yaml new file mode 100644 index 0000000000..469eeda6ef --- /dev/null +++ b/sdks/db/fixed-specs/we-fitter-fixed-spec.yaml @@ -0,0 +1,5649 @@ +openapi: 3.0.0 +info: + title: WeFitter API + description: This is the WeFitter API + version: v1.3 + termsOfService: https://www.wefitter.com/privacy/ + contact: + email: hello@wefitter.com + license: + name: BSD License +servers: + - url: https://api.wefitter.com/api/v1.3 +tags: + - description: > + + Profiles are containers for wearables data. + + The profiles can be seen as an extension of users in a different system. + + Profiles are anonymous objects which can participate in teams and + challenges. + + + Keep in mind, listing profiles and creating profiles need an + administrative bearer token, all profile specific actions + + need a seperate bearer token that is returned after creating a profile. + This bearer token is used in place of the + + administrative bearer token. (see profile create action for more + information) + name: profile + - description: >+ + + WeFitter API’s challenge engine will bring endless engagement to your + platform. + + For more information about the possibilities in challenges please go to + https://www.wefitter.com/en-us/features/gamification/ + + + Challenges have multilanguage support on the fields: `Title`, `Slogan`, + and `Description`. + + By default, challenges get the default-language that is configured in the + app. Whenever a challenge is requested through the API this challenge will + be presented in the default language. + + If another language is preferred, this can be requested by adding the + header parameter `Accept-Language` stating the language short code (ex. + `en` for english). If this language short code is not present in the title + of the challenge, the default language will be returned. + + + These translation fields contain JSON strings, for example: + + ```{"en":"this is the English title","nl":"this is the Dutch title"}``` + + So to create a multilanguage challenge, please provide the title, slogan, + and description field as json strings, be aware that because of + serialization this should be formed with backward slashes: + + + + <table><tbody> + <tr><td> + { + + + "title": "{\"en\":\"this is the English title\", \"nl\":\"this is the + dutch title\"}", + + + "slogan": "{\"en\":\"this is the English title\", \"nl\":\"this is the + dutch slogan\"}", + + + "description": "{\"en\":\"this is the English title\", \"nl\":\"this is + the dutch description\"}", + + + } + + </td></tr> + + </tbody></table> + + name: challenge + - name: team + - description: Connections are the links between profiles and their wearables. + name: connection + - description: | + Send a notification to all devices for the specified profiles + The data will be sent to the client in the following format: + ``` + { + "app": <app public id>, + "title": <title>, + "body": <body>, + "link": <optional link> + } + ``` + name: notification + - name: loyalty + - description: > + + <p> + + Before any calls can be made to wefitter, BasicAuth is needed to verify + the identity of the requesting party. + + This call will result into a Bearer token which has administrator + privileges and is valid for 1 day. + + This token can be used to create profiles, challenges, etc. + + </p> + + + <p> + + The returned bearer is a JWT (<a + href="https://en.wikipedia.org/wiki/JSON_Web_Token">JSON Web Token</a>). + + </p> + name: token + - name: app + - name: insights +paths: + /insights/bio_age: + parameters: [] + get: + tags: + - insights + summary: Get someones biological age on a weekly basis. + operationId: Insights_getBioAgeWeekly + description: '' + parameters: + - name: start_date + in: query + required: true + schema: + type: string + format: date + - name: end_date + in: query + required: true + schema: + type: string + format: date + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/InsightsGetBioAgeWeeklyResponse' + /loyalty/get_recommended_products: + parameters: [] + get: + tags: + - loyalty + operationId: Loyalty_getRecommendedProducts + description: '' + parameters: + - description: Number of results to return per page. + name: limit + in: query + required: false + schema: + type: integer + - description: The initial index from which to return the results. + name: offset + in: query + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/LoyaltyGetRecommendedProductsResponse' + /loyalty/get_shoppingcart_link: + parameters: [] + get: + tags: + - loyalty + operationId: Loyalty_getShoppingcartLink + description: '' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ShoppingCart' + /app/totals: + parameters: [] + get: + tags: + - app + summary: Totals + operationId: App_getTotals + security: + - BearerAdmin: [] + description: >- + Total values for calories, distance, steps, points and activity duration + over all profiles in the app. + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/AppGetTotalsResponse' + deprecated: false + /challenge: + parameters: [] + get: + tags: + - challenge + summary: List Challenges + operationId: challenge_list + security: + - BearerAdmin: [] + description: Lists all available challenges + parameters: + - description: Number of results to return per page. + name: limit + in: query + required: false + schema: + type: integer + - description: The initial index from which to return the results. + name: offset + in: query + required: false + schema: + type: integer + - description: Show challenges that have not ended in the last N weeks + name: recent + in: query + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeListResponse' + deprecated: false + post: + tags: + - challenge + summary: Create challenge + operationId: challenge_create + security: + - BearerAdmin: [] + description: Creates a new challenge + requestBody: + $ref: '#/components/requestBodies/ChallengeDetail' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + deprecated: false + /challenge/{challenge_public_id}/team: + parameters: + - name: challenge_public_id + in: path + required: true + schema: + type: string + get: + tags: + - challenge + summary: Team leaderboard + operationId: Challenge_teamStandingsList + security: + - BearerAdmin: [] + description: > + List the standings of different teams in challenges (don't have to be + team challenges). + + This endpoint returns a list of objects. + parameters: + - description: Number of results to return per page. + name: limit + in: query + required: false + schema: + type: integer + - description: The initial index from which to return the results. + name: offset + in: query + required: false + schema: + type: integer + - description: Index of the time period use + name: date_range + in: query + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeTeamStandingsListResponse' + deprecated: false + /challenge/{challenge_public_id}/team/{team_public_id}: + parameters: + - name: challenge_public_id + in: path + required: true + schema: + type: string + - name: team_public_id + in: path + required: true + schema: + type: string + get: + tags: + - challenge + summary: Team contribution + operationId: Challenge_teamContributionList + security: + - BearerAdmin: [] + description: | + List team members' contribution to the challenge. + This endpoint returns a list of objects. + parameters: + - description: Index of the time period use + name: date_range + in: query + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/LeaderboardProfile' + deprecated: false + /challenge/{public_id}: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + get: + tags: + - challenge + summary: Get Challenge + operationId: challenge_read + security: + - BearerAdmin: [] + description: Gets a single challenge + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + deprecated: false + put: + tags: + - challenge + summary: Edit challenge + operationId: challenge_update + security: + - BearerAdmin: [] + description: Edits a challenge + requestBody: + $ref: '#/components/requestBodies/ChallengeDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + deprecated: false + patch: + tags: + - challenge + summary: Partial edit challenge + operationId: Challenge_partialEdit + security: + - BearerAdmin: [] + description: Edits a challenge + requestBody: + $ref: '#/components/requestBodies/ChallengeDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + deprecated: false + delete: + tags: + - challenge + summary: Delete challenge + operationId: challenge_delete + security: + - BearerAdmin: [] + description: deletes a challenge + responses: + '204': + description: '' + deprecated: false + /challenge/{public_id}/deactivate_member: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + post: + tags: + - challenge + summary: Deactivate member + operationId: Challenge_deactivateMember + security: + - BearerAdmin: [] + description: Deactivate a member from the challenge + parameters: + - description: A profile public_id is expected + name: profile + in: query + required: true + schema: + type: string + format: uuid + - description: A team public_id is expected + name: team + in: query + required: false + schema: + type: string + format: uuid + - description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + name: is_active + in: query + required: false + schema: + type: boolean + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + deprecated: false + put: + tags: + - challenge + operationId: Challenge_deactivateMember + description: This docstring is used by Django Rest Framework + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + /challenge/{public_id}/deactivate_members: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + post: + tags: + - challenge + summary: Deactivate members + operationId: Challenge_deactivateMembers + security: + - BearerAdmin: [] + description: Deactivate multiple members from the challenge + parameters: + - description: A profile public_id is expected + name: profile + in: query + required: true + schema: + type: string + format: uuid + - description: A team public_id is expected + name: team + in: query + required: false + schema: + type: string + format: uuid + - description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + name: is_active + in: query + required: false + schema: + type: boolean + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + deprecated: false + put: + tags: + - challenge + operationId: Challenge_deactivateMembers + description: This docstring is used by Django Rest Framework + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + /challenge/{public_id}/leaderboard: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + get: + tags: + - challenge + summary: Leaderboard + operationId: challenge_leaderboard + security: + - BearerAdmin: [] + description: | + Displays the leaderboard for a challenge. + This endpoint returns a list of objects. + parameters: + - description: Index of the time period use + name: date_range + in: query + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/LeaderboardProfileAndTeam' + deprecated: false + /challenge/{public_id}/leaderboard_history: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + get: + tags: + - challenge + summary: Leaderboard history + operationId: Challenge_getScoresHistory + description: > + Retrieve the scores of the authenticated profile for all periods since + the profile joined the challenge. + + This endpoint returns a list of objects. + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/LeaderboardHistory' + deprecated: false + /challenge/{public_id}/member: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + post: + tags: + - challenge + summary: Add member + operationId: Challenge_memberCreate + security: + - BearerAdmin: [] + description: > + Add member to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + deprecated: false + put: + tags: + - challenge + summary: Add member + operationId: Challenge_memberAdd + security: + - BearerAdmin: [] + description: > + Add member to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + deprecated: false + delete: + tags: + - challenge + summary: Remove member + operationId: Challenge_removeMember + security: + - BearerAdmin: [] + description: Remove a member from the challenge + parameters: + - description: A profile public_id is expected + name: profile + in: query + required: true + schema: + type: string + format: uuid + responses: + '204': + description: '' + deprecated: false + /challenge/{public_id}/members: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + get: + tags: + - challenge + summary: Get members + operationId: Challenge_getMembers + security: + - BearerAdmin: [] + description: Get a paginated list of members enrolled to a Challenge + parameters: + - description: Number of results to return per page. + name: limit + in: query + required: false + schema: + type: integer + - description: The initial index from which to return the results. + name: offset + in: query + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeGetMembersResponse' + deprecated: false + post: + tags: + - challenge + summary: Add members + operationId: Challenge_addMembers + security: + - BearerAdmin: [] + description: >- + Add members to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + + + Note: for the GET/POST endpoint an admin bearer token is required, while + the GET also accepts profile bearer tokens + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + deprecated: false + put: + tags: + - challenge + summary: Add members + operationId: Challenge_addMembers + security: + - BearerAdmin: [] + description: >- + Add members to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + + + Note: for the GET/POST endpoint an admin bearer token is required, while + the GET also accepts profile bearer tokens + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + deprecated: false + /challenge/{public_id}/periods: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + get: + tags: + - challenge + summary: Periods + operationId: challenge_periods + security: + - BearerAdmin: [] + description: | + Get all periods for the challenge. + This endpoint returns a list of objects. + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengePeriod' + deprecated: false + /challenge/{public_id}/remove_members: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + post: + tags: + - challenge + summary: Remove members + operationId: Challenge_removeMembers + security: + - BearerAdmin: [] + description: Remove members from the challenge + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + deprecated: false + /connection/{connection_slug}/connect: + parameters: + - name: connection_slug + in: path + required: true + schema: + type: string + post: + tags: + - connection + summary: Connect wearable + operationId: Connection_getOAuthUrl + description: Get OAuth URL for this connection. + requestBody: + $ref: '#/components/requestBodies/ProfileAsProfilePublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/AppConnectionUrl' + deprecated: false + delete: + tags: + - connection + summary: Disconnect Wearable + operationId: Connection_disconnectWearable + description: Disconnect a wearables connection + parameters: + - description: A profile public_id is expected + name: profile + in: query + required: true + schema: + type: string + format: uuid + responses: + '200': + description: OK + deprecated: false + /notification/send_to_all: + parameters: [] + post: + tags: + - notification + summary: Notification to all profiles in app + operationId: Notification_sendToAllCreate + security: + - BearerAdmin: [] + description: Send a notification to all registered devices in the app. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Notification' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Notification' + deprecated: false + /notification/send_to_profiles: + parameters: [] + post: + tags: + - notification + summary: Notification to specific profiles + operationId: Notification_sendToProfilesCreate + security: + - BearerAdmin: [] + description: >- + Send a notification to all registered devices for the specified + profiles. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationForProfiles' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationForProfiles' + deprecated: false + /profile: + parameters: [] + get: + tags: + - profile + summary: List Profiles + operationId: profile_list + security: + - BearerAdmin: [] + description: Lists all available profiles + parameters: + - description: A search term. + name: search + in: query + required: false + schema: + type: string + - description: Which field to use when ordering the results. + name: ordering + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: limit + in: query + required: false + schema: + type: integer + - description: The initial index from which to return the results. + name: offset + in: query + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileListResponse' + deprecated: false + post: + tags: + - profile + summary: Create Profile + operationId: profile_create + security: + - BearerAdmin: [] + description: > + + Creates a new profile. + + The bearer field contains a profile bearer token. When this is used in + the Authorization header actions are performed + + as that profile, which will also enable access to private data. + + Using a profile bearer token disables administrative features such as + creating profiles, making this token safe + + for 'public' use. + + A profile bearer token has no expiration, so it remains valid as long as + the profile is active. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileCreated' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileCreated' + deprecated: false + /profile/{profile_public_id}/activity_segment: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Activity segment + operationId: Profile_listActivitySegments + description: Lists segments of activities and small non-workout-like movements. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileListActivitySegmentsResponse' + deprecated: false + /profile/{profile_public_id}/biometric: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Bio Metric + operationId: Profile_listBiometricChanges + description: Lists changes in weight, height and bmi for the profile. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileListBiometricChangesResponse' + deprecated: false + /profile/{profile_public_id}/biometric_measurement: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Biometric Measurement + operationId: Profile_listBiometricChanges + description: List changes in biometric measurements for the profile. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + - name: measurement_type + in: query + required: true + schema: + type: string + enum: + - BLOOD_PRESSURE + - BODY_FAT + - BODY_FAT_MASS + - GLUCOSE + - SYSTOLIC_BP + - DIASTOLIC_BP + - PULSE_BP + - TEMPERATURE + - BLOOD_OXYGEN + - HRV + - VO2_MAX + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileListBiometricChanges200Response' + deprecated: false + /profile/{profile_public_id}/bmi: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: BMI + operationId: Profile_getBmiOverTime + description: Presents the Body-Mass-Index over time. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileGetBmiOverTimeResponse' + deprecated: false + /profile/{profile_public_id}/daily_detail: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Daily details + operationId: Profile_getDailyDetail + description: Intraday data measured at a single point in time. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileGetDailyDetailResponse' + deprecated: false + /profile/{profile_public_id}/daily_summary: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Daily Summary + operationId: Profile_getDailySummary + description: Provides summarized data per day. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + - description: If set to true, duplicates will be aggregated. + name: deduplicate + in: query + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileGetDailySummaryResponse' + deprecated: false + /profile/{profile_public_id}/detail_sample: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Detail Sample + operationId: Profile_getDetailSamples + description: Presents detail samples. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileGetDetailSamplesResponse' + deprecated: false + /profile/{profile_public_id}/ecg_recordings: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Electrocardiograms + operationId: Profile_getEcgRecordings + description: | + + This endpoint returns a list of ECG recordings. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileGetEcgRecordingsResponse' + deprecated: false + /profile/{profile_public_id}/ecg_recordings/data: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Electrocardiogram data + operationId: Profile_getEcgRecordingsData + description: > + + This endpoint returns an ECG recording with data as an array of tuples + `[(time, value)]`. + + Set the argument `date_end` to request a specific recording or leave it + empty to receive the latest recording. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileGetEcgRecordingsDataResponse' + deprecated: false + /profile/{profile_public_id}/ecg_recordings/pdf: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Electrocardiogram PDF + operationId: Profile_getEcgPdf + description: >- + Returns a PDF with generated ECG charts from a specific source and time. + Contact api-support@wefitter.com to gain access. + parameters: + - description: >- + The timestamp when the ECG has been recorded in the format + `yyyymmddhhmmss`. e.g. `20210913132513` + name: datetime + in: query + required: true + schema: + type: string + format: date-time + - name: source + in: query + required: true + schema: + type: string + enum: + - NONE + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + responses: + '200': + description: '' + deprecated: false + /profile/{profile_public_id}/event: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Event + operationId: Profile_listEvents + description: Lists events, generic actions for which points have been awarded. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileListEventsResponse' + deprecated: false + post: + tags: + - profile + summary: Create Event + operationId: Profile_eventCreate + security: + - BearerAdmin: [] + description: Create a new event for the profile. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Event' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Event' + deprecated: false + /profile/{profile_public_id}/heartrate_sample: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Heart Rate Sample + operationId: Profile_getHeartrateSample + description: Heart Rate measured at a single point in time. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + - description: If set to true it will add heart_rate_samples field + name: heart_rate_detail + in: query + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileGetHeartrateSampleResponse' + deprecated: false + /profile/{profile_public_id}/heartrate_summary: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Heart Rate Summary + operationId: Profile_getHeartRateSummary + description: Presents heart rate information. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileGetHeartRateSummaryResponse' + deprecated: false + /profile/{profile_public_id}/height: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Height + operationId: Profile_listHeightChanges + description: Lists changes in height for the profile. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileListHeightChangesResponse' + deprecated: false + /profile/{profile_public_id}/sleep_detail: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Sleep detail + operationId: Profile_getSleepDetail + description: Provides sleep detail data. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileGetSleepDetailResponse' + deprecated: false + /profile/{profile_public_id}/sleep_summary: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Sleep Summary + operationId: Profile_getSleepSummary + description: Provides summarized sleep data. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + - description: >- + If set to true and only 1 result is returned, it will add a detail + field + name: detail + in: query + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileGetSleepSummaryResponse' + deprecated: false + /profile/{profile_public_id}/stress_samples: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Stress Sample + operationId: Profile_getStressSamples + description: Presents stress samples. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileGetStressSamplesResponse' + deprecated: false + /profile/{profile_public_id}/stress_summary: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Stress Summary + operationId: Profile_getStressSummary + description: Presents stress summaries. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileGetStressSummaryResponse' + deprecated: false + /profile/{profile_public_id}/track_sample: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Track Sample + operationId: Profile_getGpxTrackSamples + description: Presents GPX track samples. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileGetGpxTrackSamplesResponse' + deprecated: false + /profile/{profile_public_id}/weight: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Weight + operationId: Profile_listWeightChanges + description: Lists changes in weight for the profile. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileListWeightChangesResponse' + deprecated: false + /profile/{profile_public_id}/workout: + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Workout + operationId: Profile_listWorkouts + description: >- + Lists workouts associated with the profile. Used to be known as + Activity. + parameters: + - description: The pagination cursor value. + name: cursor + in: query + required: false + schema: + type: string + - description: Number of results to return per page. + name: page_size + in: query + required: false + schema: + type: integer + - description: Lower bound of date or timestamp. + name: date_start + in: query + required: false + schema: + type: string + format: date-time + - description: Upper bound of date or timestamp. + name: date_end + in: query + required: false + schema: + type: string + format: date-time + - description: If set to true, duplicates will be aggregated. + name: deduplicate + in: query + required: false + schema: + type: boolean + - description: >- + If set to true and page_size is 1, it will add heart_rate_samples + field + name: heart_rate_detail + in: query + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileListWorkoutsResponse' + deprecated: false + /profile/{public_id}: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Get Profile + operationId: profile_read + description: Gets a single profile + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + deprecated: false + put: + tags: + - profile + summary: Update profile + operationId: profile_update + description: Updates the specified profile, excluding ID, team and public id. + requestBody: + $ref: '#/components/requestBodies/ProfileDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + deprecated: false + patch: + tags: + - profile + summary: Partial Update + operationId: Profile_updatePartial + description: Performs a partial update + requestBody: + $ref: '#/components/requestBodies/ProfileDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + deprecated: false + delete: + tags: + - profile + summary: Delete Profile + operationId: profile_delete + security: + - BearerAdmin: [] + description: Deletes the specified profile, if created by the app. + responses: + '204': + description: '' + deprecated: false + /profile/{public_id}/challenge: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Challenge + operationId: profile_challenge + description: > + Provides a list of challenges where the profile can participate and is + already participating in. + + + This endpoint returns a list of objects. + parameters: + - description: Show challenges that have not ended in the last N weeks + name: recent + in: query + required: false + schema: + type: integer + - description: |- + Only return challenges that are active after this time + + Note: this only affects challenges that are not joined. + + Defaults to now + name: date_start + in: query + required: false + x-nullable: true + schema: + type: string + format: date-time + - description: |- + Only return challenges that are active before this time + + Note: this only affects challenges that are not joined. + + Defaults to now + name: date_end + in: query + required: false + x-nullable: true + schema: + type: string + format: date-time + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileChallengeList' + deprecated: false + /profile/{public_id}/challenges: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + operationId: profile_challenges + description: This docstring is used by Django Rest Framework + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileChallengeList' + /profile/{public_id}/connections: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + get: + tags: + - profile + summary: Connections + operationId: profile_connections + description: | + Lists the connections available for a profile and their "state". + This endpoint returns a list of objects. + parameters: + - description: >- + After connecting redirect back to this url. + + + Note: has to be a valid http url. For deeplinks (to apps) first + redirect to your own backend and then deeplink from there. + + + Note: the user is only redirected on a successfull connection, + otherwise an error screen is shown. (see redirect_on_error to change + this) + + + Note: if this parameter is omitted, then user will see a generic + success screen. + name: redirect + in: query + required: false + schema: + type: string + minLength: 1 + - description: >- + If enabled, then user will also be redirected to the redirect url if + an error occurs + + + Note: a query parameter 'error' is added to the redirect url. + Possible values are access_denied, unknown. New values may be added + at anytime + + + Note: for backwards compatibility the default is false, but this + will be changed in the next breaking release + name: redirect_on_error + in: query + required: false + schema: + type: boolean + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAppConnectionList' + deprecated: false + /team: + parameters: [] + get: + tags: + - team + summary: List Teams + operationId: team_list + security: + - BearerAdmin: [] + description: List all available teams + parameters: + - description: Number of results to return per page. + name: limit + in: query + required: false + schema: + type: integer + - description: The initial index from which to return the results. + name: offset + in: query + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamListResponse' + deprecated: false + post: + tags: + - team + summary: Create Team + operationId: team_create + security: + - BearerAdmin: [] + description: Creates a new team + requestBody: + $ref: '#/components/requestBodies/TeamDetail' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + deprecated: false + /team/{public_id}: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + get: + tags: + - team + summary: Team + operationId: team_read + security: + - BearerAdmin: [] + description: Get a single team + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + deprecated: false + put: + tags: + - team + summary: Edit Team + operationId: team_update + security: + - BearerAdmin: [] + description: Creates a new team + requestBody: + $ref: '#/components/requestBodies/TeamDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + deprecated: false + patch: + tags: + - team + summary: Partial Edit a Team + operationId: Team_editTeamPartial + security: + - BearerAdmin: [] + description: Creates a new team + requestBody: + $ref: '#/components/requestBodies/TeamDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + deprecated: false + delete: + tags: + - team + summary: Deletes a Team + operationId: team_delete + security: + - BearerAdmin: [] + description: Deletes an existing team + responses: + '204': + description: '' + deprecated: false + /team/{public_id}/member: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + post: + tags: + - team + summary: Add member + operationId: Team_addMember + security: + - BearerAdmin: [] + description: Add member to a team + requestBody: + $ref: '#/components/requestBodies/ProfileAsProfilePublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicId' + deprecated: false + put: + tags: + - team + summary: Add member + operationId: Team_addMember + security: + - BearerAdmin: [] + description: Add member to a team + requestBody: + $ref: '#/components/requestBodies/ProfileAsProfilePublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicId' + deprecated: false + delete: + tags: + - team + summary: Remove member + operationId: Team_removeMember + security: + - BearerAdmin: [] + description: Remove a member from the team + parameters: + - description: A profile public_id is expected + name: profile + in: query + required: true + schema: + type: string + format: uuid + responses: + '204': + description: '' + deprecated: false + /team/{public_id}/members: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + post: + tags: + - team + summary: Add members + operationId: Team_addMembers + security: + - BearerAdmin: [] + description: Add members to a team + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsList' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + deprecated: false + put: + tags: + - team + summary: Add members + operationId: Team_addMembers + security: + - BearerAdmin: [] + description: Add members to a team + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsList' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + deprecated: false + /team/{public_id}/remove_members: + parameters: + - name: public_id + in: path + required: true + schema: + type: string + post: + tags: + - team + summary: Remove members + operationId: Team_removeMembers + security: + - BearerAdmin: [] + description: Remove members from the team + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsList' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + deprecated: false + /token: + parameters: [] + post: + tags: + - token + summary: Create Token + operationId: token_create + security: + - Basic: [] + description: > + + In order to create a token, perform a POST request to this endpoint, + example:<br/> + + <table><tbody> + <tr><td>Application ID</td><td>123</td></tr> + <tr><td>Application Secret</td><td>ABC</td></tr> + <tr><td>Authorization header format</td><td>Authorization: base64(app_id:app_secret)</td></tr> + <tr><td>Expected result</td><td>Authorization: MTIzOkFCQw==</td></tr> + </tbody></table> + + For testing purposes, a CURL can be used: + + <pre> + + curl -X POST -H "Authorization: Basic MTIzOkFCQw==" + https://api.wefitter.com/api/v1.3/token/ + + # alternatively + + curl -X POST --user 123:ABC https://api.wefitter.com/api/v1.3/token/ + + </pre> + + + The response to a successful request should look like this: + + <pre> + + { + "bearer": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOiIxNTY2NTYxMzk2IiwiaWF0IjoxNTE2MjM5MDIyfQ.14x12h5VMJjAV2kFB5cCrfFmZhryBAYGk9N-vhyDl00" + } + + </pre> + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Token' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Token' + deprecated: false +components: + requestBodies: + TeamDetail: + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + required: true + ChallengeDetail: + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + required: true + ProfileAsProfilePublicIdAndTeamAsTeamPublicId: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId' + required: true + ProfilePublicIdsListAndTeamAsPublicId: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + required: true + ProfileAsProfilePublicId: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicId' + required: true + ProfileDetail: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + required: true + ProfilePublicIdsList: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + required: true + securitySchemes: + Basic: + description: >- + Basic Authentication is used to create administrator bearer tokens. + + + Once a bearer token has been made, remove this auth. ('logout' in + Swagger') + type: http + scheme: basic + BearerProfile: + description: >- + Bearer authentication for logged-in profiles. + + + When using the GUI, please don't forget to prefix your bearer tokens + with the text 'bearer', followed by a space. + type: apiKey + name: Authorization + in: header + BearerAdmin: + description: >- + Bearer authentication for administrators. + + + When using the GUI, please don't forget to prefix your bearer tokens + with the text 'bearer', followed by a space. + type: apiKey + name: Authorization + in: header + schemas: + AppTotals: + type: object + properties: + total_calories: + title: Total calories + type: number + total_distance: + title: Total distance + type: number + total_steps: + title: Total steps + type: number + total_points: + title: Total points + type: number + total_activity_duration: + title: Total activity duration + type: string <iso8601 duration> + minLength: 1 + ChallengeActivityType: + required: + - activity_type + type: object + properties: + activity_type: + title: Activity type + type: string + enum: + - RUNNING + - CROSSFIT + - CYCLING + - SWIMMING + - OTHER + - ROWING + - WALKING + - MINDFULNESS + - YOGA + - STRENGTH_TRAINING + ChallengeList: + required: + - title + - start + - type + - goal + - goal_type + - visibility + - repetition + type: object + properties: + title: + title: Title + type: string + minLength: 1 + description: + title: Description + type: string + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + slogan: + title: Slogan + type: string + start: + title: Start + type: string + format: date-time + end: + title: End + type: string + format: date-time + nullable: true + type: + title: Type + type: string + enum: + - INDIVIDUAL + - GROUP + - TEAM + goal: + title: Goal + type: string + enum: + - DAILY + - TOTAL + - WEEKLY + - MONTHLY + goal_value: + title: Goal value + type: integer + maximum: 2147483647 + minimum: -2147483648 + nullable: true + goal_type: + title: Goal type + type: string + enum: + - POINTS + - DISTANCE + - CALORIES + - DURATION + - STEPS + visibility: + title: Visibility + type: string + enum: + - PUBLIC + - PRIVATE + num_members: + title: Num members + type: string + readOnly: true + repetition: + title: Repetition + type: string + enum: + - NONE + - STREAK + - STICKTOIT + - GOALBREAKER + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + data_source: + title: Data source + type: string + readOnly: true + minLength: 1 + activity_types: + type: array + items: + $ref: '#/components/schemas/ChallengeActivityType' + current_period_start: + title: Current period start + description: >- + The start (exclusive) of the current period. Null if the challenge + has not started yet. + type: string + format: date-time + readOnly: true + current_period_end: + title: Current period end + description: >- + The end (exclusive) of the current period. Null if the challenge end + has passed. + type: string + format: date-time + readOnly: true + goal_cap: + title: Goal cap + description: Whether scores should be unable to surpass the goal value. + type: boolean + ChallengeDetail: + required: + - title + - start + - type + - goal + - goal_type + - visibility + - calculation_method + - enrollment_method + - repetition + type: object + properties: + title: + title: Title + type: string + minLength: 1 + description: + title: Description + type: string + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + slogan: + title: Slogan + type: string + start: + title: Start + type: string + format: date-time + end: + title: End + type: string + format: date-time + nullable: true + type: + title: Type + type: string + enum: + - INDIVIDUAL + - GROUP + - TEAM + goal: + title: Goal + type: string + enum: + - DAILY + - TOTAL + - WEEKLY + - MONTHLY + goal_value: + title: Goal value + type: integer + maximum: 2147483647 + minimum: -2147483648 + nullable: true + goal_type: + title: Goal type + type: string + enum: + - POINTS + - DISTANCE + - CALORIES + - DURATION + - STEPS + visibility: + title: Visibility + type: string + enum: + - PUBLIC + - PRIVATE + num_members: + title: Num members + type: string + readOnly: true + calculation_method: + title: Calculation method + type: string + enum: + - SUM + - AVERAGE + goal_progress: + title: Goal progress + description: >- + Progress towards the goal, from perspective of profile whose bearer + is used for authentication: can be an individual/team/global score. + When goal is duration, this is the duration in seconds. When an + admin token is used, returns 0.0. + type: number + readOnly: true + enrollment_method: + title: Enrollment method + type: string + enum: + - AUTOMATIC + - MANUAL + default_enrollment_time: + title: Default enrollment time + type: string + enum: + - CHALLENGE_START + - ENROLLMENT_TIME + repetition: + title: Repetition + type: string + enum: + - NONE + - STREAK + - STICKTOIT + - GOALBREAKER + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + data_source: + title: Data source + type: string + readOnly: true + minLength: 1 + activity_types: + type: array + items: + $ref: '#/components/schemas/ChallengeActivityType' + current_period_start: + title: Current period start + description: >- + The start (exclusive) of the current period. Null if the challenge + has not started yet. + type: string + format: date-time + readOnly: true + current_period_end: + title: Current period end + description: >- + The end (exclusive) of the current period. Null if the challenge end + has passed. + type: string + format: date-time + readOnly: true + goal_cap: + title: Goal cap + description: Whether scores should be unable to surpass the goal value. + type: boolean + total_calories: + title: Total calories + type: number + readOnly: true + total_distance: + title: Total distance + type: number + readOnly: true + total_steps: + title: Total steps + type: number + readOnly: true + total_points: + title: Total points + type: number + readOnly: true + total_activity_duration: + title: Total activity duration + type: string <iso8601 duration> + readOnly: true + minLength: 1 + LeaderboardTeam: + required: + - name + - avatar + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + num_members: + title: Num members + type: string + readOnly: true + score: + title: Score + type: number + readOnly: true + position: + title: Position + type: integer + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + TeamProfile: + description: Team of which this profile is a member of + required: + - name + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + LeaderboardProfile: + required: + - avatar + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + name: + title: Name + type: string + readOnly: true + minLength: 1 + gender: + title: Gender + type: string + enum: + - M + - F + - X + teams: + description: Team of which this profile is a member of + type: array + items: + $ref: '#/components/schemas/TeamProfile' + readOnly: true + reference: + title: Reference + type: string + readOnly: true + minLength: 1 + score: + title: Score + type: number + readOnly: true + position: + title: Position + type: integer + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + ProfileAsProfilePublicIdAndTeamAsTeamPublicId: + required: + - profile + type: object + properties: + profile: + title: Profile + description: A profile public_id is expected + type: string + format: uuid + team: + title: Team + description: A team public_id is expected + type: string + format: uuid + is_active: + title: Is active + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + type: boolean + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + ProfilePublicIdsListAndTeamAsPublicId: + required: + - profiles + type: object + properties: + profiles: + type: array + items: + type: string + format: uuid + is_active: + title: Is active + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + type: boolean + team: + title: Team + description: A team public_id is expected + type: string + format: uuid + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + LeaderboardProfileAndTeam: + required: + - avatar + type: object + properties: + name: + title: Name + type: string + readOnly: true + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + score: + title: Score + type: number + readOnly: true + position: + title: Position + type: integer + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + LeaderboardHistory: + type: object + properties: + score: + title: Score + type: number + readOnly: true + start: + title: Start + type: string + format: date-time + readOnly: true + end: + title: End + type: string + format: date-time + readOnly: true + ChallengePeriod: + type: object + properties: + start: + title: Start + type: string + format: date-time + readOnly: true + end: + title: End + type: string + format: date-time + readOnly: true + ProfileAsProfilePublicId: + required: + - profile + type: object + properties: + profile: + title: Profile + description: A profile public_id is expected + type: string + format: uuid + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + AppConnectionUrl: + required: + - next + type: object + properties: + next: + title: Next + type: string + format: uri + minLength: 1 + BioAge: + required: + - start + - end + - bio_age + type: object + properties: + start: + title: Start + type: string + format: date + end: + title: End + type: string + format: date + bio_age: + title: Bio age + type: number + RecommendedProducts: + required: + - name + type: object + properties: + description: + title: Description + type: string + maxLength: 200 + article_number: + title: Article number + type: integer + maximum: 9223372036854776000 + minimum: -9223372036854776000 + name: + title: Name + type: string + maxLength: 255 + minLength: 1 + price: + title: Price + type: number + nullable: true + ShoppingCart: + required: + - redirect_url + type: object + properties: + redirect_url: + title: Redirect url + type: string + maxLength: 256 + minLength: 1 + Notification: + required: + - title + - body + type: object + properties: + title: + title: Title + type: string + maxLength: 512 + minLength: 1 + body: + title: Body + type: string + maxLength: 2048 + minLength: 1 + schedule: + title: Schedule + description: date and time to send notification + type: string + format: date-time + nullable: true + link: + title: Link + type: string + maxLength: 1024 + NotificationForProfiles: + required: + - title + - body + - profiles + type: object + properties: + title: + title: Title + type: string + maxLength: 512 + minLength: 1 + body: + title: Body + type: string + maxLength: 2048 + minLength: 1 + schedule: + title: Schedule + description: date and time to send notification + type: string + format: date-time + nullable: true + link: + title: Link + type: string + maxLength: 1024 + profiles: + type: array + items: + description: The profiles to send the push notification to + type: string + format: uuid + ProfileList: + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + name: + title: Name + type: string + readOnly: true + minLength: 1 + gender: + title: Gender + type: string + enum: + - M + - F + - X + teams: + description: Team of which this profile is a member of + type: array + items: + $ref: '#/components/schemas/TeamProfile' + readOnly: true + reference: + title: Reference + type: string + maxLength: 255 + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + ProfileCreated: + required: + - reference + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + given_name: + title: Given name + type: string + maxLength: 100 + family_name: + title: Family name + type: string + maxLength: 100 + nickname: + title: Nickname + type: string + maxLength: 100 + gender: + title: Gender + type: string + enum: + - M + - F + - X + birthdate: + title: Birthdate + type: string + format: date + nullable: true + zoneinfo: + title: Zoneinfo + type: string + readOnly: true + locale: + title: Locale + type: string + maxLength: 5 + reference: + title: Reference + type: string + maxLength: 256 + minLength: 1 + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + bearer: + title: Bearer + description: >- + Used for authenticating as a profile. Make this the active + Authorization bearer to perform actions using this profile. + type: string + readOnly: true + minLength: 1 + HeartRateSummaryLinked: + type: object + properties: + min: + title: Min + description: Minimum heart rate. + type: integer + nullable: true + max: + title: Max + description: Maximum heart rate. + type: integer + nullable: true + average: + title: Average + description: Average heart rate. + type: integer + nullable: true + resting: + title: Resting + description: Resting heart rate. + type: integer + nullable: true + Activity: + required: + - timestamp + - source + - type + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + type: + title: Type + description: Type of the activity. + type: string + enum: + - RUNNING + - CROSSFIT + - CYCLING + - SWIMMING + - OTHER + - ROWING + - WALKING + - MINDFULNESS + - YOGA + - STRENGTH_TRAINING + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + steps: + title: Steps + description: Steps taken. + type: number + nullable: true + elevation: + title: Elevation + description: Elevation gained during the workout. + type: number + nullable: true + speed: + title: Speed + description: Average speed during the workout + type: number + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + points: + title: Points + description: Points earned. + type: number + nullable: true + in_outdoor: + title: In_outdoor + description: in- or outdoor-activity. + type: string + nullable: true + heart_rate_summary: + $ref: '#/components/schemas/HeartRateSummaryLinked' + BioMetric: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + weight: + title: Weight + description: Weight in kg. + type: number + nullable: true + height: + title: Height + description: Height in cm. + type: number + nullable: true + bmi: + title: Bmi + description: >- + Body Mass Index, automatically calculated if not entered and both + weight and height are available. + type: number + nullable: true + BiometricMeasurement: + required: + - timestamp + - source + - measurement_type + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + end: + title: End + description: End time of the measurement. + type: string + format: date-time + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + measurement_type: + title: Measurement_type + description: Type of biometric measurement. + type: string + minLength: 1 + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + value: + title: Value + description: Value of this measurement. + type: number + nullable: true + unit: + title: Unit + description: Unit of this measurement + type: string + nullable: true + BMI: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + bmi: + title: Bmi + description: >- + Body Mass Index, automatically calculated if not entered and both + weight and height are available. + type: number + nullable: true + DailyDetail: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + description: Duration of the measurement. + type: string + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + steps: + title: Steps + description: Steps taken. + type: integer + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + StressSummaryLinked: + required: + - stress_qualifier + type: object + properties: + stress_qualifier: + title: Stress qualifier + description: Qualifier describing stress level. + type: string + enum: + - UNKNOWN + - CALM + - BALANCED + - STRESSFUL + - VERY_STRESSFUL + average_stress_level: + title: Average_stress_level + description: Average stress level. + type: integer + nullable: true + max_stress_level: + title: Max_stress_level + description: Maximum stress level. + type: integer + nullable: true + rest_stress_duration: + title: Rest stress duration + description: Time at restful stress level. + type: string <iso8601 duration> + minLength: 1 + low_stress_duration: + title: Low stress duration + description: Time at low stress level. + type: string <iso8601 duration> + minLength: 1 + medium_stress_duration: + title: Medium stress duration + description: Time at medium stress level. + type: string <iso8601 duration> + minLength: 1 + high_stress_duration: + title: High stress duration + description: Time at high stress level. + type: string <iso8601 duration> + minLength: 1 + stress_duration: + title: Stress duration + description: Total time in stress. + type: string <iso8601 duration> + minLength: 1 + DailySummary: + required: + - date + - source + type: object + properties: + date: + title: Date + description: Date of the summary. + type: string + format: date + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + steps: + title: Steps + description: Steps taken. + type: number + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + active_calories: + title: Active_calories + description: Active calorie burn. + type: number + nullable: true + bmr_calories: + title: Bmr_calories + description: BMR calorie burn. + type: number + nullable: true + points: + title: Points + description: Points earned. + type: number + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + heart_rate_summary: + $ref: '#/components/schemas/HeartRateSummaryLinked' + stress_summary: + $ref: '#/components/schemas/StressSummaryLinked' + DetailSample: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + activity_type: + title: Activity_type + type: string + nullable: true + activity_id: + title: Activity_id + type: string + nullable: true + distance: + title: Distance + type: number + nullable: true + calories: + title: Calories + type: number + nullable: true + heart_rate: + title: Heart_rate + type: number + nullable: true + ECGRecordings: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + description: Duration of the measurement. + type: string + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + sample_frequency: + title: Sample_frequency + description: Sampling frequency of heart beats as integer in Hz. + type: integer + nullable: true + sample_count: + title: Sample_count + description: Sample count of heart beats as integer. + type: integer + nullable: true + ECGRecording: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + description: Duration of the measurement. + type: string + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + sample_frequency: + title: Sample_frequency + description: Sampling frequency of heart beats as integer in Hz. + type: integer + nullable: true + sample_count: + title: Sample_count + description: Sample count of heart beats as integer. + type: integer + nullable: true + data: + description: >- + ECG data, represented as [[time (s), value (mcV)], [time2 (s), + value2 (mcV)]), .. + type: array + items: + type: string + nullable: true + nullable: true + Event: + type: object + properties: + description: + title: Description + description: Title / description of the action. + type: string + nullable: true + timestamp: + title: Timestamp + description: Time at which the action was performed. + type: string + format: date-time + points: + title: Points + description: Amount of points awarded for the action. + type: number + nullable: true + HeartRateSample: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + value: + title: Value + description: Measured heart rate in beats/min. + type: integer + nullable: true + min: + title: Min + description: Minimum value measured in the time window. + type: integer + nullable: true + max: + title: Max + description: Maximum value measured in the time window. + type: integer + nullable: true + HeartRateSummary: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + min: + title: Min + description: Minimum heart rate. + type: integer + nullable: true + max: + title: Max + description: Maximum heart rate. + type: integer + nullable: true + average: + title: Average + description: Average heart rate. + type: integer + nullable: true + resting: + title: Resting + description: Resting heart rate. + type: integer + nullable: true + Height: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + height: + title: Height + description: Height in cm. + type: number + nullable: true + SleepDetail: + required: + - timestamp + - source + - level + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + timestamp_end: + title: Timestamp end + description: Ending time of the measurement. + type: string + format: date-time + level: + title: Level + description: Sleep level + type: string + enum: + - AWAKE + - LIGHT + - DEEP + - REM + - UNKNOWN + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + SleepDetailMinimal: + required: + - timestamp + - level + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + timestamp_end: + title: Timestamp end + description: Ending time of the measurement. + type: string + format: date-time + level: + title: Level + description: Sleep level + type: string + enum: + - AWAKE + - LIGHT + - DEEP + - REM + - UNKNOWN + SleepSummary: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + timestamp_end: + title: Timestamp end + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + awake: + title: Awake + description: Time awake. + type: string <iso8601 duration> + minLength: 1 + light: + title: Light + description: Time in light sleep. + type: string <iso8601 duration> + minLength: 1 + deep: + title: Deep + description: Time in deep sleep. + type: string <iso8601 duration> + minLength: 1 + rem: + title: Rem + description: Time in REM sleep. + type: string <iso8601 duration> + minLength: 1 + sleep_score: + title: Sleep_score + description: Sleep score + type: integer + nullable: true + detail: + type: array + items: + $ref: '#/components/schemas/SleepDetailMinimal' + total_time_in_sleep: + title: Total time in sleep + type: string <iso8601 duration> + minLength: 1 + StressSample: + required: + - timestamp + - source + - stress_value + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + stress_value: + title: Stress_value + description: Stress value. + type: integer + StressSummary: + required: + - timestamp + - source + - stress_qualifier + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + stress_qualifier: + title: Stress qualifier + description: Qualifier describing stress level. + type: string + enum: + - UNKNOWN + - CALM + - BALANCED + - STRESSFUL + - VERY_STRESSFUL + average_stress_level: + title: Average_stress_level + description: Average stress level. + type: integer + nullable: true + max_stress_level: + title: Max_stress_level + description: Maximum stress level. + type: integer + nullable: true + rest_stress_duration: + title: Rest stress duration + description: Time at restful stress level. + type: string <iso8601 duration> + minLength: 1 + low_stress_duration: + title: Low stress duration + description: Time at low stress level. + type: string <iso8601 duration> + minLength: 1 + medium_stress_duration: + title: Medium stress duration + description: Time at medium stress level. + type: string <iso8601 duration> + minLength: 1 + high_stress_duration: + title: High stress duration + description: Time at high stress level. + type: string <iso8601 duration> + minLength: 1 + stress_duration: + title: Stress duration + description: Total time in stress. + type: string <iso8601 duration> + minLength: 1 + TrackSample: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + activity_type: + title: Activity_type + type: string + nullable: true + activity_id: + title: Activity_id + type: string + nullable: true + distance: + title: Distance + type: number + nullable: true + calories: + title: Calories + type: number + nullable: true + Weight: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + weight: + title: Weight + description: Weight in kg. + type: number + nullable: true + Workout: + required: + - timestamp + - source + - type + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + type: + title: Type + description: Type of the activity. + type: string + enum: + - RUNNING + - CROSSFIT + - CYCLING + - SWIMMING + - OTHER + - ROWING + - WALKING + - MINDFULNESS + - YOGA + - STRENGTH_TRAINING + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + steps: + title: Steps + description: Steps taken. + type: number + nullable: true + elevation: + title: Elevation + description: Elevation gained during the workout. + type: number + nullable: true + speed: + title: Speed + description: Average speed during the workout + type: number + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + points: + title: Points + description: Points earned. + type: number + nullable: true + in_outdoor: + title: In_outdoor + description: in- or outdoor-activity. + type: string + nullable: true + heart_rate_summary: + $ref: '#/components/schemas/HeartRateSummaryLinked' + ProfileDetail: + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + given_name: + title: Given name + type: string + maxLength: 100 + family_name: + title: Family name + type: string + maxLength: 100 + nickname: + title: Nickname + type: string + maxLength: 100 + gender: + title: Gender + type: string + enum: + - M + - F + - X + birthdate: + title: Birthdate + type: string + format: date + nullable: true + zoneinfo: + title: Zoneinfo + type: string + readOnly: true + locale: + title: Locale + type: string + maxLength: 5 + total_calories: + title: Total calories + type: number + total_distance: + title: Total distance + type: number + total_steps: + title: Total steps + type: number + total_points: + title: Total points + type: number + total_activity_duration: + title: Total activity duration + type: string <iso8601 duration> + readOnly: true + minLength: 1 + reference: + title: Reference + type: string + maxLength: 255 + teams: + description: Team of which this profile is a member of + type: array + items: + $ref: '#/components/schemas/TeamProfile' + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + created_at: + title: Created at + type: string + format: date-time + readOnly: true + updated_at: + title: Updated at + type: string + format: date-time + readOnly: true + num_active_challenges: + title: Num active challenges + type: string + readOnly: true + num_done_challenges: + title: Num done challenges + type: string + readOnly: true + num_future_challenges: + title: Num future challenges + type: string + readOnly: true + EnrollmentInformation: + type: object + properties: + team: + title: Team + type: string + readOnly: true + minLength: 1 + team_public_id: + title: Team public id + type: string + readOnly: true + minLength: 1 + team_size: + title: Team size + type: integer + readOnly: true + leaderboard_rank: + title: Leaderboard rank + description: >- + Current or final rank among the participants of the challenge as + determined by the relevant score. + type: integer + readOnly: true + leaderboard_score: + title: Leaderboard score + description: The profile's current or final score. + type: number + readOnly: true + ProfileChallengeList: + required: + - title + - start + - type + - goal + - goal_type + - visibility + - repetition + type: object + properties: + title: + title: Title + type: string + minLength: 1 + description: + title: Description + type: string + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + slogan: + title: Slogan + type: string + start: + title: Start + type: string + format: date-time + end: + title: End + type: string + format: date-time + nullable: true + type: + title: Type + type: string + enum: + - INDIVIDUAL + - GROUP + - TEAM + goal: + title: Goal + type: string + enum: + - DAILY + - TOTAL + - WEEKLY + - MONTHLY + goal_value: + title: Goal value + type: integer + maximum: 2147483647 + minimum: -2147483648 + nullable: true + goal_type: + title: Goal type + type: string + enum: + - POINTS + - DISTANCE + - CALORIES + - DURATION + - STEPS + visibility: + title: Visibility + type: string + enum: + - PUBLIC + - PRIVATE + num_members: + title: Num members + type: string + readOnly: true + leaderboard_rank: + title: Leaderboard rank + description: >- + Current or final rank among the participants of the challenge as + determined by the relevant score. + type: integer + readOnly: true + leaderboard_score: + title: Leaderboard score + description: The profile's current or final score. + type: number + readOnly: true + is_participating: + title: Is participating + description: Does the current profile participate in this challenge? + type: boolean + readOnly: true + enrollment: + $ref: '#/components/schemas/EnrollmentInformation' + repetition: + title: Repetition + type: string + enum: + - NONE + - STREAK + - STICKTOIT + - GOALBREAKER + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + data_source: + title: Data source + type: string + readOnly: true + minLength: 1 + activity_types: + type: array + items: + $ref: '#/components/schemas/ChallengeActivityType' + current_period_start: + title: Current period start + description: >- + The start (exclusive) of the current period. Null if the challenge + has not started yet. + type: string + format: date-time + readOnly: true + current_period_end: + title: Current period end + description: >- + The end (exclusive) of the current period. Null if the challenge end + has passed. + type: string + format: date-time + readOnly: true + goal_cap: + title: Goal cap + description: Whether scores should be unable to surpass the goal value. + type: boolean + joined: + title: Joined + description: The timestamp when the profile joined the challenge. + type: string + format: date-time + readOnly: true + ProfileAppConnectionList: + type: object + properties: + display_name: + title: Display name + type: string + readOnly: true + url: + title: Url + type: string + readOnly: true + minLength: 1 + connected: + title: Connected + type: string + enum: + - CONNECTED + - ERROR + - NOT_CONNECTED + readOnly: true + connection_slug: + title: Connection slug + type: string + readOnly: true + minLength: 1 + img_url: + title: Img url + type: string + readOnly: true + minLength: 1 + created_at: + title: Created at + type: string + format: date-time + readOnly: true + updated_at: + title: Updated at + type: string + format: date-time + readOnly: true + TeamList: + required: + - name + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + num_members: + title: Num members + type: string + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + ProfileTeam: + description: List of members in this team + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + name: + title: Name + type: string + readOnly: true + minLength: 1 + reference: + title: Reference + type: string + maxLength: 255 + TeamDetail: + required: + - name + - description + type: object + properties: + description: + title: Description + type: string + minLength: 1 + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + num_members: + title: Num members + type: string + readOnly: true + members: + description: List of members in this team + type: array + items: + $ref: '#/components/schemas/ProfileTeam' + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + ProfilePublicIdsList: + required: + - profiles + type: object + properties: + profiles: + type: array + items: + type: string + format: uuid + is_active: + title: Is active + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + type: boolean + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + Token: + type: object + properties: + bearer: + title: Bearer + type: string + readOnly: true + minLength: 1 + InsightsGetBioAgeWeeklyResponse: + type: array + items: + $ref: '#/components/schemas/BioAge' + LoyaltyGetRecommendedProductsResponse: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/RecommendedProducts' + AppGetTotalsResponse: + type: array + items: + $ref: '#/components/schemas/AppTotals' + ChallengeListResponse: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ChallengeList' + ChallengeTeamStandingsListResponse: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/LeaderboardTeam' + ChallengeGetMembersResponse: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ChallengeDetail' + ProfileListResponse: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ProfileList' + ProfileListActivitySegmentsResponse: + type: array + items: + $ref: '#/components/schemas/Activity' + ProfileListBiometricChangesResponse: + type: array + items: + $ref: '#/components/schemas/BioMetric' + ProfileListBiometricChanges200Response: + type: array + items: + $ref: '#/components/schemas/BiometricMeasurement' + ProfileGetBmiOverTimeResponse: + type: array + items: + $ref: '#/components/schemas/BMI' + ProfileGetDailyDetailResponse: + type: array + items: + $ref: '#/components/schemas/DailyDetail' + ProfileGetDailySummaryResponse: + type: array + items: + $ref: '#/components/schemas/DailySummary' + ProfileGetDetailSamplesResponse: + type: array + items: + $ref: '#/components/schemas/DetailSample' + ProfileGetEcgRecordingsResponse: + type: array + items: + $ref: '#/components/schemas/ECGRecordings' + ProfileGetEcgRecordingsDataResponse: + type: array + items: + $ref: '#/components/schemas/ECGRecording' + ProfileListEventsResponse: + type: array + items: + $ref: '#/components/schemas/Event' + ProfileGetHeartrateSampleResponse: + type: array + items: + $ref: '#/components/schemas/HeartRateSample' + ProfileGetHeartRateSummaryResponse: + type: array + items: + $ref: '#/components/schemas/HeartRateSummary' + ProfileListHeightChangesResponse: + type: array + items: + $ref: '#/components/schemas/Height' + ProfileGetSleepDetailResponse: + type: array + items: + $ref: '#/components/schemas/SleepDetail' + ProfileGetSleepSummaryResponse: + type: array + items: + $ref: '#/components/schemas/SleepSummary' + ProfileGetStressSamplesResponse: + type: array + items: + $ref: '#/components/schemas/StressSample' + ProfileGetStressSummaryResponse: + type: array + items: + $ref: '#/components/schemas/StressSummary' + ProfileGetGpxTrackSamplesResponse: + type: array + items: + $ref: '#/components/schemas/TrackSample' + ProfileListWeightChangesResponse: + type: array + items: + $ref: '#/components/schemas/Weight' + ProfileListWorkoutsResponse: + type: array + items: + $ref: '#/components/schemas/Workout' + TeamListResponse: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/TeamList' +security: + - BearerProfile: [] diff --git a/sdks/db/generate-repository-description-cache/we-fitter.json b/sdks/db/generate-repository-description-cache/we-fitter.json new file mode 100644 index 0000000000..c9bb8d6759 --- /dev/null +++ b/sdks/db/generate-repository-description-cache/we-fitter.json @@ -0,0 +1,3 @@ +{ + "WeFitter helps digital health platforms improve business performance, engagement and data insights introducing an aggregator API that provides connections with todays most used fitness app's, wearables & gamification elements.\n\nWeFitter's easy to integrate API will boost up user engagement and gives insight in users health profiles in order to personalize content, offerings and health advise. \n\nWeFitter is build by Thunderbyte.AI, a Dutch Al/ ML organisation with over 12 years of experience in building digital health products. \n\nAsk for a demo > business@wefitter.com": "WeFitter boosts digital health platforms with an aggregator API connecting fitness apps and wearables, improving user engagement and providing health insights. Built by Thunderbyte.AI, a Dutch Al/ML organization with 12+ years experience in digital health. WeFitter's {language} SDK generated by Konfig (https://konfigthis.com/)." +} \ No newline at end of file diff --git a/sdks/db/intermediate-fixed-specs/wefitter/openapi.yaml b/sdks/db/intermediate-fixed-specs/wefitter/openapi.yaml new file mode 100644 index 0000000000..5a419468b8 --- /dev/null +++ b/sdks/db/intermediate-fixed-specs/wefitter/openapi.yaml @@ -0,0 +1,5617 @@ +openapi: 3.0.0 +info: + title: WeFitter API + description: This is the WeFitter API + termsOfService: https://www.wefitter.com/privacy/ + contact: + email: hello@wefitter.com + license: + name: BSD License + version: v1.3 +security: + - BearerProfile: [] +paths: + /app/totals/: + get: + operationId: app_totals_list + summary: Totals + description: >- + Total values for calories, distance, steps, points and activity duration + over all profiles in the app. + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/AppTotals' + tags: + - app + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: [] + /challenge/: + get: + operationId: challenge_list + summary: List Challenges + description: Lists all available challenges + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + - name: recent + in: query + description: Show challenges that have not ended in the last N weeks + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ChallengeList' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + post: + operationId: challenge_create + summary: Create challenge + description: Creates a new challenge + requestBody: + $ref: '#/components/requestBodies/ChallengeDetail' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + parameters: [] + /challenge/{challenge_public_id}/team/: + get: + operationId: challenge_team_list + summary: Team leaderboard + description: > + List the standings of different teams in challenges (don't have to be + team challenges). + + This endpoint returns a list of objects. + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + - name: date_range + in: query + description: Index of the time period use + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/LeaderboardTeam' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: challenge_public_id + in: path + required: true + schema: + type: string + /challenge/{challenge_public_id}/team/{team_public_id}/: + get: + operationId: challenge_team_read + summary: Team contribution + description: | + List team members' contribution to the challenge. + This endpoint returns a list of objects. + parameters: + - name: date_range + in: query + description: Index of the time period use + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/LeaderboardProfile' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: challenge_public_id + in: path + required: true + schema: + type: string + - name: team_public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/: + get: + operationId: challenge_read + summary: Get Challenge + description: Gets a single challenge + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: challenge_update + summary: Edit challenge + description: Edits a challenge + requestBody: + $ref: '#/components/requestBodies/ChallengeDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + patch: + operationId: challenge_partial_update + summary: Partial edit challenge + description: Edits a challenge + requestBody: + $ref: '#/components/requestBodies/ChallengeDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + delete: + operationId: challenge_delete + summary: Delete challenge + description: deletes a challenge + responses: + '204': + description: '' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/deactivate_member/: + post: + operationId: challenge_deactivate_member_create + summary: Deactivate member + description: Deactivate a member from the challenge + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + - name: team + in: query + description: A team public_id is expected + required: false + schema: + type: string + format: uuid + - name: is_active + in: query + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + required: false + schema: + type: boolean + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: challenge_deactivate_member_update + description: This docstring is used by Django Rest Framework + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + tags: + - challenge + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/deactivate_members/: + post: + operationId: challenge_deactivate_members_create + summary: Deactivate members + description: Deactivate multiple members from the challenge + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + - name: team + in: query + description: A team public_id is expected + required: false + schema: + type: string + format: uuid + - name: is_active + in: query + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + required: false + schema: + type: boolean + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: challenge_deactivate_members_update + description: This docstring is used by Django Rest Framework + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/leaderboard/: + get: + operationId: challenge_leaderboard + summary: Leaderboard + description: | + Displays the leaderboard for a challenge. + This endpoint returns a list of objects. + parameters: + - name: date_range + in: query + description: Index of the time period use + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/LeaderboardProfileAndTeam' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/leaderboard_history/: + get: + operationId: challenge_leaderboard_history + summary: Leaderboard history + description: > + Retrieve the scores of the authenticated profile for all periods since + the profile joined the challenge. + + This endpoint returns a list of objects. + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/LeaderboardHistory' + tags: + - challenge + security: + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/member/: + post: + operationId: challenge_member_create + summary: Add member + description: > + Add member to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: challenge_member_update + summary: Add member + description: > + Add member to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + requestBody: + $ref: >- + #/components/requestBodies/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: >- + #/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + delete: + operationId: challenge_member_delete + summary: Remove member + description: Remove a member from the challenge + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + responses: + '204': + description: '' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/members/: + get: + operationId: challenge_members_read + summary: Get members + description: Get a paginated list of members enrolled to a Challenge + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ChallengeDetail' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + post: + operationId: challenge_members_create + summary: Add members + description: >- + Add members to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + + + Note: for the GET/POST endpoint an admin bearer token is required, while + the GET also accepts profile bearer tokens + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + put: + operationId: challenge_members_update + summary: Add members + description: >- + Add members to a team. + + + Note: for now if the challenge is a team challenge and no team is + specified, the first team for the specified profile is + + used. Do note that this is a temporary fix and may be removed at any + time. + + + Note: for the GET/POST endpoint an admin bearer token is required, while + the GET also accepts profile bearer tokens + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/periods/: + get: + operationId: challenge_periods + summary: Periods + description: | + Get all periods for the challenge. + This endpoint returns a list of objects. + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengePeriod' + tags: + - challenge + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /challenge/{public_id}/remove_members/: + post: + operationId: challenge_remove_members + summary: Remove members + description: Remove members from the challenge + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsListAndTeamAsPublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + tags: + - challenge + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /connection/{connection_slug}/connect/: + post: + operationId: connection_connect_create + summary: Connect wearable + description: Get OAuth URL for this connection. + requestBody: + $ref: '#/components/requestBodies/ProfileAsProfilePublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/AppConnectionUrl' + tags: + - connection + deprecated: false + delete: + operationId: connection_connect_delete + summary: Disconnect Wearable + description: Disconnect a wearables connection + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + responses: + '200': + description: OK + tags: + - connection + deprecated: false + parameters: + - name: connection_slug + in: path + required: true + schema: + type: string + /insights/bio_age: + get: + operationId: insights_bio_age_read + summary: Get someones biological age on a weekly basis. + description: '' + parameters: + - name: start_date + in: query + required: true + schema: + type: string + format: date + - name: end_date + in: query + required: true + schema: + type: string + format: date + responses: + '200': + description: '' + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BioAge' + tags: + - insights + parameters: [] + /loyalty/get_recommended_products: + get: + operationId: loyalty_get_recommended_products_list + description: '' + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/RecommendedProducts' + tags: + - loyalty + parameters: [] + /loyalty/get_shoppingcart_link: + get: + operationId: loyalty_get_shoppingcart_link_read + description: '' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ShoppingCart' + tags: + - loyalty + parameters: [] + /notification/send_to_all/: + post: + operationId: notification_send_to_all_create + summary: Notification to all profiles in app + description: Send a notification to all registered devices in the app. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Notification' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Notification' + tags: + - notification + security: + - BearerAdmin: [] + deprecated: false + parameters: [] + /notification/send_to_profiles/: + post: + operationId: notification_send_to_profiles_create + summary: Notification to specific profiles + description: >- + Send a notification to all registered devices for the specified + profiles. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationForProfiles' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/NotificationForProfiles' + tags: + - notification + security: + - BearerAdmin: [] + deprecated: false + parameters: [] + /profile/: + get: + operationId: profile_list + summary: List Profiles + description: Lists all available profiles + parameters: + - name: search + in: query + description: A search term. + required: false + schema: + type: string + - name: ordering + in: query + description: Which field to use when ordering the results. + required: false + schema: + type: string + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/ProfileList' + tags: + - profile + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + post: + operationId: profile_create + summary: Create Profile + description: > + + Creates a new profile. + + The bearer field contains a profile bearer token. When this is used in + the Authorization header actions are performed + + as that profile, which will also enable access to private data. + + Using a profile bearer token disables administrative features such as + creating profiles, making this token safe + + for 'public' use. + + A profile bearer token has no expiration, so it remains valid as long as + the profile is active. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileCreated' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileCreated' + tags: + - profile + security: + - BearerAdmin: [] + deprecated: false + parameters: [] + /profile/{profile_public_id}/activity_segment/: + get: + operationId: profile_activity_segment_list + summary: Activity segment + description: Lists segments of activities and small non-workout-like movements. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Activity' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/biometric/: + get: + operationId: profile_biometric_list + summary: Bio Metric + description: Lists changes in weight, height and bmi for the profile. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BioMetric' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/biometric_measurement/: + get: + operationId: profile_biometric_measurement_list + summary: Biometric Measurement + description: List changes in biometric measurements for the profile. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: measurement_type + in: query + required: true + schema: + type: string + enum: + - BLOOD_PRESSURE + - BODY_FAT + - BODY_FAT_MASS + - GLUCOSE + - SYSTOLIC_BP + - DIASTOLIC_BP + - PULSE_BP + - TEMPERATURE + - BLOOD_OXYGEN + - HRV + - VO2_MAX + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BiometricMeasurement' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/bmi/: + get: + operationId: profile_bmi_list + summary: BMI + description: Presents the Body-Mass-Index over time. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/BMI' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/daily_detail/: + get: + operationId: profile_daily_detail_list + summary: Daily details + description: Intraday data measured at a single point in time. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/DailyDetail' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/daily_summary/: + get: + operationId: profile_daily_summary_list + summary: Daily Summary + description: Provides summarized data per day. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: deduplicate + in: query + description: If set to true, duplicates will be aggregated. + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/DailySummary' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/detail_sample/: + get: + operationId: profile_detail_sample_list + summary: Detail Sample + description: Presents detail samples. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/DetailSample' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/ecg_recordings/: + get: + operationId: profile_ecg_recordings_list + summary: Electrocardiograms + description: | + + This endpoint returns a list of ECG recordings. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ECGRecordings' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/ecg_recordings/data/: + get: + operationId: profile_ecg_recordings_data_list + summary: Electrocardiogram data + description: > + + This endpoint returns an ECG recording with data as an array of tuples + `[(time, value)]`. + + Set the argument `date_end` to request a specific recording or leave it + empty to receive the latest recording. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/ECGRecording' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/ecg_recordings/pdf/: + get: + operationId: profile_ecg_recordings_pdf_list + summary: Electrocardiogram PDF + description: >- + Returns a PDF with generated ECG charts from a specific source and time. + Contact api-support@wefitter.com to gain access. + parameters: + - name: datetime + in: query + description: >- + The timestamp when the ECG has been recorded in the format + `yyyymmddhhmmss`. e.g. `20210913132513` + required: true + schema: + type: string + format: date-time + - name: source + in: query + required: true + schema: + type: string + enum: + - NONE + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + responses: + '200': + description: '' + tags: + - profile + security: + - BearerProfile: [] + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/event/: + get: + operationId: profile_event_list + summary: Event + description: Lists events, generic actions for which points have been awarded. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Event' + tags: + - profile + deprecated: false + post: + operationId: profile_event_create + summary: Create Event + description: Create a new event for the profile. + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Event' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Event' + tags: + - profile + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/heartrate_sample/: + get: + operationId: profile_heartrate_sample_list + summary: Heart Rate Sample + description: Heart Rate measured at a single point in time. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: heart_rate_detail + in: query + description: If set to true it will add heart_rate_samples field + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/HeartRateSample' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/heartrate_summary/: + get: + operationId: profile_heartrate_summary_list + summary: Heart Rate Summary + description: Presents heart rate information. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/HeartRateSummary' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/height/: + get: + operationId: profile_height_list + summary: Height + description: Lists changes in height for the profile. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Height' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/sleep_detail/: + get: + operationId: profile_sleep_detail_list + summary: Sleep detail + description: Provides sleep detail data. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SleepDetail' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/sleep_summary/: + get: + operationId: profile_sleep_summary_list + summary: Sleep Summary + description: Provides summarized sleep data. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: detail + in: query + description: >- + If set to true and only 1 result is returned, it will add a detail + field + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/SleepSummary' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/stress_samples/: + get: + operationId: profile_stress_samples_list + summary: Stress Sample + description: Presents stress samples. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/StressSample' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/stress_summary/: + get: + operationId: profile_stress_summary_list + summary: Stress Summary + description: Presents stress summaries. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/StressSummary' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/track_sample/: + get: + operationId: profile_track_sample_list + summary: Track Sample + description: Presents GPX track samples. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/TrackSample' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/weight/: + get: + operationId: profile_weight_list + summary: Weight + description: Lists changes in weight for the profile. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Weight' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{profile_public_id}/workout/: + get: + operationId: profile_workout_list + summary: Workout + description: >- + Lists workouts associated with the profile. Used to be known as + Activity. + parameters: + - name: cursor + in: query + description: The pagination cursor value. + required: false + schema: + type: string + - name: page_size + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: date_start + in: query + description: Lower bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: date_end + in: query + description: Upper bound of date or timestamp. + required: false + schema: + type: string + format: date-time + - name: deduplicate + in: query + description: If set to true, duplicates will be aggregated. + required: false + schema: + type: boolean + - name: heart_rate_detail + in: query + description: >- + If set to true and page_size is 1, it will add heart_rate_samples + field + required: false + schema: + type: boolean + responses: + '200': + description: '' + headers: + api-results-next: + description: Next page. + schema: + type: string + api-results-previous: + description: Previous page. + schema: + type: string + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Workout' + tags: + - profile + deprecated: false + parameters: + - name: profile_public_id + in: path + required: true + schema: + type: string + /profile/{public_id}/: + get: + operationId: profile_read + summary: Get Profile + description: Gets a single profile + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + tags: + - profile + deprecated: false + put: + operationId: profile_update + summary: Update profile + description: Updates the specified profile, excluding ID, team and public id. + requestBody: + $ref: '#/components/requestBodies/ProfileDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + tags: + - profile + deprecated: false + patch: + operationId: profile_partial_update + summary: Partial Update + description: Performs a partial update + requestBody: + $ref: '#/components/requestBodies/ProfileDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + tags: + - profile + deprecated: false + delete: + operationId: profile_delete + summary: Delete Profile + description: Deletes the specified profile, if created by the app. + responses: + '204': + description: '' + tags: + - profile + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /profile/{public_id}/challenge/: + get: + operationId: profile_challenge + summary: Challenge + description: > + Provides a list of challenges where the profile can participate and is + already participating in. + + + This endpoint returns a list of objects. + parameters: + - name: recent + in: query + description: Show challenges that have not ended in the last N weeks + required: false + schema: + type: integer + - name: date_start + in: query + description: |- + Only return challenges that are active after this time + + Note: this only affects challenges that are not joined. + + Defaults to now + required: false + x-nullable: true + schema: + type: string + format: date-time + - name: date_end + in: query + description: |- + Only return challenges that are active before this time + + Note: this only affects challenges that are not joined. + + Defaults to now + required: false + x-nullable: true + schema: + type: string + format: date-time + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileChallengeList' + tags: + - profile + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /profile/{public_id}/challenges/: + get: + operationId: profile_challenges + description: This docstring is used by Django Rest Framework + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileChallengeList' + tags: + - profile + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /profile/{public_id}/connections/: + get: + operationId: profile_connections + summary: Connections + description: | + Lists the connections available for a profile and their "state". + This endpoint returns a list of objects. + parameters: + - name: redirect + in: query + description: >- + After connecting redirect back to this url. + + + Note: has to be a valid http url. For deeplinks (to apps) first + redirect to your own backend and then deeplink from there. + + + Note: the user is only redirected on a successfull connection, + otherwise an error screen is shown. (see redirect_on_error to change + this) + + + Note: if this parameter is omitted, then user will see a generic + success screen. + required: false + schema: + type: string + minLength: 1 + - name: redirect_on_error + in: query + description: >- + If enabled, then user will also be redirected to the redirect url if + an error occurs + + + Note: a query parameter 'error' is added to the redirect url. + Possible values are access_denied, unknown. New values may be added + at anytime + + + Note: for backwards compatibility the default is false, but this + will be changed in the next breaking release + required: false + schema: + type: boolean + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAppConnectionList' + tags: + - profile + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /team/: + get: + operationId: team_list + summary: List Teams + description: List all available teams + parameters: + - name: limit + in: query + description: Number of results to return per page. + required: false + schema: + type: integer + - name: offset + in: query + description: The initial index from which to return the results. + required: false + schema: + type: integer + responses: + '200': + description: '' + content: + application/json: + schema: + required: + - count + - results + type: object + properties: + count: + type: integer + next: + type: string + format: uri + nullable: true + previous: + type: string + format: uri + nullable: true + results: + type: array + items: + $ref: '#/components/schemas/TeamList' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + post: + operationId: team_create + summary: Create Team + description: Creates a new team + requestBody: + $ref: '#/components/requestBodies/TeamDetail' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: [] + /team/{public_id}/: + get: + operationId: team_read + summary: Team + description: Get a single team + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: team_update + summary: Edit Team + description: Creates a new team + requestBody: + $ref: '#/components/requestBodies/TeamDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + patch: + operationId: team_partial_update + summary: Partial Edit a Team + description: Creates a new team + requestBody: + $ref: '#/components/requestBodies/TeamDetail' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + delete: + operationId: team_delete + summary: Deletes a Team + description: Deletes an existing team + responses: + '204': + description: '' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /team/{public_id}/member/: + post: + operationId: team_member_create + summary: Add member + description: Add member to a team + requestBody: + $ref: '#/components/requestBodies/ProfileAsProfilePublicId' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicId' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + put: + operationId: team_member_update + summary: Add member + description: Add member to a team + requestBody: + $ref: '#/components/requestBodies/ProfileAsProfilePublicId' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicId' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + delete: + operationId: team_member_delete + summary: Remove member + description: Remove a member from the team + parameters: + - name: profile + in: query + description: A profile public_id is expected + required: true + schema: + type: string + format: uuid + responses: + '204': + description: '' + tags: + - team + security: + - BearerAdmin: [] + - BearerProfile: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /team/{public_id}/members/: + post: + operationId: team_members_create + summary: Add members + description: Add members to a team + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsList' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + tags: + - team + security: + - BearerAdmin: [] + deprecated: false + put: + operationId: team_members_update + summary: Add members + description: Add members to a team + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsList' + responses: + '200': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + tags: + - team + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /team/{public_id}/remove_members/: + post: + operationId: team_remove_members + summary: Remove members + description: Remove members from the team + requestBody: + $ref: '#/components/requestBodies/ProfilePublicIdsList' + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + tags: + - team + security: + - BearerAdmin: [] + deprecated: false + parameters: + - name: public_id + in: path + required: true + schema: + type: string + /token/: + post: + operationId: token_create + summary: Create Token + description: > + + In order to create a token, perform a POST request to this endpoint, + example:<br/> + + <table><tbody> + <tr><td>Application ID</td><td>123</td></tr> + <tr><td>Application Secret</td><td>ABC</td></tr> + <tr><td>Authorization header format</td><td>Authorization: base64(app_id:app_secret)</td></tr> + <tr><td>Expected result</td><td>Authorization: MTIzOkFCQw==</td></tr> + </tbody></table> + + For testing purposes, a CURL can be used: + + <pre> + + curl -X POST -H "Authorization: Basic MTIzOkFCQw==" + https://api.wefitter.com/api/v1.3/token/ + + # alternatively + + curl -X POST --user 123:ABC https://api.wefitter.com/api/v1.3/token/ + + </pre> + + + The response to a successful request should look like this: + + <pre> + + { + "bearer": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOiIxNTY2NTYxMzk2IiwiaWF0IjoxNTE2MjM5MDIyfQ.14x12h5VMJjAV2kFB5cCrfFmZhryBAYGk9N-vhyDl00" + } + + </pre> + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Token' + required: true + responses: + '201': + description: '' + content: + application/json: + schema: + $ref: '#/components/schemas/Token' + tags: + - token + security: + - Basic: [] + deprecated: false + parameters: [] +tags: + - name: profile + description: > + + Profiles are containers for wearables data. + + The profiles can be seen as an extension of users in a different system. + + Profiles are anonymous objects which can participate in teams and + challenges. + + + Keep in mind, listing profiles and creating profiles need an + administrative bearer token, all profile specific actions + + need a seperate bearer token that is returned after creating a profile. + This bearer token is used in place of the + + administrative bearer token. (see profile create action for more + information) + - name: challenge + description: >+ + + WeFitter API’s challenge engine will bring endless engagement to your + platform. + + For more information about the possibilities in challenges please go to + https://www.wefitter.com/en-us/features/gamification/ + + + Challenges have multilanguage support on the fields: `Title`, `Slogan`, + and `Description`. + + By default, challenges get the default-language that is configured in the + app. Whenever a challenge is requested through the API this challenge will + be presented in the default language. + + If another language is preferred, this can be requested by adding the + header parameter `Accept-Language` stating the language short code (ex. + `en` for english). If this language short code is not present in the title + of the challenge, the default language will be returned. + + + These translation fields contain JSON strings, for example: + + ```{"en":"this is the English title","nl":"this is the Dutch title"}``` + + So to create a multilanguage challenge, please provide the title, slogan, + and description field as json strings, be aware that because of + serialization this should be formed with backward slashes: + + + + <table><tbody> + <tr><td> + { + + + "title": "{\"en\":\"this is the English title\", \"nl\":\"this is the + dutch title\"}", + + + "slogan": "{\"en\":\"this is the English title\", \"nl\":\"this is the + dutch slogan\"}", + + + "description": "{\"en\":\"this is the English title\", \"nl\":\"this is + the dutch description\"}", + + + } + + </td></tr> + + </tbody></table> + + - name: connection + description: Connections are the links between profiles and their wearables. + - name: token + description: > + + <p> + + Before any calls can be made to wefitter, BasicAuth is needed to verify + the identity of the requesting party. + + This call will result into a Bearer token which has administrator + privileges and is valid for 1 day. + + This token can be used to create profiles, challenges, etc. + + </p> + + + <p> + + The returned bearer is a JWT (<a + href="https://en.wikipedia.org/wiki/JSON_Web_Token">JSON Web Token</a>). + + </p> + - name: notification + description: | + Send a notification to all devices for the specified profiles + The data will be sent to the client in the following format: + ``` + { + "app": <app public id>, + "title": <title>, + "body": <body>, + "link": <optional link> + } + ``` +servers: + - url: https://api.wefitter.com/api/v1.3 +components: + requestBodies: + TeamDetail: + content: + application/json: + schema: + $ref: '#/components/schemas/TeamDetail' + required: true + ChallengeDetail: + content: + application/json: + schema: + $ref: '#/components/schemas/ChallengeDetail' + required: true + ProfileAsProfilePublicIdAndTeamAsTeamPublicId: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicIdAndTeamAsTeamPublicId' + required: true + ProfilePublicIdsListAndTeamAsPublicId: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsListAndTeamAsPublicId' + required: true + ProfileAsProfilePublicId: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileAsProfilePublicId' + required: true + ProfileDetail: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfileDetail' + required: true + ProfilePublicIdsList: + content: + application/json: + schema: + $ref: '#/components/schemas/ProfilePublicIdsList' + required: true + securitySchemes: + Basic: + type: http + description: >- + Basic Authentication is used to create administrator bearer tokens. + + + Once a bearer token has been made, remove this auth. ('logout' in + Swagger') + scheme: basic + BearerProfile: + type: apiKey + name: Authorization + in: header + description: >- + Bearer authentication for logged-in profiles. + + + When using the GUI, please don't forget to prefix your bearer tokens + with the text 'bearer', followed by a space. + BearerAdmin: + type: apiKey + name: Authorization + in: header + description: >- + Bearer authentication for administrators. + + + When using the GUI, please don't forget to prefix your bearer tokens + with the text 'bearer', followed by a space. + schemas: + AppTotals: + type: object + properties: + total_calories: + title: Total calories + type: number + total_distance: + title: Total distance + type: number + total_steps: + title: Total steps + type: number + total_points: + title: Total points + type: number + total_activity_duration: + title: Total activity duration + type: string <iso8601 duration> + minLength: 1 + ChallengeActivityType: + required: + - activity_type + type: object + properties: + activity_type: + title: Activity type + type: string + enum: + - RUNNING + - CROSSFIT + - CYCLING + - SWIMMING + - OTHER + - ROWING + - WALKING + - MINDFULNESS + - YOGA + - STRENGTH_TRAINING + ChallengeList: + required: + - title + - start + - type + - goal + - goal_type + - visibility + - repetition + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + title: + title: Title + type: string + minLength: 1 + slogan: + title: Slogan + type: string + description: + title: Description + type: string + start: + title: Start + type: string + format: date-time + end: + title: End + type: string + format: date-time + nullable: true + type: + title: Type + type: string + enum: + - INDIVIDUAL + - GROUP + - TEAM + goal: + title: Goal + type: string + enum: + - DAILY + - TOTAL + - WEEKLY + - MONTHLY + goal_value: + title: Goal value + type: integer + maximum: 2147483647 + minimum: -2147483648 + nullable: true + goal_type: + title: Goal type + type: string + enum: + - POINTS + - DISTANCE + - CALORIES + - DURATION + - STEPS + visibility: + title: Visibility + type: string + enum: + - PUBLIC + - PRIVATE + num_members: + title: Num members + type: string + readOnly: true + repetition: + title: Repetition + type: string + enum: + - NONE + - STREAK + - STICKTOIT + - GOALBREAKER + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + data_source: + title: Data source + type: string + readOnly: true + minLength: 1 + activity_types: + type: array + items: + $ref: '#/components/schemas/ChallengeActivityType' + current_period_start: + title: Current period start + description: >- + The start (exclusive) of the current period. Null if the challenge + has not started yet. + type: string + format: date-time + readOnly: true + current_period_end: + title: Current period end + description: >- + The end (exclusive) of the current period. Null if the challenge end + has passed. + type: string + format: date-time + readOnly: true + goal_cap: + title: Goal cap + description: Whether scores should be unable to surpass the goal value. + type: boolean + ChallengeDetail: + required: + - title + - start + - type + - goal + - goal_type + - visibility + - calculation_method + - enrollment_method + - repetition + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + title: + title: Title + type: string + minLength: 1 + slogan: + title: Slogan + type: string + description: + title: Description + type: string + start: + title: Start + type: string + format: date-time + end: + title: End + type: string + format: date-time + nullable: true + type: + title: Type + type: string + enum: + - INDIVIDUAL + - GROUP + - TEAM + goal: + title: Goal + type: string + enum: + - DAILY + - TOTAL + - WEEKLY + - MONTHLY + goal_value: + title: Goal value + type: integer + maximum: 2147483647 + minimum: -2147483648 + nullable: true + goal_type: + title: Goal type + type: string + enum: + - POINTS + - DISTANCE + - CALORIES + - DURATION + - STEPS + visibility: + title: Visibility + type: string + enum: + - PUBLIC + - PRIVATE + num_members: + title: Num members + type: string + readOnly: true + calculation_method: + title: Calculation method + type: string + enum: + - SUM + - AVERAGE + goal_progress: + title: Goal progress + description: >- + Progress towards the goal, from perspective of profile whose bearer + is used for authentication: can be an individual/team/global score. + When goal is duration, this is the duration in seconds. When an + admin token is used, returns 0.0. + type: number + readOnly: true + enrollment_method: + title: Enrollment method + type: string + enum: + - AUTOMATIC + - MANUAL + default_enrollment_time: + title: Default enrollment time + type: string + enum: + - CHALLENGE_START + - ENROLLMENT_TIME + repetition: + title: Repetition + type: string + enum: + - NONE + - STREAK + - STICKTOIT + - GOALBREAKER + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + data_source: + title: Data source + type: string + readOnly: true + minLength: 1 + activity_types: + type: array + items: + $ref: '#/components/schemas/ChallengeActivityType' + current_period_start: + title: Current period start + description: >- + The start (exclusive) of the current period. Null if the challenge + has not started yet. + type: string + format: date-time + readOnly: true + current_period_end: + title: Current period end + description: >- + The end (exclusive) of the current period. Null if the challenge end + has passed. + type: string + format: date-time + readOnly: true + goal_cap: + title: Goal cap + description: Whether scores should be unable to surpass the goal value. + type: boolean + total_calories: + title: Total calories + type: number + readOnly: true + total_distance: + title: Total distance + type: number + readOnly: true + total_steps: + title: Total steps + type: number + readOnly: true + total_points: + title: Total points + type: number + readOnly: true + total_activity_duration: + title: Total activity duration + type: string <iso8601 duration> + readOnly: true + minLength: 1 + LeaderboardTeam: + required: + - name + - avatar + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + num_members: + title: Num members + type: string + readOnly: true + score: + title: Score + type: number + readOnly: true + position: + title: Position + type: integer + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + TeamProfile: + description: Team of which this profile is a member of + required: + - name + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + LeaderboardProfile: + required: + - avatar + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + name: + title: Name + type: string + readOnly: true + minLength: 1 + gender: + title: Gender + type: string + enum: + - M + - F + - X + teams: + description: Team of which this profile is a member of + type: array + items: + $ref: '#/components/schemas/TeamProfile' + readOnly: true + reference: + title: Reference + type: string + readOnly: true + minLength: 1 + score: + title: Score + type: number + readOnly: true + position: + title: Position + type: integer + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + ProfileAsProfilePublicIdAndTeamAsTeamPublicId: + required: + - profile + type: object + properties: + profile: + title: Profile + description: A profile public_id is expected + type: string + format: uuid + team: + title: Team + description: A team public_id is expected + type: string + format: uuid + is_active: + title: Is active + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + type: boolean + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + ProfilePublicIdsListAndTeamAsPublicId: + required: + - profiles + type: object + properties: + profiles: + type: array + items: + type: string + format: uuid + is_active: + title: Is active + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + type: boolean + team: + title: Team + description: A team public_id is expected + type: string + format: uuid + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + LeaderboardProfileAndTeam: + required: + - avatar + type: object + properties: + name: + title: Name + type: string + readOnly: true + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + score: + title: Score + type: number + readOnly: true + position: + title: Position + type: integer + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + LeaderboardHistory: + type: object + properties: + score: + title: Score + type: number + readOnly: true + start: + title: Start + type: string + format: date-time + readOnly: true + end: + title: End + type: string + format: date-time + readOnly: true + ChallengePeriod: + type: object + properties: + start: + title: Start + type: string + format: date-time + readOnly: true + end: + title: End + type: string + format: date-time + readOnly: true + ProfileAsProfilePublicId: + required: + - profile + type: object + properties: + profile: + title: Profile + description: A profile public_id is expected + type: string + format: uuid + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + AppConnectionUrl: + required: + - next + type: object + properties: + next: + title: Next + type: string + format: uri + minLength: 1 + BioAge: + required: + - start + - end + - bio_age + type: object + properties: + start: + title: Start + type: string + format: date + end: + title: End + type: string + format: date + bio_age: + title: Bio age + type: number + RecommendedProducts: + required: + - name + type: object + properties: + article_number: + title: Article number + type: integer + maximum: 9223372036854776000 + minimum: -9223372036854776000 + name: + title: Name + type: string + maxLength: 255 + minLength: 1 + price: + title: Price + type: number + nullable: true + description: + title: Description + type: string + maxLength: 200 + ShoppingCart: + required: + - redirect_url + type: object + properties: + redirect_url: + title: Redirect url + type: string + maxLength: 256 + minLength: 1 + Notification: + required: + - title + - body + type: object + properties: + title: + title: Title + type: string + maxLength: 512 + minLength: 1 + body: + title: Body + type: string + maxLength: 2048 + minLength: 1 + schedule: + title: Schedule + description: date and time to send notification + type: string + format: date-time + nullable: true + link: + title: Link + type: string + maxLength: 1024 + NotificationForProfiles: + required: + - title + - body + - profiles + type: object + properties: + title: + title: Title + type: string + maxLength: 512 + minLength: 1 + body: + title: Body + type: string + maxLength: 2048 + minLength: 1 + schedule: + title: Schedule + description: date and time to send notification + type: string + format: date-time + nullable: true + link: + title: Link + type: string + maxLength: 1024 + profiles: + type: array + items: + description: The profiles to send the push notification to + type: string + format: uuid + ProfileList: + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + name: + title: Name + type: string + readOnly: true + minLength: 1 + gender: + title: Gender + type: string + enum: + - M + - F + - X + teams: + description: Team of which this profile is a member of + type: array + items: + $ref: '#/components/schemas/TeamProfile' + readOnly: true + reference: + title: Reference + type: string + maxLength: 255 + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + ProfileCreated: + required: + - reference + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + given_name: + title: Given name + type: string + maxLength: 100 + family_name: + title: Family name + type: string + maxLength: 100 + nickname: + title: Nickname + type: string + maxLength: 100 + gender: + title: Gender + type: string + enum: + - M + - F + - X + birthdate: + title: Birthdate + type: string + format: date + nullable: true + zoneinfo: + title: Zoneinfo + type: string + readOnly: true + locale: + title: Locale + type: string + maxLength: 5 + reference: + title: Reference + type: string + maxLength: 256 + minLength: 1 + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + bearer: + title: Bearer + description: >- + Used for authenticating as a profile. Make this the active + Authorization bearer to perform actions using this profile. + type: string + readOnly: true + minLength: 1 + HeartRateSummaryLinked: + type: object + properties: + min: + title: Min + description: Minimum heart rate. + type: integer + nullable: true + max: + title: Max + description: Maximum heart rate. + type: integer + nullable: true + average: + title: Average + description: Average heart rate. + type: integer + nullable: true + resting: + title: Resting + description: Resting heart rate. + type: integer + nullable: true + Activity: + required: + - timestamp + - source + - type + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + type: + title: Type + description: Type of the activity. + type: string + enum: + - RUNNING + - CROSSFIT + - CYCLING + - SWIMMING + - OTHER + - ROWING + - WALKING + - MINDFULNESS + - YOGA + - STRENGTH_TRAINING + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + steps: + title: Steps + description: Steps taken. + type: number + nullable: true + elevation: + title: Elevation + description: Elevation gained during the workout. + type: number + nullable: true + speed: + title: Speed + description: Average speed during the workout + type: number + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + points: + title: Points + description: Points earned. + type: number + nullable: true + in_outdoor: + title: In_outdoor + description: in- or outdoor-activity. + type: string + nullable: true + heart_rate_summary: + $ref: '#/components/schemas/HeartRateSummaryLinked' + BioMetric: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + weight: + title: Weight + description: Weight in kg. + type: number + nullable: true + height: + title: Height + description: Height in cm. + type: number + nullable: true + bmi: + title: Bmi + description: >- + Body Mass Index, automatically calculated if not entered and both + weight and height are available. + type: number + nullable: true + BiometricMeasurement: + required: + - timestamp + - source + - measurement_type + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + end: + title: End + description: End time of the measurement. + type: string + format: date-time + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + measurement_type: + title: Measurement_type + description: Type of biometric measurement. + type: string + minLength: 1 + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + value: + title: Value + description: Value of this measurement. + type: number + nullable: true + unit: + title: Unit + description: Unit of this measurement + type: string + nullable: true + BMI: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + bmi: + title: Bmi + description: >- + Body Mass Index, automatically calculated if not entered and both + weight and height are available. + type: number + nullable: true + DailyDetail: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + description: Duration of the measurement. + type: string + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + steps: + title: Steps + description: Steps taken. + type: integer + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + StressSummaryLinked: + required: + - stress_qualifier + type: object + properties: + stress_qualifier: + title: Stress qualifier + description: Qualifier describing stress level. + type: string + enum: + - UNKNOWN + - CALM + - BALANCED + - STRESSFUL + - VERY_STRESSFUL + average_stress_level: + title: Average_stress_level + description: Average stress level. + type: integer + nullable: true + max_stress_level: + title: Max_stress_level + description: Maximum stress level. + type: integer + nullable: true + rest_stress_duration: + title: Rest stress duration + description: Time at restful stress level. + type: string <iso8601 duration> + minLength: 1 + low_stress_duration: + title: Low stress duration + description: Time at low stress level. + type: string <iso8601 duration> + minLength: 1 + medium_stress_duration: + title: Medium stress duration + description: Time at medium stress level. + type: string <iso8601 duration> + minLength: 1 + high_stress_duration: + title: High stress duration + description: Time at high stress level. + type: string <iso8601 duration> + minLength: 1 + stress_duration: + title: Stress duration + description: Total time in stress. + type: string <iso8601 duration> + minLength: 1 + DailySummary: + required: + - date + - source + type: object + properties: + date: + title: Date + description: Date of the summary. + type: string + format: date + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + steps: + title: Steps + description: Steps taken. + type: number + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + active_calories: + title: Active_calories + description: Active calorie burn. + type: number + nullable: true + bmr_calories: + title: Bmr_calories + description: BMR calorie burn. + type: number + nullable: true + points: + title: Points + description: Points earned. + type: number + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + heart_rate_summary: + $ref: '#/components/schemas/HeartRateSummaryLinked' + stress_summary: + $ref: '#/components/schemas/StressSummaryLinked' + DetailSample: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + activity_type: + title: Activity_type + type: string + nullable: true + activity_id: + title: Activity_id + type: string + nullable: true + distance: + title: Distance + type: number + nullable: true + calories: + title: Calories + type: number + nullable: true + heart_rate: + title: Heart_rate + type: number + nullable: true + ECGRecordings: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + description: Duration of the measurement. + type: string + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + sample_frequency: + title: Sample_frequency + description: Sampling frequency of heart beats as integer in Hz. + type: integer + nullable: true + sample_count: + title: Sample_count + description: Sample count of heart beats as integer. + type: integer + nullable: true + ECGRecording: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + description: Duration of the measurement. + type: string + nullable: true + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + sample_frequency: + title: Sample_frequency + description: Sampling frequency of heart beats as integer in Hz. + type: integer + nullable: true + sample_count: + title: Sample_count + description: Sample count of heart beats as integer. + type: integer + nullable: true + data: + description: >- + ECG data, represented as [[time (s), value (mcV)], [time2 (s), + value2 (mcV)]), .. + type: array + items: + type: string + nullable: true + nullable: true + Event: + type: object + properties: + timestamp: + title: Timestamp + description: Time at which the action was performed. + type: string + format: date-time + points: + title: Points + description: Amount of points awarded for the action. + type: number + nullable: true + description: + title: Description + description: Title / description of the action. + type: string + nullable: true + HeartRateSample: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + value: + title: Value + description: Measured heart rate in beats/min. + type: integer + nullable: true + min: + title: Min + description: Minimum value measured in the time window. + type: integer + nullable: true + max: + title: Max + description: Maximum value measured in the time window. + type: integer + nullable: true + HeartRateSummary: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + min: + title: Min + description: Minimum heart rate. + type: integer + nullable: true + max: + title: Max + description: Maximum heart rate. + type: integer + nullable: true + average: + title: Average + description: Average heart rate. + type: integer + nullable: true + resting: + title: Resting + description: Resting heart rate. + type: integer + nullable: true + Height: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + height: + title: Height + description: Height in cm. + type: number + nullable: true + SleepDetail: + required: + - timestamp + - source + - level + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + timestamp_end: + title: Timestamp end + description: Ending time of the measurement. + type: string + format: date-time + level: + title: Level + description: Sleep level + type: string + enum: + - AWAKE + - LIGHT + - DEEP + - REM + - UNKNOWN + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + SleepDetailMinimal: + required: + - timestamp + - level + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + timestamp_end: + title: Timestamp end + description: Ending time of the measurement. + type: string + format: date-time + level: + title: Level + description: Sleep level + type: string + enum: + - AWAKE + - LIGHT + - DEEP + - REM + - UNKNOWN + SleepSummary: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + timestamp_end: + title: Timestamp end + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + awake: + title: Awake + description: Time awake. + type: string <iso8601 duration> + minLength: 1 + light: + title: Light + description: Time in light sleep. + type: string <iso8601 duration> + minLength: 1 + deep: + title: Deep + description: Time in deep sleep. + type: string <iso8601 duration> + minLength: 1 + rem: + title: Rem + description: Time in REM sleep. + type: string <iso8601 duration> + minLength: 1 + sleep_score: + title: Sleep_score + description: Sleep score + type: integer + nullable: true + detail: + type: array + items: + $ref: '#/components/schemas/SleepDetailMinimal' + total_time_in_sleep: + title: Total time in sleep + type: string <iso8601 duration> + minLength: 1 + StressSample: + required: + - timestamp + - source + - stress_value + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + stress_value: + title: Stress_value + description: Stress value. + type: integer + StressSummary: + required: + - timestamp + - source + - stress_qualifier + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + stress_qualifier: + title: Stress qualifier + description: Qualifier describing stress level. + type: string + enum: + - UNKNOWN + - CALM + - BALANCED + - STRESSFUL + - VERY_STRESSFUL + average_stress_level: + title: Average_stress_level + description: Average stress level. + type: integer + nullable: true + max_stress_level: + title: Max_stress_level + description: Maximum stress level. + type: integer + nullable: true + rest_stress_duration: + title: Rest stress duration + description: Time at restful stress level. + type: string <iso8601 duration> + minLength: 1 + low_stress_duration: + title: Low stress duration + description: Time at low stress level. + type: string <iso8601 duration> + minLength: 1 + medium_stress_duration: + title: Medium stress duration + description: Time at medium stress level. + type: string <iso8601 duration> + minLength: 1 + high_stress_duration: + title: High stress duration + description: Time at high stress level. + type: string <iso8601 duration> + minLength: 1 + stress_duration: + title: Stress duration + description: Total time in stress. + type: string <iso8601 duration> + minLength: 1 + TrackSample: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + activity_type: + title: Activity_type + type: string + nullable: true + activity_id: + title: Activity_id + type: string + nullable: true + distance: + title: Distance + type: number + nullable: true + calories: + title: Calories + type: number + nullable: true + Weight: + required: + - timestamp + - source + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + weight: + title: Weight + description: Weight in kg. + type: number + nullable: true + Workout: + required: + - timestamp + - source + - type + type: object + properties: + timestamp: + title: Timestamp + description: Starting time of the measurement. + type: string + format: date-time + duration: + title: Duration + type: string <iso8601 duration> + minLength: 1 + source: + title: Source + description: Origin of the data. + type: string + enum: + - AGGREGATED + - ANDROID + - APPLE + - FITBIT + - GARMIN + - GOOGLEFIT + - HEALTHCONNECT + - HUAWEI + - MYZONE + - OMH + - OMRON + - OURA + - POLAR + - SAMSUNG + - STRAVA + - SUUNTO + - WF + - WHOOP + - WITHINGS + is_manual: + title: Is_manual + description: Whether the data was entered manually. + type: boolean + nullable: true + type: + title: Type + description: Type of the activity. + type: string + enum: + - RUNNING + - CROSSFIT + - CYCLING + - SWIMMING + - OTHER + - ROWING + - WALKING + - MINDFULNESS + - YOGA + - STRENGTH_TRAINING + distance: + title: Distance + description: Distance in meters. + type: number + nullable: true + steps: + title: Steps + description: Steps taken. + type: number + nullable: true + elevation: + title: Elevation + description: Elevation gained during the workout. + type: number + nullable: true + speed: + title: Speed + description: Average speed during the workout + type: number + nullable: true + calories: + title: Calories + description: Calories burned. + type: number + nullable: true + points: + title: Points + description: Points earned. + type: number + nullable: true + in_outdoor: + title: In_outdoor + description: in- or outdoor-activity. + type: string + nullable: true + heart_rate_summary: + $ref: '#/components/schemas/HeartRateSummaryLinked' + ProfileDetail: + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + given_name: + title: Given name + type: string + maxLength: 100 + family_name: + title: Family name + type: string + maxLength: 100 + nickname: + title: Nickname + type: string + maxLength: 100 + gender: + title: Gender + type: string + enum: + - M + - F + - X + birthdate: + title: Birthdate + type: string + format: date + nullable: true + zoneinfo: + title: Zoneinfo + type: string + readOnly: true + locale: + title: Locale + type: string + maxLength: 5 + total_calories: + title: Total calories + type: number + total_distance: + title: Total distance + type: number + total_steps: + title: Total steps + type: number + total_points: + title: Total points + type: number + total_activity_duration: + title: Total activity duration + type: string <iso8601 duration> + readOnly: true + minLength: 1 + reference: + title: Reference + type: string + maxLength: 255 + teams: + description: Team of which this profile is a member of + type: array + items: + $ref: '#/components/schemas/TeamProfile' + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + created_at: + title: Created at + type: string + format: date-time + readOnly: true + updated_at: + title: Updated at + type: string + format: date-time + readOnly: true + num_active_challenges: + title: Num active challenges + type: string + readOnly: true + num_done_challenges: + title: Num done challenges + type: string + readOnly: true + num_future_challenges: + title: Num future challenges + type: string + readOnly: true + EnrollmentInformation: + type: object + properties: + team: + title: Team + type: string + readOnly: true + minLength: 1 + team_public_id: + title: Team public id + type: string + readOnly: true + minLength: 1 + team_size: + title: Team size + type: integer + readOnly: true + leaderboard_rank: + title: Leaderboard rank + description: >- + Current or final rank among the participants of the challenge as + determined by the relevant score. + type: integer + readOnly: true + leaderboard_score: + title: Leaderboard score + description: The profile's current or final score. + type: number + readOnly: true + ProfileChallengeList: + required: + - title + - start + - type + - goal + - goal_type + - visibility + - repetition + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + title: + title: Title + type: string + minLength: 1 + slogan: + title: Slogan + type: string + description: + title: Description + type: string + start: + title: Start + type: string + format: date-time + end: + title: End + type: string + format: date-time + nullable: true + type: + title: Type + type: string + enum: + - INDIVIDUAL + - GROUP + - TEAM + goal: + title: Goal + type: string + enum: + - DAILY + - TOTAL + - WEEKLY + - MONTHLY + goal_value: + title: Goal value + type: integer + maximum: 2147483647 + minimum: -2147483648 + nullable: true + goal_type: + title: Goal type + type: string + enum: + - POINTS + - DISTANCE + - CALORIES + - DURATION + - STEPS + visibility: + title: Visibility + type: string + enum: + - PUBLIC + - PRIVATE + num_members: + title: Num members + type: string + readOnly: true + leaderboard_rank: + title: Leaderboard rank + description: >- + Current or final rank among the participants of the challenge as + determined by the relevant score. + type: integer + readOnly: true + leaderboard_score: + title: Leaderboard score + description: The profile's current or final score. + type: number + readOnly: true + is_participating: + title: Is participating + description: Does the current profile participate in this challenge? + type: boolean + readOnly: true + enrollment: + $ref: '#/components/schemas/EnrollmentInformation' + repetition: + title: Repetition + type: string + enum: + - NONE + - STREAK + - STICKTOIT + - GOALBREAKER + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + data_source: + title: Data source + type: string + readOnly: true + minLength: 1 + activity_types: + type: array + items: + $ref: '#/components/schemas/ChallengeActivityType' + current_period_start: + title: Current period start + description: >- + The start (exclusive) of the current period. Null if the challenge + has not started yet. + type: string + format: date-time + readOnly: true + current_period_end: + title: Current period end + description: >- + The end (exclusive) of the current period. Null if the challenge end + has passed. + type: string + format: date-time + readOnly: true + goal_cap: + title: Goal cap + description: Whether scores should be unable to surpass the goal value. + type: boolean + joined: + title: Joined + description: The timestamp when the profile joined the challenge. + type: string + format: date-time + readOnly: true + ProfileAppConnectionList: + type: object + properties: + display_name: + title: Display name + type: string + readOnly: true + url: + title: Url + type: string + readOnly: true + minLength: 1 + connected: + title: Connected + type: string + enum: + - CONNECTED + - ERROR + - NOT_CONNECTED + readOnly: true + connection_slug: + title: Connection slug + type: string + readOnly: true + minLength: 1 + img_url: + title: Img url + type: string + readOnly: true + minLength: 1 + created_at: + title: Created at + type: string + format: date-time + readOnly: true + updated_at: + title: Updated at + type: string + format: date-time + readOnly: true + TeamList: + required: + - name + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + num_members: + title: Num members + type: string + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + ProfileTeam: + description: List of members in this team + type: object + properties: + url: + title: Url + type: string + format: uri + readOnly: true + public_id: + title: Public id + type: string + format: uuid + readOnly: true + name: + title: Name + type: string + readOnly: true + minLength: 1 + reference: + title: Reference + type: string + maxLength: 255 + TeamDetail: + required: + - name + - description + type: object + properties: + name: + title: Name + type: string + maxLength: 100 + minLength: 1 + public_id: + title: Public id + type: string + format: uuid + readOnly: true + url: + title: Url + type: string + format: uri + readOnly: true + num_members: + title: Num members + type: string + readOnly: true + members: + description: List of members in this team + type: array + items: + $ref: '#/components/schemas/ProfileTeam' + readOnly: true + avatar: + title: Avatar + type: string + format: uri + minLength: 1 + nullable: true + description: + title: Description + type: string + minLength: 1 + ProfilePublicIdsList: + required: + - profiles + type: object + properties: + profiles: + type: array + items: + type: string + format: uuid + is_active: + title: Is active + description: >- + Whether profile actively participates in challenge. + + + While inactive, scores/leaderboard will not be updated but still be + visible. + type: boolean + joined: + title: Joined + description: The timestamp when the profile/team joined the challenge. + type: string + format: date-time + Token: + type: object + properties: + bearer: + title: Bearer + type: string + readOnly: true + minLength: 1 diff --git a/sdks/db/processed-custom-request-cache/wefitter.com.yaml b/sdks/db/processed-custom-request-cache/wefitter.com.yaml new file mode 100644 index 0000000000..6288a2602f --- /dev/null +++ b/sdks/db/processed-custom-request-cache/wefitter.com.yaml @@ -0,0 +1,45 @@ +processed: + securitySchemes: + Basic: + type: http + description: >- + Basic Authentication is used to create administrator bearer tokens. + + + Once a bearer token has been made, remove this auth. ('logout' in + Swagger') + scheme: basic + BearerProfile: + type: apiKey + name: Authorization + in: header + description: >- + Bearer authentication for logged-in profiles. + + + When using the GUI, please don't forget to prefix your bearer tokens + with the text 'bearer', followed by a space. + BearerAdmin: + type: apiKey + name: Authorization + in: header + description: >- + Bearer authentication for administrators. + + + When using the GUI, please don't forget to prefix your bearer tokens + with the text 'bearer', followed by a space. + apiBaseUrl: https://api.wefitter.com/api/v1.3 + apiVersion: v1.3 + apiDescription: This is the WeFitter API + apiTitle: WeFitter API + endpoints: 51 + sdkMethods: 125 + schemas: 53 + parameters: 350 + contactEmail: hello@wefitter.com + originalCustomRequest: + type: GET + url: https://api.wefitter.com/api/v1.3/redoc/?format=openapi + customRequestSpecFilename: wefitter.com.yaml + difficultyScore: 239 diff --git a/sdks/db/progress/we-fitter-progress.yaml b/sdks/db/progress/we-fitter-progress.yaml new file mode 100644 index 0000000000..cbe1467229 --- /dev/null +++ b/sdks/db/progress/we-fitter-progress.yaml @@ -0,0 +1,264 @@ +examples: {} +examples_2: {} +examples_3: {} +operationIds: + /app/totals/: + get: App_getTotals + /challenge/{challenge_public_id}/team/: + get: Challenge_teamStandingsList + /challenge/{challenge_public_id}/team/{team_public_id}/: + get: Challenge_teamContributionList + /challenge/{public_id}/: + patch: Challenge_partialEdit + /challenge/{public_id}/deactivate_member/: + post: Challenge_deactivateMember + put: Challenge_deactivateMember + /challenge/{public_id}/deactivate_members/: + post: Challenge_deactivateMembers + put: Challenge_deactivateMembers + /challenge/{public_id}/leaderboard_history/: + get: Challenge_getScoresHistory + /challenge/{public_id}/member/: + delete: Challenge_removeMember + post: Challenge_memberCreate + put: Challenge_memberAdd + /challenge/{public_id}/members/: + get: Challenge_getMembers + post: Challenge_addMembers + put: Challenge_addMembers + /challenge/{public_id}/remove_members/: + post: Challenge_removeMembers + /connection/{connection_slug}/connect/: + delete: Connection_disconnectWearable + post: Connection_getOAuthUrl + /insights/bio_age: + get: Insights_getBioAgeWeekly + /loyalty/get_recommended_products: + get: Loyalty_getRecommendedProducts + /loyalty/get_shoppingcart_link: + get: Loyalty_getShoppingcartLink + /notification/send_to_all/: + post: Notification_sendToAllCreate + /notification/send_to_profiles/: + post: Notification_sendToProfilesCreate + /profile/{profile_public_id}/activity_segment/: + get: Profile_listActivitySegments + /profile/{profile_public_id}/biometric/: + get: Profile_listBiometricChanges + /profile/{profile_public_id}/biometric_measurement/: + get: Profile_listBiometricChanges + /profile/{profile_public_id}/bmi/: + get: Profile_getBmiOverTime + /profile/{profile_public_id}/daily_detail/: + get: Profile_getDailyDetail + /profile/{profile_public_id}/daily_summary/: + get: Profile_getDailySummary + /profile/{profile_public_id}/detail_sample/: + get: Profile_getDetailSamples + /profile/{profile_public_id}/ecg_recordings/: + get: Profile_getEcgRecordings + /profile/{profile_public_id}/ecg_recordings/data/: + get: Profile_getEcgRecordingsData + /profile/{profile_public_id}/ecg_recordings/pdf/: + get: Profile_getEcgPdf + /profile/{profile_public_id}/event/: + get: Profile_listEvents + post: Profile_eventCreate + /profile/{profile_public_id}/heartrate_sample/: + get: Profile_getHeartrateSample + /profile/{profile_public_id}/heartrate_summary/: + get: Profile_getHeartRateSummary + /profile/{profile_public_id}/height/: + get: Profile_listHeightChanges + /profile/{profile_public_id}/sleep_detail/: + get: Profile_getSleepDetail + /profile/{profile_public_id}/sleep_summary/: + get: Profile_getSleepSummary + /profile/{profile_public_id}/stress_samples/: + get: Profile_getStressSamples + /profile/{profile_public_id}/stress_summary/: + get: Profile_getStressSummary + /profile/{profile_public_id}/track_sample/: + get: Profile_getGpxTrackSamples + /profile/{profile_public_id}/weight/: + get: Profile_listWeightChanges + /profile/{profile_public_id}/workout/: + get: Profile_listWorkouts + /profile/{public_id}/: + patch: Profile_updatePartial + /team/{public_id}/: + patch: Team_editTeamPartial + /team/{public_id}/member/: + delete: Team_removeMember + post: Team_addMember + put: Team_addMember + /team/{public_id}/members/: + post: Team_addMembers + put: Team_addMembers + /team/{public_id}/remove_members/: + post: Team_removeMembers +operationTags: {} +renameTags: {} +requestSchemaNames: {} +responseDescriptions: {} +responseSchemaNames: + /app/totals: + get: + '200': + application/json: AppGetTotalsResponse + /challenge: + get: + '200': + application/json: ChallengeListResponse + /challenge/{challenge_public_id}/team: + get: + '200': + application/json: ChallengeTeamStandingsListResponse + /challenge/{public_id}/members: + get: + '200': + application/json: ChallengeGetMembersResponse + /insights/bio_age: + get: + '200': + application/json: InsightsGetBioAgeWeeklyResponse + /loyalty/get_recommended_products: + get: + '200': + application/json: LoyaltyGetRecommendedProductsResponse + /profile: + get: + '200': + application/json: ProfileListResponse + /profile/{profile_public_id}/activity_segment: + get: + '200': + application/json: ProfileListActivitySegmentsResponse + /profile/{profile_public_id}/biometric: + get: + '200': + application/json: ProfileListBiometricChangesResponse + /profile/{profile_public_id}/biometric_measurement: + get: + '200': + application/json: ProfileListBiometricChanges200Response + /profile/{profile_public_id}/bmi: + get: + '200': + application/json: ProfileGetBmiOverTimeResponse + /profile/{profile_public_id}/daily_detail: + get: + '200': + application/json: ProfileGetDailyDetailResponse + /profile/{profile_public_id}/daily_summary: + get: + '200': + application/json: ProfileGetDailySummaryResponse + /profile/{profile_public_id}/detail_sample: + get: + '200': + application/json: ProfileGetDetailSamplesResponse + /profile/{profile_public_id}/ecg_recordings: + get: + '200': + application/json: ProfileGetEcgRecordingsResponse + /profile/{profile_public_id}/ecg_recordings/data: + get: + '200': + application/json: ProfileGetEcgRecordingsDataResponse + /profile/{profile_public_id}/event: + get: + '200': + application/json: ProfileListEventsResponse + /profile/{profile_public_id}/heartrate_sample: + get: + '200': + application/json: ProfileGetHeartrateSampleResponse + /profile/{profile_public_id}/heartrate_summary: + get: + '200': + application/json: ProfileGetHeartRateSummaryResponse + /profile/{profile_public_id}/height: + get: + '200': + application/json: ProfileListHeightChangesResponse + /profile/{profile_public_id}/sleep_detail: + get: + '200': + application/json: ProfileGetSleepDetailResponse + /profile/{profile_public_id}/sleep_summary: + get: + '200': + application/json: ProfileGetSleepSummaryResponse + /profile/{profile_public_id}/stress_samples: + get: + '200': + application/json: ProfileGetStressSamplesResponse + /profile/{profile_public_id}/stress_summary: + get: + '200': + application/json: ProfileGetStressSummaryResponse + /profile/{profile_public_id}/track_sample: + get: + '200': + application/json: ProfileGetGpxTrackSamplesResponse + /profile/{profile_public_id}/weight: + get: + '200': + application/json: ProfileListWeightChangesResponse + /profile/{profile_public_id}/workout: + get: + '200': + application/json: ProfileListWorkoutsResponse + /team: + get: + '200': + application/json: TeamListResponse +securityParameters: + cursor: + query: false + date_end: + query: false + date_range: + query: false + date_start: + query: false + datetime: + query: false + deduplicate: + query: false + detail: + query: false + end_date: + query: false + heart_rate_detail: + query: false + is_active: + query: false + limit: + query: false + measurement_type: + query: false + offset: + query: false + ordering: + query: false + page_size: + query: false + profile: + query: false + recent: + query: false + redirect: + query: false + redirect_on_error: + query: false + search: + query: false + source: + query: false + start_date: + query: false + team: + query: false +validServerUrls: {} diff --git a/sdks/db/published/from-custom-request_wefitter.com.json b/sdks/db/published/from-custom-request_wefitter.com.json new file mode 100644 index 0000000000..01f110bd68 --- /dev/null +++ b/sdks/db/published/from-custom-request_wefitter.com.json @@ -0,0 +1,3341 @@ +{ + "securitySchemes": { + "Basic": { + "type": "http", + "description": "Basic Authentication is used to create administrator bearer tokens.\n\nOnce a bearer token has been made, remove this auth. ('logout' in Swagger')", + "scheme": "basic" + }, + "BearerProfile": { + "type": "apiKey", + "name": "Authorization", + "in": "header", + "description": "Bearer authentication for logged-in profiles.\n\nWhen using the GUI, please don't forget to prefix your bearer tokens with the text 'bearer', followed by a space." + }, + "BearerAdmin": { + "type": "apiKey", + "name": "Authorization", + "in": "header", + "description": "Bearer authentication for administrators.\n\nWhen using the GUI, please don't forget to prefix your bearer tokens with the text 'bearer', followed by a space." + } + }, + "apiBaseUrl": "https://api.wefitter.com/api/v1.3", + "apiVersion": "v1.3", + "apiDescription": "This is the WeFitter API", + "apiTitle": "WeFitter API", + "endpoints": 51, + "sdkMethods": 125, + "schemas": 81, + "parameters": 350, + "contactEmail": "hello@wefitter.com", + "originalCustomRequest": { + "type": "GET", + "url": "https://api.wefitter.com/api/v1.3/redoc/?format=openapi" + }, + "customRequestSpecFilename": "wefitter.com.yaml", + "difficultyScore": 239, + "difficulty": "Hard", + "company": "WeFitter", + "sdkName": "we-fitter-{language}-sdk", + "clientName": "WeFitter", + "metaDescription": "WeFitter helps digital health platforms improve business performance, engagement and data insights introducing an aggregator API that provides connections with todays most used fitness app's, wearables & gamification elements.\n\nWeFitter's easy to integrate API will boost up user engagement and gives insight in users health profiles in order to personalize content, offerings and health advise. \n\nWeFitter is build by Thunderbyte.AI, a Dutch Al/ ML organisation with over 12 years of experience in building digital health products. \n\nAsk for a demo > business@wefitter.com", + "apiStatusUrls": "inherit", + "homepage": "wefitter.com", + "developerDocumentation": "www.wefitter.com/en-us/developers/documentation/", + "categories": [ + "health_data" + ], + "category": "Fitness", + "methods": [ + { + "url": "/insights/bio_age", + "method": "getBioAgeWeekly", + "httpMethod": "get", + "tag": "insights", + "typeScriptTag": "insights", + "description": "Get someones biological age on a weekly basis.", + "parameters": [ + { + "name": "startDate", + "schema": "string", + "required": true, + "description": "", + "example": "START_DATE" + }, + { + "name": "endDate", + "schema": "string", + "required": true, + "description": "", + "example": "END_DATE" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/loyalty/get_recommended_products", + "method": "getRecommendedProducts", + "httpMethod": "get", + "tag": "loyalty", + "typeScriptTag": "loyalty", + "description": "", + "parameters": [ + { + "name": "limit", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "offset", + "schema": "integer", + "required": false, + "description": "The initial index from which to return the results." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/loyalty/get_shoppingcart_link", + "method": "getShoppingcartLink", + "httpMethod": "get", + "tag": "loyalty", + "typeScriptTag": "loyalty", + "description": "", + "parameters": [], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/app/totals", + "method": "getTotals", + "httpMethod": "get", + "tag": "app", + "typeScriptTag": "app", + "description": "Totals", + "parameters": [], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge", + "method": "list", + "httpMethod": "get", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "List Challenges", + "parameters": [ + { + "name": "limit", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "offset", + "schema": "integer", + "required": false, + "description": "The initial index from which to return the results." + }, + { + "name": "recent", + "schema": "integer", + "required": false, + "description": "Show challenges that have not ended in the last N weeks" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge", + "method": "create", + "httpMethod": "post", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Create challenge", + "parameters": [ + { + "name": "title", + "schema": "string", + "required": true, + "description": "", + "example": "TITLE" + }, + { + "name": "description", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "url", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "public_id", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "slogan", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "start", + "schema": "string", + "required": true, + "description": "", + "example": "START" + }, + { + "name": "end", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "type", + "schema": "string", + "required": true, + "description": "", + "example": "TYPE" + }, + { + "name": "goal", + "schema": "string", + "required": true, + "description": "", + "example": "GOAL" + }, + { + "name": "goal_value", + "schema": "integer", + "required": false, + "description": "" + }, + { + "name": "goal_type", + "schema": "string", + "required": true, + "description": "", + "example": "GOAL_TYPE" + }, + { + "name": "visibility", + "schema": "string", + "required": true, + "description": "", + "example": "VISIBILITY" + }, + { + "name": "num_members", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "calculation_method", + "schema": "string", + "required": true, + "description": "", + "example": "CALCULATION_METHOD" + }, + { + "name": "goal_progress", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "enrollment_method", + "schema": "string", + "required": true, + "description": "", + "example": "ENROLLMENT_METHOD" + }, + { + "name": "default_enrollment_time", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "repetition", + "schema": "string", + "required": true, + "description": "", + "example": "REPETITION" + }, + { + "name": "avatar", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "data_source", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "activity_types", + "schema": "array", + "required": false, + "description": "" + }, + { + "name": "current_period_start", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "current_period_end", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "goal_cap", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "total_calories", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "total_distance", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "total_steps", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "total_points", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "total_activity_duration", + "schema": "string <iso8601 duration>", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + }, + { + "url": "/challenge/{challenge_public_id}/team", + "method": "teamStandingsList", + "httpMethod": "get", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Team leaderboard", + "parameters": [ + { + "name": "limit", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "offset", + "schema": "integer", + "required": false, + "description": "The initial index from which to return the results." + }, + { + "name": "dateRange", + "schema": "integer", + "required": false, + "description": "Index of the time period use" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge/{challenge_public_id}/team/{team_public_id}", + "method": "teamContributionList", + "httpMethod": "get", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Team contribution", + "parameters": [ + { + "name": "dateRange", + "schema": "integer", + "required": false, + "description": "Index of the time period use" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}", + "method": "delete", + "httpMethod": "delete", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Delete challenge", + "parameters": [], + "responses": [ + { + "statusCode": "204", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}", + "method": "read", + "httpMethod": "get", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Get Challenge", + "parameters": [], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}", + "method": "partialEdit", + "httpMethod": "patch", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Partial edit challenge", + "parameters": [ + { + "name": "title", + "schema": "string", + "required": true, + "description": "", + "example": "TITLE" + }, + { + "name": "description", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "url", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "public_id", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "slogan", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "start", + "schema": "string", + "required": true, + "description": "", + "example": "START" + }, + { + "name": "end", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "type", + "schema": "string", + "required": true, + "description": "", + "example": "TYPE" + }, + { + "name": "goal", + "schema": "string", + "required": true, + "description": "", + "example": "GOAL" + }, + { + "name": "goal_value", + "schema": "integer", + "required": false, + "description": "" + }, + { + "name": "goal_type", + "schema": "string", + "required": true, + "description": "", + "example": "GOAL_TYPE" + }, + { + "name": "visibility", + "schema": "string", + "required": true, + "description": "", + "example": "VISIBILITY" + }, + { + "name": "num_members", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "calculation_method", + "schema": "string", + "required": true, + "description": "", + "example": "CALCULATION_METHOD" + }, + { + "name": "goal_progress", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "enrollment_method", + "schema": "string", + "required": true, + "description": "", + "example": "ENROLLMENT_METHOD" + }, + { + "name": "default_enrollment_time", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "repetition", + "schema": "string", + "required": true, + "description": "", + "example": "REPETITION" + }, + { + "name": "avatar", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "data_source", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "activity_types", + "schema": "array", + "required": false, + "description": "" + }, + { + "name": "current_period_start", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "current_period_end", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "goal_cap", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "total_calories", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "total_distance", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "total_steps", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "total_points", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "total_activity_duration", + "schema": "string <iso8601 duration>", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}", + "method": "update", + "httpMethod": "put", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Edit challenge", + "parameters": [ + { + "name": "title", + "schema": "string", + "required": true, + "description": "", + "example": "TITLE" + }, + { + "name": "description", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "url", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "public_id", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "slogan", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "start", + "schema": "string", + "required": true, + "description": "", + "example": "START" + }, + { + "name": "end", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "type", + "schema": "string", + "required": true, + "description": "", + "example": "TYPE" + }, + { + "name": "goal", + "schema": "string", + "required": true, + "description": "", + "example": "GOAL" + }, + { + "name": "goal_value", + "schema": "integer", + "required": false, + "description": "" + }, + { + "name": "goal_type", + "schema": "string", + "required": true, + "description": "", + "example": "GOAL_TYPE" + }, + { + "name": "visibility", + "schema": "string", + "required": true, + "description": "", + "example": "VISIBILITY" + }, + { + "name": "num_members", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "calculation_method", + "schema": "string", + "required": true, + "description": "", + "example": "CALCULATION_METHOD" + }, + { + "name": "goal_progress", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "enrollment_method", + "schema": "string", + "required": true, + "description": "", + "example": "ENROLLMENT_METHOD" + }, + { + "name": "default_enrollment_time", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "repetition", + "schema": "string", + "required": true, + "description": "", + "example": "REPETITION" + }, + { + "name": "avatar", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "data_source", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "activity_types", + "schema": "array", + "required": false, + "description": "" + }, + { + "name": "current_period_start", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "current_period_end", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "goal_cap", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "total_calories", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "total_distance", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "total_steps", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "total_points", + "schema": "number", + "required": false, + "description": "" + }, + { + "name": "total_activity_duration", + "schema": "string <iso8601 duration>", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}/deactivate_member", + "method": "deactivateMember", + "httpMethod": "post", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Deactivate member", + "parameters": [ + { + "name": "profile", + "schema": "string", + "required": true, + "description": "A profile public_id is expected", + "example": "PROFILE" + }, + { + "name": "team", + "schema": "string", + "required": false, + "description": "A team public_id is expected" + }, + { + "name": "isActive", + "schema": "boolean", + "required": false, + "description": "Whether profile actively participates in challenge.\n\nWhile inactive, scores/leaderboard will not be updated but still be visible." + }, + { + "name": "profile", + "schema": "string", + "required": true, + "description": "", + "example": "PROFILE" + }, + { + "name": "team", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "is_active", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}/deactivate_member", + "method": "deactivateMember", + "httpMethod": "put", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "This docstring is used by Django Rest Framework", + "parameters": [ + { + "name": "profile", + "schema": "string", + "required": true, + "description": "", + "example": "PROFILE" + }, + { + "name": "team", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "is_active", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}/deactivate_members", + "method": "deactivateMembers", + "httpMethod": "post", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Deactivate members", + "parameters": [ + { + "name": "profile", + "schema": "string", + "required": true, + "description": "A profile public_id is expected", + "example": "PROFILE" + }, + { + "name": "team", + "schema": "string", + "required": false, + "description": "A team public_id is expected" + }, + { + "name": "isActive", + "schema": "boolean", + "required": false, + "description": "Whether profile actively participates in challenge.\n\nWhile inactive, scores/leaderboard will not be updated but still be visible." + }, + { + "name": "profiles", + "schema": "array", + "required": true, + "description": "" + }, + { + "name": "is_active", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "team", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}/deactivate_members", + "method": "deactivateMembers", + "httpMethod": "put", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "This docstring is used by Django Rest Framework", + "parameters": [ + { + "name": "profiles", + "schema": "array", + "required": true, + "description": "" + }, + { + "name": "is_active", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "team", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}/leaderboard", + "method": "leaderboard", + "httpMethod": "get", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Leaderboard", + "parameters": [ + { + "name": "dateRange", + "schema": "integer", + "required": false, + "description": "Index of the time period use" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}/leaderboard_history", + "method": "getScoresHistory", + "httpMethod": "get", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Leaderboard history", + "parameters": [], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}/member", + "method": "removeMember", + "httpMethod": "delete", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Remove member", + "parameters": [ + { + "name": "profile", + "schema": "string", + "required": true, + "description": "A profile public_id is expected", + "example": "PROFILE" + } + ], + "responses": [ + { + "statusCode": "204", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}/member", + "method": "memberCreate", + "httpMethod": "post", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Add member", + "parameters": [ + { + "name": "profile", + "schema": "string", + "required": true, + "description": "", + "example": "PROFILE" + }, + { + "name": "team", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "is_active", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}/member", + "method": "memberAdd", + "httpMethod": "put", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Add member", + "parameters": [ + { + "name": "profile", + "schema": "string", + "required": true, + "description": "", + "example": "PROFILE" + }, + { + "name": "team", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "is_active", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}/members", + "method": "getMembers", + "httpMethod": "get", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Get members", + "parameters": [ + { + "name": "limit", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "offset", + "schema": "integer", + "required": false, + "description": "The initial index from which to return the results." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}/members", + "method": "addMembers", + "httpMethod": "post", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Add members", + "parameters": [ + { + "name": "profiles", + "schema": "array", + "required": true, + "description": "" + }, + { + "name": "is_active", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "team", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}/members", + "method": "addMembers", + "httpMethod": "put", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Add members", + "parameters": [ + { + "name": "profiles", + "schema": "array", + "required": true, + "description": "" + }, + { + "name": "is_active", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "team", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}/periods", + "method": "periods", + "httpMethod": "get", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Periods", + "parameters": [], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/challenge/{public_id}/remove_members", + "method": "removeMembers", + "httpMethod": "post", + "tag": "challenge", + "typeScriptTag": "challenge", + "description": "Remove members", + "parameters": [ + { + "name": "profiles", + "schema": "array", + "required": true, + "description": "" + }, + { + "name": "is_active", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "team", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + }, + { + "url": "/connection/{connection_slug}/connect", + "method": "disconnectWearable", + "httpMethod": "delete", + "tag": "connection", + "typeScriptTag": "connection", + "description": "Disconnect Wearable", + "parameters": [ + { + "name": "profile", + "schema": "string", + "required": true, + "description": "A profile public_id is expected", + "example": "PROFILE" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "OK" + } + ] + }, + { + "url": "/connection/{connection_slug}/connect", + "method": "getOAuthUrl", + "httpMethod": "post", + "tag": "connection", + "typeScriptTag": "connection", + "description": "Connect wearable", + "parameters": [ + { + "name": "profile", + "schema": "string", + "required": true, + "description": "", + "example": "PROFILE" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/notification/send_to_all", + "method": "sendToAllCreate", + "httpMethod": "post", + "tag": "notification", + "typeScriptTag": "notification", + "description": "Notification to all profiles in app", + "parameters": [ + { + "name": "title", + "schema": "string", + "required": true, + "description": "", + "example": "TITLE" + }, + { + "name": "body", + "schema": "string", + "required": true, + "description": "", + "example": "BODY" + }, + { + "name": "schedule", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "link", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + }, + { + "url": "/notification/send_to_profiles", + "method": "sendToProfilesCreate", + "httpMethod": "post", + "tag": "notification", + "typeScriptTag": "notification", + "description": "Notification to specific profiles", + "parameters": [ + { + "name": "title", + "schema": "string", + "required": true, + "description": "", + "example": "TITLE" + }, + { + "name": "body", + "schema": "string", + "required": true, + "description": "", + "example": "BODY" + }, + { + "name": "schedule", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "link", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "profiles", + "schema": "array", + "required": true, + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + }, + { + "url": "/profile", + "method": "list", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "List Profiles", + "parameters": [ + { + "name": "search", + "schema": "string", + "required": false, + "description": "A search term." + }, + { + "name": "ordering", + "schema": "string", + "required": false, + "description": "Which field to use when ordering the results." + }, + { + "name": "limit", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "offset", + "schema": "integer", + "required": false, + "description": "The initial index from which to return the results." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile", + "method": "create", + "httpMethod": "post", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Create Profile", + "parameters": [ + { + "name": "url", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "public_id", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "given_name", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "family_name", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "nickname", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "gender", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "birthdate", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "zoneinfo", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "locale", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "reference", + "schema": "string", + "required": true, + "description": "", + "example": "REFERENCE" + }, + { + "name": "avatar", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "bearer", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/activity_segment", + "method": "listActivitySegments", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Activity segment", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/biometric", + "method": "listBiometricChanges", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Bio Metric", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/biometric_measurement", + "method": "listBiometricChanges", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Biometric Measurement", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + }, + { + "name": "measurementType", + "schema": "string", + "required": true, + "description": "", + "example": "MEASUREMENT_TYPE" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/bmi", + "method": "getBmiOverTime", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "BMI", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/daily_detail", + "method": "getDailyDetail", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Daily details", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/daily_summary", + "method": "getDailySummary", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Daily Summary", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + }, + { + "name": "deduplicate", + "schema": "boolean", + "required": false, + "description": "If set to true, duplicates will be aggregated." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/detail_sample", + "method": "getDetailSamples", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Detail Sample", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/ecg_recordings", + "method": "getEcgRecordings", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Electrocardiograms", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/ecg_recordings/data", + "method": "getEcgRecordingsData", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Electrocardiogram data", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/ecg_recordings/pdf", + "method": "getEcgPdf", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Electrocardiogram PDF", + "parameters": [ + { + "name": "datetime", + "schema": "string", + "required": true, + "description": "The timestamp when the ECG has been recorded in the format `yyyymmddhhmmss`. e.g. `20210913132513`", + "example": "DATETIME" + }, + { + "name": "source", + "schema": "string", + "required": true, + "description": "", + "example": "SOURCE" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/event", + "method": "listEvents", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Event", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/event", + "method": "eventCreate", + "httpMethod": "post", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Create Event", + "parameters": [ + { + "name": "description", + "schema": "string", + "description": "" + }, + { + "name": "timestamp", + "schema": "string", + "description": "" + }, + { + "name": "points", + "schema": "number", + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/heartrate_sample", + "method": "getHeartrateSample", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Heart Rate Sample", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + }, + { + "name": "heartRateDetail", + "schema": "boolean", + "required": false, + "description": "If set to true it will add heart_rate_samples field" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/heartrate_summary", + "method": "getHeartRateSummary", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Heart Rate Summary", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/height", + "method": "listHeightChanges", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Height", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/sleep_detail", + "method": "getSleepDetail", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Sleep detail", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/sleep_summary", + "method": "getSleepSummary", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Sleep Summary", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + }, + { + "name": "detail", + "schema": "boolean", + "required": false, + "description": "If set to true and only 1 result is returned, it will add a detail field" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/stress_samples", + "method": "getStressSamples", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Stress Sample", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/stress_summary", + "method": "getStressSummary", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Stress Summary", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/track_sample", + "method": "getGpxTrackSamples", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Track Sample", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/weight", + "method": "listWeightChanges", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Weight", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{profile_public_id}/workout", + "method": "listWorkouts", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Workout", + "parameters": [ + { + "name": "cursor", + "schema": "string", + "required": false, + "description": "The pagination cursor value." + }, + { + "name": "pageSize", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Lower bound of date or timestamp." + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Upper bound of date or timestamp." + }, + { + "name": "deduplicate", + "schema": "boolean", + "required": false, + "description": "If set to true, duplicates will be aggregated." + }, + { + "name": "heartRateDetail", + "schema": "boolean", + "required": false, + "description": "If set to true and page_size is 1, it will add heart_rate_samples field" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{public_id}", + "method": "delete", + "httpMethod": "delete", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Delete Profile", + "parameters": [], + "responses": [ + { + "statusCode": "204", + "description": "" + } + ] + }, + { + "url": "/profile/{public_id}", + "method": "read", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Get Profile", + "parameters": [], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{public_id}", + "method": "updatePartial", + "httpMethod": "patch", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Partial Update", + "parameters": [ + { + "name": "url", + "schema": "string", + "description": "" + }, + { + "name": "public_id", + "schema": "string", + "description": "" + }, + { + "name": "given_name", + "schema": "string", + "description": "" + }, + { + "name": "family_name", + "schema": "string", + "description": "" + }, + { + "name": "nickname", + "schema": "string", + "description": "" + }, + { + "name": "gender", + "schema": "string", + "description": "" + }, + { + "name": "birthdate", + "schema": "string", + "description": "" + }, + { + "name": "zoneinfo", + "schema": "string", + "description": "" + }, + { + "name": "locale", + "schema": "string", + "description": "" + }, + { + "name": "total_calories", + "schema": "number", + "description": "" + }, + { + "name": "total_distance", + "schema": "number", + "description": "" + }, + { + "name": "total_steps", + "schema": "number", + "description": "" + }, + { + "name": "total_points", + "schema": "number", + "description": "" + }, + { + "name": "total_activity_duration", + "schema": "string <iso8601 duration>", + "description": "" + }, + { + "name": "reference", + "schema": "string", + "description": "" + }, + { + "name": "teams", + "schema": "array", + "description": "" + }, + { + "name": "avatar", + "schema": "string", + "description": "" + }, + { + "name": "created_at", + "schema": "string", + "description": "" + }, + { + "name": "updated_at", + "schema": "string", + "description": "" + }, + { + "name": "num_active_challenges", + "schema": "string", + "description": "" + }, + { + "name": "num_done_challenges", + "schema": "string", + "description": "" + }, + { + "name": "num_future_challenges", + "schema": "string", + "description": "" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{public_id}", + "method": "update", + "httpMethod": "put", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Update profile", + "parameters": [ + { + "name": "url", + "schema": "string", + "description": "" + }, + { + "name": "public_id", + "schema": "string", + "description": "" + }, + { + "name": "given_name", + "schema": "string", + "description": "" + }, + { + "name": "family_name", + "schema": "string", + "description": "" + }, + { + "name": "nickname", + "schema": "string", + "description": "" + }, + { + "name": "gender", + "schema": "string", + "description": "" + }, + { + "name": "birthdate", + "schema": "string", + "description": "" + }, + { + "name": "zoneinfo", + "schema": "string", + "description": "" + }, + { + "name": "locale", + "schema": "string", + "description": "" + }, + { + "name": "total_calories", + "schema": "number", + "description": "" + }, + { + "name": "total_distance", + "schema": "number", + "description": "" + }, + { + "name": "total_steps", + "schema": "number", + "description": "" + }, + { + "name": "total_points", + "schema": "number", + "description": "" + }, + { + "name": "total_activity_duration", + "schema": "string <iso8601 duration>", + "description": "" + }, + { + "name": "reference", + "schema": "string", + "description": "" + }, + { + "name": "teams", + "schema": "array", + "description": "" + }, + { + "name": "avatar", + "schema": "string", + "description": "" + }, + { + "name": "created_at", + "schema": "string", + "description": "" + }, + { + "name": "updated_at", + "schema": "string", + "description": "" + }, + { + "name": "num_active_challenges", + "schema": "string", + "description": "" + }, + { + "name": "num_done_challenges", + "schema": "string", + "description": "" + }, + { + "name": "num_future_challenges", + "schema": "string", + "description": "" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{public_id}/challenge", + "method": "challenge", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Challenge", + "parameters": [ + { + "name": "recent", + "schema": "integer", + "required": false, + "description": "Show challenges that have not ended in the last N weeks" + }, + { + "name": "dateStart", + "schema": "string", + "required": false, + "description": "Only return challenges that are active after this time\n\nNote: this only affects challenges that are not joined.\n\nDefaults to now" + }, + { + "name": "dateEnd", + "schema": "string", + "required": false, + "description": "Only return challenges that are active before this time\n\nNote: this only affects challenges that are not joined.\n\nDefaults to now" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{public_id}/challenges", + "method": "challenges", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "This docstring is used by Django Rest Framework", + "parameters": [], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/profile/{public_id}/connections", + "method": "connections", + "httpMethod": "get", + "tag": "profile", + "typeScriptTag": "profile", + "description": "Connections", + "parameters": [ + { + "name": "redirect", + "schema": "string", + "required": false, + "description": "After connecting redirect back to this url.\n\nNote: has to be a valid http url. For deeplinks (to apps) first redirect to your own backend and then deeplink from there.\n\nNote: the user is only redirected on a successfull connection, otherwise an error screen is shown. (see redirect_on_error to change this)\n\nNote: if this parameter is omitted, then user will see a generic success screen." + }, + { + "name": "redirectOnError", + "schema": "boolean", + "required": false, + "description": "If enabled, then user will also be redirected to the redirect url if an error occurs\n\nNote: a query parameter 'error' is added to the redirect url. Possible values are access_denied, unknown. New values may be added at anytime\n\nNote: for backwards compatibility the default is false, but this will be changed in the next breaking release" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/team", + "method": "list", + "httpMethod": "get", + "tag": "team", + "typeScriptTag": "team", + "description": "List Teams", + "parameters": [ + { + "name": "limit", + "schema": "integer", + "required": false, + "description": "Number of results to return per page." + }, + { + "name": "offset", + "schema": "integer", + "required": false, + "description": "The initial index from which to return the results." + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/team", + "method": "create", + "httpMethod": "post", + "tag": "team", + "typeScriptTag": "team", + "description": "Create Team", + "parameters": [ + { + "name": "description", + "schema": "string", + "required": true, + "description": "", + "example": "DESCRIPTION" + }, + { + "name": "name", + "schema": "string", + "required": true, + "description": "", + "example": "NAME" + }, + { + "name": "public_id", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "url", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "num_members", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "members", + "schema": "array", + "required": false, + "description": "" + }, + { + "name": "avatar", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + }, + { + "url": "/team/{public_id}", + "method": "delete", + "httpMethod": "delete", + "tag": "team", + "typeScriptTag": "team", + "description": "Deletes a Team", + "parameters": [], + "responses": [ + { + "statusCode": "204", + "description": "" + } + ] + }, + { + "url": "/team/{public_id}", + "method": "read", + "httpMethod": "get", + "tag": "team", + "typeScriptTag": "team", + "description": "Team", + "parameters": [], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/team/{public_id}", + "method": "editTeamPartial", + "httpMethod": "patch", + "tag": "team", + "typeScriptTag": "team", + "description": "Partial Edit a Team", + "parameters": [ + { + "name": "description", + "schema": "string", + "required": true, + "description": "", + "example": "DESCRIPTION" + }, + { + "name": "name", + "schema": "string", + "required": true, + "description": "", + "example": "NAME" + }, + { + "name": "public_id", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "url", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "num_members", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "members", + "schema": "array", + "required": false, + "description": "" + }, + { + "name": "avatar", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/team/{public_id}", + "method": "update", + "httpMethod": "put", + "tag": "team", + "typeScriptTag": "team", + "description": "Edit Team", + "parameters": [ + { + "name": "description", + "schema": "string", + "required": true, + "description": "", + "example": "DESCRIPTION" + }, + { + "name": "name", + "schema": "string", + "required": true, + "description": "", + "example": "NAME" + }, + { + "name": "public_id", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "url", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "num_members", + "schema": "string", + "required": false, + "description": "" + }, + { + "name": "members", + "schema": "array", + "required": false, + "description": "" + }, + { + "name": "avatar", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/team/{public_id}/member", + "method": "removeMember", + "httpMethod": "delete", + "tag": "team", + "typeScriptTag": "team", + "description": "Remove member", + "parameters": [ + { + "name": "profile", + "schema": "string", + "required": true, + "description": "A profile public_id is expected", + "example": "PROFILE" + } + ], + "responses": [ + { + "statusCode": "204", + "description": "" + } + ] + }, + { + "url": "/team/{public_id}/member", + "method": "addMember", + "httpMethod": "post", + "tag": "team", + "typeScriptTag": "team", + "description": "Add member", + "parameters": [ + { + "name": "profile", + "schema": "string", + "required": true, + "description": "", + "example": "PROFILE" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + }, + { + "url": "/team/{public_id}/member", + "method": "addMember", + "httpMethod": "put", + "tag": "team", + "typeScriptTag": "team", + "description": "Add member", + "parameters": [ + { + "name": "profile", + "schema": "string", + "required": true, + "description": "", + "example": "PROFILE" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/team/{public_id}/members", + "method": "addMembers", + "httpMethod": "post", + "tag": "team", + "typeScriptTag": "team", + "description": "Add members", + "parameters": [ + { + "name": "profiles", + "schema": "array", + "required": true, + "description": "" + }, + { + "name": "is_active", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + }, + { + "url": "/team/{public_id}/members", + "method": "addMembers", + "httpMethod": "put", + "tag": "team", + "typeScriptTag": "team", + "description": "Add members", + "parameters": [ + { + "name": "profiles", + "schema": "array", + "required": true, + "description": "" + }, + { + "name": "is_active", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "200", + "description": "" + } + ] + }, + { + "url": "/team/{public_id}/remove_members", + "method": "removeMembers", + "httpMethod": "post", + "tag": "team", + "typeScriptTag": "team", + "description": "Remove members", + "parameters": [ + { + "name": "profiles", + "schema": "array", + "required": true, + "description": "" + }, + { + "name": "is_active", + "schema": "boolean", + "required": false, + "description": "" + }, + { + "name": "joined", + "schema": "string", + "required": false, + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + }, + { + "url": "/token", + "method": "create", + "httpMethod": "post", + "tag": "token", + "typeScriptTag": "token", + "description": "Create Token", + "parameters": [ + { + "name": "bearer", + "schema": "string", + "description": "" + } + ], + "responses": [ + { + "statusCode": "201", + "description": "" + } + ] + } + ], + "repositoryDescription": "WeFitter boosts digital health platforms with an aggregator API connecting fitness apps and wearables, improving user engagement and providing health insights. Built by Thunderbyte.AI, a Dutch Al/ML organization with 12+ years experience in digital health. WeFitter's {language} SDK generated by Konfig (https://konfigthis.com/).", + "logo": "https://raw.githubusercontent.com/konfig-sdks/openapi-examples/HEAD/wefitter/logo.png", + "openApiRaw": "https://raw.githubusercontent.com/konfig-sdks/openapi-examples/HEAD/wefitter/openapi.yaml", + "openApiGitHubUi": "https://github.com/konfig-sdks/openapi-examples/tree/HEAD/wefitter/openapi.yaml", + "previewLinkImage": "https://raw.githubusercontent.com/konfig-sdks/openapi-examples/HEAD/wefitter/imagePreview.webp", + "faviconUrl": "https://raw.githubusercontent.com/konfig-sdks/openapi-examples/HEAD/wefitter/favicon.png", + "clientNameCamelCase": "weFitter", + "lastUpdated": "2024-03-29T23:33:14.049Z", + "typescriptSdkUsageCode": "import { WeFitter } from 'we-fitter-typescript-sdk';\n\nconst weFitter = new WeFitter({\n /*\n * Basic Authentication is used to create administrator bearer tokens.\n * \n * Once a bearer token has been made, remove this auth. ('logout' in Swagger')\n */\n username: \"USERNAME\",\n password: \"PASSWORD\",\n /*\n * Bearer authentication for logged-in profiles.\n * \n * When using the GUI, please don't forget to prefix your bearer tokens with the text 'bearer', followed by a space.\n */\n bearerProfile: \"AUTHORIZATION\",\n /*\n * Bearer authentication for administrators.\n * \n * When using the GUI, please don't forget to prefix your bearer tokens with the text 'bearer', followed by a space.\n */\n bearerAdmin: \"AUTHORIZATION\"\n})", + "typescriptSdkFirstRequestCode": "// Get someones biological age on a weekly basis.\nconst getBioAgeWeeklyResponse = weFitter.insights.getBioAgeWeekly({\n startDate: \"START_DATE\"\n endDate: \"END_DATE\"\n})", + "fixedSpecFileName": "we-fitter-fixed-spec.yaml" +} \ No newline at end of file diff --git a/sdks/db/spec-data/from-custom-request_wefitter.com.json b/sdks/db/spec-data/from-custom-request_wefitter.com.json new file mode 100644 index 0000000000..a600e2df95 --- /dev/null +++ b/sdks/db/spec-data/from-custom-request_wefitter.com.json @@ -0,0 +1,37 @@ +{ + "securitySchemes": { + "Basic": { + "type": "http", + "description": "Basic Authentication is used to create administrator bearer tokens.\n\nOnce a bearer token has been made, remove this auth. ('logout' in Swagger')", + "scheme": "basic" + }, + "BearerProfile": { + "type": "apiKey", + "name": "Authorization", + "in": "header", + "description": "Bearer authentication for logged-in profiles.\n\nWhen using the GUI, please don't forget to prefix your bearer tokens with the text 'bearer', followed by a space." + }, + "BearerAdmin": { + "type": "apiKey", + "name": "Authorization", + "in": "header", + "description": "Bearer authentication for administrators.\n\nWhen using the GUI, please don't forget to prefix your bearer tokens with the text 'bearer', followed by a space." + } + }, + "apiBaseUrl": "https://api.wefitter.com/api/v1.3", + "apiVersion": "v1.3", + "apiDescription": "This is the WeFitter API", + "apiTitle": "WeFitter API", + "endpoints": 51, + "sdkMethods": 125, + "schemas": 53, + "parameters": 350, + "contactEmail": "hello@wefitter.com", + "originalCustomRequest": { + "type": "GET", + "url": "https://api.wefitter.com/api/v1.3/redoc/?format=openapi" + }, + "customRequestSpecFilename": "wefitter.com.yaml", + "difficultyScore": 239, + "difficulty": "Hard" +} \ No newline at end of file diff --git a/sdks/db/spec-data/motaword.com_1.0.json b/sdks/db/spec-data/motaword.com_1.0.json index aab1334cce..843cdeddb6 100644 --- a/sdks/db/spec-data/motaword.com_1.0.json +++ b/sdks/db/spec-data/motaword.com_1.0.json @@ -51,5 +51,5 @@ "schemas": 193, "parameters": 704, "difficultyScore": 563.5, - "difficulty": "Very Hard" + "difficulty": "Hard" } \ No newline at end of file diff --git a/sdks/publish.yaml b/sdks/publish.yaml index dcf1210cd8..b85400f750 100644 --- a/sdks/publish.yaml +++ b/sdks/publish.yaml @@ -9203,3 +9203,30 @@ publish: serviceName: false sdkName: tilled-{language}-sdk clientName: Tilled + from-custom-request_wefitter.com: + homepage: wefitter.com + company: WeFitter + developerDocumentation: www.wefitter.com/en-us/developers/documentation/ + apiStatusUrls: inherit + metaDescription: >- + WeFitter helps digital health platforms improve business performance, + engagement and data insights introducing an aggregator API that provides + connections with todays most used fitness app's, wearables & gamification + elements. + + + WeFitter's easy to integrate API will boost up user engagement and gives + insight in users health profiles in order to personalize content, + offerings and health advise. + + + WeFitter is build by Thunderbyte.AI, a Dutch Al/ ML organisation with over + 12 years of experience in building digital health products. + + + Ask for a demo > business@wefitter.com + categories: + - health_data + serviceName: false + sdkName: we-fitter-{language}-sdk + clientName: WeFitter diff --git a/sdks/src/collect-from-custom-requests.ts b/sdks/src/collect-from-custom-requests.ts index 2d83cee151..70c67acb67 100644 --- a/sdks/src/collect-from-custom-requests.ts +++ b/sdks/src/collect-from-custom-requests.ts @@ -2599,6 +2599,10 @@ const customRequests: Record<string, CustomRequest> = { type: "GET", url: "https://app.nanonets.com/swagger", }, + "wefitter.com": { + type: "GET", + url: "https://api.wefitter.com/api/v1.3/redoc/?format=openapi", + }, "moffin.mx": { type: "GET", url: "https://app.moffin.mx/api/v1/docs",