Skip to main content

Documentation Index

Fetch the complete documentation index at: https://openwearables.io/docs/llms.txt

Use this file to discover all available pages before exploring further.

Need help with your Polar integration? Pop into our Discord if you have questions or want to discover how Open Wearables can solve your problems.

Overview

Polar provides access to exercise, daily activity, sleep, and heart rate data from Polar devices through the AccessLink API. The integration uses OAuth 2.0 for authentication and pull-based syncing to fetch data.

Supported data types

Data TypeSupport
Workouts / ExercisesYes (with optional HR samples, zones, route)
Sleep (with stages)Yes
Daily activity (steps, calories, activity zones)Yes
Continuous heart rateYes
Nightly Recharge / RecoveryYes
Cardio LoadYes
Sleepwise AlertnessYes (requires Polar Sleepwise subscription)
Sleepwise Circadian BedtimeYes (requires Polar Sleepwise subscription)
Body TemperatureYes (requires Polar Elixir device)
Sleep Skin TemperatureYes (requires Polar Elixir device)
SpO2Yes (requires Polar Elixir device)
Wrist ECGYes (requires Polar Elixir device)

Data delivery

MethodDescription
Polling (pull) — ExercisesOpen Wearables fetches exercises via the AccessLink v3 API (/v3/exercises). Returns all exercises available in Polar Flow for the connected user.
Polling (pull) — 24/7 dataSleep, daily activity, continuous HR, Nightly Recharge, cardio load, and Elixir/Sleepwise metrics are fetched via range endpoints covering the last 90 days.
Webhooks (push)Polar sends a lightweight notification on each event (exercise, sleep, activity, etc.). Open Wearables acknowledges immediately and enqueues a targeted sync for the affected data type.
Webhook delivery requires a registered webhook subscription and POLAR_WEBHOOK_SIGNATURE_SECRET set in your environment. See the configuration step below.

What you need by the end

  • App credentials: Client ID + Client Secret from the Polar AccessLink admin panel
  • Redirect URI registered in your Polar application

Prerequisites

Application walkthrough

1

Create a Polar Flow account

If you don’t have one yet, create a free account at flow.polar.com.This is the same account used by Polar device owners - no separate developer account is needed.
2

Register your application at Polar AccessLink

Go to the Polar AccessLink Admin and sign in with your Polar Flow credentials.Click Create client to start the registration process. You’ll go through four tabs:1. Contractual Information
  • Fill in your organization details (name, address, country)
  • Toggle “I intend to integrate on behalf of a client or third-party organization” if applicable
  • Accept the AccessLink Limited License Agreement
2. Application Information
  • Application Name: Your app name (e.g. “Open Wearables”)
  • Business contact (email): Your contact email
  • Description: Brief description of your application
  • Application Web site: Your app’s website (optional)
  • Authorization redirect URL: Your OAuth callback URL - for local development use http://localhost:8000/api/v1/oauth/polar/callback
  • Available data types: Enable all three - Exercise data, Daily activity data, Physical information data
3. Check InformationReview the summary of your organization and application details, then click Confirm.4. CredentialsAfter confirmation, you’ll see your:
  • Client ID
  • Client Secret
The Client ID and Client Secret are shown only once. Copy and store them immediately. If you lose them, you’ll need to create new credentials from the Admin tool.
3

Configure credentials in Open Wearables

Add the following to your .env file:
#--- Polar ---#
POLAR_CLIENT_ID=your-polar-client-id
POLAR_CLIENT_SECRET=your-polar-client-secret
POLAR_REDIRECT_URI=http://localhost:8000/api/v1/oauth/polar/callback
# Optional — required only if using webhooks (set automatically on first registration)
POLAR_WEBHOOK_SIGNATURE_SECRET=
Configuration details:
VariableDescription
POLAR_CLIENT_IDClient ID from the Polar AccessLink Admin panel
POLAR_CLIENT_SECRETClient Secret from the Polar AccessLink Admin panel
POLAR_REDIRECT_URIMust match the Authorization redirect URL registered in your Polar application. For local dev: http://localhost:8000/api/v1/oauth/polar/callback
POLAR_WEBHOOK_SIGNATURE_SECRETHMAC-SHA256 signing secret returned by Polar on webhook creation. Returned once — save it immediately. Used to verify incoming webhook payloads.
The OAuth scope is hardcoded to accesslink.read_all which grants full read access to the AccessLink API. No additional scope configuration is needed.
4

Connect a user via OAuth

With credentials configured and your Open Wearables instance running, initiate the OAuth flow to connect a user’s Polar account.1. Get the authorization URL:
curl -X GET "http://localhost:8000/api/v1/oauth/polar/authorize?user_id={user_id}&redirect_uri=http://localhost:3000/users/{user_id}" \
  -H "X-Open-Wearables-API-Key: YOUR_API_KEY"
Response:
{
  "authorization_url": "https://flow.polar.com/oauth2/authorization?client_id=...&redirect_uri=...&response_type=code&scope=accesslink.read_all&state=...",
  "state": "abc123..."
}
2. Redirect the user to the authorization_url. They will log in to Polar Flow and authorize your app.3. Polar redirects back to the callback URI configured in your .env (POLAR_REDIRECT_URI). Open Wearables automatically exchanges the authorization code for access tokens and registers the user with the Polar API.4. Verify the connection was created:
curl -X GET "http://localhost:8000/api/v1/users/{user_id}/connections" \
  -H "X-Open-Wearables-API-Key: YOUR_API_KEY"
You should see a connection with "provider": "polar" and "status": "active".
The redirect_uri parameter in the authorize call is where the user is sent after the flow completes (e.g., back to your app). This is separate from POLAR_REDIRECT_URI in your .env, which is the server-side OAuth callback that Polar sends the authorization code to.
5

Sync data

An initial sync is triggered automatically after a successful OAuth connection. To manually sync or fetch data:
# Sync all data types
curl -X POST "http://localhost:8000/api/v1/providers/polar/users/{user_id}/sync?data_type=all" \
  -H "X-Open-Wearables-API-Key: YOUR_API_KEY"
Exercises are fetched from /v3/exercises which returns all exercises available in Polar Flow for the connected user (no date filter). 24/7 data (sleep, activity, HR, etc.) is fetched over a 90-day lookback window using range endpoints.
6

Verify the integration

Once data has synced, fetch it via the Open Wearables API:
# Fetch workouts
curl -X GET "http://localhost:8000/api/v1/users/{user_id}/events/workouts?start_date=2026-01-01T00:00:00Z&end_date=2026-02-01T00:00:00Z" \
  -H "X-Open-Wearables-API-Key: YOUR_API_KEY"

# Fetch sleep records
curl -X GET "http://localhost:8000/api/v1/users/{user_id}/events/sleep?start_date=2026-01-01T00:00:00Z&end_date=2026-02-01T00:00:00Z" \
  -H "X-Open-Wearables-API-Key: YOUR_API_KEY"

# Fetch daily activity
curl -X GET "http://localhost:8000/api/v1/users/{user_id}/events/daily-activity?start_date=2026-01-01T00:00:00Z&end_date=2026-02-01T00:00:00Z" \
  -H "X-Open-Wearables-API-Key: YOUR_API_KEY"
You can also fetch raw Polar exercise data with optional samples, zones, and route data:
# Fetch Polar exercises with HR samples and route
curl -X GET "http://localhost:8000/api/v1/vendor-workouts/polar/users/{user_id}/workouts?samples=true&zones=true&route=true" \
  -H "X-Open-Wearables-API-Key: YOUR_API_KEY"
If data is returned, your Polar integration is working end-to-end.

Rate Limits

Polar AccessLink API uses dynamic rate limits that scale with your registered user count:
LimitFormula
Per 15 minutes500 + (registered users x 20)
Per 24 hours5,000 + (registered users x 100)
Rate limit headers are included in every response: RateLimit-Usage, RateLimit-Limit, RateLimit-Reset.

Next Steps

API Reference

Explore the Open Wearables API endpoints.

Architecture

Understand the overall system architecture.

Support

Need Help?