For the complete documentation index, see llms.txt. This page is also available as Markdown.

May Update 2026

Check out what we've been doing at Terra over the month of May 2026!

Backend 💾

Features

  • New integration: Trailforks is out

  • New integration: Rouvy webhooks are out

  • New integration: Omron webhooks are out

  • Fitbit v2 API integration is live

  • Bring-your-own-app OAuth pathway available for Strava, Oura, and WHOOP — connect your own OAuth app to Terra

  • New AI Health Context endpoint — query an LLM-grounded summary of a user's recent health data through the API

  • New Hormone scope available

  • Raw FIT files are now captured and stored from provider integrations

  • TrainingPeaks strength workouts are now included in the planned-workout response

  • Planned workouts on Apple are now supported

  • MacrosFirst now surfaces weight data

  • New webhook header X-Terra-Ordering-Timestamp exposes the emit-time of each event for ordering downstream

  • Daily Stress score (SS_DAILY_STRESS) re-enabled with a simpler training formula

  • Apple Health activity & lap average heart rate is now time-weighted for accuracy

Bug fixes

  • Fixed a bug where Garmin swim summary aggregates were not mapped to lap and activity fields

  • Fixed a bug where Garmin TRAIL_RUNNING and GRAVEL_CYCLING activity types were not mapped correctly

  • Fixed a bug where Garmin planned-workout API errors surfaced as 500s instead of 424s with normalised messages

  • Fixed a bug where Garmin daily step / distance / active-calorie totals were not derived from epoch samples

  • Fixed a bug where Garmin absolute speed bounds were not derived from threshold/percentage targets for SPEED/PACE workouts

  • Fixed a bug where Fitbit re-delivery could overwrite a better GPS track

  • Fixed a bug where Fitbit daily steps and distance were not derived from intraday samples

  • Fixed a bug where Fitbit calories / activity-level samples used the wrong anchor time

  • Fixed a bug where Fitbit v2 was emitting passively-measured SpO2 sentinel values (percentage=50)

  • Fixed a bug where Apple HealthKit body-fat values were sent as a fraction rather than a percent

  • Fixed a bug where Apple SDNN samples were not being set

  • Fixed a bug where Apple steps did not fall back to summing intraday samples

  • Fixed a bug where Apple all-zero daily records were not dropped for completed past days

  • Fixed a bug where Oura activity type mappings were incorrect

  • Fixed a bug where Zepp elevation summary fields and summary polyline were missing

  • Fixed a bug where Zepp GPS coordinates were scaled incorrectly

  • Fixed a bug where Zepp workout step count was not surfaced from the sports endpoint

  • Fixed a bug where Wahoo elevation summary fields were missing from FIT sessions

  • Fixed a bug where Huawei out-of-range pace targets caused hard errors instead of structured warnings, with pace values now clamped to the allowed range

  • Fixed a bug where COROS planned workouts required leaf intensity on repeat steps (now defaults to active)

  • Fixed a bug where Clue's current cycle was not fetched correctly

  • Fixed a bug where MyFitnessPal per-meal calories were 0 when MFP returned value=null (now correctly nil)

  • Fixed a bug where MacrosFirst food-level meals used the wrong parent meal name for the MealType mapping

  • Fixed a bug where the Apple and Fitbit responses drifted from our schema for several daily fields

  • Fixed a bug where GET /v2/daily returned future-dated daily records

  • Fixed a bug where workout / planned-workout IDs in v2 were returned as numbers (now JSON strings for precision)

  • Fixed a bug where provider 429 rate-limits were surfaced as 424s

  • Fixed several score formula transcription bugs — Activity Efficiency, SS_DAILY_STRESS_V2, SS_RESPIRATORY_V2, and Daily Strain

  • Fixed a bug where SS_RESILIENCE and SS_READINESS capped at 80 instead of running to 100

Changes

  • Webhook delivery now spools to disk and parallelises per-entry uploads for S3 destinations

  • Non-webhook destinations (GCS, SQL, Firestore, Supabase, Azure Blob, MongoDB) migrated to a streaming pipeline for lower memory and latency

  • Webhook dispatcher hardened with a per-destination safety-valve circuit breaker


SDK 📱

TerraiOS1.7.3

  • Handle request failures correctly so an individual sample-type failure no longer breaks a whole sync

  • Background delivery now bounds observer-fire fan-out and adds a per-push cap (1.7.2)

  • Snowflake IDs are now decoded as String to avoid JavaScript number-precision loss

  • HealthStore now averages across all daily buckets, and predicateOptions was renamed to options

  • Sleep wrist-temperature query predicate relaxed so more devices report a value

  • Server-driven initial backfill on initConnection for Apple Health


Frontend 📺

Landing Page (tryterra.co)

  • New self-serve DPA page and ToS reference for enterprise customers (https://tryterra.co/dpa)

  • Research articles now ship with a dedicated Methodology section and an auto-generated FAQ powered by Claude

  • Podcast page redesigned around per-episode article-style layouts, powered by the official Spotify Web API

  • New planned workout pricing on the pricing page

  • "Become an Integration" CTA added across homepage and footer

  • Toast notification banner connected to our Instatus status page so customers see incidents in real time

  • DPA + ToS last-updated date refreshed to May 1st, 2026

Dashboard (dashboard.tryterra.co)

  • Scores V6 redesigned page is live — new modules for Daily Strain, the Activity quad (Strain / RCRS / TRIMP / Efficiency), Immunity, Resilience, Readiness, Sleep V2, Respiratory V2, and Daily Stress V2

  • New Score Sandbox with a Sleep score playground — tweak inputs and see how scores change live

  • Provider health page is out — see provider status / outages at a glance

  • New Hormone scope available in the scopes UI

  • Synthetic data fetch — pull realistic synthetic samples without needing a real connection

  • Click-wrap updated to include DPA + SCC acceptance, with version-based terms tracking

  • Immunity now renders on its native 0–5 scale, and unbounded scores (RCRS, TRIMP) render as scale-aware histograms


Blood Biomarkers 🩸

  • Backfilled 1,506 LOINC codes for the biomarker reference set

  • New public biomarkers.json generator so customers can sync the reference set

  • Lab-reports model default upgraded to claude-opus-4-7 for higher-quality extraction

Last updated

Was this helpful?