Oura Ring API integration
LiveYour 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.createdConnect 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.