Health Scores
Learn how to embed adaptive health scores in your app
Overview
The Terra Health Scores product provides 14 proprietary, science-backed scores designed to give your users a deeper understanding of their health, recovery, and training load. Scores are organized by which payload they enrich:
Daily summary scores: Immunity Index, Strain Index, Resilience, Respiratory Health, Training Stress (V1 & V2)
Sleep scores: Sleep Score (V1 & V2), Readiness, Respiratory Health V2
Activity scores: Activity Strain, Activity Efficiency, Activity RCRS, Activity TRIMP
Each score is powered by Terraβs proprietary models and translates complex physiological data into a single, interpretable health signal.
The scores are:
Device agnostic: They work across all supported wearable sources as long as the underlying metrics (HRV, sleep stages, respiratory rate, heart rate, etc.) are collected.
Turnkey: No additional backend setup is needed.
Continuously generated: Once a user is connected, scores appear automatically in the
daily,sleep, oractivitypayloads.
How It Works
As soon as your users connect their wearables and data begins syncing, Terra will enrich your payloads with the following scores under the data_enrichment field.
Daily payload
π‘οΈ Immunity Index
immune_index
With every new daily payload
HRV, respiratory rate, body temperature
πͺπ» Strain Index
strain_index
With every new daily payload
HRV (7-day and 28-day baselines), average heart rate
π± Resilience
resilience_score
With every new daily payload
Body temperature, respiratory rate, RHR, HRV, oxygen saturation (with 30-day baselines)
π« Respiratory Health
respiratory_score
With every new daily payload
Oxygen saturation, respiratory rate (30-day baseline)
ποΈββοΈ Training Stress
total_stress_score
With every new daily payload
Sleep score, step count (7-day), activity duration in light / moderate / vigorous intensity zones
ποΈββοΈ Training Stress V2
total_stress_score_v2
With every new daily payload
Sleep score V2, step count (7-day), heart rate zones (7-day)
Sleep payload
π€ Sleep Score
sleep_score
With every new sleep payload
Sleep stages (REM, deep, light, total), RHR, HRV, body temperature, SpOβ
π€ Sleep Score V2
sleep_score_v2
With every new sleep payload
Sleep stages, average HR, body temperature, HRV (14-day baseline)
π Readiness
readiness_score
With every new sleep payload
Sleep stages, RHR (30-day), HRV (30-day), body temperature, respiratory rate, SpOβ
π« Respiratory Health V2
respiratory_score_v2
With every new sleep payload
SpOβ, respiratory rate (14-day baseline)
Activity payload
π₯ Activity Strain
strain_score
With every new activity payload
Average heart rate, activity duration, 14-day max HR
β‘ Activity Efficiency
efficiency_score
With every new activity payload
Average speed, average heart rate, 14-day max HR
β€οΈ Activity RCRS
rcrs_score
With every new activity payload
Average heart rate, activity duration, 30-day max HR
π Activity TRIMP
trimp_score
With every new activity payload
Average heart rate, activity duration, 30-day max HR
Note: Terra scores appear under the
data_enrichmentfield inside each relevant payload (daily, sleep, or activity).
RHR, HRV, body temperature, and respiratory rate metrics are provided by most wearables if worn overnight during sleep.
How to Enable Health Scores
Some scores must be toggled on manually in the dashboard:
Log into your Terra Dashboard
Go to the Health Scores tab
Toggle the scores you want to receive to βEnabledβ
Save settings
Enabled scores will then appear in the relevant payloads for users with eligible data.
How to Receive Health Scores
You do not need to implement separate API calls, database logic, or webhook triggers to receive health scores. To receive Terraβs scores, the following conditions must be met:
Active connection: Your users have authorized their wearable (via Terra API). See Connect a User for specifics.
Wearables sync necessary metrics: The required metrics (e.g., HRV, respiratory rate, sleep stages) are available β see Score Eligibility Criteria below.
The user wears the device (overnight): Metrics like HRV, resting HR, and sleep stages depend on the user wearing the wearable during sleep.
Baseline values are available: The user has to wear their device for at least 4 days initially for our proprietary models to calibrate and generate baseline values. Some scores use longer baselines (14-day or 30-day) β those will continue to refine over time.
Sufficient data is available: After a user's baseline is established, the user has to wear their device at least once in the last 2 weeks.
If users are disconnected, you will not receive new data or scores.
Score Eligibility Criteria
Terraβs health scores are automatically calculated only if sufficient data is available. The following input signals are required to ensure each score is accurate and meaningful.
If any of the must-have metrics are missing for a user on a given day, that score will not be generated or may return as null.
Requirements Per Score
π€ Sleep Score / π€ Sleep Score V2
Any sleep metric
REM, deep sleep, light sleep, total duration
Optional
HRV, resting heart rate, SpOβ, body temperature enhance score precision
At minimum, a valid sleep session with at least one stage or duration is required.
π
Readiness
Sleep stages and HRV
Required REM, deep and total sleep, plus daily HRV (RMSSD or SDNN) with 30-day baseline
Optional
RHR, body temperature, SpOβ, respiratory rate refine the score
Readiness requires at least ~3 hours of recorded sleep; sessions shorter than that produce a 0 sleep contributor.
π« Respiratory Health / π« Respiratory Health V2
SpOβ and respiratory rate
Blood oxygen saturation and respiratory rate measured in breaths per minute
Optional
Training activity to adjust score sensitivity post exercise
If SpOβ or respiratory rate is missing, the respiratory health score will be null. V2 is computed on the sleep payload; the legacy version still appears on the daily payload.
ποΈ Training Stress / ποΈ Training Stress V2
HRV and sleep
Required daily HRV (e.g., RMSSD or SDNN) and a valid sleep score
Optional
Steps (7-day history) refine training calibration. Activity duration in light, moderate, and vigorous intensity zones (when provided by the wearable in the daily payload) sharpens the training-load signal.
If sleep data or HRV is missing, the training stress score will be null. If intensity-zone duration is not provided by the wearable, the training contributor falls back to zero rather than estimating from heart-rate samples.
π‘οΈ Immunity Index
HRV and respiratory rate
Required daily HRV (e.g., RMSSD or SDNN) and respiratory rate, with a 30-day baseline
Optional
Body temperature enhances score precision
If HRV or respiratory rate data is missing, the immunity index will be null.
πͺπ» Strain Index
HRV and HR
Required daily HRV (e.g., RMSSD or SDNN) and average heart rate, with 7-day and 28-day baselines
If HRV or HR data is missing, the strain index will be null.
π± Resilience
HRV, RHR and resp rate
Required daily HRV, resting heart rate, and respiratory rate, with 30-day baselines
Optional
Body temperature and SpOβ refine the score
Resilience is generated once enough history exists to compute 30-day baselines for the must-have metrics.
π₯ Activity Strain / β‘ Activity Efficiency
HR during activity
Activity must include average heart rate; HR range (max β min) must exceed 30 bpm
For Efficiency
Activity must additionally include average speed
Baseline
A 14-day rolling window of max HR is used; new users will see scores stabilize after 2 weeks
Activities without valid heart-rate data (e.g., flat-line HR or HR range below 30 bpm) will not produce a score.
β€οΈ Activity RCRS / π Activity TRIMP
HR during activity
Average heart rate and activity duration are required; HR range (max β min) must exceed 30 bpm
Baseline
A 30-day rolling window of max HR is used
RCRS and TRIMP are physiological load metrics β they are not normalized to a 0β100 range, so values scale with workout intensity and duration.
Understanding Health Score Outputs
Each health score is generated using multiple physiological signals (e.g., HRV, sleep stages, respiration), which are transformed and combined using Terraβs proprietary models.
π’ Score Ranges
Sleep Score
0β100
Higher = better sleep quality
Sleep Score V2
0β100
Higher = better sleep quality (revised algorithm)
Readiness
0β100
Higher = better readiness for the day
Respiratory Health
0β100
Higher = better respiratory health
Respiratory Health V2
0β100
Higher = better respiratory health (revised algorithm)
Training Stress
0β100
Higher = higher signs of stress
Training Stress V2
0β100
Higher = higher signs of stress (revised algorithm)
Immunity Index
0β5
Higher = weakened immunity
Strain Index
β50 to 50
Positive = recovery, negative = strain (see traffic light)
Resilience
0β100
Higher = greater resilience and recovery capacity
Activity Strain
0β100
Higher = more strain during the workout
Activity Efficiency
0β100
Higher = better cardiovascular efficiency for the workout
Activity RCRS
0+ (unbounded)
Relative cardiovascular response β scales with intensity Γ duration
Activity TRIMP
0+ (unbounded)
Training impulse β scales with intensity Γ duration
How to Read Contributor Values
Each score has contributors, the underlying physiological metrics that influenced the score. These do not reflect raw sensor values (like BPM or Β°C). Instead, each contributor is:
Normalized and scaled based on its contribution to the final score
Weighted according to the model's proprietary algorithm, and adaptive to each individualβs baseline
Transformed for interpretability and sensitivity
This allows a uniform scoring system across diverse devices and users.
Sleep Score Example
Explanation:
sleep_score: Final normalized score (0β100)sleep_contributors: Each value is a transformed signal indicating how much that metric supports healthy sleep. 100 = strong positive influence.
Note: If a contributor is null, the data was missing or not provided by the device.
Readiness Example
Explanation:
readiness_score: Final normalized score (0β100). Higher = better recovery for the day.readiness_contributors: Six normalized inputs blended into the final score β sleep quality, HRV, resting HR, body temperature, respiratory rate, and SpOβ.
Immunity Index Example
Explanation:
immune_index: Value from 0 to 50= No sign of immune system weakening5= Strong signal of weakened immunity
Contributor values like
hrv: 200are not raw HRV values, but transformed indicators used by Terraβs model.
A higher immune index means there are stronger biomarkers of physiological strain that may reflect a stressed or weakened immune system.
Strain Index Example
Explanation:
strain_index: Value from β50 to 50β₯ 0= Recovery and parasympathetic dominance (GREEN)β25to< 0= Mild strain (AMBER)< β25= Strong physiological strain (RED)
momentum: 7-day trend of HRV vs HRz_slow: Deviation from 28-day baselinezcv: Stability or instability of HRV variabilityacute: Short-term (24h) HRV change
The
strain_traffic_lighttag (βGREENβ, βAMBERβ, βREDβ) provides an easy-to-interpret summary derived fromstrain_index.
Provider vs Terra Scores
Several wearables (e.g., Oura, Fitbit) offer their own native scores. To avoid confusion:
Terra Scores live under
data_enrichmentin the payload.Provider Scores (like "Stress" or "Sleep" scores) appear under the
scoressection but are not generated by Terra.
data_enrichment
Terra
scores
Native device/app
Last updated
Was this helpful?