Normalization/Data Output

  • Add measurement_time to fitbit body normalizer
  • Add additional swimming-related info fields to lap_samples in activity data model
  • Start normalizing swimming activities for Garmin payloads using FIT files instead of Garmin's JSON API (restricted to for only swimming related activities). This is because Garmin doesn't provide swimming lap information in their JSON API
  • Add VO2 samples & info to Apple Health returned data
  • Small bugfixes for Fatsecret nutrition & body data
  • Add handling to account for changes in data sources for Google Fit integration

Data Generators

  • Add Oura body data generator


  • Add handling for Fitbit Body webhooks


Revamp Large request data structure

This revamps large requests to instead be chunked based on the total data available, instead of being sent to the webhook week-by-week regardless of whether there is data or not. A new type of webhook is now sent, titled large_request_sending, which includes the total number of payloads about to be sent. See here for more info on this new hook


  • Add secondary fallback for Zwift token refreshing, to handle tokens being revoked


  • Add internal testing to verify authentication & data fetching for all integrations based on closed-source APIs
  • Add testing infrastructure to Beta test individual features/pull requests on a separate server - contact Terra Team for access to these