This guide is intended to provide instructions on how to interact with and use the External ForceDecks API to access team and athlete test data.
- Identify your region
- Prerequisites
- Scenario 1: Retrieve a collection of tests for a tenant
- Scenario 2: Retrieve a collection of trials (i.e. reps) for a test
- Scenario 3: Retrieve a raw test recording
- Scenario 4: Retrieve result definitions
- Frequently asked questions
Identify your region
The base URL you use to interact with the External ForceDecks API is dependant on what region your (or your client's) data resides in.
Choose your region and copy the base URL provided below. For access to the Swagger documentation, you can paste and search the URL in your web browser.
| Australia (East) |
| https://prd-aue-api-extforcedecks.valdperformance.com/swagger/index.html |
| United States (East) |
| https://prd-use-api-extforcedecks.valdperformance.com/swagger/index.html |
| Europe (West) |
| https://prd-euw-api-extforcedecks.valdperformance.com/swagger/index.html |
If you are unsure which region-specific URL you should be using, please contact support@vald.com.
Prerequisites
In each example below, it is assumed that the ID for the team(s) (i.e. teamId or tenantId) are obtained using the External Tenants API, and the IDs for individual athlete(s) (i.e. athleteId or profileId) are obtained using the External Profiles API.
Scenario 1: Retrieve a collection of tests
URL
/tests
Path Parameters
None
Query Parameters
| Parameter | Required | Description |
| tenantId | True | The ID of the tenant. |
| modifiedFromUtc | True |
Filter tests modified since this date and time. Format: YYYY-MM-DDT00:00:00.000Z |
| profileId | False | The ID of the profile to optionally filter on. |
Description
- Set the parameters:
- Retrieve the
tenantIdparameter from the External Tenants API. - Set the
modifiedFromUtcto be the start date of your testing period. - Optionally, retrieve the
profileIdparameter from the External Profiles API.
- Retrieve the
- Retrieve a collection of tests using
/tests?tenantId={tenantId}&modifiedFromUtc={modifiedFromUtc}&profileId={profileId} - The tests in the response are ordered by
modifiedDateUtc. To retrieve more tests, update themodifiedFromUtcparameter to match the last test'smodifiedDateUtcfrom the response. -
Repeat steps 2 – 3 until a No Content
204status code is returned.
Response
Example response
{
"tests": [
{
"testId": "<TEST-ID>",
"tenantId": "<TENANT-ID>",
"profileId": "<PROFILE-ID>",
"recordingId": "<RECORDING-ID>",
"modifiedDateUtc": "2024-06-17T05:23:52.940Z",
"recordedDateUtc": "2022-06-01T05:53:32.417Z",
"recordedDateOffset": 600,
"recordedDateTimezone": "E. Australia Standard Time",
"analysedDateUtc": "2024-06-17T05:23:53.523Z",
"analysedDateOffset": 600,
"analysedDateTimezone": "E. Australia Standard Time",
"testType": "QSB",
"notes": "Test notes...",
"weight": -1,
"parameter": {
"resultId": 655381,
"value": 15
},
"extendedParameters": [
{
"resultId": 655382,
"value": 0
},
{
"resultId": 655383,
"value": 0
},
{
"resultId": 655384,
"value": 0
}
],
"attributes": [
{
"attributeValueId": "<ATTRIBUTE-VALUE-ID>",
"attributeValueName": "Attribute Value Name",
"attributeTypeId": "<ATTRIBUTE-TYPE-ID>",
"attributeTypeName": "Attribute Type Name"
}
]
}
]
}
Scenario 2: Retrieve a collection of trials (i.e. reps) for a test
URL
/v2019q3/teams/{teamId}/tests/{testId}/trials
Path Parameters
| Parameter | Required | Description |
| teamId | True | The ID of the team. |
| testId | True | The ID of the test. |
Query Parameters
None
Description
- Set the parameters:
- Retrieve the
teamIdparameter from the External Tenants API. - Retrieve the
testIdparameter from the/testsendpoint.
- Retrieve the
- Retrieve a collection of reps / trials using
/v2019q3/teams/{teamId}/tests/{testId}/trials
Response
Example response
[
{
"id": "<TRIAL-ID>",
"athleteId": "<LEGACY-ATHLETE-ID>",
"hubAthleteId": "<ATHLETE-ID>",
"recordedUTC": "2022-06-01T05:53:32.417Z",
"recordedOffset": 600,
"recordedTimezone": "E. Australia Standard Time",
"startTime": 2.9999999999999583,
"endTime": 18.000000000000703,
"results": [
{
"resultId": 13500417,
"value": 0.07883476583591308,
"time": 18,
"limb": "Trial",
"repeat": 0,
"definition": {
"id": 13500417,
"result": "BAL_COP_TOTAL_EXCURSION",
"description": "Total distance travelled by the CoP",
"name": "Total Excursion",
"unit": "Millimeter",
"repeatable": false,
"asymmetry": true
}
},
...
],
"lastModifiedUTC": "2022-06-01T05:53:43.564Z",
"limb": "Both"
}
]
Scenario 3: Retrieve a raw test recording
You will need to contact the VALD Support Team (support@vald.com) to request permission to retrieve individual test recordings before using this endpoint.
URL
/v2019q3/teams/{teamId}/tests/{testId}/recording
Path Parameters
| Parameter | Required | Description |
| teamId | True | The ID of the team. |
| testId | True | The ID of the test. |
Query Parameters
| Parameter | Required | Description |
| includeSampleData | False | Flag to indicate whether to include all sample data. This will default to False. |
Description
- Set the parameters:
- Retrieve the
teamIdparameter from the External Tenants API. - Retrieve the
testIdparameter from the/testsendpoint.
- Retrieve the
- Retrieve a test recording using
/v2019q3/teams/{teamId}/tests/{testId}/recording
Response
Example response
{
"id": "<RECORDING-ID>",
"athleteId": "<LEGACY-ATHLETE-ID>",
"hubAthleteId": "<ATHLETE-ID>",
"recordedUTC": "2022-06-01T05:53:32.417Z",
"recordedOffset": 600,
"recordedTimezone": "E. Australia Standard Time",
"recordingInfo": "ForceDecks;2.0.8181",
"dataSource": "ForceDecks;FDM1-220526-FW2R7-HW3R2,0132",
"recordingType": "Dual",
"recordingOutput": "ForceZ, CentreOfPressureX, CentreOfPressureY, ForceComponents",
"samplingFrequency": 200,
"duration": 18.055,
"lastModifiedUTC": "2022-06-01T05:53:42.304Z",
"recordingDataHeader": [
"Time",
"Z Left",
"COPX Left",
"COPY Left",
"Z Right",
"COPX Right",
"COPY Right"
],
"recordingData": [
[
0,
614.49642,
-30.518276,
18.338962,
95.341885,
-3.696617,
28.288536
],
...
]
}
Scenario 4: Retrieve result definitions
Option A: Retrieve all result definitions
This will retrieve all result definitions using /resultdefinitions.
This endpoint should be used initially to store a collection of all result definitions. Result definitions do not change frequently. If you received an unfamiliar resultId from the /tests endpoint, it is likely that a new metric has been added since the definitions were last accessed.
You should either retrieve the entire collection again using this method or use the below Option B to add the missing resultId to your collection.
Option A Response
Example response
{
"resultDefinitions": [
...
{
"resultId": 6553607,
"resultIdString": "JUMP_HEIGHT",
"resultName": "Jump Height (Flight Time)",
"resultDescription": "Jump height calculated from flight time",
"resultGroup": "Takeoff",
"supportsAsymmetry": false,
"isRepeatResult": false,
"resultUnit": "Centimeter",
"resultUnitName": "cm",
"resultUnitScaleFactor": 1,
"numberOfDecimalPlaces": 1,
"trendDirection": "Positive"
},
{
"resultId": 6553608,
"resultIdString": "JUMP_HEIGHT_RELATIVE_LANDING_RFD",
"resultName": "Jump Height (FT) Relative Landing RFD",
"resultDescription": "Jump Height (FT) Relative Landing RFD",
"resultGroup": "Landing",
"supportsAsymmetry": false,
"isRepeatResult": false,
"resultUnit": "NewtonPerSecondPerCentimeter",
"resultUnitName": "N/s/cm",
"resultUnitScaleFactor": 1,
"numberOfDecimalPlaces": 2,
"trendDirection": "None"
},
{
"resultId": 6553609,
"resultIdString": "JUMP_HEIGHT_RELATIVE_PEAK_LANDING_FORCE",
"resultName": "Jump Height (FT) Relative Peak Landing Force",
"resultDescription": "Jump Height (FT) Relative Peak Landing Force",
"resultGroup": "Landing",
"supportsAsymmetry": false,
"isRepeatResult": false,
"resultUnit": "NewtonPerCentimeter",
"resultUnitName": "N/cm",
"resultUnitScaleFactor": 1,
"numberOfDecimalPlaces": 2,
"trendDirection": "None"
}
...
]
}
Option B: Retrieve a specific result definition
This will retrieve a specific result definition using /resultdefinition/{resultId}
Note: The resultID path parameter can be collected from the parameter and extendedParameters properties on the test response from /tests.
Option B Response
Example response
{
"resultId": 6553607,
"resultIdString": "JUMP_HEIGHT",
"resultName": "Jump Height (Flight Time)",
"resultDescription": "Jump height calculated from flight time",
"resultGroup": "Takeoff",
"supportsAsymmetry": false,
"isRepeatResult": false,
"resultUnit": "Centimeter",
"resultUnitName": "cm",
"resultUnitScaleFactor": 1,
"numberOfDecimalPlaces": 1,
"trendDirection": "Positive"
}
Frequently asked questions
What do deprecated endpoints mean in the Swagger documentation?
If you see an endpoint marked with 'Warning: Deprecated', the endpoint is outdated and has been superseded with a newer or better alternative.
While these endpoints remain available and fully functional, we discourage new implementations from using them.
As we continuously work on and improve our API, rest assured that we will proactively notify clients if any breaking changes are planned for a deprecated endpoint.
What do the analysedOffset and recordedOffset values represent?
These values represent the time zone offset in minutes to apply to the UTC value in analysedUtc and recordedUtc for the time of analysis and recording on the application.
Why is the weight value –1?
The weighing step in this recording was skipped. For test types where weight is required for test analysis, if the weighing step was skipped then the weight is estimated prior to each rep and stored in the "Athlete Standing Weight" metric.
We recommend using the "Bodyweight in Pounds" and "Bodyweight in Kilograms" metrics to retrieve weight for all Jump and Functional test types.
What does the limb value represent and how does it differ between trials and results?
For single limb tests (one limb per rep), TrialDTO.Limb is either Left or Right. Each metric result within the trial is for this single limb. TrialResultDTO.Limb will be Trial (inherits the limb value for the result from parent TrialDTO.Limb).
For bilateral tests (two limbs per rep such as a Countermovement Jump), TrialDTO.Limb is Both. Each metric result within the trial contains multiple TrialResultDTO's with different TrialResultDTO.Limb values.
For metrics determined only from the combined Left and Right force (such as jump height), a single TrialResultDTO will be present and it's Limb value will be Both. For metrics with separate Left and Right forces, there will be multiple TrialResultDTO records present with Limb values Trial, Left, Right, and Asym.
In addition, some tests contain multiple repeats within a single trial (for example individual squats within a Squat Assessment). For these, each metric within a TrialResultDTO will include entries for each repeat, with the TrialResultDTO.Repeat field being the zero-based repeat number.
What does the resultUnitScaleFactor value represent?
Metric values given in value are in the unit used internally by the ForceDecks algorithms – typically this is an SI unit.
The unit given by resultUnit indicates the unit the metric is displayed in.
resultUnitScaleFactor indicates what the value must be scaled (i.e. multiplied) by to be in the resultUnit.
What does trendDirection represent?
trendDirection indicates the direction in change of a metric value that ForceDecks considers good.
A trendDirection of Positive indicates that increases in that metric's values are good.
A trendDirection of Negative indicates that decreases in that metric's values are good.
A trendDirection of None indicates that a metric is more nuanced and there isn't a consistent positive or negative interpretation for it.
Comments
0 comments
Please sign in to leave a comment.