Concept2 Logbook: 5/8 documented
The Concept2 Logbook guide lists every page read. Share: card (PNG) · link to this row
| Check | State | What the vendor’s page says |
|---|
| Self-serve start | ✓ Documented | You set up and manage your own client on the API Keys page. To use it, you’ll need to set up an API key on the "API Keys" page. There, you can set up and manage your own client and get the client information needed to authenticate users using OAuth.
Apps that write data develop on log-dev and need Concept2's approval for the live API. If you are writing data to the Logbook, before using the live API, you must first develop against the development server and database on https://log-dev.concept2.com . When ready, please contact Concept2 for approval for the live API.
|
|---|
| Sandbox or test mode | ✓ Documented | A development server and database at log-dev.concept2.com. Applications requesting write permissions should be set up on log-dev.concept2.com .
|
|---|
| Public pricing | n.d. Not documented in the pages read | The developer pages read state no price. |
|---|
| Published rate limits | ✓ Documented | Concept2 says the API is not currently rate limited, that this may change, and that abuse will bring rate limits or removal of access. The API is not currently rate limited. This may change in the future. Abuse of the API will result in either rate limits or removal of access.
|
|---|
| Signed webhooks | n.d. Not documented in the pages read | Concept2 has a webhook for results added, updated or deleted; the pages read describe no signature. Through your self-service developer portal, you can register and manage a webhook that will fire when a relevant result is added, updated, or deleted.
|
|---|
| PKCE | n.d. Not documented in the pages read | Not mentioned on the Logbook API pages read. |
|---|
| Refresh tokens | ✓ Documented | Every application gets the authorization-code and refresh grants. All applications have access to the Authorization Code and Refresh grant types.
|
|---|
| Disconnect or deletion call | ✓ Documented | DELETE on a result deletes that workout. DELETE api/users/me/results/123 will delete a specific workout
|
|---|
README badge:

[](https://aifitnessapi.com/openness-index#openness-concept2)
Badge text: Concept2 Logbook openness: 5/8 documented
COROS: 3/8 documented
The COROS guide lists every page read. Share: card (PNG) · link to this row
| Check | State | What the vendor’s page says |
|---|
| Self-serve start | ✗ The docs say otherwise | Partner API access is by application: a form and an email to COROS. To apply, submit your platform details using the form below and email
COROS lists a registered company among the requirements. Registered company with authorized technical representative
|
|---|
| Sandbox or test mode | n.d. Not documented in the pages read | The help-center articles read name no sandbox or test environment. |
|---|
| Public pricing | n.d. Not documented in the pages read | The help-center articles read state no price. |
|---|
| Published rate limits | ✓ Documented | 1,000 per minute. Rate limit: 1,000 calls/minute
|
|---|
| Signed webhooks | n.d. Not documented in the pages read | COROS lists webhook push in its Partner API but the articles read show no payload or signature. |
|---|
| PKCE | n.d. Not documented in the pages read | Not mentioned in the help-center articles read. |
|---|
| Refresh tokens | ✓ Documented | The Partner API's OAuth 2.0 list includes refresh. OAuth 2.0 (authorize, access token, refresh, deauthorize, bind state)
|
|---|
| Disconnect or deletion call | ✓ Documented | The Partner API lists a deauthorize call. OAuth 2.0 (authorize, access token, refresh, deauthorize, bind state)
|
|---|
README badge:

[](https://aifitnessapi.com/openness-index#openness-coros)
Badge text: COROS openness: 3/8 documented
Dexcom: 4/8 documented
The Dexcom guide lists every page read. Share: card (PNG) · link to this row
| Check | State | What the vendor’s page says |
|---|
| Self-serve start | ✓ Documented | Registration is free and gives you app credentials. Registration is simple and free, however, and provides access to app credentials and Support Requests .
Limited Access covers up to 5 users for testing with real data; more needs Dexcom's review. Limited access allows you to authenticate up to 5 users for testing with real data.
|
|---|
| Sandbox or test mode | ✓ Documented | A sandbox environment at sandbox-api.dexcom.com with sandbox users. To target the sandbox environment, use https://sandbox-api.dexcom.com as the base URL for requests.
|
|---|
| Public pricing | n.d. Not documented in the pages read | Registration is free; the pages read state no price for full access, which follows a technical and commercial review. Once application is complete, Dexcom will setup a technical and commercial review of your app.
|
|---|
| Published rate limits | ✓ Documented | 60,000 per hour. Request frequency is limited to 60,000 calls per app per hour. If the limit is exceeded, an HTTP 429 response is returned.
|
|---|
| Signed webhooks | n.d. Not documented in the pages read | Dexcom's webhook documentation was not among the pages read. |
|---|
| PKCE | n.d. Not documented in the pages read | Not mentioned. Dexcom also requires tokens and the client secret to live on your server, not on a phone. |
|---|
| Refresh tokens | ✓ Documented | Each refresh token works once and is replaced by a new one; each lasts at most a year. A 400 on refresh means it is no longer valid: send the user through login again. Each refresh_token can be used only once.
|
|---|
| Disconnect or deletion call | n.d. Not documented in the pages read | Users can revoke access on Dexcom.com; the pages read name no API call for it. Users can revoke their authorization at any time at Dexcom.com by signing in to their account and changing their authorizations in Permissions.
|
|---|
README badge:

[](https://aifitnessapi.com/openness-index#openness-dexcom)
Badge text: Dexcom openness: 4/8 documented
Garmin: 1/8 documented
The Garmin guide lists every page read. Share: card (PNG) · link to this row
| Check | State | What the vendor’s page says |
|---|
| Self-serve start | ✗ The docs say otherwise | Access starts with a request Garmin approves. After you request access to the Garmin Connect Developer Program and your request has been approved, you will be granted access to the Garmin Developer Portal and can get started on your integration right away.
|
|---|
| Sandbox or test mode | ✓ Documented | An evaluation environment for testing, after approval. After approval, you will have access to an evaluation environment to test the Garmin Connect Health API.
|
|---|
| Public pricing | n.d. Not documented in the pages read | Enterprise terms are tailored; the current program pages read state no Starter price. Designed for companies operating at scale requiring capabilities beyond Starter Access. Available options and commercial terms are tailored based on business and technical requirements.
|
|---|
| Published rate limits | n.d. Not documented in the pages read | Garmin's public program pages publish no request limits; the overview gives Starter a "Limited" user capacity without a number. Push only Historical Data Not included User Capacity Limited
|
|---|
| Signed webhooks | n.d. Not documented in the pages read | No public Garmin page read shows a push payload or how it is signed. |
|---|
| PKCE | n.d. Not documented in the pages read | Garmin's OAuth reference was not among the pages read; the program FAQ says only that the APIs use OAuth 2.0. |
|---|
| Refresh tokens | n.d. Not documented in the pages read | Garmin's OAuth reference was not among the pages read. |
|---|
| Disconnect or deletion call | n.d. Not documented in the pages read | The program pages read name no deregistration or deletion call. |
|---|
README badge:

[](https://aifitnessapi.com/openness-index#openness-garmin)
Badge text: Garmin openness: 1/8 documented
Google Health API: 5/8 documented
The Google Health API guide lists every page read. Share: card (PNG) · link to this row
| Check | State | What the vendor’s page says |
|---|
| Self-serve start | ✓ Documented | A new OAuth client works unverified, capped at 100 users. By default, newly created OAuth clients are in an unverified state with a cap of 100 users for both testing and production purposes.
|
|---|
| Sandbox or test mode | n.d. Not documented in the pages read | The unverified state is the same for testing and production; the pages read name no separate sandbox. |
|---|
| Public pricing | n.d. Not documented in the pages read | The pages read state no price for the API. |
|---|
| Published rate limits | ✓ Documented | Default quotas, per project (daily): 86.4M requests / day; per project (minutely): 120,000 requests / minute; per user (minutely): 300 requests / minute. 300 requests / minute
|
|---|
| Signed webhooks | ✓ Documented | Google sends the endpointAuthorization secret you configured in the Authorization header. It also signs the raw JSON with Tink (ECDSA P-256, SHA-256), base64 in GOOGLE-HEALTH-API-SIGNATURE, keys rotated every 30 days and published as a JSON keyset. the raw JSON payload of every outgoing webhook notification is signed with a private key using Tink's PublicKeySign
|
|---|
| PKCE | n.d. Not documented in the pages read | Not described on Google's web-server OAuth page, which the OAuth playground follows. |
|---|
| Refresh tokens | ✓ Documented | access_type=offline gets a refresh token on the first exchange only. Refresh tokens last until revoked or expired, and Google caps how many it issues per client and user. Refresh tokens are valid until the user revokes access or the refresh token expires.
|
|---|
| Disconnect or deletion call | ✓ Documented | batchDelete deletes a user's data points. Use the `batchDelete` method to delete an array of a user's Fitbit app data.
|
|---|
README badge:

[](https://aifitnessapi.com/openness-index#openness-google-health)
Badge text: Google Health API openness: 5/8 documented
Oura: 8/8 documented
The Oura guide lists every page read. Share: card (PNG) · link to this row
| Check | State | What the vendor’s page says |
|---|
| Self-serve start | ✓ Documented | A new app works for up to 10 users; Oura's approval is needed beyond that. By default, API Applications have a ten user limit. If you want to release your application to a wider audience, your application needs to be approved.
|
|---|
| Sandbox or test mode | ✓ Documented | A sandbox endpoint with fake data for every data type. Fake user data that you can access without an Oura account. There is a corresponding sandbox endpoint to each available data type.
|
|---|
| Public pricing | ✓ Documented | Free for personal and commercial applications. Yes, the Oura API is free to use for both personal and commercial applications.
|
|---|
| Published rate limits | ✓ Documented | 5,000 per 5 minutes. The Oura API is limited to 5000 requests per 5-minute period.
|
|---|
| Signed webhooks | ✓ Documented | HMAC-SHA256 keyed by your client secret over the x-oura-timestamp value followed by JSON.stringify(body), hex, upper-case, in x-oura-signature. hmac.update(timestamp + JSON.stringify(body));
|
|---|
| PKCE | ✓ Documented | Recommended. code_challenge_method must be S256; the verifier is 43 to 128 characters, hashed with SHA-256 and base64url-encoded without padding. between 43 and 128 characters long (inclusive), then hash it with SHA256 and encode the digest in base64url format without padding
|
|---|
| Refresh tokens | ✓ Documented | grant_type=refresh_token at the token URL returns a new access token and a new refresh token; each refresh token works once. The refresh token is single-use, meaning it is invalidated after being used.
|
|---|
| Disconnect or deletion call | ✓ Documented | A token revocation endpoint. https://api.ouraring.com/oauth/revoke?access_token={access_token}
|
|---|
README badge:

[](https://aifitnessapi.com/openness-index#openness-oura)
Badge text: Oura openness: 8/8 documented
Polar AccessLink: 5/7 documented
The Polar AccessLink guide lists every page read. Share: card (PNG) · link to this row
| Check | State | What the vendor’s page says |
|---|
| Self-serve start | ✓ Documented | Any registered Polar Flow user can create an API client. Any registered Polar Flow user can create API client to AccessLink by filling application details at https://admin.polaraccesslink.com
|
|---|
| Sandbox or test mode | n.d. Not documented in the pages read | The AccessLink reference read names no sandbox or test environment. |
|---|
| Public pricing | ✓ Documented | Free of charge at the moment; Polar reserves the right to charge. At the moment Polar offers the use and activation of Polar API's free of charge.
|
|---|
| Published rate limits | ✓ Documented | 500 + 20 per user per 15 minutes; 5,000 + 100 per user per 24 hours. 15min rate limit: 500 + number of users x 20
|
|---|
| Signed webhooks | ✓ Documented | HMAC-SHA256 of the payload, keyed by the signature_secret_key returned once when you create the webhook, hex, in Polar-Webhook-Signature; the event type is in Polar-Webhook-Event. Hash-based message authentication code (HMAC SHA-256) is used to sign every webhook payload Accesslink sends.
|
|---|
| PKCE | n.d. Not documented in the pages read | Not mentioned on the AccessLink reference. |
|---|
| Refresh tokens | n/a Not applicable | No refresh flow is documented: the token response lists no refresh_token, and the reference says access tokens do not expire unless revoked. Access tokens will not expire unless explicitly revoked by partners or users.
|
|---|
| Disconnect or deletion call | ✓ Documented | Deregistering a user revokes the token. When partner wishes no longer to receive user data, user can be de-registered. This will revoke the access token authorized by user.
|
|---|
README badge:

[](https://aifitnessapi.com/openness-index#openness-polar)
Badge text: Polar AccessLink openness: 5/7 documented
Strava: 6/8 documented
The Strava guide lists every page read. Share: card (PNG) · link to this row
| Check | State | What the vendor’s page says |
|---|
| Self-serve start | ✓ Documented | Any registered Strava user can create an application. Any registered Strava user can obtain an access_token by first creating an application at https://www.strava.com/settings/api .
Strava calls a Strava subscription a prerequisite for creating an app. A Strava subscription is a prerequisite for creating an app.
|
|---|
| Sandbox or test mode | ✓ Documented | New apps start in single-player mode, to build and test against your own data. All new applications start in single-player mode. This is the default state where only your own Strava account can authenticate with the app, which lets you build and test your integration against your own data.
|
|---|
| Public pricing | ✓ Documented | Currently at no charge. Access to and use of the Strava API Materials and the Strava Platform are currently provided at no charge.
|
|---|
| Published rate limits | ✓ Documented | 100 non-upload, per 15 minutes; 1,000 non-upload, per day; 200 overall, per 15 minutes; 2,000 overall, per day (New app (default); 2 tiers published). rate limit allows 100 requests every 15 minutes, with up to 1,000 requests per day.
|
|---|
| Signed webhooks | n.d. Not documented in the pages read | No signature is documented for event POSTs. Subscription validation is a GET with hub.mode, hub.challenge and hub.verify_token; echo hub.challenge as JSON. The query string of this GET request will contain a "hub.challenge" field that you must use to validate your callback address.
|
|---|
| PKCE | n.d. Not documented in the pages read | Not mentioned on Strava's Authentication page. |
|---|
| Refresh tokens | ✓ Documented | Refresh with grant_type=refresh_token. If the current access token expires in more than an hour, the same one comes back; once a new refresh token is returned the old one stops working. Once a new refresh token is returned, the older refresh token is invalidated immediately.
|
|---|
| Disconnect or deletion call | ✓ Documented | Deauthorizing invalidates every token the app holds for the athlete. Applications can revoke access to an athlete’s data. This will invalidate all refresh tokens and access tokens that the application has for the athlete
|
|---|
README badge:

[](https://aifitnessapi.com/openness-index#openness-strava)
Badge text: Strava openness: 6/8 documented
Suunto: 2/8 documented
The Suunto guide lists every page read. Share: card (PNG) · link to this row
| Check | State | What the vendor’s page says |
|---|
| Self-serve start | ✗ The docs say otherwise | Applications are reviewed weekly; the wait is up to two weeks. The applications are reviewed on weekly bases, so you have to wait few days prior getting the acceptance. There is maximum two week waiting period.
|
|---|
| Sandbox or test mode | ✓ Documented | A Development API with every endpoint and smaller request limits. The Development API includes all the endpoints but has smaller request limits.
|
|---|
| Public pricing | ✓ Documented | Suunto does not charge for the API. We do not charge from the use of the API.
|
|---|
| Published rate limits | n.d. Not documented in the pages read | Suunto says the developer API is rate-limited and has smaller limits than production, but publishes neither number. There developer API has same capabilities as the production API. However, the number of calls you can do with developer API are rate-limited.
|
|---|
| Signed webhooks | n.d. Not documented in the pages read | Not documented on Suunto's FAQ. The webhook address is set in your app's OAuth settings in Suunto API Zone and must be publicly reachable. You can setup the webhook in your app oauth settings under your profile in Suunto Apizone
|
|---|
| PKCE | n.d. Not documented in the pages read | Not mentioned on Suunto's quick-start or FAQ. |
|---|
| Refresh tokens | n.d. Not documented in the pages read | The token response includes a refresh_token, but the pages read here document no refresh request, so the OAuth playground prints none. "refresh_token": "<JWT_REFRESH_TOKEN>"
|
|---|
| Disconnect or deletion call | n.d. Not documented in the pages read | The API Zone pages read name no deauthorization or deletion call. |
|---|
README badge:

[](https://aifitnessapi.com/openness-index#openness-suunto)
Badge text: Suunto openness: 2/8 documented
Terra: 4/6 documented
The Terra guide lists every page read. Share: card (PNG) · link to this row
| Check | State | What the vendor’s page says |
|---|
| Self-serve start | n.d. Not documented in the pages read | The pages read describe the dashboard's credentials but not whether a new account is reviewed. |
|---|
| Sandbox or test mode | ✓ Documented | Testing and staging environments, each capped at 50 users. Note that for testing & staging, there is a user limit of 50 users on each environment.
|
|---|
| Public pricing | ✓ Documented | Published plans from $399 a month billed annually. Subscriptions start from $399 per month billed annually, or $499 per month billed monthly. That includes 100,000 Unified API credits each month, and you only pay extra if your usage goes beyond them.
|
|---|
| Published rate limits | ✓ Documented | 6,000 requested days per hour, per user. your code has issued requests for this user totalling more than 6,000 days in the current hour
|
|---|
| Signed webhooks | ✓ Documented | terra-signature: t=<timestamp>,v1=<signature>; HMAC-SHA256 keyed by the webhook's signing secret over the timestamp, a "." and the raw body. Ignore schemes other than v1. Compute an HMAC with the SHA256 hash function. Use the endpoint’s signing secret as the key, and use the signed_payload string as the message.
|
|---|
| PKCE | n/a Not applicable | Your server calls Terra with a dev-id and an API key; the pages read describe no OAuth client on your side. dev-id string Required Your developer ID for authentication and tracking
|
|---|
| Refresh tokens | n/a Not applicable | Your server calls Terra with a dev-id and an API key; the pages read describe no OAuth client on your side. dev-id string Required Your developer ID for authentication and tracking
|
|---|
| Disconnect or deletion call | n.d. Not documented in the pages read | Terra sends a deauth event when a user disconnects; the pages read name no call your app makes for it. deauth Occurs when a user deauthenticates through the Terra
|
|---|
README badge:

[](https://aifitnessapi.com/openness-index#openness-terra)
Badge text: Terra openness: 4/6 documented
Wahoo: 6/8 documented
The Wahoo guide lists every page read. Share: card (PNG) · link to this row
| Check | State | What the vendor’s page says |
|---|
| Self-serve start | ✗ The docs say otherwise | Wahoo limits the API to those who request it. Wahoo Fitness is currently limiting use of the API to those who request it, as well as provide more information about the scopes involved and the purpose of the application.
|
|---|
| Sandbox or test mode | ✓ Documented | Sandbox and Production are separate applications. Sandbox and Production are separate applications. A Sandbox app cannot later be converted into a Production app.
|
|---|
| Public pricing | ✓ Documented | Currently at no charge; Wahoo reserves the right to charge. Access to and use of the Wahoo API Materials and Wahoo Platform are currently provided at no charge.
|
|---|
| Published rate limits | ✓ Documented | 25 per 5 minutes; 100 per hour; 250 per day (Sandbox; 2 tiers published). Requests every 5 Min: 25 200
|
|---|
| Signed webhooks | ✗ The docs say otherwise | No signature. Wahoo sends the webhook_token you set in the app's webhook settings inside the JSON body; ignore any request without it. Specify a token that you would like us to send. Any request that doesn't include this token should be ignored.
|
|---|
| PKCE | ✓ Documented | Supported once the app's Confidential field is set to No; S256 or plain. With PKCE the token and refresh calls send code_verifier instead of client_secret. The Wahoo API does allow users to use the PKCE flow for authorization.
|
|---|
| Refresh tokens | ✓ Documented | Refresh returns a new access and refresh token. The previous pair is revoked only when an API call uses the new access token, so refresh just before a request: apps are limited to 10 unrevoked tokens per user. Access tokens should only be refreshed immediately prior to making an API request.
|
|---|
| Disconnect or deletion call | ✓ Documented | DELETE /v1/permissions deauthorizes the user. DELETE https://api.wahooligan.com/v1/permissions
|
|---|
README badge:

[](https://aifitnessapi.com/openness-index#openness-wahoo)
Badge text: Wahoo openness: 6/8 documented
WHOOP: 7/8 documented
The WHOOP guide lists every page read. Share: card (PNG) · link to this row
| Check | State | What the vendor’s page says |
|---|
| Self-serve start | ✓ Documented | Build and test on the 10-member Sandbox tier without a request. Every new app starts on the Sandbox tier, which allows up to 10 WHOOP members to connect. You can build and test on Sandbox without submitting a request. When you need more members, request the next tier from the Developer Dashboard .
A WHOOP membership is required to develop an app. You must have a WHOOP membership to develop an app on the Developer Platform. Your WHOOP account is also your WHOOP developer login.
|
|---|
| Sandbox or test mode | ✓ Documented | Every new app starts on the Sandbox tier. Every new app starts on the Sandbox tier, which allows up to 10 WHOOP members to connect.
|
|---|
| Public pricing | ✓ Documented | Currently at no charge, with notice before that changes. Access to and use of the APIs is currently provided at no charge. In the event WHOOP decides to start charging for use of the APIs in the future, WHOOP will provide Company with prior notice.
|
|---|
| Published rate limits | ✓ Documented | 100 per minute; 10,000 per day. All clients are subject to two sets of rate limiting for requests. By default, clients may only send: 100 requests per minute. 10,000 requests per day.
|
|---|
| Signed webhooks | ✓ Documented | Base64 of HMAC-SHA256, keyed by your client secret, over the X-WHOOP-Signature-Timestamp value (milliseconds since epoch) followed by the raw body, in X-WHOOP-Signature. calculated_signature_string = base64Encode(HMACSHA256(timestamp_header + raw_http_request_body, client_secret))
|
|---|
| PKCE | n.d. Not documented in the pages read | Not mentioned on the WHOOP OAuth page or API reference read here. |
|---|
| Refresh tokens | ✓ Documented | Using the refresh token invalidates the existing access tokens; the refresh token in the response replaces the old one, and of two simultaneous refreshes only the first succeeds. Existing access tokens are invalidated once your app uses the refresh token to generate a new access token.
|
|---|
| Disconnect or deletion call | ✓ Documented | The revokeUserOauthAccess endpoint. To revoke an access token, you can use the revokeUserOauthAccess API endpoint.
|
|---|
README badge:

[](https://aifitnessapi.com/openness-index#openness-whoop)
Badge text: WHOOP openness: 7/8 documented
Withings: 5/8 documented
The Withings guide lists every page read. Share: card (PNG) · link to this row
| Check | State | What the vendor’s page says |
|---|
| Self-serve start | ✓ Documented | No prerequisites to get access. There are no prerequisites, and free access is provided.
|
|---|
| Sandbox or test mode | ✓ Documented | mode=demo signs in a demo user. you can use the optional parameter mode with the value demo . You will be redirected to the authorisation page and automatically logged in as a demo user.
|
|---|
| Public pricing | ✓ Documented | Free access on the public API. There are no prerequisites, and free access is provided.
Withings' developer site, as captured on October 16, 2026, said Withings+ becomes required on the free plan from October 12, 2026. Withings+ becomes required on the Start for Free API plan from October 12, 2026.
|
|---|
| Published rate limits | ✓ Documented | 120 per minute. The standard Withings API enforces a 120 requests-per-minute limit across your application
|
|---|
| Signed webhooks | ✗ The docs say otherwise | No body signature. Append a secret query parameter to the callback URL (Withings' example: ?token=<random-secret>) and check it, plus an allowlist of the IP ranges Withings publishes as DNS TXT records. Your handler reads token from the incoming request and rejects any value that doesn't match the secret you configured.
|
|---|
| PKCE | n.d. Not documented in the pages read | Not mentioned on the Withings authorization or token pages. |
|---|
| Refresh tokens | ✓ Documented | Withings says to call the same requesttoken service with the refresh token and always keep the new refresh token, but its snippet shows only the code exchange, so the OAuth playground prints no refresh command rather than guess its parameters. To request a new access_token using the refresh_token, call the requesttoken webservice
|
|---|
| Disconnect or deletion call | n.d. Not documented in the pages read | The developer-guide pages read name no revoke or deletion call. |
|---|
README badge:

[](https://aifitnessapi.com/openness-index#openness-withings)
Badge text: Withings openness: 5/8 documented