Last updated: July 29, 2026
Roni is an independent project built by an individual developer. It is not affiliated with, endorsed by, or connected to Tonal in any way. Tonal is a trademark of Tonal Systems, Inc. This service uses Tonal's APIs to read your training data and push custom workouts to your machine, but Tonal does not provide a public API or officially support third-party integrations.
When you connect your Tonal account, your email and password are sent to Tonal's authentication system (Auth0) to obtain an access token. Your password is used once for this request and is not stored, logged, or retained in any form. The resulting authentication token and refresh token are encrypted using AES-256-GCM before being stored in our database. These tokens allow the service to read your data and push workouts on your behalf.
Through your Tonal token, the service reads:
The service writes:
We do not access your payment information, personal contacts, or any data unrelated to your training.
Chat conversations are processed by Google's Gemini AI model to generate coaching responses. Your training data is included in the AI context so the coach can give personalized advice. When you connect Fitbit, this context may include Fitbit activity, sleep, resting heart rate, and HRV summaries. Google's AI usage policies apply to this processing. Roni does not train its own AI model on your data.
The service is hosted on Convex (database and backend) and Vercel (frontend). PostHog receives product usage analytics and account identifiers including your internal user ID, email, and name when available. Sentry receives application errors and diagnostics; default collection of personally identifiable information is disabled. We do not sell this data or use it for advertising.
Connecting Garmin Connect is optional. When you connect, Roni uses Garmin's official Activity API and Health API so the AI coach can factor rides, runs, and other non-Tonal sessions into your training plan. Roni is not affiliated with, endorsed by, or sponsored by Garmin. Garmin and Garmin Connect are trademarks of Garmin Ltd.
The connection uses Garmin's OAuth 1.0a user-authorized flow. You enter your Garmin username and password on Garmin's own site; those credentials are never sent to or seen by Roni. Garmin returns a long-lived access token and access token secret, both of which are encrypted with AES-256-GCM before being written to our database.
During the handshake we may request the following Garmin permissions. You decide which to grant, and you can change them any time from your Garmin Connect account settings:
We store only the summary data Garmin sends us — activity metrics such as activity type, start time, duration, distance, elevation gain, pace, calories, and heart rate, and daily wellness rollups such as sleep, stress, resting heart rate, HRV, body battery, and step counts. We do not store GPS tracks, per-second samples, or route details. Raw webhook payloads are retained briefly — currently up to 14 days — for operational replay and error recovery, then automatically deleted.
When you first connect, Roni may request a limited initial backfill of your recent history (currently up to 30 days of activities) so the coach has context from the start. After that, Garmin pushes new data to Roni automatically as it is recorded — we do not poll or scrape your account.
We do not sell, rent, or share Garmin data with advertisers, data brokers, or any other third party. Garmin data is used inside Roni only to power the coach, and it is processed under the same infrastructure and AI terms described in the “AI and third parties” section above.
You can disconnect Garmin at any time from the Settings page in Roni, which asks Garmin to remove Roni's registration and marks the connection inactive so no further webhooks are processed. You can also revoke Roni's access directly from your Garmin Connect account settings; Garmin sends us a deregistration webhook and we mark the connection disconnected in response. Deleting your Roni account additionally removes all stored Garmin connection records, activity summaries, wellness summaries, and webhook-event log entries.
Connecting Fitbit is optional. Roni uses the official Google Health API in read-only mode so the AI coach can account for cross-training and recovery. Roni is not affiliated with or endorsed by Google or Fitbit.
Authorization happens on Google's site. Your Google password is never sent to or seen by Roni. Google returns access and refresh tokens, which Roni encrypts with AES-256-GCM before storing. Roni requests read-only access to activity and fitness, sleep, and health metrics and measurements; it does not request permission to write health data.
Roni imports only records identified by Google Health as originating from Fitbit or the legacy Fitbit Web API. The initial and recurring sync window is currently up to 30 days. Stored summaries can include workout type, time, duration, distance, pace, calories, average heart rate, sleep duration and stages, resting heart rate, and daily HRV. Roni does not store GPS tracks or per-second heart-rate samples from Google Health.
Fitbit data flows one way into Roni and is used only to personalize coaching under the same infrastructure and AI terms described above. Roni polls Google Health periodically for updates and does not write workouts or other data back to Fitbit.
Disconnecting Fitbit marks the connection inactive, removes the encrypted credentials from active use, asks Google to revoke Roni's grant, and starts removing data imported under that connection. If Google revocation fails, Roni shows a warning and you can revoke access directly in your Google account. Deleting your Roni account removes stored Fitbit connection records, OAuth artifacts, activity summaries, and wellness summaries; Roni also attempts to revoke an active Google grant during account deletion.
You can disconnect your Tonal account and delete your Roni account at any time. Account deletion removes your Roni account and associated application records from active storage. Revocation requests to connected providers can fail, so you can also revoke access directly in each provider's account settings.
This service accesses Tonal through unofficial APIs that may change or become unavailable without notice. Using this service could theoretically affect your Tonal account, though no such issues have been reported. By using Roni, you acknowledge this risk and agree that the developer is not liable for any impact to your Tonal account or subscription.
For questions, data deletion requests, or concerns, email jeff@roni.coach.