Skip to content
AF
Python library

oura-ring (Python)

Python · PyPI: oura-ring · latest 1.0.1 (2026-06-22) · registry read 2026-10-03

oura-ring is a Python client for the Oura API v2 with an OAuth2 helper, OuraAuth, for the authorization-code flow. Its README notes that Oura deprecated personal access tokens in December 2025, so new integrations must use OAuth2, though OuraClient still accepts a previously issued token. Its PyPI metadata requires Python >=3.12.

What it wraps

  • The Oura API v2. The README's contents cover personal info, daily sleep, SpO2, stress, activity, readiness, resilience, cardiovascular age, VO2 max, heart rate, ring battery and configuration, sessions, tags and workouts.

    “Python client for the Oura API v2 with OAuth2 support.”

    Source: README

Named in the registry description: Oura API.

Install

pip

pip install oura-ring

From the README

uv

uv add oura-ring

From the README

Registry and repository facts

Read from PyPI and the repository by a script, not typed by hand. Where the metadata does not state something, the row says so. Dates are shown as dates, with the gap to our read, rather than as a verdict on whether the project is alive.

Latest version
1.0.1, published 2026-06-22103 days before our 2026-10-03 read
First published
2022-09-02 · 5 versions published
Licence
MITPyPI license field
Platforms
not stated in registry metadata
Requires
python >=3.12PyPI requires_python
Status classifier
Development Status :: 5 - Production/Stable
Last commit, default branch
2026-07-0788 days before our 2026-10-03 read · read by git on 2026-10-03
GitHub signals
92 stars · 2 open issues and PRs · not archived · last push to any branch 2026-07-07GitHub API, read 2026-10-03

Registry description: “Python client for the Oura API v2 with OAuth2 support.”

What the README warns about

Each item is the project’s own statement, checked on 2026-10-03, quoted where the wording matters.

  • The token change, in the README's words.

    “Personal access tokens were deprecated by Oura in December 2025 — new ones can no longer be created, though previously-issued tokens may still work. New integrations must use OAuth2.”

    Source: README

  • The OAuth2 flow it wraps: OuraAuth(client_id, client_secret), then authorize_url(redirect_uri=…, state=…), exchange_code(code, redirect_uri=…) and refresh_token(…), with the access token passed to OuraClient.

    Source: README

The API underneath

A wrapper inherits every rule of the API it calls. These pages cover that layer directly.

Other Python packages on this list

Python libraries for fitness APIs: every package side by side, and how to choose →

  • garminconnect0.3.17 · 2026-09-29Garmin Connect's web services, signed in as the user with their own credentials.
  • garth0.8.0 · 2026-03-28Garmin's SSO login and the Garmin Connect API, through the mobile auth approach the README says Garmin's change broke.
  • stravalib2.6.0 · 2026-08-27The Strava V3 REST API, through a stravalib.client.Client class, per the README.
  • oura1.3.0 · 2024-04-23The Oura API, with v2 clients under oura.v2 (OuraClientV2, OuraClientDataFrameV2) whose methods are named after the URL paths, per the README.
  • fitbit0.3.1 · 2019-05-24The legacy Fitbit Web API, using requests-oauthlib and python-dateutil according to the README's requirements.
  • withings-api2.4.0 · 2022-02-08The Withings Health API over OAuth 2.0, through WithingsAuth and WithingsApi, per the README.

Questions

Does oura-ring still work with an Oura personal access token?
Only one that was already issued. The README says Oura deprecated personal access tokens in December 2025 so new ones cannot be created, that previously issued tokens may still work, and that OuraClient accepts either an OAuth2 access token or a legacy token. New integrations must use OAuth2.
How do I get an OAuth2 token with oura-ring?
Create an application in Oura's developer portal for a client ID and secret, then follow the README: build OuraAuth, send the user to authorize_url with your redirect URI and a state value, exchange the returned code with exchange_code, and pass the access token to OuraClient. refresh_token renews it.

Registry facts read by scripts/fetch-libraries.mjs on 2026-10-03 and refreshed weekly; the latest release was published 103 days before our 2026-10-03 read. README quotes identify the project’s own statements; the selection, grouping and comparisons are AIFitnessAPI’s. For tagged releases of the main bridges, see the SDK release tracker.

← All health and fitness libraries