Oura Ring API integration

Live

Your end users can connect this provider today.

The Oura Ring API (v2) is one of the cleaner wearable APIs to work with — the documentation is accurate and the daily-summary endpoints are stable. The complexity is not in reading it, it is in keeping it read: Oura backfills and revises data after the fact, so a sleep record you fetched this morning can legitimately change by this evening.

WearLink handles that revision cycle for you. We subscribe to Oura webhooks, refetch the affected window, re-normalise, and emit a webhook to your endpoint with the corrected record. Your application never has to reason about whether an Oura document is final.

Oura data lands in the same normalised schema as WHOOP, Garmin and Fitbit. A sleep record from an Oura Ring and a sleep record from a WHOOP band are the same object shape with the same field names and the same units, so your scoring and charting code is written once.

How the Oura integration works

Authentication
OAuth 2.0 authorisation code, refresh-token rotation
Sync model
Pull + push. Oura webhooks are notify-only — they tell you data changed, they do not carry the data.
API base
https://api.ouraring.com
Integration type
Cloud OAuth

Oura data available through WearLink

Everything below arrives in the shared normalised schema. The same field names and units apply whether the record came from Oura or from any other provider, so your scoring, charting and storage code is written once.

  • Sleep stages & sleep score
  • Readiness score
  • HRV (rMSSD)
  • Resting heart rate
  • SpO2
  • Body temperature deviation
  • Daily activity
  • Workouts

Webhook events you can subscribe to

sleep.createdrecovery_score.createdseries.heart_rate_variability.createdworkout.created

Connect a Oura user

Two calls: create a connect session for your end user, then read their normalised data. You never handle Oura OAuth credentials, token refresh or webhook registration.

# 1. Create a connect session for your end-user
curl -X POST https://wearlink.io/api/v1/connections/session \
  -H "Authorization: Bearer $WEARLINK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"user_id": "'"$USER_ID"'", "provider": "oura"}'

# → { "connect_url": "https://wearlink.io/widget/connect?token=..." }
# Redirect the user there; they authorise oura and land back on your redirect_uri.

# 2. Pull normalised data whenever you want
curl -H "Authorization: Bearer $WEARLINK_API_KEY" \
  "https://wearlink.io/api/v1/users/$USER_ID/summaries?provider=oura&days=7"

What makes the Oura API hard to integrate directly

These are the things that turn an estimated one-week integration into a one-month one. They are worth knowing whether you use WearLink or build it yourself.

Webhooks are notifications, not payloads

Oura sends you an event_type and a user_id — nothing else. You still have to call the REST API to get the actual document. Teams routinely build against the webhook body, find it empty, and rewrite. WearLink does the refetch and hands you a complete record.

Documents get revised after you fetch them

Oura recalculates sleep and readiness as the ring syncs more data. If you cache the first read and never look again, your numbers silently diverge from what the user sees in the Oura app.

Personal access tokens are not OAuth

Oura's PAT is fine for a personal script and useless for a product — it authenticates one account. Anything multi-user needs the OAuth flow and an approved application.

Oura API — frequently asked questions

Is the Oura API free to use?
Oura does not charge for API access, but you must register an application and be approved for OAuth before you can connect users other than yourself. Approval timelines vary.
Can I get Oura sleep stages through WearLink?
Yes. Oura sleep records are normalised into the standard WearLink sleep object with deep, REM, light and awake durations, plus sleep efficiency and latency, in the same shape as every other provider.
Does Oura support real-time data?
Not truly real-time. Oura data appears after the ring syncs to the phone, which is typically on wake and then periodically through the day. WearLink emits your webhook as soon as we see and fetch the new document.

Other integrations

Start with Oura — free for up to 3 users

No credit card. Create an account, add your provider credentials once, and your users connect through a hosted widget or our mobile SDK.