This guide is intended to provide instructions on how to interact with and use the External ForceFrame API.
The External ForceFrame API can be utilised to access team and athlete test and training data.
Jump to:
Retrieve test data
- Scenario 1: Retrieve a collection of tests for a tenant (Updated)
- Scenario 2: Retrieve a collection of tests for a tenant (Planned for deprecation)
- Scenario 3: Retrieve a single test
- Scenario 4: Retrieve a ForceFrame force trace associated with a single test
- Scenario 5: Retrieve a test with all metrics
- Scenario 6: Retrieve repetition data from a test
Retrieve training data
Identify your region
The endpoint you use to interact with the External ForceFrame API is dependant on what region you (the client) reside in.
Please note that only tenant data which resides within the region of the API endpoint used is accessible. Therefore, if a tenant's data resides in Australia (East), it will only be accessible from that region's API.
Choose your region below and copy the endpoint URL provided.
|
Australia (East) https://prd-aue-api-externalforceframe.valdperformance.com/swagger/index.html |
|
United States (East) https://prd-use-api-externalforceframe.valdperformance.com/swagger/index.html |
|
Europe (West) https://prd-euw-api-externalforceframe.valdperformance.com/swagger/index.html |
If you are unsure which region-specific URL you should be using, please contact support@vald.com.
Scenario 1: Retrieve a collection of tests for a tenant
Updated
This is the recommended method to retrieve a list of tests for a tenant.
URL
/tests/v2
Path Parameters
None
Query Parameters
| Parameter | Required | Description |
| tenantId | True | ID of the tenant from which to retrieve tests. |
| modifiedFromUtc | True |
Retrieve tests modified after the specified UTC date. Format: YYYY-MM-DDT00:00:00.000Z |
| profileId | False | ID of the athlete from which to retrieve tests. |
Description
- Set the required parameters.
- Set the
tenantIdparameter. This is your organization's unique identifier. - Set the
modifiedFromUtcparameter. This is the date and time from which you want to retrieve test data (formatted in UTC).
- Set the
- Retrieve your data. Here are a few examples of how to structure your requests:
Request 1: Retrieve all tests modified after a specific date and time
/tests/v2?TenantId={tenantId}&ModifiedFromUtc={modifiedFromUtc}
- To get the next set of paged records, use the
modifiedDateUtcvalue of the last record as the value for themodifiedFromUtcquery parameter in your next request. - This will return all tests for the tenant from the specified date and time.
Request 2: Retrieve tests for a specific profile
/tests/v2?TenantId={tenantId}&ModifiedFromUtc={modifiedFromUtc}&ProfileId={profileId}
- As with Request 1, use the
modifiedDateUtcvalue of the last record for pagination. - This request will return tests filtered by tenant and profile.
Request 3: Retrieve all tests modified in the last 2 hours
/tests/v2?TenantId={tenantId}&ModifiedFromUtc={modifiedFromUtc}
- If the current UTC time is
2024-02-12T09:00:00.1234567Z, setmodifiedFromUtcto 2 hours earlier (i.e.2024-02-12T07:00:00.1234567Z). - This will return all records modified in the past 2 hours.
Note: You cannot retrieve tests using a specific date range, as described in the previous example.
- Repeat the above steps until you receive a
204 No Contentstatus code, which indicates there are no more records to retrieve.
Tests are returned in ascending order of {modifiedFromUtc} (i.e. oldest to newest).
Response
Example response
{
"tests": [
{
"profileId": "<PROFILE-ID>",
"testId": "<TEST-ID>",
"testDateUtc": "2023-01-25T00:00:00.000Z",
"testTypeId": "<TEST-TYPE-ID>",
"testPositionId": "<TEST-POSITION-ID>",
"notes": "Ankle Testing",
"innerLeftAvgForce": 297,
"innerLeftImpulse": 2796,
"innerLeftMaxForce": 326,
"innerLeftRepetitions": 3,
"innerRightAvgForce": 293,
"innerRightImpulse": 2758,
"innerRightMaxForce": 320,
"innerRightRepetitions": 3,
"outerLeftAvgForce": 337,
"outerLeftImpulse": 3173,
"outerLeftMaxForce": 340,
"outerLeftRepetitions": 3,
"outerRightAvgForce": 347,
"outerRightImpulse": 3267,
"outerRightMaxForce": 386,
"outerRightRepetitions": 3,
"device": "ForceFrame - 1337",
"modifiedDateUtc": "2023-10-02T03:32:13.5367851Z",
"testTypeName": "Ankle IN/EV",
"testPositionName": "Ankle Inversion/Eversion - Supine"
}
]
}Scenario 2: Retrieve a collection of tests for a tenant
Planned for deprecation
This approach is no longer preferable and will be deprecated in future. Please use Scenario 1 above to retrieve a collection of tests for a tenant.
URL
/tests
Path Parameters
None
Query Parameters
| Parameter | Required | Description |
| tenantId | True | ID of the tenant from which to retrieve tests. |
| modifiedFromUtc | True |
Retrieve tests modified after the specified UTC date. Format: YYYY-MM-DDT00:00:00.000Z |
| testFromUtc | True |
Retrieve tests recorded after the specified UTC date. Format: YYYY-MM-DDT00:00:00.000Z |
| testToUtc | True |
Retrieve tests recorded before the specified UTC date. Format: YYYY-MM-DDT00:00:00.000Z |
| athleteId | False | ID of the athlete from which to retrieve tests. |
| page | False | The page number to return. Default is 1. |
| pageSize | False | The number of tests returned by a single page. Default is 1 – max value is 100. |
Description
- Set the required parameters.
- Ensure the
testFromUtcandtestToUtcare within six months of each other. - Use the
modifiedFromUtcas a mechanism to refine the tests down further. If unsure, set this parameter to be equal totestFromUtc. - Set
pageequal to1.
- Ensure the
-
Retrieve a page of data using
/tests?TenantId={tenantId}&ModifiedFromUtc={modifiedFromUtc}&TestFromUtc={testFromUtc}&TestToUtc={testToUtc}&Page={page} - Increment the
pageparameter. -
Repeat steps 2–3 until a No Content
204status code is returned.
Note: Tests are returned in descending order of test date (i.e. newest to oldest).
Response
Example response
{
"tests": [
{
"athleteId": "<PROFILE-ID>",
"testId": "<TEST-ID>",
"testDateUtc": "2023-04-24T03:51:32.933Z",
"testTypeId": "0ca48841-2ddc-40b9-935a-bc7097870d4c",
"testPositionId": "fb5672f3-da6a-4e17-b515-e2458d81c1f0",
"notes": "Training Camp (April)",
"innerLeftAvgForce": 163.60714285714283,
"innerLeftImpulse": 589.35,
"innerLeftMaxForce": 184.5,
"innerLeftRepetitions": 7,
"innerRightAvgForce": 108.625,
"innerRightImpulse": 444.12499999999994,
"innerRightMaxForce": 113.25,
"innerRightRepetitions": 8,
"outerLeftAvgForce": 32.5,
"outerLeftImpulse": 0.0,
"outerLeftMaxForce": 32.5,
"outerLeftRepetitions": 0,
"outerRightAvgForce": 24.625,
"outerRightImpulse": 0.0,
"outerRightMaxForce": 24.625,
"outerRightRepetitions": 0,
"device": "ForceFrame-1359",
"modifiedDateUtc": "2023-10-02T03:33:05.871Z",
"testTypeName": "Neck Lateral Flexion",
"testPositionName": "Neck Lateral Flexion - Quadruped"
},
...
{
"athleteId": "<PROFILE-ID>",
"testId": "<TEST-ID>",
"testDateUtc": "2023-01-25T00:00:00.000Z",
"testTypeId": "3ba718ba-abaf-44e2-8186-3ac4c16c7149",
"testPositionId": "6d0049c8-019e-463c-a6e1-dd92eeb379d9",
"notes": "Training Camp (January)",
"innerLeftAvgForce": 0.0,
"innerLeftImpulse": 0.0,
"innerLeftMaxForce": 0.0,
"innerLeftRepetitions": 3,
"innerRightAvgForce": 0.0,
"innerRightImpulse": 0.0,
"innerRightMaxForce": 0.0,
"innerRightRepetitions": 3,
"outerLeftAvgForce": 289.0,
"outerLeftImpulse": 2727.0,
"outerLeftMaxForce": 332.0,
"outerLeftRepetitions": 3,
"outerRightAvgForce": 290.0,
"outerRightImpulse": 2733.0,
"outerRightMaxForce": 330.0,
"outerRightRepetitions": 3,
"device": "ForceFrame - 1337",
"modifiedDateUtc": "2023-10-02T03:33:13.854Z",
"testTypeName": "Elbow Extension",
"testPositionName": "Elbow Extension - Seated"
}
],
"page": 1,
"pageCount": 3
}Scenario 3: Retrieve a single test
URL
/tests/{testId}
Path Parameters
| Parameter | Required | Description |
| testId | True | ID of test to retrieve. |
Query Parameters
| Parameter | Required | Description |
| tenantId | True | ID of the tenant from which to retrieve the test. |
Description
Use to retrieve summary information about a test.
Response
Example response
{
"athleteId": "<PROFILE-ID>",
"testId": "<TEST-ID>",
"testDateUtc": "2023-04-24T03:51:32.933Z",
"testTypeId": "0ca48841-2ddc-40b9-935a-bc7097870d4c",
"testPositionId": "fb5672f3-da6a-4e17-b515-e2458d81c1f0",
"notes": "Training Camp (April)",
"innerLeftAvgForce": 163.60714285714283,
"innerLeftImpulse": 589.35,
"innerLeftMaxForce": 184.5,
"innerLeftRepetitions": 7,
"innerRightAvgForce": 108.625,
"innerRightImpulse": 444.12499999999994,
"innerRightMaxForce": 113.25,
"innerRightRepetitions": 8,
"outerLeftAvgForce": 32.5,
"outerLeftImpulse": 0.0,
"outerLeftMaxForce": 32.5,
"outerLeftRepetitions": 0,
"outerRightAvgForce": 24.625,
"outerRightImpulse": 0.0,
"outerRightMaxForce": 24.625,
"outerRightRepetitions": 0,
"device": "ForceFrame-1359",
"modifiedDateUtc": "2023-10-02T03:33:05.871Z",
"testTypeName": "Neck Lateral Flexion",
"testPositionName": "Neck Lateral Flexion - Quadruped"
}Scenario 4: Retrieve a ForceFrame force trace associated with a single test
URL
/tests/{testId}/forceframetrace
Path Parameters
| Parameter | Required | Description |
| testId | True | ID of test to retrieve. |
Query Parameters
| Parameter | Required | Description |
| tenantId | True | ID of the tenant from which to retrieve the test. |
Description
Use to retrieve a ForceFrame force trace associated with a specific test.
Response
Example response
{
"athleteId": "<PROFILE-ID>",
"testId": "<TEST-ID>",
"testTypeId": "0ca48841-2ddc-40b9-935a-bc7097870d4c",
"testTypeName": "Neck Lateral Flexion",
"testPositionId": "fb5672f3-da6a-4e17-b515-e2458d81c1f0",
"testPositionName": "Neck Lateral Flexion - Quadruped",
"forces": [
{
"ticks": 638179046401209472,
"innerLeftForce": 0.0,
"innerRightForce": 0.0,
"outerLeftForce": 0.0,
"outerRightForce": 0.0
},
...
{
"ticks": 638179050916719232,
"innerLeftForce": 0.0,
"innerRightForce": -1.0,
"outerLeftForce": -0.0,
"outerRightForce": 0.5
}
],
"device": "ForceFrame-1359",
"testDateUTC": "2023-04-24T03:51:32.933Z",
"notes": "Training Camp (April)"
}Scenario 5: Retrieve a test with all metrics
URL
/tests/{testId}/metrics
Path Parameters
| Parameter | Required | Description |
| testId | True | ID of test to retrieve. |
Query Parameters
| Parameter | Required | Description |
| tenantId | True | ID of the tenant from which to retrieve the test. |
Description
Use to retrieve all metrics associated with a specific test.
Response
Example response
{
"athleteId": "1a91089d-b4d0-417d-ac64-0fb7ca85c225",
"testId": "7519c96f-b1cc-42a3-bdee-adbaf59ae713",
"leftMaxForcePerKg": 2.569277108433735,
"rightMaxForcePerKg": 2.4879518072289155,
"leftAvgForcePerKg": 2.5542168674698793,
"rightAvgForcePerKg": 2.2816265060240966,
"leftMaxRFDNewtonsPerSecond": 288.23529411770375,
"rightMaxRFDNewtonsPerSecond": 264.7058823528978,
"leftAvgRFDNewtonsPerSecond": 273.529411764756,
"rightAvgRFDNewtonsPerSecond": 238.23529411764676,
"leftMinTimeToMaxForceSeconds": 2.285,
"rightMinTimeToMaxForceSeconds": 2.3025,
"leftAvgTimeToMaxForceSeconds": 2.38375,
"rightAvgTimeToMaxForceSeconds": 2.3937500000000007,
"leftMaxTorquePerKg": 0.7746370481927711,
"rightMaxTorquePerKg": 0.7501174698795182,
"leftAvgTorquePerKg": 0.7700963855421687,
"rightAvgTorquePerKg": 0.6879103915662652,
"leftMaxRFD50msNewtonsPerSecond": 49.99999999999929,
"leftAvgRFD50msNewtonsPerSecond": 32.4999999999998,
"rightMaxRFD50msNewtonsPerSecond": 30.000000000000107,
"rightAvgRFD50msNewtonsPerSecond": 19.999999999999982,
"leftMaxRFD100msNewtonsPerSecond": 87.49999999999953,
"leftAvgRFD100msNewtonsPerSecond": 59.99999999999982,
"rightMaxRFD100msNewtonsPerSecond": 39.99999999999979,
"rightAvgRFD100msNewtonsPerSecond": 29.99999999999993,
"leftMaxRFD150msNewtonsPerSecond": 106.66666666666642,
"leftAvgRFD150msNewtonsPerSecond": 78.33333333333344,
"rightMaxRFD150msNewtonsPerSecond": 58.333333333333194,
"rightAvgRFD150msNewtonsPerSecond": 43.33333333333323,
"leftMaxRFD200msNewtonsPerSecond": 121.24999999999989,
"leftAvgRFD200msNewtonsPerSecond": 90.00000000000004,
"rightMaxRFD200msNewtonsPerSecond": 69.99999999999994,
"rightAvgRFD200msNewtonsPerSecond": 51.874999999999886,
"leftMaxRFD250msNewtonsPerSecond": 146,
"leftAvgRFD250msNewtonsPerSecond": 106,
"rightMaxRFD250msNewtonsPerSecond": 83,
"rightAvgRFD250msNewtonsPerSecond": 60.5,
"leftMaxImpulse50msNewtonSeconds": 0.06406249999998725,
"leftAvgImpulse50msNewtonSeconds": 0.04953124999999636,
"rightMaxImpulse50msNewtonSeconds": 0.4431250000002267,
"rightAvgImpulse50msNewtonSeconds": 0.23062500000011477,
"leftMaxImpulse100msNewtonSeconds": 0.3115625000000487,
"leftAvgImpulse100msNewtonSeconds": 0.2550000000000046,
"rightMaxImpulse100msNewtonSeconds": 0.9306250000004761,
"rightAvgImpulse100msNewtonSeconds": 0.5440625000002504,
"leftMaxImpulse150msNewtonSeconds": 0.921250000000144,
"leftAvgImpulse150msNewtonSeconds": 0.7150000000000214,
"rightMaxImpulse150msNewtonSeconds": 1.5234375000007794,
"rightAvgImpulse150msNewtonSeconds": 0.9912500000004256,
"leftMaxImpulse200msNewtonSeconds": 1.9140625000002993,
"leftAvgImpulse200msNewtonSeconds": 1.4768750000000463,
"rightMaxImpulse200msNewtonSeconds": 2.2328125000011423,
"rightAvgImpulse200msNewtonSeconds": 1.6310937500006517,
"leftMaxImpulse250msNewtonSeconds": 3.422500000000535,
"leftAvgImpulse250msNewtonSeconds": 2.6046875000000895,
"rightMaxImpulse250msNewtonSeconds": 3.072500000001572,
"rightAvgImpulse250msNewtonSeconds": 2.4795312500009334
} Scenario 6: Retrieve repetition data from a test
URL
/tests/{testId}/repetitions
Path Parameters
| Parameter | Required | Description |
| testId | True | ID of test to retrieve. |
Query Parameters
| Parameter | Required | Description |
| tenantId | True | ID of the tenant from which to retrieve the test. |
Description
Use to retrieve all repetitions associated with a specific test.
Response
Example response
[
{
"id": "12db9f4f-1095-4d9b-abe8-2b7e1abc2ae6",
"testId": "a10c992a-0c24-4d26-8dfc-b72b1d8c31a3",
"sensorType": "OuterLeft",
"repNumber": 1,
"startOffsetSeconds": 3.3175,
"endOffsetSeconds": 3.91,
"maxForce": 436,
"impulse": 147.22812499999685,
"maxForcePerKg": 5.253012048192771,
"maxRFDNewtonsPerSecond": 2258.8235294118163,
"timeToMaxForceSeconds": 0.3500000000000001,
"rfd50msNewtonsPerSecond": 344.9999999999982,
"rfd100msNewtonsPerSecond": 1272.4999999999989,
"rfd150msNewtonsPerSecond": 1305.0000000000007,
"rfd200msNewtonsPerSecond": 1363.7499999999989,
"rfd250msNewtonsPerSecond": 1341,
"impulse50msNewtonSeconds": 0.6371874999999865,
"impulse100msNewtonSeconds": 4.6346874999999015,
"impulse150msNewtonSeconds": 12.949062499999725,
"impulse200msNewtonSeconds": 25.130937499999465,
"impulse250msNewtonSeconds": 40.677187499999135
},
{
"id": "3edbb6ce-0d93-44de-ae50-2d40e7276eb2",
"testId": "a10c992a-0c24-4d26-8dfc-b72b1d8c31a3",
"sensorType": "OuterRight",
"repNumber": 1,
"startOffsetSeconds": 2.2225,
"endOffsetSeconds": 3.0025,
"maxForce": 465,
"impulse": 189.52249999999597,
"maxForcePerKg": 5.602409638554217,
"maxRFDNewtonsPerSecond": 1917.6470588235657,
"timeToMaxForceSeconds": 0.4474999999999998,
"rfd50msNewtonsPerSecond": 185.00000000000065,
"rfd100msNewtonsPerSecond": 537.5000000000019,
"rfd150msNewtonsPerSecond": 745.0000000000005,
"rfd200msNewtonsPerSecond": 975.0000000000013,
"rfd250msNewtonsPerSecond": 1138,
"impulse50msNewtonSeconds": 0.7784374999999835,
"impulse100msNewtonSeconds": 2.80468749999994,
"impulse150msNewtonSeconds": 7.622187499999837,
"impulse200msNewtonSeconds": 15.880624999999661,
"impulse250msNewtonSeconds": 28.570624999999392
},
{
"id": "4b208c12-16e6-452d-bcf5-5d5302ac0f64",
"testId": "a10c992a-0c24-4d26-8dfc-b72b1d8c31a3",
"sensorType": "OuterLeft",
"repNumber": 2,
"startOffsetSeconds": 0.3425,
"endOffsetSeconds": 1.0325,
"maxForce": 404.75,
"impulse": 142.18906249999696,
"maxForcePerKg": 4.876506024096385,
"maxRFDNewtonsPerSecond": 1735.2941176470208,
"timeToMaxForceSeconds": 0.43999999999999995,
"rfd50msNewtonsPerSecond": 30.000000000000007,
"rfd100msNewtonsPerSecond": 470.0000000000001,
"rfd150msNewtonsPerSecond": 601.6666666666669,
"rfd200msNewtonsPerSecond": 710.0000000000001,
"rfd250msNewtonsPerSecond": 910,
"impulse50msNewtonSeconds": 0.11062499999999764,
"impulse100msNewtonSeconds": 1.3762499999999707,
"impulse150msNewtonSeconds": 5.010937499999893,
"impulse200msNewtonSeconds": 10.720624999999771,
"impulse250msNewtonSeconds": 20.09749999999957
},
{
"id": "3165bfb4-2e9f-4668-ba70-76f2f37cc584",
"testId": "a10c992a-0c24-4d26-8dfc-b72b1d8c31a3",
"sensorType": "OuterRight",
"repNumber": 2,
"startOffsetSeconds": 1.3675,
"endOffsetSeconds": 2.02,
"maxForce": 397.5,
"impulse": 138.22156250000933,
"maxForcePerKg": 4.789156626506024,
"maxRFDNewtonsPerSecond": 1417.647058823429,
"timeToMaxForceSeconds": 0.41500000000000004,
"rfd50msNewtonsPerSecond": 399.99999999999966,
"rfd100msNewtonsPerSecond": 772.4999999999993,
"rfd150msNewtonsPerSecond": 808.3333333333326,
"rfd200msNewtonsPerSecond": 937.5000000000002,
"rfd250msNewtonsPerSecond": 967,
"impulse50msNewtonSeconds": 0.828125000000056,
"impulse100msNewtonSeconds": 3.646562500000246,
"impulse150msNewtonSeconds": 9.112187500000616,
"impulse200msNewtonSeconds": 17.408125000001174,
"impulse250msNewtonSeconds": 28.682187500001938
}
] Scenario 7: Retrieve a single exercise session
URL
/training/programs/current
Path Parameters
| Parameter | Required | Description |
| Id | True | ID of exercise session to retrieve. |
Query Parameters
| Parameter | Required | Description |
| tenantId | True | ID of the tenant from which to retrieve the exercise session. |
Description
Use to retrieve summary information about a training exercise.
Response
Example response
{
"id": "95ff36ed-65d9-49e3-ab54-016c7566889f",
"name": "Jon Doe",
"exercises": [
{
"id": "3b7ed62d-fd1f-402e-9a3f-04d50b854d84",
"contractionTime": "00:00:05",
"forceGoal": 200,
"trainingZone": "Manual",
"laterality": "Left",
"movement": "Adduction",
"joint": "Hip",
"repetitions": 1,
"restTime": "00:00:05",
"restTimeAfterSet": "00:00:00",
"tolerance": 10,
"toleranceUnit": "N",
"order": 1,
"trainingPositionId": "7ad90698-e0e9-4a45-877e-e751b5b6b724",
"testTypeName": "Hip AD/AB",
"testTypeId": "fa9eef53-f8a3-4257-9d59-6533443513be",
"testPositionId": "7ad90698-e0e9-4a45-877e-e751b5b6b724"
}Scenario 8: Retrieve a collection of training programs for a tenant
URL
/training/programs/current
Path Parameters
None
Query Parameters
| Parameter | Required | Description |
| tenantId | True | ID of the tenant from which to retrieve programs. |
Description
Return a list of training program summaries for a tenant.
Response
Example response
{
"id": "95ff36ed-65d9-49e3-ab54-016c7566889f",
"name": "Jon Doe",
"exercises": [
{
"id": "3b7ed62d-fd1f-402e-9a3f-04d50b854d84",
"contractionTime": "00:00:05",
"forceGoal": 200,
"trainingZone": "Manual",
"laterality": "Left",
"movement": "Adduction",
"joint": "Hip",
"repetitions": 1,
"restTime": "00:00:05",
"restTimeAfterSet": "00:00:00",
"tolerance": 10,
"toleranceUnit": "N",
"order": 1,
"trainingPositionId": "7ad90698-e0e9-4a45-877e-e751b5b6b724",
"testTypeName": "Hip AD/AB",
"testTypeId": "fa9eef53-f8a3-4257-9d59-6533443513be",
"testPositionId": "7ad90698-e0e9-4a45-877e-e751b5b6b724"
},
{
"id": "cf2ccb48-4e74-4373-818e-5605b35df41b",
"contractionTime": "00:00:05",
"forceGoal": 100,
"trainingZone": "Manual",
"laterality": "UnilateralAlternating",
"movement": "InnerPaddles",
"joint": "Custom",
"repetitions": 5,
"restTime": "00:00:05",
"restTimeAfterSet": "00:00:00",
"tolerance": 10,
"toleranceUnit": "N",
"order": 2,
"trainingPositionId": "3c9bd1b9-7fd5-4c2b-9d78-58ad0477543d",
"testTypeName": "Custom",
"testTypeId": "ba1e83a5-b500-414e-bd6b-1173958618c2",
"testPositionId": "3c9bd1b9-7fd5-4c2b-9d78-58ad0477543d"
}, Scenario 9: Retrieve a collection of training sessions for a tenant
URL
/training/sessions/exercises
Path Parameters
None
Query Parameters
| Parameter | Required | Description |
| tenantId | True | ID of the tenant from which to retrieve training sessions. |
| modifiedFromUtc | True |
Retrieve training sessions modified after the specified UTC date. Format: YYYY-MM-DDT00:00:00.000Z |
| profileId | False | ID of the athlete from which to retrieve training sessions. |
Description
- Set the required parameters.
- Set the
tenantIdparameter. This is your organization's unique identifier. - Set the
modifiedFromUtcparameter. This is the date and time from which you want to retrieve test data (formatted in UTC).
- Set the
- Retrieve your data. Here are a few examples of how to structure your requests:
Request 1: Retrieve all exercises modified after a specific date and time
/training/sessions/exercises?TenantId={tenantId}&ModifiedFromUtc={modifiedFromUtc}
- To get the next set of paged records, use the
modifiedDateUtcvalue of the last record as the value for themodifiedFromUtcquery parameter in your next request. - This will return all training exercises for the tenant from the specified date and time.
Request 2: Retrieve training sessions for a specific profile
/training/sessions/exercises?TenantId={tenantId}&ModifiedFromUtc={modifiedFromUtc}&ProfileId={profileId}
- As with Request 1, use the
modifiedDateUtcvalue of the last record for pagination. - This request will return exercises filtered by tenant and profile.
Request 3: Retrieve all training sessions modified in the last 2 hours
/training/sessions/exercises?TenantId={tenantId}&ModifiedFromUtc={modifiedFromUtc}
- If the current UTC time is
2024-02-12T09:00:00.1234567Z, setmodifiedFromUtcto 2 hours earlier (i.e.2024-02-12T07:00:00.1234567Z). - This will return all training records modified in the past 2 hours.
Note: You cannot retrieve exercises using a specific date range, as described in the previous example.
- Repeat the above steps until you receive a
204 No Contentstatus code, which indicates there are no more records to retrieve.
Response
Example response
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"sessionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"programExerciseId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"profileId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"tenantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"exerciseDateUtc": "2026-02-02T05:45:09.763Z",
"modifiedDateUTC": "2026-02-02T05:45:09.763Z",
"timeInZoneLeft": 0,
"timeInZoneRight": 0,
"impulseLeft": 0,
"impulseRight": 0,
"stabilityLeft": 0,
"stabilityRight": 0
}Scenario 10: Retrieve a list of exercise sessions
URL
/training/sessions/exercises
Path Parameters
None
Query Parameters
| Parameter | Required | Description |
| tenantId | True | ID of the tenant from which to retrieve exercise sessions. |
| modifiedFromUtc | True |
Retrieve exercise sessions modified after the specified UTC date. Format: YYYY-MM-DDT00:00:00.000Z |
| profileId | False | ID of the athlete from which to retrieve exercise sessions. |
Description
- Set the required parameters.
- Set the
tenantIdparameter. This is your organization's unique identifier. - Set the
modifiedFromUtcparameter. This is the date and time from which you want to retrieve test data (formatted in UTC).
- Set the
- Retrieve your data.
Response
Example response
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"sessionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"programExerciseId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"profileId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"tenantId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"exerciseDateUtc": "2026-02-02T05:50:35.816Z",
"modifiedDateUTC": "2026-02-02T05:50:35.816Z",
"timeInZoneLeft": 0,
"timeInZoneRight": 0,
"impulseLeft": 0,
"impulseRight": 0,
"stabilityLeft": 0,
"stabilityRight": 0
}Scenario 11: Retrieve a list of exercise repetitions
URL
/training/sessions/exercises/repetitions
Path Parameters
None
Query Parameters
| Parameter | Required | Description |
| tenantId | True | ID of the tenant from which to retrieve repetitions. |
| modifiedFromUtc | True |
Retrieve repetitions modified after the specified UTC date. Format: YYYY-MM-DDT00:00:00.000Z |
| profileId | False | ID of the athlete from which to retrieve repetitions. |
Description
- Set the required parameters.
- Set the
tenantIdparameter. This is your organization's unique identifier. - Set the
modifiedFromUtcparameter. This is the date and time from which you want to retrieve test data (formatted in UTC).
- Set the
- Retrieve your data.
Response
Example response
{
"id": "9608c00b-6197-46d8-a398-5c468ce6d770",
"profileId": "9df53e30-a139-4ff2-967e-705c2457b5b5",
"tenantId": "8dafa805-d453-4e70-b39e-4f368ba0d73d",
"sessionId": "dc723004-0ec0-44f0-ad07-60c4517948ad",
"sessionExerciseId": "fcd552f1-022b-4c61-9b2a-6ec0e0a081e8",
"programExerciseId": "7dbd275a-6a36-46e5-8bed-aaf8ffc2677e",
"repetitionId": "9608c00b-6197-46d8-a398-5c468ce6d770",
"repetition": 1,
"repetitionDateUTC": "2026-01-06T03:49:08.580Z",
"modifiedDateUTC": "2026-01-06T03:49:20.558Z",
"timeInZoneLeft": 0.10800000000000054,
"timeInZoneRight": 0.10800000000000054,
"stabilityLeft": 2.4259094360406572,
"stabilityRight": 2.622874394115953,
"impulseLeft": 54.06499999999885,
"impulseRight": 55.017499999998826
},
{
"id": "13d1d479-75fd-49f8-b1fc-d2fd8271d842",
"profileId": "9df53e30-a139-4ff2-967e-705c2457b5b5",
"tenantId": "8dafa805-d453-4e70-b39e-4f368ba0d73d",
"sessionId": "dc723004-0ec0-44f0-ad07-60c4517948ad",
"sessionExerciseId": "fcd552f1-022b-4c61-9b2a-6ec0e0a081e8",
"programExerciseId": "7dbd275a-6a36-46e5-8bed-aaf8ffc2677e",
"repetitionId": "13d1d479-75fd-49f8-b1fc-d2fd8271d842",
"repetition": 2,
"repetitionDateUTC": "2026-01-06T03:49:18.979Z",
"modifiedDateUTC": "2026-01-06T03:49:20.561Z",
"timeInZoneLeft": 0,
"timeInZoneRight": 0,
"stabilityLeft": 0,
"stabilityRight": 0,
"impulseLeft": 0,
"impulseRight": 0
}
Comments
0 comments
Please sign in to leave a comment.