OURA_API
Interact with v2 of the Oura API using Personal Access Tokens, OAuth2, or the
Sandbox environment.
Available as:
- ESM module: JSR
- CommonJS module: NPM
⚡️ Quickstart
Installation
deno add @pinta365/oura-api
bunx jsr add @pinta365/oura-api
npx jsr add @pinta365/oura-api
npm install oura_api --save
Basic Usage (ESM)
import { Oura } from "@pinta365/oura-api";
const accessToken = "YOUR_PERSONAL_ACCESS_TOKEN";
const oura = new Oura(accessToken);
const personalInfo = await oura.getPersonalInfo();
console.log(personalInfo);
Basic Usage (CommonJS)
const { Oura } = require("oura_api");
See the examples
folder for more detailed implementations.
🧪 Sandbox Environment (Testing)
The Oura API's sandbox environment (Docs) is perfect for
development. It provides sample data so you don't need a real Oura account to test your application.
const ouraSandboxClient = new Oura({ useSandbox: true });
🔑 OAuth2 Support
Our library simplifies OAuth2 authentication with these functions:
-
generateAuthUrl(scopes: string[], state?: string): string
- Generates the authorization URL for the user.
-
async exchangeCodeForToken(code: string): Promise<OAuth2TokenResponse>
- Exchanges the received authorization code for access and refresh tokens.
-
async refreshAccessToken(suppliedRefreshToken: string): Promise<OAuth2TokenResponse>
- Refreshes an expired access token.
-
async revokeAccessToken(accessToken: string): Promise<boolean>
- Revokes the specified access token.
Example Usage (Simplified) See the examples
folder for a basic implementation using Hono.
import { OuraOAuth } from "@pinta365/oura-api";
const oura = new OuraOAuth({
clientId: "YOUR_CLIENT_ID",
clientSecret: "YOUR_CLIENT_SECRET",
redirectUri: "http://localhost:8000/callback",
});
const authUrl = oura.generateAuthUrl(["personal"]);
app.get("/callback", async (c) => {
const code = c.req.query("code");
const tokens = await oura.exchangeCodeForToken(code);
});
📑 Documentation
Included data scopes for v2 of the API.
Endpoint/Scope | Status |
---|
Oura Base docs | |
Daily Activity | Implemented |
Daily Cardiovascular Age | Implemented |
Daily Readiness | Implemented |
Daily Resilience | Implemented |
Daily Sleep | Implemented |
Daily Spo2 | Implemented |
Daily Stress | Implemented |
Enhanced Tag | Implemented |
Heart Rate | Implemented |
Personal Info | Implemented |
Rest Mode Period | Implemented |
Ring Configuration | Implemented |
Session | Implemented |
Sleep | Implemented |
Sleep Time | Implemented |
Tag | DEPRECATED |
Vo2 Max | Implemented |
Workout | Implemented |
Webhook Subscription docs | |
List subscription | Implemented |
Create subscription | Implemented |
Update subscription | Implemented |
Delete subscription | Implemented |
Renew subscription | Implemented |
Additional info concerning the webhook API
Webhooks enable near real-time Oura data updates and are recommended for getting the latest information. The
subscription workflow is implemented in this library – see the
Webhook docs for details.
⚠️ I have not been able to fully verify this yet but the subscription workflow has been implemented.
🐞 Issues
Please report any issues or questions on the GitHub repository.
📄 License
MIT License - see the LICENSE file.