Skip to main content

Overview

Provider webhook subscriptions tell a wearable provider (Polar, Oura, Strava) where to send event notifications. When an active subscription is in place, the provider pushes a lightweight notification to your Open Wearables instance whenever new data is available. Open Wearables then fetches, normalizes, and stores the data — and can forward it onward via Outgoing Webhooks.
This page covers provider → Open Wearables subscriptions (inbound). For Open Wearables → your app event delivery, see the Outgoing Webhooks guide.
All endpoints require a developer Bearer token:
Base path: /api/v1/providers/{provider}/webhooks/subscriptions Supported {provider} values: polar, oura, strava. Withings subscriptions are managed per connected user.

Provider differences

Polar only: when you register or update a webhook, Polar immediately sends a PING to the configured URL. The request must respond 200 OK before Polar accepts the subscription. Use a publicly reachable URL (e.g. set up via ngrok).

Endpoints

List subscriptions

Returns all active subscriptions for a provider.
Response:

Register subscriptions

Creates a new subscription (or updates an existing one if the URL changed). Pass callback_url as a query parameter.
Provider-specific behaviour:
Polar: the signature_secret_key is returned by Polar exactly once, on creation. Open Wearables saves it automatically to the provider_settings table (webhook_secret column). If you need to rotate it, delete and recreate the webhook.

Get a subscription

Fetch a single subscription by ID.
Response:
Returns { "subscription": null } when the subscription is not found.
Get by ID is currently implemented for Oura only. Polar and Strava return 501 Not Implemented — use list subscriptions instead.

Update a subscription

Change the callback URL of an existing subscription.
Response:
On error:
Polar: updating the URL triggers a new PING from Polar to the new address. If the URL does not respond 200 OK, the update is rejected by Polar and the endpoint returns status: "error".
Possible status values: updated, patched, deleted, created, skipped, error.

Delete a subscription

Remove a webhook subscription from the provider.
Response:

Renew subscriptions (Oura only)

Oura subscriptions have an expiration_time. Call this endpoint to extend all active subscriptions before they expire.
Response:

Inbound event endpoints

These endpoints receive the actual event notifications from providers. They are not management operations — you do not call them directly. The callback URL you register with a provider must point to POST /api/v1/providers/{provider}/webhooks. For local development, use ngrok to expose that endpoint publicly. Withings recommends adding a random shared secret to the exact callback URL. Set WITHINGS_WEBHOOK_TOKEN to a value generated with openssl rand -hex 32; Open Wearables registers ?token=<secret> and validates it on notification POSTs and reachability HEAD probes. See the Withings notification security guidance. Withings also recommends allowing its published notification IP ranges at the network edge. Those ranges are distributed through the DNS records documented in the same security guidance and should be monitored for changes by the deployment operator.

Response schema reference

Subscription objects

Each provider returns a different subscription shape: Polar Oura Strava

Operation result

Returned by delete and update endpoints.