> For the complete documentation index, see [llms.txt](https://docs.tryterra.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tryterra.co/help-center/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/oura-app-vs-terra-discrepancy.md).

# Why do Oura payloads differ from the Oura app?

Discrepancies between the Oura app and Terra usually come from sync timing, field definitions or Oura's two views of sleep stages

Discrepancies between the Oura app and Terra usually have one of three causes:

{% stepper %}
{% step %}
**Sync timing.** The Oura app can show data from the ring before it has synced to Oura's cloud, and Terra pulls from the cloud API, so a not-yet-synced ring creates a temporary gap. The user can verify cloud sync on Oura's web dashboard.
{% endstep %}

{% step %}
**Field definitions.** Terra's `activity_seconds` is total non-sedentary time across the day, whereas Oura's Activity Time refers only to tracked workout sessions. They measure different things rather than being wrong.
{% endstep %}

{% step %}
**Two views of sleep stages.** Oura publishes a stage for each 5-minute block of the night, which Terra sends as `hypnogram_samples`, and separately its own stage durations in seconds, which Terra sends in `sleep_durations_data`. Terra passes both through rather than calculating one from the other. A block holds a single stage, so a brief awakening either fills the whole block or disappears from it, so the block totals do not always add up to the durations. For stage totals, use `sleep_durations_data`. Stage values follow the SleepLevel enum in the [data models](https://docs.tryterra.co/reference/health-and-fitness-api/data-models): 1 awake, 4 light, 5 deep, 6 REM.
{% endstep %}
{% endstepper %}
