API Reference

Fetch athlete session data

Session

The Session object represents a recorded session for the given athlete. It is the access point for training activities that were performed during the session. It is nested under the Athlete object.

A session in FYTT is a single bout of training composed of one or more workouts. You might generally think of it as a one or two hour training block where the athlete begins a session with a warm-up, practices some aspect of training, then ends with a cool-down.

ℹ️

Session Completion

Note that a recorded session does not necessarily represent a "completed" session, meaning that the athlete may or may not have completed all the prescribed activities. The presence of a recorded session only indicates that the athlete started the session.

In order to ascertain whether or not the athlete actually completed a given activity, you'll want to check the complete field for each individual set in the session (which are nested under the session workouts):

institutions.athletes.sessions.workouts.sets.complete

Use this information to make your own determination of "completeness" for a session as a whole and/or individual activities according to your needs.

(See our knowledge base section on sessions for more general information about sessions.)

date => ISO 8601 Date String

The date field returns a string formatted as an ISO 8601 date ("YYYY-MM-DD"), which represents the date that the athlete recorded the session.

description => String

The description field returns a text string of the session's description as provided by the coach.

name => String

The name field returns a text string of the session's name. (This field is not required in the UI. If the coach did not assign a session name, FYTT returns a derived name based on the context through which the session was scheduled.)

startedAt => ISO 8601 DateTime String|null

The startedAt field returns a ISO 8601 DateTime formatted string ("YYYY-MM-DDThh:mm:ssZ") of the time that the athlete started session. This field will return a null value if the athlete has not started the session from within the UI.

stoppedAt => ISO 8601 DateTime String|null

The stoppedAt field returns a ISO 8601 DateTime formatted string ("YYYY-MM-DDThh:mm:ssZ") of the time that the athlete stopped session. This field will return a null value if the athlete has not completed the session in the UI.

uuid => String

The uuid field returns the UUID generated by FYTT for the object.

workouts => [Workout]

The workouts field returns an array of Workout objects that were assigned as part of the given session. (See our knowledge base section on workouts for more general information about workouts.)

Workout

The Workout object represents a recorded workout for the given session. It is the access point for individual sets that were performed as part of the workout. It is nested under the Session object.

A workout within FYTT is a single, modular piece of a workout session. For example, within a given session, you might have a workout called "Warmup," then a couple workouts named "Upper Body" and "Lower Body," then a workout called "Cooldown."

date => ISO 8601 String

The date field returns a string formatted as an ISO 8601 date ("YYYY-MM-DD"), which represents the date that the athlete recorded the workout.

description => String

The description field returns a text string of the workout's description as provided by the coach.

name => String

The name field returns a text string of the workout's name as provided by the coach.

sets => [Set]

The sets field returns an array of Set objects that were assigned as part of the given workout.

uuid => String

The uuid field returns the UUID generated by FYTT for the object.

Set

The Set object is the most granular object of recorded athlete activity. It can be thought of as an assigned exercise and its recorded repetitions and attributes. It is nested under the Workout object.

complete => Boolean

The complete field returns a boolean value that indicates whether or not the set was marked as completed by the athlete.

exerciseName => String

The exerciseName field returns a text string of the name of the exercise that was recorded.

measurements => JSON

The measurements field returns a JSON object containing all the measurement attributes of the given set. This includes all the possible measurement types, whether or not each type was measured, and the unit of measurement where applicable.

setIndex => Integer

The setIndex field is an integer that allows coaches to group sets together. Sets with the same index number indicate that the sets are grouped into a superset/giantset/circuit. Only values greater than 0 are considered to be part of a group. This field defaults to a value of 0.

uuid => String

The uuid field returns the UUID generated by FYTT for the object.

Example:

{
  "caloriesMeasured": false,
  "caloriesMeasurement": 0,
  "customMeasured": false,
  "customMeasurement": 0,
  "distanceMeasured": false,
  "distanceMeasurement": 0,
  "distanceMeasurementUnit": "meters",
  "heartRateMeasured": false,
  "heartRateMeasurement": 0,
  "heightMeasured": false,
  "heightMeasurement": 0,
  "heightMeasurementUnit": "inches",
  "repsMeasured": false,
  "repsMeasurement": 0,
  "restMeasured": false,
  "restMeasurement": 0,
  "speedMeasured": false,
  "speedMeasurement": 0,
  "speedMeasurementUnit": "miles_per_hour",
  "timeMeasured": false,
  "timeMeasurement": 0,
  "wattsMeasured": false,
  "wattsMeasurement": 0,
  "weightMeasured": false,
  "weightMeasurement": 0,
  "weightMeasurementUnit": "pounds"
}

Sample Query

Putting it all together, a sample query might look like this:

query {
  athletes(athleteEmails:["[email protected]"]) {
    name,
    sessions(startDate:"2024-11-01", endDate:"2024-11-30") {
      name,
      workouts {
        name,
        sets {
          measurements
        }
      }
    }
  }
}

The response would be a JSON hash like the following:

{
  "data": {
    "athletes": [
      {
        "name": "Devin Anderson",
        "sessions": [
          {
            "name": "Team",
            "workouts": [
              {
                "name": "Bench Press",
                "sets": [
                  {
                    "measurements": {
                      "caloriesMeasured": false,
                      "caloriesMeasurement": 0,
                      "customMeasured": false,
                      "customMeasurement": 0,
                      "distanceMeasured": false,
                      "distanceMeasurement": 0,
                      "distanceMeasurementUnit": "meters",
                      "heartRateMeasured": false,
                      "heartRateMeasurement": 0,
                      "heightMeasured": false,
                      "heightMeasurement": 0,
                      "heightMeasurementUnit": "inches",
                      "repsMeasured": true,
                      "repsMeasurement": 10,
                      "restMeasured": false,
                      "restMeasurement": 0,
                      "speedMeasured": false,
                      "speedMeasurement": 0,
                      "speedMeasurementUnit": "miles_per_hour",
                      "timeMeasured": false,
                      "timeMeasurement": 0,
                      "wattsMeasured": false,
                      "wattsMeasurement": 0,
                      "weightMeasured": true,
                      "weightMeasurement": 250,
                      "weightMeasurementUnit": "pounds"
                    }
                  }
                ]
              }
            ]
          }
        ]
      }
    ]
  }
}

⚠️

Avoid Request Timeouts

The amount of data requested can easily spiral out of control if you're not careful. To avoid request timeouts for very large amounts of data, we strongly advise that you limit the scope of each request to a subset of athletes and/or a relatively narrow date range (~30 days is probably the upper end of the recommended range depending on the number of athletes and the frequency/size of recorded sessions).