# WHOOP

Connecting WHOOP means recovery, sleep, strain and workouts arrive on their own and sit in the same rows as everything you type. From that point on the correlation engine can test your behaviours against physiological outcomes, which is where most of the interesting findings come from.

## Connecting

Authorize once from settings. Standard OAuth — you approve access on WHOOP's side and are returned to the app.

If the connection lapses, or WHOOP widens the scopes it needs, reauthorize from the same place. The status of the connection is visible in settings, including when it last synced.

Disconnecting stops all syncing. Data already pulled stays in your ledger; it is your record, and removing it would put holes in analysis that has nothing to do with WHOOP.

## What arrives

Around forty fields. The [metric reference](/docs/metrics#whoop) lists all of them with types and units. The ones most people show as columns:

| Metric | Notes |
| --- | --- |
| `whoopRecovery` | 0–100%. Green 67+, yellow 34–66, red below 34 |
| `whoopHrv` | RMSSD in milliseconds |
| `whoopSleep` | Sleep performance — 100% means sleep need was met |
| `whoopStrain` | 0–21. Light 0–9, moderate 10–13, hard 14–17, all-out 18+ |
| `whoopRhr` | Resting heart rate during sleep |
| `_sleepHours` | Derived: deep plus REM plus light |
| `whoopSleepConsistency` | How closely bed and wake times matched the recent pattern |
| `whoopSkinTemp` | Deviation above baseline often precedes illness by a day or two |

Also available: sleep stages and efficiency, disturbances and awake time, sleep need and debt, bedtime and wake time, naps, SpO2 and respiratory rate, calories, average and max heart rate, per-session workout detail with heart-rate zone splits, and time in each of the five zones.

You choose which appear as columns. Showing all forty makes the table unusable; the rest remain available to the coach and to analysis whether or not they are displayed.

## Sync schedule

Three scheduled pulls a day — 03:30, 13:00 and 18:00 UTC — timezone-aware, so a "day" means your day rather than a UTC day.

WHOOP also pushes webhooks when new data is scored. Those are signature-verified and trigger a targeted re-sync, so a recovery score usually appears within minutes of WHOOP computing it rather than waiting for the next scheduled pull.

You can also sync manually from settings.

## Quality gating

Two WHOOP signals are caveats rather than measurements, and the platform reads them as such.

**Calibration.** While WHOOP is still establishing your baseline, the recovery score is provisional. Recovery from those days is excluded from analysis. HRV, resting heart rate and skin temperature are direct measurements and stay trustworthy throughout.

**Sleep gaps.** If the strap recorded nothing for a meaningful part of the night — taken off, or a sensor dropout — every sleep-stage total is understated by that much. Those stage values are excluded from analysis.

In both cases the raw numbers stay visible in the ledger exactly as WHOOP reported them. Only analysis treats them as missing. The alternative — correlating a partial record as though it were a short night — manufactures relationships that are not real.

## What the coach does with it

`get_recovery_context` returns recovery with trends and training recommendations. `analyze_strain_balance` looks at strain against recovery over time and flags overreaching. Both are available in the app and over [MCP](/docs/mcp-tools).

More usefully, WHOOP metrics enter the general correlation graph, so questions like "what actually drives my recovery" are answered against your habits, nutrition and bloodwork rather than WHOOP data alone.

## Related

- [Metric reference](/docs/metrics#whoop) — every WHOOP field
- [Analytics](/docs/analytics) — how the correlation engine uses it
- [Concepts](/docs/concepts#data-quality-gating) — quality gating in detail
