Provider guide
Polar: register your app (AccessLink v3)
| Access | Self-serve at admin.polaraccesslink.com [OFF] |
| Cost | Free |
| Account | A Polar Flow account (personal is fine; use the company email so the client is not tied to a private address) |
| Managed app | Allowed by the catalog |
| Latido slug | polar |
| Time | ~10 minutes |
| Writes | None: AccessLink is read-only [OFF] |
Steps
Create or sign in to a Polar Flow account at https://flow.polar.com.
Go to https://admin.polaraccesslink.com and sign in with that account [OFF].
Create a new client [MEM: field names approximate]:
- Application name: shown to members on consent.
- Website / contact email: your company's.
- Redirect URL / authorization callback:
https://api.getlatido.com/connect/callback/polar. - Accept the AccessLink terms.
Copy the Client ID and Client Secret.
In Latido, Providers → Polar → Custom app: paste both and save, leaving the webhook secret empty (Polar issues it in the next step). Copy the webhook URL the dashboard now shows,
https://api.getlatido.com/providers/polar/webhook/{providerAppId}.Create the webhook. There is one per client and it is created through the API, not the admin site [OFF]. Polar checks the URL first: it sends an unsigned
{"event":"PING"}and only creates the webhook if it gets a 200.bashcurl -u "$POLAR_CLIENT_ID:$POLAR_CLIENT_SECRET" \ -H "Content-Type: application/json" \ -X POST https://www.polaraccesslink.com/v3/webhooks \ -d '{"events":["EXERCISE","SLEEP","CONTINUOUS_HEART_RATE","ACTIVITY_SUMMARY"], "url":"<webhook URL from the dashboard>"}'If the dashboard offers a "Register webhook" action, use that instead.
The response carries
signature_secret_key. It is shown once. Paste it into Latido aswebhookSecretand save again. Until then Latido answers Polar's PING but rejects every notification. If you lose it, delete the webhook (DELETE /v3/webhooks/{id}) and create it again.
Scopes
One scope, accesslink.read_all, requested in the authorize URL [OFF].
Nothing to tick.
Going to production
No review step. Rate limits scale with users: 500 + 20 × users per 15 min, 5,000 + 100 × users per 24 h [OFF].
Gotchas
- After the token exchange the member must be registered with
POST /v3/users, or data calls fail with 403/404. Latido does this; it is why a connection can fail right after consent if the client is misconfigured. - Tokens last about a year and there is no refresh token: when one expires, the member reconnects [OFF].
- Exercises are only listed for the last 30 days, so a backfill cannot go further back [OFF].
- A webhook that fails for 7 days is deactivated automatically [OFF];
reactivate with
POST /v3/webhooks/activate. - There is no documented revoke callback; a revoked member shows up as 401/403 (UNVERIFIED).
Sources
- https://www.polar.com/accesslink-api/
- Open Wearables
backend/app/services/providers/polar/