# Terra Docs

## Docs

- [What is Terra API?](https://docs.tryterra.co/introduction/readme.md)
- [Account setup and API keys](https://docs.tryterra.co/introduction/account-setup-and-api-keys.md): This guide walks you through creating your Terra account and obtaining the API keys necessary to start integrating with our services.
- [Core concepts](https://docs.tryterra.co/introduction/core-concepts.md): Understand the fundamental terms and concepts used throughout the Terra API ecosystem. Grasping these will help you integrate Terra more effectively.
- [AI coding agents](https://docs.tryterra.co/introduction/ai-coding-agents.md): Set up your AI coding agent to build with Terra using agent skills and the docs MCP server, so it works from accurate, up-to-date information instead of outdated training data.
- [Examples](https://docs.tryterra.co/introduction/examples.md): Example apps built on Terra. Clone one with a single command, deploy it to your own infrastructure, and build on top of it.
- [Terra Basecamp](https://docs.tryterra.co/introduction/examples/terra-basecamp.md): A complete Terra integration you can run yourself: wearable connections, webhook ingestion, multi-device deduplication, a live dashboard, and an AI health assistant.
- [Overview](https://docs.tryterra.co/unified-api/getting-started.md): Discover the capabilities of Terra's Unified API, enabling you to access historical and current user health data from a multitude of health data sources.
- [Quickstart](https://docs.tryterra.co/unified-api/quickstart.md): Learn how to receive data events in just 3 steps
- [Integration setup](https://docs.tryterra.co/unified-api/integration-setup.md): Configure Terra API to receive your users' health & fitness data to your preferred destination (e.g. webhook, DB, etc).
- [Understanding sources and destinations](https://docs.tryterra.co/unified-api/integration-setup/understanding-sources-and-destinations.md)
- [Setting up data sources](https://docs.tryterra.co/unified-api/integration-setup/setting-up-data-sources.md)
- [Setting up data destinations](https://docs.tryterra.co/unified-api/integration-setup/setting-up-data-destinations.md)
- [Webhooks](https://docs.tryterra.co/unified-api/integration-setup/setting-up-data-destinations/webhooks.md)
- [SQL database (Postgres, MySQL)](https://docs.tryterra.co/unified-api/integration-setup/setting-up-data-destinations/sql-database-postgres-mysql.md)
- [Supabase](https://docs.tryterra.co/unified-api/integration-setup/setting-up-data-destinations/supabase.md)
- [Cloud storage (S3, GCS, Azure Blob)](https://docs.tryterra.co/unified-api/integration-setup/setting-up-data-destinations/cloud-storage-s3-gcp.md)
- [Queuing services (SQS, Kafka)](https://docs.tryterra.co/unified-api/integration-setup/setting-up-data-destinations/queuing-services-sqs-kafka.md)
- [MongoDB](https://docs.tryterra.co/unified-api/integration-setup/setting-up-data-destinations/mongodb.md)
- [Firestore](https://docs.tryterra.co/unified-api/integration-setup/setting-up-data-destinations/firestore.md)
- [Customising data types](https://docs.tryterra.co/unified-api/integration-setup/customising-data-types.md): Customise the types of data events you wish to receive from your users (activity, sleep, etc).
- [Dedicated data source API keys](https://docs.tryterra.co/unified-api/integration-setup/dedicated-data-source-api-keys.md)
- [Understanding Terra environments](https://docs.tryterra.co/unified-api/integration-setup/understanding-terra-environments.md)
- [Per-user OAuth apps](https://docs.tryterra.co/unified-api/integration-setup/per-user-oauth-apps.md)
- [User authentication](https://docs.tryterra.co/unified-api/user-authentication.md): Securely connect your users' health data sources to your application via Terra.
- [Authentication flow](https://docs.tryterra.co/unified-api/user-authentication/authentication-flow.md)
- [Implementation (Terra widget)](https://docs.tryterra.co/unified-api/user-authentication/implementation-terra-widget.md)
- [Implementation (Custom UI)](https://docs.tryterra.co/unified-api/user-authentication/implementation-custom-ui.md)
- [Handling authentication events](https://docs.tryterra.co/unified-api/user-authentication/handling-authentication-events.md)
- [Customising authentication redirects](https://docs.tryterra.co/unified-api/user-authentication/customising-authentication-redirects.md)
- [Managing user health data](https://docs.tryterra.co/unified-api/managing-user-health-data.md): Access user health and fitness information from Terra and, where supported, write data back to connected services.
- [Receiving health data updates (events)](https://docs.tryterra.co/unified-api/managing-user-health-data/receiving-data-updates.md): Learn how to receive data update events to your app as soon as the user's data syncs to the cloud
- [Requesting historical health data (REST API requests)](https://docs.tryterra.co/unified-api/managing-user-health-data/requesting-historical-data.md): Learn how to request for historical data to be sent to your destination through the REST API
- [Writing data](https://docs.tryterra.co/unified-api/managing-user-health-data/write-data.md): Learn how to write data back to providers, and create a bi-directional data stream between your app and the various integrations you connect to
- [Mobile-only sources](https://docs.tryterra.co/unified-api/mobile-only-sources.md): Learn how to connect mobile-based integrations: Apple Health, Samsung Health, Google Fit
- [iOS (Swift)](https://docs.tryterra.co/unified-api/mobile-only-sources/ios-swift.md): The iOS SDK allows you to seamlessly send data from iOS to your backend or to your app directly!
- [Android (Kotlin)](https://docs.tryterra.co/unified-api/mobile-only-sources/android-kotlin.md): How to use the TerraAndroid SDK to connect mobile-based integrations?
- [React Native](https://docs.tryterra.co/unified-api/mobile-only-sources/react-native.md)
- [Flutter](https://docs.tryterra.co/unified-api/mobile-only-sources/flutter.md)
- [Activity Types Reference](https://docs.tryterra.co/unified-api/activity-types.md)
- [Troubleshooting](https://docs.tryterra.co/unified-api/debugging-faq.md)
- [Pricing](https://docs.tryterra.co/unified-api/pricing.md): This page outlines pricing for the Unified API on the Quick Start plan.
- [WHOOP](https://docs.tryterra.co/unified-api/whoop.md)
- [Dexcom](https://docs.tryterra.co/unified-api/dexcom.md)
- [Overview](https://docs.tryterra.co/models/models.md): Run Terra's health models over your users' data to turn raw metrics into ready-to-use wellness insights.
- [Health Scores](https://docs.tryterra.co/user-engagement/health-scores.md): Learn how to embed adaptive health scores in your app
- [Overview](https://docs.tryterra.co/planned-workouts-api/overview.md)
- [Introduction](https://docs.tryterra.co/planned-workouts-api/introduction.md)
- [Pricing & Access](https://docs.tryterra.co/planned-workouts-api/pricing.md): Planned Workouts is a paid add-on to your Terra plan, with usage measured in credits.
- [Core Concepts](https://docs.tryterra.co/planned-workouts-api/core-concepts.md)
- [Sport-Specific Examples](https://docs.tryterra.co/planned-workouts-api/sport-specific-examples.md): Complete, copy-paste examples for each sport type.
- [Athlete Parameters](https://docs.tryterra.co/planned-workouts-api/athlete-parameters.md)
- [Provider compatibility](https://docs.tryterra.co/planned-workouts-api/provider-compatibility.md)
- [Coercion Warnings](https://docs.tryterra.co/planned-workouts-api/coercion-warnings.md)
- [Exercise Reference](https://docs.tryterra.co/planned-workouts-api/exercise-reference.md)
- [Garmin & Hevy exercise reference](https://docs.tryterra.co/planned-workouts-api/garmin-exercise-reference.md)
- [Overview](https://docs.tryterra.co/streaming-api/getting-started.md)
- [Pricing & Access](https://docs.tryterra.co/streaming-api/pricing.md): The Streaming API is a paid add-on to your Terra plan, with usage measured in credits.
- [Wearable -> Your app](https://docs.tryterra.co/streaming-api/connect-wearable-to-sdk.md)
- [iOS (Swift)](https://docs.tryterra.co/streaming-api/connect-wearable-to-sdk/ios-swift.md)
- [Android](https://docs.tryterra.co/streaming-api/connect-wearable-to-sdk/android.md)
- [React Native](https://docs.tryterra.co/streaming-api/connect-wearable-to-sdk/react-native.md)
- [Flutter](https://docs.tryterra.co/streaming-api/connect-wearable-to-sdk/flutter.md)
- [WearOS connection](https://docs.tryterra.co/streaming-api/connect-wearable-to-sdk/wear-os.md)
- [Your app -> Terra](https://docs.tryterra.co/streaming-api/your-app-greater-than-terra.md)
- [iOS (Swift)](https://docs.tryterra.co/streaming-api/your-app-greater-than-terra/ios-swift.md)
- [Android](https://docs.tryterra.co/streaming-api/your-app-greater-than-terra/android.md)
- [React Native](https://docs.tryterra.co/streaming-api/your-app-greater-than-terra/react-native.md)
- [Flutter](https://docs.tryterra.co/streaming-api/your-app-greater-than-terra/flutter.md)
- [Terra -> Your backend](https://docs.tryterra.co/streaming-api/terra-greater-than-your-backend.md): Set up and manage a consumer connection to the Terra WebSocket service to receive real-time health data.
- [Getting Started](https://docs.tryterra.co/teams-api/getting-started.md)
- [Overview](https://docs.tryterra.co/integration-partners/overview.md)
- [How the integration works](https://docs.tryterra.co/integration-partners/how-the-integration-works.md)
- [Submitting an Application](https://docs.tryterra.co/integration-partners/submitting-an-application.md)
- [Overview](https://docs.tryterra.co/lab-reports/lab-reports.md): Convert lab report PDFs into structured, standardized biomarker data via a simple REST API.
- [Quick Start](https://docs.tryterra.co/lab-reports/quickstart.md): Upload a lab report, check status, and retrieve structured biomarker data in three steps.
- [Core Concepts](https://docs.tryterra.co/lab-reports/core-concepts.md): Session lifecycle, data model, biomarker standardization, and async processing.
- [API Reference](https://docs.tryterra.co/lab-reports/api-reference.md): Complete reference for all Lab Reports API endpoints.
- [Webhook Payload](https://docs.tryterra.co/lab-reports/webhook-payload.md): Webhook delivery format, complete payload example, and field specifications.
- [Biomarker Reference](https://docs.tryterra.co/lab-reports/biomarker-reference.md): Biomarker standardization, UCUM unit codes, and common biomarker reference table.
- [Best Practices](https://docs.tryterra.co/lab-reports/best-practices.md): Recommendations for robust integration with the Lab Reports API.

## API Reference

- [REST API Endpoints](https://docs.tryterra.co/reference/health-and-fitness-api/readme.md)
- [OpenAPI Spec](https://docs.tryterra.co/reference/health-and-fitness-api/openapi-spec.md): Outlines where to access Terra's OpenAPI Spec
- [Supported integrations](https://docs.tryterra.co/reference/health-and-fitness-api/supported-integrations.md): Outlines the currently supported integrations & any surrounding info around them
- [Event Types](https://docs.tryterra.co/reference/health-and-fitness-api/event-types.md)
- [Data models](https://docs.tryterra.co/reference/health-and-fitness-api/data-models.md)
- [Samples](https://docs.tryterra.co/reference/health-and-fitness-api/samples.md)
- [Core concepts](https://docs.tryterra.co/reference/health-and-fitness-api/core-concepts.md)
- [Rate Limits](https://docs.tryterra.co/reference/health-and-fitness-api/rate-limits.md)
- [Destinations](https://docs.tryterra.co/reference/health-and-fitness-api/destinations.md)
- [Mobile SDK](https://docs.tryterra.co/reference/health-and-fitness-api/sdk-references.md)
- [iOS (Swift)](https://docs.tryterra.co/reference/health-and-fitness-api/sdk-references/ios-swift.md)
- [Android (Kotlin)](https://docs.tryterra.co/reference/health-and-fitness-api/sdk-references/android-kotlin.md)
- [React Native](https://docs.tryterra.co/reference/health-and-fitness-api/sdk-references/react-native.md)
- [Flutter](https://docs.tryterra.co/reference/health-and-fitness-api/sdk-references/flutter.md)
- [Permissions mapping](https://docs.tryterra.co/reference/health-and-fitness-api/sdk-references/permissions-mapping.md)
- [REST API Endpoints](https://docs.tryterra.co/reference/streaming-api/api-endpoints.md)
- [Supported Integrations](https://docs.tryterra.co/reference/streaming-api/supported-integrations.md)
- [Core Concepts](https://docs.tryterra.co/reference/streaming-api/core-concepts.md)
- [Websocket Reference](https://docs.tryterra.co/reference/streaming-api/websocket-reference.md)
- [Mobile SDK](https://docs.tryterra.co/reference/streaming-api/reference.md)
- [iOS (Swift)](https://docs.tryterra.co/reference/streaming-api/reference/ios-swift.md)
- [Android (Kotlin)](https://docs.tryterra.co/reference/streaming-api/reference/android-kotlin.md)
- [Flutter](https://docs.tryterra.co/reference/streaming-api/reference/flutter.md)
- [React Native](https://docs.tryterra.co/reference/streaming-api/reference/react-native.md)
- [Supported Integrations](https://docs.tryterra.co/reference/teams-api/supported-integrations.md)
- [Core Concepts](https://docs.tryterra.co/reference/teams-api/core-concepts.md)
- [API Endpoints](https://docs.tryterra.co/reference/teams-api/api-endpoints.md)
- [Event types](https://docs.tryterra.co/reference/teams-api/event-types.md)

## Changelog

- [May Update 2026](https://docs.tryterra.co/changelog/2026/may-update-2026.md)
- [April Update 2026](https://docs.tryterra.co/changelog/2026/april-update-2026.md)
- [March Update 2026](https://docs.tryterra.co/changelog/2026/march-update-2026.md)
- [February Update 2026](https://docs.tryterra.co/changelog/2026/february-update-2026.md)
- [January Update 2026](https://docs.tryterra.co/changelog/2026/january-update-2026.md)
- [December Update 2025](https://docs.tryterra.co/changelog/2025/december-update-2025.md)
- [November Update 2025](https://docs.tryterra.co/changelog/2025/november-update-2025.md)
- [October Update 2025](https://docs.tryterra.co/changelog/2025/october-update-2025.md)
- [September Update 2025](https://docs.tryterra.co/changelog/2025/september-update-2025.md)
- [August Update 2025](https://docs.tryterra.co/changelog/2025/august-update-2025.md)
- [July Update 2025](https://docs.tryterra.co/changelog/2025/readme.md)
- [June Update 2025](https://docs.tryterra.co/changelog/2025/readme-1.md)
- [May Update 2025](https://docs.tryterra.co/changelog/2025/readme-2.md)
- [April Update 2025](https://docs.tryterra.co/changelog/2025/readme-1-1.md)
- [March Update 2025](https://docs.tryterra.co/changelog/2025/readme-2-1.md)
- [February Update 2025](https://docs.tryterra.co/changelog/2025/february-update-2025.md)
- [January Update 2025](https://docs.tryterra.co/changelog/2025/readme-1-1-1.md)
- [December Update 2024](https://docs.tryterra.co/changelog/2024/2024-december-update.md)
- [November Updates 2024](https://docs.tryterra.co/changelog/2024/2024-november-updates.md)
- [October Updates 2024](https://docs.tryterra.co/changelog/2024/2024-october-updates.md)
- [September Updates 2024](https://docs.tryterra.co/changelog/2024/2024-september-updates.md)
- [August Updates 2024](https://docs.tryterra.co/changelog/2024/2024-august-updates.md)
- [July Updates 2024](https://docs.tryterra.co/changelog/2024/2024-july-updates.md)
- [June Updates 2024](https://docs.tryterra.co/changelog/2024/2024-june-updates.md)
- [May Updates 2024](https://docs.tryterra.co/changelog/2024/2024-may-updates.md)
- [April Updates 2024](https://docs.tryterra.co/changelog/2024/2024-april-updates.md)
- [March 2024](https://docs.tryterra.co/changelog/2024/2024-march.md)
- [February Updates 2024](https://docs.tryterra.co/changelog/2024/2024-february-updates.md)
- [January Updates 2024](https://docs.tryterra.co/changelog/2024/2024-january-updates.md)
- [December Updates 2023](https://docs.tryterra.co/changelog/2023/2024-december-updates.md)
- [November Updates 2023](https://docs.tryterra.co/changelog/2023/2023-november-updates.md)
- [October Updates 2023](https://docs.tryterra.co/changelog/2023/2023-october-updates.md)
- [September Updates 2023](https://docs.tryterra.co/changelog/2023/2023-september-updates.md)
- [August Updates 2023](https://docs.tryterra.co/changelog/2023/2023-august-updates.md)
- [July Updates 2023](https://docs.tryterra.co/changelog/2023/2023-july-updates.md)
- [June Updates 2023](https://docs.tryterra.co/changelog/2023/2023-june-updates.md)
- [June 27, 2023](https://docs.tryterra.co/changelog/2023/2023-06-27.md)
- [June 16, 2023](https://docs.tryterra.co/changelog/2023/2023-06-16.md)
- [June 5, 2023](https://docs.tryterra.co/changelog/2023/2023-06-05.md)
- [May Updates 2023](https://docs.tryterra.co/changelog/2023/2023-may-updates.md)
- [May 19, 2023](https://docs.tryterra.co/changelog/2023/2023-05-19.md)
- [April Updates 2023](https://docs.tryterra.co/changelog/2023/2023-april-updates.md)
- [April 27, 2023](https://docs.tryterra.co/changelog/2023/2023-04-27.md)
- [April 18, 2023](https://docs.tryterra.co/changelog/2023/2023-04-18.md)
- [April 11, 2023](https://docs.tryterra.co/changelog/2023/2023-04-11.md)
- [March Updates 2023](https://docs.tryterra.co/changelog/2023/2023-march-updates.md)
- [March 29, 2023](https://docs.tryterra.co/changelog/2023/2023-03-29.md)
- [March 22, 2023](https://docs.tryterra.co/changelog/2023/2023-03-22.md)
- [March 13, 2023](https://docs.tryterra.co/changelog/2023/2023-03-13.md)
- [March 6, 2023](https://docs.tryterra.co/changelog/2023/2023-03-06.md)
- [February Updates 2023](https://docs.tryterra.co/changelog/2023/2023-february-updates.md)
- [February 21, 2023](https://docs.tryterra.co/changelog/2023/2023-02-21.md)
- [February 7, 2023](https://docs.tryterra.co/changelog/2023/2023-02-07.md)
- [January Updates 2023](https://docs.tryterra.co/changelog/2023/2023-january-updates.md)
- [January 30, 2023](https://docs.tryterra.co/changelog/2023/2023-01-30.md)
- [December 15, 2022](https://docs.tryterra.co/changelog/2022/2022-12-15.md)
- [December 7, 2022](https://docs.tryterra.co/changelog/2022/2022-12-07.md)
- [November 22, 2022](https://docs.tryterra.co/changelog/2022/2022-11-22.md)
- [December Updates 1](https://docs.tryterra.co/changelog/general-updates/december-updates-1.md)
- [December Updates](https://docs.tryterra.co/changelog/general-updates/december-updates.md)
- [November Updates](https://docs.tryterra.co/changelog/general-updates/november-updates.md)
- [October Updates](https://docs.tryterra.co/changelog/general-updates/october-updates.md)
- [September Updates](https://docs.tryterra.co/changelog/general-updates/september-updates.md)
- [August Updates](https://docs.tryterra.co/changelog/general-updates/august-updates.md)
- [July Updates](https://docs.tryterra.co/changelog/general-updates/july-updates.md)
- [June Updates](https://docs.tryterra.co/changelog/general-updates/june-updates.md)
- [May Updates](https://docs.tryterra.co/changelog/general-updates/may-updates.md)
- [April Updates](https://docs.tryterra.co/changelog/general-updates/april-updates.md)
- [March Updates](https://docs.tryterra.co/changelog/general-updates/march-updates.md)
- [February Updates](https://docs.tryterra.co/changelog/general-updates/february-updates.md)
- [January Updates](https://docs.tryterra.co/changelog/general-updates/january-updates.md)
- [Page 1](https://docs.tryterra.co/changelog/general-updates/page-1.md)

## AI

- [Terra AI](https://docs.tryterra.co/ai-interface/terra-ai.md)
- [Error states](https://docs.tryterra.co/ai-interface/error-states.md)

## Vantage API Docs

- [What is Vantage API?](https://docs.tryterra.co/vantage-api-docs/readme.md)
- [Account setup and API keys](https://docs.tryterra.co/vantage-api-docs/account-setup-and-api-keys.md): This guide walks you through obtaining the API keys necessary to start using our services. Currently, account set up for new partners is done manually but we will change this in the future!
- [Ordering your first test](https://docs.tryterra.co/vantage-api-docs/getting-started/ordering-your-first-test.md): Learn how to order a test kit in a few simple steps
- [Working with Sandbox](https://docs.tryterra.co/vantage-api-docs/getting-started/publish-your-docs.md)
- [Webhooks](https://docs.tryterra.co/vantage-api-docs/documentation/webhooks.md)
- [Test Collection Methods](https://docs.tryterra.co/vantage-api-docs/documentation/test-collection-methods.md)
- [Results](https://docs.tryterra.co/vantage-api-docs/documentation/results.md)
- [Acknowledging Results](https://docs.tryterra.co/vantage-api-docs/important-information/acknowledging-results.md): This guide outlines the critical process of acknowledging patient results within the system. Result acknowledgment is a mandatory step that ensures proper communication of test outcomes, regardless of

## Vantage API Reference

- [Activation](https://docs.tryterra.co/vantage-api-reference/core-resources/activation.md)
- [Clients](https://docs.tryterra.co/vantage-api-reference/core-resources/clients.md)
- [Orders](https://docs.tryterra.co/vantage-api-reference/core-resources/orders.md)
- [Products](https://docs.tryterra.co/vantage-api-reference/core-resources/products.md)
- [Results](https://docs.tryterra.co/vantage-api-reference/core-resources/results.md)

## FAQ

- [Help Center](https://docs.tryterra.co/faq/readme.md)
- [API, SDK & data formats](https://docs.tryterra.co/faq/help-topics/data-api-sdk.md): The API, the SDKs, data fields, formats and provider coverage.
- [Mobile SDK setup, permissions and crashes](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes.md): Mobile SDK setup, permissions and crashes
- [Can I connect Apple Health from a web app?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/mobile-only-sources-need-sdk-not-web-or-rest.md): Apple Health, Samsung Health, Health Connect, and Google Fit (via Health Connect) are on-device, mobile-only sources with no web API.
- [Why does Health Connect re-prompt permissions on init?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/permission-prompt-reappears-on-init.md): On Android with Health Connect, initTerra automatically re-requests permissions when the device previously had a connection and the user still exists…
- [Why does the Flutter SDK fail in release but work in debug?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/android-release-proguard-r8-keep-rules.md): Code that works in debug but fails in Android release builds means R8 minification (disabled in debug) is stripping or renaming SDK classes.
- [How do I remove unused Health Connect permissions?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/strip-unused-health-permissions-store-review.md): The Terra Android SDK declares all Health Connect permissions by default, which triggers Play Store review questions about permissions you do not actually use.
- [Why are Apple Health activity webhooks empty?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/apple-health-permission-list-mapping.md): Apple Health data only flows when the matching HealthKit permission is granted, and the Health app labels don't always match Terra's data types.
- [Why am I seeing Android React Native background crashes?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/android-rn-background-crashes-upgrade.md): Random background crashes in the React Native plugin on Android were a known issue resolved in later releases.
- [Why do SDK data calls say permission not granted?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/init-sequence-before-data-calls.md): Data functions like getActivity / getDaily only work after the SDK is fully initialised.
- [Why does the SDK report success when user denies permissions?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/connection-success-does-not-mean-permissions-granted.md): This is intended behaviour.
- [Why does Health Connect heart rate sync cause OOM crashes?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/health-connect-oom-large-hr-window.md): Out-of-memory crashes reading Health Connect heart-rate data usually come from requesting too large a window at once, since HR samples are very dense.
- [Why is Google sign-in blocked in my WebView?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/google-oauth-blocked-in-webview.md): Google blocks OAuth inside embedded WebViews because the missing URL bar prevents users from verifying the domain, which surfaces as the disallowed\_useragent /…
- [How do users connect if the Apple companion app isn't in the App Store?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/missing-apple-companion-app-store-link.md): The companion app may not appear in normal App Store search.
- [How do I request more health permissions from existing users?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/expand-permissions-existing-users.md): To request more permissions from existing users, call initConnection again with an expanded set of customPermissions.
- [Why does Samsung initConnection return invalid session token?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/samsung-init-errors-token-devmode.md): An invalid-session-token error on initConnection almost always means the SDK was initialised with a different dev ID from the one used to generate the auth…
- [How does the Apple Health SDK work?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/apple-health-sdk-overview-capabilities.md): Apple Health has no server API.
- [Why does generateAuthToken hit a CORS error?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/auth-token-generate-server-side.md): Two separate things are happening here
- [Google Fit vs Health Connect SDK connection types?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/google-fit-vs-health-connect-connection-types.md): The two connection types differ in what they read
- [Why isn't Health Connect background sync firing?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/health-connect-background-sync-not-firing.md): Health Connect background sync behaves differently from Apple Health, so schedulerOn=true working immediately is not expected on first connection.
- [Why did my Python SDK data pulls stop working?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/stale-sdk-version-broke-compat.md): If data pulls suddenly stop on an older Terra client SDK version, the cause is usually an API change that broke compatibility with the outdated SDK, not…
- [Why do I get 'Invalid dev-id was provided'?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/invalid-dev-id-validation-catchall.md): The authenticateSDKUser endpoint returns Invalid dev-id was provided for any validation failure on that call, not only a bad dev-id.
- [How do getSleep start and end date filters work?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/getsleep-date-filter-behaviour.md): getSleep(startDate, endDate) returns sleep sessions for that window, and the end time is not ignored.
- [Why does the Health Connect permission screen never appear?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/mobile-sdk-setup-permissions-and-crashes/health-connect-permission-screen-missing-client-build.md): A Health Connect permission screen that never appears (with empty payloads) can be caused by your own build plugin rendering Android intents incorrectly…
- [Webhooks, dedup and sync reliability](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability.md): Webhooks, dedup and sync reliability
- [Why are daily step totals inconsistent across webhooks?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/daily-payload-cumulative-overwrite-by-day.md): Daily payloads are a running summary of the 24-hour period, sent multiple times as new data arrives, each containing totals up to that point.
- [How do I make production sync reliable?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/webhooks-as-primary-source-best-practice.md): Use webhooks as your primary data source.
- [How do I dedupe two payloads for the same event?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/dedup-by-summary-id-overwrite-updates.md): A data point is uniquely identified by the tuple (user\_id, metric/type, start\_time, end\_time, summary\_id), even when summary\_id or timestamps are null.
- [How do I dedupe multiple sources behind Apple Health?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/apple-health-multi-source-dedup.md): For Apple Health, payloads can combine data from multiple contributing apps
- [Can Apple Health data arrive near real-time?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/apple-sdk-sync-timing-foreground-dependent.md): Apple Health sync timing is controlled by iOS, which decides when to release resources to deliver new data, so true real-time delivery cannot be guaranteed.
- [How reliable is iOS background data delivery?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/ios-background-delivery-reliability-setup.md): On iOS, background delivery is triggered by the OS when new HealthKit data is available, not on a fixed schedule.
- [Can a payload show its originating source through an aggregator?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/originating-source-via-device-data.md): It depends on the provider.
- [How do I stop receiving Oura data through Apple?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/apple-foreign-data-tagged-apple-filter.md): Other apps such as Oura write their readings into Apple HealthKit.
- [Can I detect and exclude manually entered steps?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/manual-entry-upload-type-filtering.md): Most wearable APIs flag manually entered data, surfaced in metadata.upload\_type
- [Why does Samsung Health send webhooks with empty data?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/samsung-health-empty-data-not-syncing.md): When Samsung Health (read via Health Connect) returns empty payloads, work through three things
- [Why are deleted Garmin activities still returned?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/garmin-deleted-activities-persist.md): Garmin's Health API does not publish an activity-deletion event, so once an activity reaches Terra, a later delete in Garmin Connect never reaches us and the…
- [Why does a daily payload look missing for one day?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/timezone-date-boundary-missing-day.md): This is a timezone boundary effect, not missing data.
- [What sync frequency can I expect per provider?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/sync-freshness-bottleneck-device-to-cloud.md): Sync frequency depends on whether a provider is push-based or polled
- [How do I dedupe sleep webhooks with the same start time?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/sleep-dedup-summary-id.md): Use the summary\_id field under metadata to uniquely identify and update sleep records, rather than the start\_time/end\_time pair.
- [Why was the same workout re-sent with a different timezone?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/apple-travel-timezone-duplicate-workouts.md): Apple Health timestamps use the device's current timezone at sync time, and historical timezones can't be retrieved on iOS.
- [What webhook traffic rates should I expect?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/webhook-traffic-rates.md): Expected webhook traffic and burst patterns depend on your device mix, so there is no single rate.
- [Why do Apple body metrics arrive after step changes?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/apple-body-payloads-independent.md): Metrics like VO2 Max, lean body mass, and body fat are delivered in body payloads, which are sent independently of daily payloads.
- [Why did the first webhook lack heart rate?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/near-simultaneous-webhooks-use-latest.md): When two webhooks arrive close together for the same session, the earlier one may lack a field like heart rate because the source data was still being updated.
- [Why do Oura payloads differ from the Oura app?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/oura-app-vs-terra-discrepancy.md): Discrepancies between the Oura app and Terra usually have two causes
- [Why does Oura app HRV differ from the API HRV?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/hrv-app-vs-api-calculation-diff.md): A different HRV in the provider's app versus the Terra API is usually a difference in calculation method, not a data discrepancy.
- [Why did new payload fields break my parser?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/additive-schema-new-fields-parser.md): New fields can appear in payloads as part of normalised-schema updates.
- [Why are COROS activities delayed by several minutes?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/coros-polling-latency-no-webhooks.md): Yes, this latency is expected.
- [What is the permission\_change webhook type?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/informational-webhook-event-types.md): The permission\_change webhook is an informational event sent when an end user modifies the scopes granted to your app.
- [How do I know when a data request's last event arrived?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/webhooks-dedup-and-sync-reliability/track-webhook-request-completion.md): Webhook payloads include the terra-reference header value returned in the synchronous API response, so you can match deliveries to a specific request and track…
- [Provider coverage and per-provider data availability](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability.md): Provider coverage and per-provider data availability
- [Do you support CGMs like Dexcom?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/cgm-coverage-dexcom.md): Dexcom (including G7) is a reliable direct integration.
- [Why are step and distance metrics empty for WHOOP?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/provider-limitation-steps-distance.md): WHOOP devices have no step counter, so step and walking-distance metrics are never produced and those fields are always empty for WHOOP-connected users.
- [Why is hr\_zone\_data always empty for this provider?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/hr-zone-data-empty-per-provider.md): hr\_zone\_data is only populated for providers that expose it through their API.
- [Why doesn't Garmin calorie series match total\_burned\_calories?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/garmin-calorie-timeseries-vs-total.md): The calorie time series tracks active burn only, while total\_burned\_calories is the whole-day figure including BMR (resting calories).
- [Can I get time-in-zones and strength detail for Garmin?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/garmin-no-timeinzones-no-exercise-detail.md): Garmin's Health API does not provide
- [Why are Garmin daily fields like respiration and VO2 max null?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/garmin-daily-fields-null-on-other-payloads.md): Many fields that look null on the Garmin daily payload are actually delivered, just on the sleep or body payload rather than the daily envelope.
- [Why does stress data have no samples array?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/stress-data-samples-and-fields.md): Detailed stress samples are currently only available from Garmin.
- [Why don't Zwift activities forward from Garmin to Terra?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/garmin-no-third-party-activity-forwarding.md): This is expected: Garmin deliberately does not forward third-party uploaded activities (for example, from Zwift) through the API Terra uses.
- [Why is Apple Watch Sleep Score null?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/apple-sleep-score-not-exposed-by-healthkit.md): Apple's Sleep Score currently appears only on the watch/device and is not synced into Apple Health, so it isn't readable through HealthKit and comes through as…
- [Are Google Fit and Health Connect the same provider?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/googlefit-vs-health-connect-distinction.md): They are distinct providers
- [Why does Apple Health nutrition data have no timestamps?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/apple-nutrition-daily-totals-only.md): Apple Health nutrition values do carry per-entry timestamps.
- [Why does this provider's nutrition payload lack meal entries?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/nutrition-no-meal-level-detail.md): Individual meal data is not currently provided by this nutrition provider's API.
- [How do I get weight data from MyFitnessPal?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/myfitnesspal-no-body-weight.md): MyFitnessPal does not provide a body payload, because weight data is not accessible through the MyFitnessPal API.
- [Can I get raw uncalibrated CGM sensor values?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/raw-uncalibrated-cgm-not-available.md): Terra does not provide access to raw or uncalibrated CGM sensor data.
- [Which regions does Keto-Mojo support?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/ketomojo-supported-regions.md): Ketomojo is supported in two regions: US and EU.
- [Why are WHOOP sauna sessions missing from workout data?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/whoop-sauna-missing-no-strain.md): This is a WHOOP limitation, not a Terra one.
- [Is Vald strength-testing data supported?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/vald-team-sports-beta-integration.md): Vald is supported and exposes test/measurement data.
- [Do you support sleep data from COROS watches?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/coros-limited-sleep-detail.md): Sleep data is supported for COROS, but the COROS API only exposes very limited sleep information.
- [Can I get daily payloads for MapMyFitness and Strava?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/daily-payload-availability-aggregation.md): Daily payloads aggregate values recorded both during and outside workouts, which only some providers expose.
- [Why does Garmin swim data show more laps than the app?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/garmin-swim-laps-vs-lengths.md): For Garmin swimming activities, the laps array is mapped from Garmin 'lengths' (one per pool length) rather than the laps the user marks on the watch, which is…
- [Which providers return MET minutes?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/met-minutes-provider-coverage.md): MET minutes availability depends on the source provider
- [How regular are SpO2 and HRV samples from watches?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/cgm-spo2-hrv-sample-regularity.md): Sample regularity is determined by the device.
- [Which smart scales have the most reliable data flow?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/smart-scale-reliability.md): WiFi-connected scales can be unreliable at uploading readings to the provider cloud, especially when users do not open the companion app.
- [Is rr\_interval\_ms available for Fitbit?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/fitbit-rr-interval-not-exposed.md): Fitbit does not expose raw inter-beat (RR) intervals through its HRV endpoint; it returns low-to-high frequency band ranges rather than IBI values directly, so…
- [Is Garmin hydration data exposed?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/garmin-hydration-not-provided.md): Garmin does not provide hydration data, so hydration fields are null for Garmin users.
- [How do I get historic Garmin menstrual cycles?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/garmin-historical-menstruation-via-api-pull.md): Historical menstruation data from Garmin is retrieved the same way as any other historical data: via the historical data-retrieval endpoints.
- [Does the activity webhook include GPS and lap data?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/garmin-activity-gps-laps-location.md): Activity payloads include
- [Are Apple Health clinical records available?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/apple-health-clinical-records-unsupported.md): Apple Health clinical health records are not currently supported through Terra.
- [Why is bpm -1 in Apple heart rate samples?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/apple-bpm-minus-one-source-data.md): A bpm value of -1 typically originates from the source data in Apple Health, not from Terra processing.
- [Can I get detailed Apple workout routes, HR zones, laps?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/apple-detailed-workout-data-available.md): Detailed Apple workout data is available wherever it also exists in Apple Health.
- [Do I get data events if a device isn't worn?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/no-data-when-device-not-worn.md): If a user stops wearing their device, no new data is generated, so you will not receive data events.
- [Why does Polar Verity Sense send no daily or sleep data?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/session-only-devices-no-daily-sleep.md): Some Polar devices, like the Verity Sense, are session-only sensors rather than all-day trackers, so they do not produce daily or sleep summaries.
- [Does Fitbit retrieve steps once daily or intraday?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/fitbit-intraday-step-frequency.md): Terra uses Fitbit's intraday step endpoint, so step data is retrieved multiple times per day (roughly 10-20 times) via Fitbit webhooks rather than once daily.
- [Why are Huawei heart rate samples once per minute?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/huawei-hr-downsampled-upstream.md): Huawei's public Health Kit only exposes the com.huawei.instantaneous.heart\_rate stream, stored at roughly one sample per minute, plus activity-level aggregate…
- [How do I read partial field availability on the support page?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/support-page-partial-field-availability.md): On the wearable-data support page, a partial-support indicator means data may arrive from that device but not all fields will be populated.
- [Why are Garmin step samples empty but totals correct?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/garmin-step-samples-empty-epochs-webhook.md): This is expected Garmin behaviour.
- [Is Oura Ring 4 data accessible via Terra?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/oura-coverage-ring4-payloads.md): Yes, Oura Ring 4 is fully supported.
- [Are Oura women's health features available?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/oura-womens-health-not-exposed.md): Oura's Cycle Insights and menopause tracking are not available through the integration, because Oura does not expose those features via its third-party API.
- [Why are COROS sleep stages and sleep score missing?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/coros-sleep-stages-not-exposed.md): COROS's partner API does not expose sleep stages or a sleep score, so those fields cannot be delivered even though they appear in the COROS Training Hub UI.
- [Why is Health Connect glucose missing timezone and device\_data?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/health-connect-glucose-timezone-device-data.md): For Health Connect glucose, timestamps are sent as the UTC instant without a timezone suffix, so parse them as UTC and apply the user's timezone yourself.
- [Why is Apple Health body composition data missing?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/apple-body-composition-fields-missing.md): Apple Health does not have skeletal muscle mass or visceral fat as data types, so there is nothing to read or pass on for an Apple connection.
- [Can I compute HR zones from hr\_samples?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/provider-coverage-and-per-provider-data-availability/compute-hr-zones-from-samples.md): hr\_samples from the Activity event are the right input for computing your own zones.
- [Data model, fields and units](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units.md): Data model, fields and units
- [Why are so many data fields null?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/null-fields-are-provider-dependent.md): Null or empty fields almost always mean the provider's API does not expose that metric (even if it appears in their consumer app), not a Terra error.
- [Where do Garmin VO2 max and sleep score appear?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/garmin-metric-locations-in-data-model.md): Garmin metrics are split across payload types, so inspecting only the daily webhook makes them look empty.
- [Where do I find field definitions and enum values?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/field-definitions-and-enum-lookup.md): Full field-by-field definitions for every payload type are in the API reference data models section, and enum values like ActivityType are listed there too.
- [Is the meal timestamp consumed time or logged time?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/nutrition-meal-timestamp-meaning.md): The meal timestamp reflects whatever the upstream provider returns.
- [Why is sleep duration shorter than the session window?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/sleep-duration-shorter-than-window.md): Sleep state durations are computed from the hypnogram samples the provider returns.
- [Why doesn't activity end time equal start plus active seconds?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/activity-elapsed-vs-active-seconds.md): The two durations measure different things, so a mismatch is expected.
- [What's the difference between resting and average HR in sleep?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/resting-vs-average-hr-scope.md): The two fields cover different scopes within the sleep session.
- [Can I get data in imperial units instead of metric?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/units-metric-only-no-imperial.md): All data is normalised to the standard metric/SI units defined in Terra's data models, regardless of the end user's device or provider unit settings.
- [What units and scales do health and enrichment scores use?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/score-and-enrichment-units-scales.md): Provider scores (activity, sleep, recovery) are unit-less values on a 1-100 scale, calculated by the providers themselves, so 'good' can differ between brands.
- [What is the difference between body and daily payloads?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/daily-vs-body-payload-differences.md): Daily and Body payloads cover different things, with some deliberate overlap.
- [How do I build sleep stage charts from hypnogram samples?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/hypnogram-single-timestamp-reconstruction.md): Yes, you can build a sleep stage chart from single-timestamp hypnogram samples.
- [Why is a webhook field not in the documented schema?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/schema-source-of-truth-extra-fields.md): The authoritative schema is the published OpenAPI specification in the public GitHub repository, and the REST API reference is the source of truth for field…
- [What's the difference between the three sleep scores?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/three-sleep-scores-explained.md): There are three sleep scores
- [Does inactivity\_seconds include sleep?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/inactivity-seconds-includes-sleep.md): For providers that don't report inactive time directly (like Garmin), inactivity\_seconds is computed as 24 hours minus active time.
- [What units is the sleep temperature delta in?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/temperature-delta-units.md): The temperature delta field in sleep payloads is in degrees Celsius.
- [Why isn't activity name one of the Terra activity enums?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/activity-name-vs-type-enum.md): metadata.name carries the user's custom activity title from the provider and can be any free-text string.
- [How does the net carbohydrates field work across providers?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/net-carbohydrates-field-and-provider-variance.md): The nutrition data model includes a macros.net\_carbohydrates\_g field even where the docs lag.
- [How do I explore the FHIR output format?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/fhir-format-documentation.md): To explore the FHIR format, switch a testing environment to FHIR processing and use the data generator to send sample payloads to your webhook.
- [Is the device-to-phone sync timestamp in the payload?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/sync-timestamp-not-exposed.md): Terra does not store or expose the exact timestamp at which a wearable synced to its companion phone app.
- [What's in active durations and intensity buckets?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/active-durations-and-intensity-buckets.md): In Daily payloads, active\_durations\_data aggregates the whole day's activity
- [Are activity payloads standardised across providers?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/activity-model-standardized.md): Terra standardises all activity data into a single unified Activity model regardless of provider, covering movement, heart rate, power, distance, calories and…
- [Does Terra smooth samples, and why do array lengths differ?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/no-smoothing-sample-array-length-mismatch.md): Terra applies no smoothing or post-processing to sample data; values are piped through as the provider supplies them, so any smoothing you see is applied at…
- [Are weight and body fat supported in body payloads?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/body-measurements-supported.md): Body measurement data is supported in the body payload across all environments, including production.
- [What is RR\_INTERVAL and which devices stream speed?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/rr-interval-and-streaming-coverage.md): RR\_INTERVAL is the time between two consecutive R-waves (R-peaks of consecutive QRS complexes), typically provided by chest and arm straps alongside heart rate.
- [Why is a WHOOP activity mapped to the wrong type?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/activity-type-mislabel-defaults-to-other.md): Activity type mislabelling usually stems from the provider sending a generic or unmapped type code, which Terra maps to a default.
- [Is visceral\_fat\_level a percentage?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/visceral-fat-level-units.md): visceral\_fat\_level is the raw numeric index passed through from the scale device.
- [What does the timestamp\_localization metadata field mean?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/data-model-fields-and-units/metadata-field-meanings.md): The timestamp\_localization field in payload metadata indicates whether the provider's timestamps are truly localized
- [Authentication, users and connection state](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state.md): Authentication, users and connection state
- [How do I deauthenticate users in bulk?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/deauthenticate-users.md): To disconnect a specific user, call /auth/deauthenticateUser with the user's user\_id (this is API-only, not available in the dashboard).
- [Why are there multiple Terra users for one reference\_id?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/multiple-terra-users-per-reference-id.md): A single provider account maps to exactly one Terra user.
- [How do I detect whether a user connected a wearable?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/detect-connection-and-list-users.md): Use the /userinfo endpoint, optionally filtering by your reference\_id, to list a user's connections and all associated user\_ids.
- [Why are multiple user\_ids created for one reference\_id?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/user-uniqueness-reference-id.md): Each Terra user\_id represents a single user-provider connection, and every data request is scoped to one user\_id (one call returns one provider's data).
- [Why does getUserId return null after init?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/verify-connection-getuserid-not-checkauth.md): checkAuth is deprecated and only returns a boolean with no error context.
- [How do I detect an existing native SDK connection?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/detect-existing-connection-disconnect.md): Use the mobile SDK's getUserId function for the connection type to detect an existing native connection.
- [How do I start user authentication?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/auth-flow-start.md): There are two ways to authenticate users
- [Can I share one reference\_id across multiple users?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/reference-id-uniqueness-per-user.md): Sharing a single reference\_id across multiple end users is not supported.
- [How do I get a user's MyFitnessPal username from user\_id?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/get-provider-username-via-athlete.md): Call the Athlete endpoint to get the provider-side username from a Terra user\_id
- [How do I verify a connection with userInfo?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/userinfo-verification-flow.md): Verify a connection by calling GET /v2/userInfo with the user\_id taken from the user.user\_id field of the auth\_success webhook payload, not the widget redirect…
- [What triggers an Omron deauth event?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/omron-deauth-event-trigger.md): An Omron deauth webhook is triggered by a call to the /deauthenticateUser endpoint, which fires this event.
- [Why no new auth event when Apple Health reconnects?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/apple-no-auth-event-on-reconnect.md): This is expected behaviour.
- [Why does InBody error that the API version is unsupported?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/expired-auth-link.md): A required components unavailable on your version error is often not a version problem at all, but an artifact of an expired authentication link.
- [Can I get the provider OAuth tokens Terra holds?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/provider-oauth-tokens-not-exposed.md): Terra cannot expose the provider OAuth tokens it manages.
- [Is there a pending state or timeout for initConnection?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/initconnection-no-pending-state.md): initConnection creates the connection synchronously on Terra's backend, so there is no lingering 'pending' state.
- [Can providers connect without the widget?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/authentication-users-and-connection-state/widget-optional-direct-api-auth.md): The widget is a convenience for the front-end auth flow, not a requirement.
- [API endpoints, errors and migrations](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations.md): API endpoints, errors and migrations
- [Why does the GET API return 200 with no data array?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/to-webhook-default-and-empty-response.md): By default, data GET requests use to\_webhook=true, so data is delivered asynchronously to your configured webhook and the immediate response contains only user…
- [Should I migrate to the access.tryterra.co endpoint?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/migrate-to-new-api-infrastructure.md): If you received the migration email, switch REST requests to the new base URL https://access.tryterra.co/api/v2.
- [Why do I get a 400 connection does not support data type error?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/unsupported-data-type-per-provider.md): A 400 connection does not support requested data type means the connected provider does not offer that data type.
- [Why am I getting a 403 on generateWidgetSession?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/rate-limits-and-no-bans.md): A 403 on this endpoint is usually a configuration or scope issue, not an account block.
- [Why does the API return "Request is processing" instead of data?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/garmin-async-processing-and-cache.md): For some providers (notably Garmin), the first REST request for a given period returns Request is processing, try again later while the data is fetched…
- [Why does authenticateUser fail for some provider names?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/sdk-vs-web-providers.md): Providers marked setup: 'SDK' in /v2/integrations/detailed (Apple Health, Google Fit / Health Connect) cannot be used with /v2/auth/authenticateUser, which is…
- [Is the JavaScript SDK deprecated?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/js-sdk-deprecation-backend-sdk-versions.md): The legacy JavaScript npm package still functions but no longer receives updates and was removed from the docs.
- [Why does generateWidgetSession return a 500?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/widget-session-providers-string-format.md): For generateWidgetSession, the providers field must be a single comma-separated string (for example, "GARMIN,FITBIT,OURA"), not a JSON array or list.
- [Why does a Hevy activity pull return 404?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/hevy-unsupported-data-type-404.md): Some providers only support a subset of data types.
- [Why do some auth URLs error out?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/auth-url-errors.md): If an integration is absent from the supported-integrations list in the docs, it has likely been deprecated.
- [How do I migrate WHOOP from V1 to V2?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/whoop-v1-to-v2-migration.md): To move from WHOOP API V1 to V2, change the webhook endpoint version from V1 to V2 in the WHOOP developer dashboard.
- [Where did the activity type enum docs move?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/garmin-enum-docs-moved.md): The activity type enums documentation moved during the docs reorganisation and now lives in the API reference section of the docs.
- [Why is the OpenAPI spec docs link broken?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/openapi-spec-link-broken.md): If the OpenAPI specification page link is broken, the spec is also published in Terra's public openapi GitHub repository, which you can use in the meantime.
- [How do I delete lab report uploads?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/data-deletion-via-ticket.md): Lab report / upload deletion is currently handled by opening a support ticket.
- [Why does Team API create-coach return an invalid token error?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/token-casing-self-resolved.md): An invalid-token or region error on Team API create-coach can be caused by incorrect casing in the token.
- [Why does authenticateUser return a malformed request body error?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/request-body-strict-typing.md): A malformed request body error usually means a field is the wrong type, for example reference\_id must be a string, not an integer.
- [Why does /activity return invalid user id after auth?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/environment-mismatch-invalid-user-id.md): An invalid user id error on a user that looks authenticated usually means the request credentials belong to a different environment than the user.
- [Why does the duplicate-workout-name error differ by provider?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/provider-error-string-normalisation.md): Error detail strings differ across providers because Terra normalises some providers' error conditions into a consistent message, while passing others through…
- [How do I point the terra-api npm client at the new endpoint?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/api-endpoints-errors-and-migrations/npm-client-custom-baseurl-new-endpoint.md): You can route to the new direct endpoint today, without waiting for a package release, by passing a custom baseUrl to the SDK client constructor (set it to the…
- [Historical data and backfill](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill.md): Historical data and backfill
- [Why does Apple Health backfill return empty arrays?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill/apple-health-sdk-backfill.md): Apple Health data lives on the device, so historical data cannot be backfilled through the web/REST API.
- [Why does a historical fetch return a 504 timeout?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill/historical-fetch-size-timeouts-504-413-500.md): Large synchronous historical pulls (to\_webhook=false) can exceed the response-size limit or the ~30s gateway timeout, returning 504 / 413 / 500, especially…
- [Why am I hitting rate limits during a backfill?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill/provider-rate-limits-backfill.md): A 429 carrying a provider rate-limit message means the upstream provider's per-user quota is exhausted, not a Terra limit.
- [When is historical data available after connect?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill/mobile-native-no-backfill-sdk-fetch.md): Mobile-native sources read from data stored on the user's phone, not a cloud history.
- [Can the SDK retrieve historical data, and over what period?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill/sdk-backfill-historical-retrieval.md): SDK-provider data can flow automatically once a user connects, if the scheduler is on.
- [Why did old Garmin payloads arrive without my request?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill/garmin-unrequested-historical-payloads.md): This is expected behaviour given Garmin's API design, not an error on your side.
- [How do CGM glucose webhook payloads work?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill/cgm-glucose-body-payload-delivery-history.md): Payload structure: each body payload contains all glucose samples for a given calendar date in the user's local timezone, and updates are supersets of previous…
- [Can I default Garmin historical data permission on?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill/garmin-historical-data-permission-off-default.md): Historical data permission is off by default for Garmin connections and cannot be changed.
- [Why is a workout timestamp weeks in the past?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill/apple-late-historical-workout-timestamps.md): Workout timestamps reflect when the activity was originally performed, not when it was synced.
- [Can I see the COROS historical-consent choice?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill/coros-historical-consent-not-surfaced.md): The COROS historical-data consent prompt is shown during their OAuth flow, but COROS does not return the user's choice in the token response, so Terra cannot…
- [Are there limits on Wahoo backfill requests?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill/wahoo-backfill-no-rate-limit.md): We are not currently aware of specific rate limits on Wahoo workout backfill requests, but provider behaviour can change.
- [How do I detect backfill completion with S3 destinations?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill/s3-reference-id-and-backfill-completion.md): reference\_id is only populated if you pass it when connecting users (in the widget session or the generateAuthToken call); otherwise it is null.
- [Why isn't the backfill / Sync Now button working?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/historical-data-and-backfill/historical-date-param-format.md): When triggering a historical pull or backfill, the start and end date parameters must be a plain date (YYYY-MM-DD), not a full ISO timestamp with time and…
- [Account config, environments and going live](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live.md): Account config, environments and going live
- [What does 'user limit reached' mean in testing?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/test-staging-user-limit.md): Testing and staging environments have a fixed cap on connected users each.
- [Can samples be enabled per provider instead of globally?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/samples-gps-config.md): The account-wide samples toggle for webhooks cannot be set per provider.
- [Why does the API return a no-permissions error for a data type?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/scopes-permissions-config.md): The error You do not have permissions for this data category usually means that data type is disabled in your dashboard configuration.
- [How does the 2026 Google Fit deprecation affect me?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/google-fit-2026-deprecation.md): Terra's 'Google Fit' provider is implemented via the mobile SDK reading from Health Connect on-device, not the deprecated Google Fit REST API, so it is already…
- [How do I get a sandbox or test account for QA?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/test-tooling-and-sandbox.md): Here's the tooling for QA testing
- [What extra steps are needed to go to production?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/go-live-no-approval-needed.md): No additional validation or approval from Terra is required to go to production.
- [Do I need my own Strava API app?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/strava-own-app-and-quota.md): Register your own Strava API app to get a dedicated rate-limit bucket separate from other Terra customers.
- [Why is the scopes field empty for on-device connections?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/samsung-empty-scopes-field.md): For SDK-based on-device connections, the scopes field is informational and used mainly for debugging, so it can be empty without affecting data flow.
- [Does disabling a provider disconnect connected users?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/disabling-provider-keeps-connections.md): Disabling a provider in your dashboard does not deauthenticate users who already connected.
- [Which providers show data-type toggles during auth?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/auth-scope-toggles-and-sync-behavior.md): Whether end users see toggles to choose which data types to share is provider-specific
- [How do I meet Garmin's brand attribution requirement?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/garmin-brand-attribution-requirement.md): Garmin's brand guidelines require that users can clearly see when displayed data originates from Garmin devices.
- [How do I handle the Fitbit-to-Google migration?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/fitbit-to-google-migration.md): For the Fitbit-to-Google account migration, keep using the Fitbit connection for both new and existing users.
- [Can the payload simulator send FIT files?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/payload-simulator-fit.md): The payload simulator follows your account's processing format.
- [Why am I hitting the staging user limit?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/expo-duplicate-test-users-staging-limit.md): Expo can regenerate device IDs during development, which creates duplicate test users and can exhaust the staging user limit.
- [How do I handle VAPT findings against the SDK?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/account-config-environments-and-going-live/vapt-security-findings-on-sdk.md): Common VAPT findings on the SDK, and how to handle each
- [Realtime streaming and BLE](https://docs.tryterra.co/faq/help-topics/data-api-sdk/realtime-streaming-and-ble.md): Realtime streaming and BLE
- [Which providers support real-time streaming?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/realtime-streaming-and-ble/streaming-api-capabilities-devices.md): Terra's real-time Streaming API (Real-Time SDK / TerraRT) only works with devices that broadcast continuously over BLE or ANT+, for example certain…
- [Why does BLE realtime throw 'no supported characteristics'?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/realtime-streaming-and-ble/ble-realtime-supported-devices.md): Real-time BLE streaming only works with devices that broadcast over a recognised standard BLE characteristic (for example heart rate).
- [Why does realtime streaming return success but no events?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/realtime-streaming-and-ble/realtime-streaming-ble-broadcast-required.md): Real-time streaming only works with devices that actively broadcast heart rate over BLE.
- [Can Garmin watches stream heart rate over BLE in real time?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/realtime-streaming-and-ble/realtime-ble-streaming-capabilities.md): Real-time streaming via TerraRT works only for the metrics a device actually broadcasts over BLE.
- [How do I make Apple Watch streaming work from Flutter?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/realtime-streaming-and-ble/apple-watch-streaming-watchos-companion.md): Apple Watch streaming requires a separate watchOS companion target, managed natively in Xcode and written in Swift, even when the main app is Flutter or React…
- [Why does iOS realtime streaming fail TestFlight upload?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/realtime-streaming-and-ble/ios-streaming-info-plist-bluetooth-keys.md): iOS realtime streaming needs Bluetooth (and optionally Motion) usage-description keys in Info.plist so permissions are requested at first launch and submission…
- [How do I keep BLE streaming alive when iOS is backgrounded?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/realtime-streaming-and-ble/realtime-keep-alive-backgrounded-ios.md): Continuous websocket realtime streaming cannot run while the iOS app is backgrounded.
- [How do I test realtime streaming without a wearable?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/realtime-streaming-and-ble/test-realtime-without-wearable-phone-sensors.md): The data generator/simulator does not yet support realtime streaming simulation, it covers the Unified API and mobile SDK only.
- [Why does my watch streaming session hang?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/realtime-streaming-and-ble/terra-instance-singleton-watch-hang.md): If a TerraRT streaming session hangs and stopExercise callbacks never fire, check whether the Terra() instance is being created more than once (for example…
- [Extra features: scores, graphs, teams, nutrition, CGM](https://docs.tryterra.co/faq/help-topics/data-api-sdk/extra-features-scores-graphs-teams-nutrition-cgm.md): Extra features: scores, graphs, teams, nutrition, CGM
- [Why are data\_enrichment health scores null?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/extra-features-scores-graphs-teams-nutrition-cgm/health-scores-data-enrichment-null.md): Terra Health Scores under data\_enrichment are gated by input-metric availability, not by provider, and there are several reasons they come back null
- [How do I dedup updated vs new meals across nutrition webhooks?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/extra-features-scores-graphs-teams-nutrition-cgm/nutrition-meals-upsert-no-stable-id.md): Treat meals within a nutrition payload like samples, not ID-dependent records.
- [Is the Teams API available and how do I use it?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/extra-features-scores-graphs-teams-nutrition-cgm/teams-api-beta.md): The Teams API is in semi-public beta ahead of full release, and is webhook-based.
- [How do I implement the Health Rewards feature?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/extra-features-scores-graphs-teams-nutrition-cgm/rewards-and-health-scores.md): Health Rewards has no dedicated data-collection API endpoints in the webhook model.
- [How do I use the Graph API to display per-user data?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/extra-features-scores-graphs-teams-nutrition-cgm/graphs-feature.md): The Graph API generates per-user charts (sleep, HR, steps, glucose and more).
- [Can I send workouts to Apple, Garmin and COROS watches?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/extra-features-scores-graphs-teams-nutrition-cgm/planned-workout-push-to-watch.md): Pushing a workout to a watch is exactly what the Planned Workouts API is for: define a structured workout as a template, then schedule it to a user and it…
- [How do Garmin planned workouts handle completion and updates?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/extra-features-scores-graphs-teams-nutrition-cgm/garmin-planned-workout-lifecycle.md): Terra's Garmin planned-workout adapter uses Garmin's Workout Schedule endpoint.
- [Why do nutrition provider activity events have null summary\_id?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/extra-features-scores-graphs-teams-nutrition-cgm/nutrition-provider-null-activity-events.md): Some nutrition-focused providers (for example, Nutracheck) do not supply a summary ID or accurate start/end times for workouts, so their activity payloads can…
- [Can I look up food details from the nutrition meal id?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/extra-features-scores-graphs-teams-nutrition-cgm/nutrition-meal-name-null-id-not-lookupable.md): The meal id in a nutrition payload is a provider-specific passthrough identifier and cannot be looked up via the API to retrieve food details.
- [Which hosted graph session types exist?](https://docs.tryterra.co/faq/help-topics/data-api-sdk/extra-features-scores-graphs-teams-nutrition-cgm/custom-hosted-graph-session-types.md): Only some metrics have named hosted graph session types (for example SLEEP\_HRV\_SUMMARY, SLEEP\_RESPIRATORY\_RATE\_SUMMARY).
- [My data isn't arriving](https://docs.tryterra.co/faq/help-topics/no-data.md): Data not showing up, stopped, delayed, or missing from payloads.
- [Connected but no data arriving](https://docs.tryterra.co/faq/help-topics/no-data/connected-but-no-data-arriving.md): Connected but no data arriving
- [Why is no Samsung Health data syncing after I connected?](https://docs.tryterra.co/faq/help-topics/no-data/connected-but-no-data-arriving/samsung-healthconnect-sdk-pull-required.md): Samsung Health is a mobile-SDK integration read through Health Connect (Samsung writes into Health Connect, the SDK reads from there), so there is no…
- [Why does my Huawei connection send no data?](https://docs.tryterra.co/faq/help-topics/no-data/connected-but-no-data-arriving/huawei-permissions-and-toggles-required.md): Huawei connecting without data almost always traces to a permission or toggle on the user's side, or missing key scopes.
- [Is there a more reliable Samsung Health connection path?](https://docs.tryterra.co/faq/help-topics/no-data/connected-but-no-data-arriving/samsung-direct-route-recommended.md): When Samsung via Health Connect is unreliable, the recommended path is Terra's direct Samsung Health route, which does not require Health Connect and delivers…
- [Why isn't my Renpho body measurement data showing up?](https://docs.tryterra.co/faq/help-topics/no-data/connected-but-no-data-arriving/renpho-legacy-accounts-only.md): The Renpho integration currently supports end users on older (legacy) Renpho accounts.
- [What does google\_no\_datasource mean?](https://docs.tryterra.co/faq/help-topics/no-data/connected-but-no-data-arriving/google-fit-no-datasource.md): The google\_no\_datasource warning means Terra connected to the Google account but found no fitness data sources.
- [Why are Garmin/Samsung datasets empty?](https://docs.tryterra.co/faq/help-topics/no-data/connected-but-no-data-arriving/wrong-provider-account-connected.md): Empty datasets often mean the user connected the wrong provider account.
- [Why is my payload history empty?](https://docs.tryterra.co/faq/help-topics/no-data/connected-but-no-data-arriving/empty-payload-history-no-cloud-data.md): An empty payload history usually means the connected user has no new data synced to the provider's cloud for that period, not a Terra delivery failure.
- [Why does my Fitbit data look wrong or barely match the Fitbit app?](https://docs.tryterra.co/faq/help-topics/no-data/connected-but-no-data-arriving/fitbit-wrong-account-connected.md): The most common cause is that a different Fitbit account was connected than the one holding the user's data.
- [Webhooks & background delivery stopping](https://docs.tryterra.co/faq/help-topics/no-data/webhooks-background-delivery-stopping.md): Webhooks & background delivery stopping
- [How do I enable Apple Health background delivery?](https://docs.tryterra.co/faq/help-topics/no-data/webhooks-background-delivery-stopping/apple-health-background-delivery-not-configured.md): Apple Health flows from the on-device SDK to Terra's servers; there is no server-side pull, so a server-side GET /v2/{data\_type}?to\_webhook=true only returns…
- [Why does WHOOP only deliver data on manual pull?](https://docs.tryterra.co/faq/help-topics/no-data/webhooks-background-delivery-stopping/whoop-webhook-v2-and-byoc-config.md): If WHOOP data arrives only on manual pull but not automatically, the issue is the webhook configuration in the WHOOP developer portal, not your own endpoint.
- [Why is Apple Health syncing infrequently?](https://docs.tryterra.co/faq/help-topics/no-data/webhooks-background-delivery-stopping/apple-health-sync-frequency-and-stalls.md): Apple Health sync frequency is controlled by iOS, which pings the app to deliver new data only when there is new data and sufficient device resources.
- [Why am I getting auth but no Health Connect data webhooks?](https://docs.tryterra.co/faq/help-topics/no-data/webhooks-background-delivery-stopping/healthconnect-no-background-delivery.md): Whether Health Connect data flows automatically after authentication depends on the scheduler.
- [How are background sync gaps and payload size handled?](https://docs.tryterra.co/faq/help-topics/no-data/webhooks-background-delivery-stopping/background-sync-gaps-and-payload-chunking.md): Background sync gaps are usually end-user-side: the wearable hasn't synced to its app, battery-saving mode is on, or (for mobile SDKs) background refresh is…
- [What's the recommended delivery method?](https://docs.tryterra.co/faq/help-topics/no-data/webhooks-background-delivery-stopping/upgrade-api-version-for-delivery.md): Delivery instability is generally not specific to a destination like Firebase.
- [Why do Samsung users lose sync after the app sits idle?](https://docs.tryterra.co/faq/help-topics/no-data/webhooks-background-delivery-stopping/samsung-background-battery-sync-loss.md): On Samsung devices, both Health Connect and your app must stay alive in the background for sync to continue.
- [Connections expiring & disconnecting](https://docs.tryterra.co/faq/help-topics/no-data/connections-expiring-disconnecting.md): Connections expiring & disconnecting
- [How do I fix a Whoop 'authorization expired' error?](https://docs.tryterra.co/faq/help-topics/no-data/connections-expiring-disconnecting/authorization-expired-user-reconnect.md): An 'Authorization expired, please reauthorize with the data provider' error means the provider-side token is no longer valid, usually because the end user…
- [How do I handle silent mobile disconnects?](https://docs.tryterra.co/faq/help-topics/no-data/connections-expiring-disconnecting/silent-mobile-disconnect-reinit.md): Silent disconnects mainly affect mobile-based integrations like Apple Health and Health Connect.
- [How do I detect expired user connections?](https://docs.tryterra.co/faq/help-topics/no-data/connections-expiring-disconnecting/detect-expirations-via-webhooks-not-polling.md): To check whether a single connection is still valid, make a data request.
- [How do I disconnect a user?](https://docs.tryterra.co/faq/help-topics/no-data/connections-expiring-disconnecting/how-to-disconnect-delete-connection.md): Disconnecting a user is handled backend-side, not in the mobile SDK and not from the dashboard.
- [Why is a user's Garmin activity missing with no webhook?](https://docs.tryterra.co/faq/help-topics/no-data/connections-expiring-disconnecting/garmin-user-revoked-access.md): A sudden, user-specific Garmin cutoff almost always means the user revoked access in Garmin Connect (Settings Connected Apps).
- [Why does my Withings fetch return a failed dependency error?](https://docs.tryterra.co/faq/help-topics/no-data/connections-expiring-disconnecting/withings-upstream-error-reconnect.md): A failed dependency / 502 on a Withings fetch means Withings' API returned an error on Terra's request, usually temporary downtime, revoked auth, or an account…
- [What causes a Fitbit DEAUTH event?](https://docs.tryterra.co/faq/help-topics/no-data/connections-expiring-disconnecting/fitbit-shared-oauth-deauth-second-app.md): Fitbit allows only one active authorisation per user, so connecting the same Fitbit account through a second app revokes the first connection and fires a…
- [Historical backfill returns nothing](https://docs.tryterra.co/faq/help-topics/no-data/historical-backfill-returns-nothing.md): Historical backfill returns nothing
- [Why does Polar return no historical data?](https://docs.tryterra.co/faq/help-topics/no-data/historical-backfill-returns-nothing/polar-no-pre-auth-history-and-manual-excluded.md): Polar's API does not allow retrieving data recorded before the user authenticated, and historical retrieval is limited to roughly 30 days back from the…
- [Can Terra backfill historical Samsung Health data?](https://docs.tryterra.co/faq/help-topics/no-data/historical-backfill-returns-nothing/samsung-sdk-no-backfill-or-historical-recovery.md): Samsung Health data comes from the device via Health Connect, not a cloud API, so there is no server-side endpoint to resend or backfill historical days.
- [Why is Garmin historical backfill returning empty?](https://docs.tryterra.co/faq/help-topics/no-data/historical-backfill-returns-nothing/garmin-historical-export-toggle-off.md): Garmin historical retrieval requires the historical-data sharing option to be granted on Garmin's consent screen, which can default to OFF (and was defaulted…
- [Why does my Garmin backfill return empty payloads?](https://docs.tryterra.co/faq/help-topics/no-data/historical-backfill-returns-nothing/garmin-async-empty-then-bursts.md): Garmin delivers historical data asynchronously, so a backfill request can return success (Data sent to destination) with initially empty payloads, then data…
- [Why does Apple Health backfill return empty for a date range?](https://docs.tryterra.co/faq/help-topics/no-data/historical-backfill-returns-nothing/apple-health-historical-access-restricted.md): When a user first authorizes a new app for HealthKit, iOS may restrict access to some historical data even though the Health app shows it.
- [Why does Coros backfill return nothing?](https://docs.tryterra.co/faq/help-topics/no-data/historical-backfill-returns-nothing/coros-limited-history-and-native-only.md): Both behaviours are provider-side limitations on Coros, not Terra.
- [Can I backfill missing historical data?](https://docs.tryterra.co/faq/help-topics/no-data/historical-backfill-returns-nothing/historical-backfill-endpoints-and-gaps.md): Yes.
- [Why do historical requests only partially arrive?](https://docs.tryterra.co/faq/help-topics/no-data/historical-backfill-returns-nothing/async-historical-rate-limits.md): Historical data requests are processed asynchronously, so the API can return success while the upstream fetch later fails due to provider rate limits.
- [Missing fields & data types in payloads](https://docs.tryterra.co/faq/help-topics/no-data/missing-fields-data-types-in-payloads.md): Missing fields & data types in payloads
- [Why are Apple Health HR, sleep stages or GPS missing?](https://docs.tryterra.co/faq/help-topics/no-data/missing-fields-data-types-in-payloads/apple-health-missing-detailed-samples.md): Missing detail in Apple Health payloads almost always means the source did not record it, or a HealthKit permission was not granted, not a pipeline failure.
- [Why does Fitbit data look duplicated or missing?](https://docs.tryterra.co/faq/help-topics/no-data/missing-fields-data-types-in-payloads/fitbit-native-only-and-snapshot-behaviour.md): Fitbit's API only syncs data recorded by Fitbit's own devices, so third-party data routed into the Fitbit app will not arrive.
- [Why isn't third-party activity in Garmin Connect reaching Terra?](https://docs.tryterra.co/faq/help-topics/no-data/missing-fields-data-types-in-payloads/garmin-thirdparty-imports-excluded.md): Garmin's Wellness API only returns activities recorded natively on a Garmin device.
- [Why have my Fitbit heart rate fields gone null?](https://docs.tryterra.co/faq/help-topics/no-data/missing-fields-data-types-in-payloads/fitbit-samples-scope-empties-summaries.md): Fitbit heart-rate summary fields are computed from the heart-rate samples the provider sends, so disabling the samples scope in your dashboard also empties the…
- [Why is sleep null in my Fitbit daily payload?](https://docs.tryterra.co/faq/help-topics/no-data/missing-fields-data-types-in-payloads/sleep-is-separate-data-type.md): Sleep is delivered as a dedicated sleep data type, not inside the daily payload.
- [Why are glucose and temperature samples missing?](https://docs.tryterra.co/faq/help-topics/no-data/missing-fields-data-types-in-payloads/with-samples-flag-required.md): Sample-level data such as glucose and temperature readings is only included when the request sets with\_samples=true.
- [Auth, scopes & user ID matching](https://docs.tryterra.co/faq/help-topics/no-data/auth-scopes-user-id-matching.md): Auth, scopes & user ID matching
- [Why does user\_id not match between UI and webhooks?](https://docs.tryterra.co/faq/help-topics/no-data/auth-scopes-user-id-matching/same-account-multiple-reference-ids-duplicates.md): This is expected behaviour driven by reference\_id.
- [Why does my redirect fail with missing\_scopes?](https://docs.tryterra.co/faq/help-topics/no-data/auth-scopes-user-id-matching/missing-or-insufficient-scopes-on-auth.md): These errors mean the end user did not grant the scopes the integration requires, so have them reauthenticate and grant the missing access.
- [How do I handle a changed Terra user ID after reauth?](https://docs.tryterra.co/faq/help-topics/no-data/auth-scopes-user-id-matching/reauth-webhook-user-id-changes.md): When a Terra user ID changes, the user reauthenticated (reconnected the same provider account under the same reference\_id).
- [Delivery delays & lag](https://docs.tryterra.co/faq/help-topics/no-data/delivery-delays-lag.md): Delivery delays & lag
- [Why is my Oura data late, and can I force a sync?](https://docs.tryterra.co/faq/help-topics/no-data/delivery-delays-lag/oura-app-vs-cloud-delay.md): Oura's mobile app and cloud are separate systems, and Terra can only access cloud data.
- [Why is my Garmin webhook delivery delayed by about an hour?](https://docs.tryterra.co/faq/help-topics/no-data/delivery-delays-lag/garmin-push-only-delivery-delay.md): Terra delivers Garmin data within seconds of receiving Garmin's push.
- [Why does weight from phone health apps arrive with delays?](https://docs.tryterra.co/faq/help-topics/no-data/delivery-delays-lag/phone-platform-sync-lag.md): Delays for phone-based health platforms are usually phone-to-cloud sync lag, not the API.
- [Why are my Google activities arriving with a delay?](https://docs.tryterra.co/faq/help-topics/no-data/delivery-delays-lag/google-health-connect-data-delay-reinit.md): There are two cases, depending on how Google is connected.
- [Connecting a provider](https://docs.tryterra.co/faq/help-topics/connecting.md): Connecting providers, the auth widget, credentials, OAuth and approvals.
- [Setting up provider credentials (bring-your-own keys)](https://docs.tryterra.co/faq/help-topics/connecting/setting-up-provider-credentials-bring-your-own-keys.md): Setting up provider credentials (bring-your-own keys)
- [How do I set up WHOOP provider credentials?](https://docs.tryterra.co/faq/help-topics/connecting/setting-up-provider-credentials-bring-your-own-keys/whoop-byo-credentials-setup.md): WHOOP is a bring-your-own-credentials provider.
- [How do I set up Huawei?](https://docs.tryterra.co/faq/help-topics/connecting/setting-up-provider-credentials-bring-your-own-keys/huawei-byo-credentials-healthkit.md): Huawei requires dedicated, customer-owned credentials, not shared ones, so widget redirects 500 until they are set up.
- [How do I set up my Strava credentials?](https://docs.tryterra.co/faq/help-topics/connecting/setting-up-provider-credentials-bring-your-own-keys/strava-byo-credentials-callback-domain.md): Strava is a bring-your-own-credentials source, so a "credentials required" message is expected.
- [How do I set up a bring-your-own-credential provider?](https://docs.tryterra.co/faq/help-topics/connecting/setting-up-provider-credentials-bring-your-own-keys/byo-credentials-generic-provider-key.md): Some providers require you to obtain API credentials directly from the provider before the connection will work.
- [What credentials do I need for InBody?](https://docs.tryterra.co/faq/help-topics/connecting/setting-up-provider-credentials-bring-your-own-keys/inbody-no-dedicated-credentials-needed.md): The InBody integration works with end-user accounts directly: users authenticate with the same username and password they use in the InBody app.
- [Do I need my own developer keys for Dexcom?](https://docs.tryterra.co/faq/help-topics/connecting/setting-up-provider-credentials-bring-your-own-keys/dexcom-own-keys-production-access.md): Dexcom always uses your own developer credentials, never Terra's shared/aggregate keys, and requires a direct partnership between you and Dexcom.
- [Why is my Huawei redirect\_uri not registered?](https://docs.tryterra.co/faq/help-topics/connecting/setting-up-provider-credentials-bring-your-own-keys/provider-callback-url-registration.md): Provider OAuth errors like redirect\_uri not registered or Unauthorized after the user authorises mean the Terra callback URL isn't registered, or doesn't…
- [Why can't I save my WHOOP redirect URL?](https://docs.tryterra.co/faq/help-topics/connecting/setting-up-provider-credentials-bring-your-own-keys/whoop-redirect-url-save-error.md): If the WHOOP developer portal rejects your redirect URL, check for stray whitespace at the start of the URL.
- [Why does Strava return redirect\_uri invalid?](https://docs.tryterra.co/faq/help-topics/connecting/setting-up-provider-credentials-bring-your-own-keys/strava-redirect-uri-invalid.md): A Strava redirect\_uri invalid error means the Authorization Callback Domain in your Strava app doesn't match Terra's actual redirect host.
- [What Strava credentials do I enter in Terra?](https://docs.tryterra.co/faq/help-topics/connecting/setting-up-provider-credentials-bring-your-own-keys/strava-access-refresh-tokens-not-needed.md): When registering your own Strava app, only the Client ID and Client Secret go into your Terra source settings.
- [Do I need a separate Dexcom EU setup for European users?](https://docs.tryterra.co/faq/help-topics/connecting/setting-up-provider-credentials-bring-your-own-keys/dexcom-eu-separate-credentials.md): Yes.
- [Do I need separate provider apps and DNS per environment?](https://docs.tryterra.co/faq/help-topics/connecting/setting-up-provider-credentials-bring-your-own-keys/single-provider-credentials-environments-dns.md): You don't need a separate provider app or extra DNS records per Terra environment.
- [How do I set the Dexcom redirect URL and region?](https://docs.tryterra.co/faq/help-topics/connecting/setting-up-provider-credentials-bring-your-own-keys/dexcom-redirect-url-and-region.md): For a custom-subdomain Dexcom setup, the redirect URL must point at the subdomain whose CNAME points to our load balancer, not at your apex domain.
- [Apple Health, Health Connect and mobile SDK](https://docs.tryterra.co/faq/help-topics/connecting/apple-health-health-connect-and-mobile-sdk.md): Apple Health, Health Connect and mobile SDK
- [Why is user\_id None for Apple Health in the widget?](https://docs.tryterra.co/faq/help-topics/connecting/apple-health-health-connect-and-mobile-sdk/sdk-provider-needs-deeplink-initconnection.md): SDK-based providers (Apple Health, Samsung Health, Health Connect) cannot complete a connection through the web widget alone, which is why the widget returns a…
- [Why doesn't use\_terra\_avengers\_app open the native app?](https://docs.tryterra.co/faq/help-topics/connecting/apple-health-health-connect-and-mobile-sdk/use-terra-avengers-companion-app.md): use\_terra\_avengers\_app must be passed inside the JSON body of /auth/generateWidgetSession (for example {"reference\_id": "...", "use\_terra\_avengers\_app": true}).
- [How do I set up Samsung Health (direct vs Health Connect)?](https://docs.tryterra.co/faq/help-topics/connecting/apple-health-health-connect-and-mobile-sdk/samsung-health-android-only-routes.md): Samsung Health is an on-device integration that requires a native Android app.
- [What can I test while Samsung approval is pending?](https://docs.tryterra.co/faq/help-topics/connecting/apple-health-health-connect-and-mobile-sdk/samsung-health-connect-fallback-and-dev-mode.md): While awaiting Samsung partnership approval, you can develop and test against Health Connect as a drop-in.
- [Why does Samsung Health throw AuthorizationException 2000 in release but work in debug?](https://docs.tryterra.co/faq/help-topics/connecting/apple-health-health-connect-and-mobile-sdk/samsung-production-sdk-switch-and-signing.md): There's no Samsung Developer ID to add on the Terra SDK or in your app code.
- [Google (web) vs Google Fit (Health Connect) connection?](https://docs.tryterra.co/faq/help-topics/connecting/apple-health-health-connect-and-mobile-sdk/google-vs-googlefit-connection-types.md): These are two different data sources, and neither is tied to a specific tracker; both are aggregators that surface whatever apps and devices have written into…
- [Why do I get 'health\_connect is disabled on this dev-id'?](https://docs.tryterra.co/faq/help-topics/connecting/apple-health-health-connect-and-mobile-sdk/health-connect-disabled-devid-toggle.md): The error health\_connect is disabled on this dev-id means Health Connect isn't yet enabled for that dev\_id in the dashboard.
- [Why does Health Connect show grey but provider shows connected?](https://docs.tryterra.co/faq/help-topics/connecting/apple-health-health-connect-and-mobile-sdk/health-connect-grey-write-side.md): Terra does not manage your app writing data into Health Connect; that flow is handled by your own integration.
- [Why doesn't the Health Connect permission dialog appear?](https://docs.tryterra.co/faq/help-topics/connecting/apple-health-health-connect-and-mobile-sdk/health-connect-permission-dialog-once.md): This is expected.
- [Why does Apple Health permission never show with success:false?](https://docs.tryterra.co/faq/help-topics/connecting/apple-health-health-connect-and-mobile-sdk/apple-health-permission-screen-build-config.md): If Apple Health's permission prompt never appears and initConnection returns success:false, check two things
- [Why does Apple Health show an invalid link error?](https://docs.tryterra.co/faq/help-topics/connecting/apple-health-health-connect-and-mobile-sdk/apple-deeplink-invalid-link-error.md): An invalid link error when connecting Apple Health usually means the app's deep-link setup is incorrect or unhandled.
- [Why does the HealthKit permission sheet only show once?](https://docs.tryterra.co/faq/help-topics/connecting/apple-health-health-connect-and-mobile-sdk/apple-healthkit-permission-sheet-once.md): Apple shows the HealthKit permission sheet only once per app, per device install.
- [Why does the Samsung connection redirect to Health Connect?](https://docs.tryterra.co/faq/help-topics/connecting/apple-health-health-connect-and-mobile-sdk/samsung-route-default-redirects-to-health-connect.md): There are two Samsung Health integration routes.
- [Regional and account restrictions](https://docs.tryterra.co/faq/help-topics/connecting/regional-and-account-restrictions.md): Regional and account restrictions
- [Why can't I connect MyFitnessPal?](https://docs.tryterra.co/faq/help-topics/connecting/regional-and-account-restrictions/mfp-username-and-diary-key-setup.md): MyFitnessPal connects with your MFP username and a diary key, not your email or account password.
- [Which provider covers Xiaomi and Mi Band data?](https://docs.tryterra.co/faq/help-topics/connecting/regional-and-account-restrictions/zepp-xiaomi-rename-device-compatibility.md): The Xiaomi integration was renamed to ZEPP at the provider's request.
- [Why does Omron login fail outside the US or EU?](https://docs.tryterra.co/faq/help-topics/connecting/regional-and-account-restrictions/omron-region-locked-eu-us-only.md): Omron splits accounts by regional backend, and Terra integrates only the EU cloud (OMRON, ohiomron.eu) and the US cloud (OMRONUS, ohiomron.com).
- [Why does my MyFitnessPal diary sharing revert to private?](https://docs.tryterra.co/faq/help-topics/connecting/regional-and-account-restrictions/mfp-diary-sharing-setting-moved-reverts.md): MyFitnessPal controls the diary-sharing setting, not Terra.
- [Why does Komoot login fail with invalid credentials?](https://docs.tryterra.co/faq/help-topics/connecting/regional-and-account-restrictions/komoot-discontinued.md): The Komoot integration is no longer supported, so users cannot connect Komoot accounts at this time.
- [Can Hammerhead users connect with SRAM credentials?](https://docs.tryterra.co/faq/help-topics/connecting/regional-and-account-restrictions/hammerhead-no-sram-login.md): No, SRAM account credentials are not currently supported for connecting Hammerhead through Terra.
- [Is Huawei supported and how do I set it up?](https://docs.tryterra.co/faq/help-topics/connecting/regional-and-account-restrictions/huawei-dedicated-credentials-required.md): Huawei is supported, but requires applying for dedicated credentials on Huawei's developer platform before use.
- [Does Oura need extra setup before production?](https://docs.tryterra.co/faq/help-topics/connecting/regional-and-account-restrictions/oura-no-extra-setup-for-production.md): Oura requires no additional setup on your side before going to production.
- [Choosing and managing connections in the widget](https://docs.tryterra.co/faq/help-topics/connecting/choosing-and-managing-connections-in-the-widget.md): Choosing and managing connections in the widget
- [Can end users manage their own connections?](https://docs.tryterra.co/faq/help-topics/connecting/choosing-and-managing-connections-in-the-widget/show-disconnect-existing-connections.md): Yes.
- [How do I show only one provider in the widget?](https://docs.tryterra.co/faq/help-topics/connecting/choosing-and-managing-connections-in-the-widget/restrict-or-preselect-providers.md): Pass the providers field in the /auth/generateWidgetSession body to control which providers appear and override the dashboard default list (for example…
- [Why is a provider missing from the Connect widget?](https://docs.tryterra.co/faq/help-topics/connecting/choosing-and-managing-connections-in-the-widget/provider-enabled-mismatch-or-missing-source.md): If a provider is missing from the widget, or a widget session looks expired immediately for one provider while others work, the source is either not enabled or…
- [Is an integration supported if missing from the public list?](https://docs.tryterra.co/faq/help-topics/connecting/choosing-and-managing-connections-in-the-widget/integrations-list-source-of-truth.md): The authoritative list of supported integrations is the /v2/integrations API endpoint and the integrations list in your dashboard.
- [Can I customise the connection screen layout?](https://docs.tryterra.co/faq/help-topics/connecting/choosing-and-managing-connections-in-the-widget/widget-end-screen-redirects-customisation.md): You can customise the widget's end screens by passing auth\_success\_redirect\_url and auth\_failure\_redirect\_url in the /auth/generateWidgetSession body, sending…
- [OAuth, WebView and sign-in failures](https://docs.tryterra.co/faq/help-topics/connecting/oauth-webview-and-sign-in-failures.md): OAuth, WebView and sign-in failures
- [Why does OAuth fail inside an in-app WebView?](https://docs.tryterra.co/faq/help-topics/connecting/oauth-webview-and-sign-in-failures/oauth-webview-blocked-use-native-browser.md): Google blocks OAuth authentication inside embedded WebViews under its 'Use secure browsers' policy (the hidden URL bar prevents domain verification).
- [Why does the provider sign-in form clear my password?](https://docs.tryterra.co/faq/help-topics/connecting/oauth-webview-and-sign-in-failures/provider-signin-form-fails-credentials.md): When a provider's sign-in form clears the password or the continue button stays greyed out with no Terra error, the issue is on the provider's side.
- [Why does provider OAuth fail in my app's web view?](https://docs.tryterra.co/faq/help-topics/connecting/oauth-webview-and-sign-in-failures/open-auth-in-real-browser-not-webview.md): Provider OAuth pages restrict iframes, sandboxed windows and embedded WebViews (which hide the URL bar), so identity providers like Google block them and the…
- [Why can't my user complete provider auth in the in-app webview?](https://docs.tryterra.co/faq/help-topics/connecting/oauth-webview-and-sign-in-failures/provider-auth-fails-in-inapp-webview-generic.md): When a provider login fails inside an in-app webview, ask the end user to open the authentication page in a full external/system browser.
- [Why doesn't the browser redirect after the success screen?](https://docs.tryterra.co/faq/help-topics/connecting/oauth-webview-and-sign-in-failures/auth-success-redirect-not-firing.md): After a successful connection the widget only redirects to your endpoint if auth\_success\_redirect\_url was passed in the body of your auth request.
- [Why do users skip the provider login page?](https://docs.tryterra.co/faq/help-topics/connecting/oauth-webview-and-sign-in-failures/skipped-login-already-authenticated.md): If the end user's browser already has an active session with the provider, the OAuth flow skips the credential prompt and goes straight to the success page.
- [How do I verify auth redirect URLs are legitimate?](https://docs.tryterra.co/faq/help-topics/connecting/oauth-webview-and-sign-in-failures/verify-redirect-legitimacy.md): Auth redirects do not carry a signed header like webhooks do.
- [Connection errors and API responses](https://docs.tryterra.co/faq/help-topics/connecting/connection-errors-and-api-responses.md): Connection errors and API responses
- [Why do my requests return 401 in production?](https://docs.tryterra.co/faq/help-topics/connecting/connection-errors-and-api-responses/env-credential-mismatch-401-invalid-token.md): 401 / invalid-token errors almost always mean credentials are mismatched across environments.
- [Why do I get 'app is blocked' on Google Fit OAuth?](https://docs.tryterra.co/faq/help-topics/connecting/connection-errors-and-api-responses/google-fit-app-blocked-write-scopes.md): The app is blocked error during Google Fit authentication happens when write permission scopes are enabled in your dashboard.
- [Why do I get 'insufficient permissions for data type' on Google?](https://docs.tryterra.co/faq/help-topics/connecting/connection-errors-and-api-responses/google-insufficient-scope-data-type.md): A connection\_error reading insufficient permissions for data type fires when Terra polls a data type the user's OAuth token doesn't cover, for example Google…
- [Why does Google connect return a google\_no\_datasource warning?](https://docs.tryterra.co/faq/help-topics/connecting/connection-errors-and-api-responses/google-no-datasource-warning.md): The google\_no\_datasource warning means the connected Google account has no devices or health data sources attached, usually because the user picked the wrong…
- [Why does Fitbit show 'rate limit exceeded' right after connecting?](https://docs.tryterra.co/faq/help-topics/connecting/connection-errors-and-api-responses/fitbit-rate-limit-after-connect.md): A rate limit exceeded message right after a user connects usually means the initial data backfill temporarily hit provider rate limits.
- [Why does the OAuth redirect hang or return missing\_scopes?](https://docs.tryterra.co/faq/help-topics/connecting/connection-errors-and-api-responses/webhook-30s-timeout-and-historical-data.md): Two separate things are happening here.
- [Why does the auth endpoint return 422 errors?](https://docs.tryterra.co/faq/help-topics/connecting/connection-errors-and-api-responses/reference-id-must-be-string-422.md): A 422 on the authentication endpoint is most commonly caused by sending reference\_id as an integer.
- [Why does generateWidgetSession return a 500?](https://docs.tryterra.co/faq/help-topics/connecting/connection-errors-and-api-responses/generatewidgetsession-500-no-sources.md): A 500 with an HTML error page from generateWidgetSession is typically caused by having no data sources enabled in the environment matching the dev-id you are…
- [Why is my staging widget blocked before provider auth?](https://docs.tryterra.co/faq/help-topics/connecting/connection-errors-and-api-responses/staging-testing-50-user-cap.md): Staging and testing environments are each capped at 50 connected users, independent of your production plan.
- [End-user authentication and SSO](https://docs.tryterra.co/faq/help-topics/connecting/end-user-authentication-and-sso.md): End-user authentication and SSO
- [Can SSO users connect a password-based provider?](https://docs.tryterra.co/faq/help-topics/connecting/end-user-authentication-and-sso/credential-based-provider-no-sso-login.md): For providers connected via email and password (for example Flo, Clue), accounts created with social SSO such as Sign in with Apple or Google sign-in cannot be…
- [Can one user connect multiple providers via the widget?](https://docs.tryterra.co/faq/help-topics/connecting/end-user-authentication-and-sso/multiple-providers-one-user.md): Yes.
- [Why can't Apple/Google social-login users sign in?](https://docs.tryterra.co/faq/help-topics/connecting/end-user-authentication-and-sso/social-login-no-password.md): Credential-based integrations on the Terra auth page only support email and password login.
- [Why do provider OAuth pages always show in English?](https://docs.tryterra.co/faq/help-topics/connecting/end-user-authentication-and-sso/provider-page-language-not-controllable.md): The language parameter on session / auth-URL generation only controls the Terra widget interface, not the provider's own login page.
- [How do I generate a per-user auth URL backend-only?](https://docs.tryterra.co/faq/help-topics/connecting/end-user-authentication-and-sso/backend-only-auth-link-flow.md): For a backend-only setup with no frontend
- [Getting a provider developer app approved](https://docs.tryterra.co/faq/help-topics/connecting/getting-a-provider-developer-app-approved.md): Getting a provider developer app approved
- [How do I lift Strava's one-athlete limit?](https://docs.tryterra.co/faq/help-topics/connecting/getting-a-provider-developer-app-approved/strava-production-app-and-athlete-limit.md): Strava apps start in development mode, which limits you to one connected athlete.
- [Do I need a WHOOP device to create a developer account?](https://docs.tryterra.co/faq/help-topics/connecting/getting-a-provider-developer-app-approved/whoop-device-required-for-account.md): Creating a WHOOP developer account now requires an active WHOOP device and membership.
- [How do I get my WHOOP developer app approved?](https://docs.tryterra.co/faq/help-topics/connecting/getting-a-provider-developer-app-approved/whoop-approval-slow-no-expedite.md): WHOOP handles developer app approval directly and timelines vary, typically one to two weeks.
- [Connected but no data arriving](https://docs.tryterra.co/faq/help-topics/connecting/connected-but-no-data-arriving.md): Connected but no data arriving
- [Why isn't my Renpho body measurement data showing up?](https://docs.tryterra.co/faq/help-topics/connecting/connected-but-no-data-arriving/renpho-legacy-accounts-only.md): The Renpho integration currently supports end users on older (legacy) Renpho accounts.
- [Realtime, BLE and mobile delivery](https://docs.tryterra.co/faq/help-topics/connecting/realtime-ble-and-mobile-delivery.md): Realtime, BLE and mobile delivery
- [Why was my app rejected over health permission justifications?](https://docs.tryterra.co/faq/help-topics/connecting/realtime-ble-and-mobile-delivery/app-store-health-permission-rejection.md): When the Play Store rejects your app over its health/nutrition data permissions policy, respond to the review with a clear explanation of how your app uses…
- [Billing & account](https://docs.tryterra.co/faq/help-topics/billing-account.md): Your dashboard account, API keys, environments and going to production.
- [Dashboard, users and connections](https://docs.tryterra.co/faq/help-topics/billing-account/dashboard-users-and-connections.md): Dashboard, users and connections
- [How do I delete a duplicate user or connection?](https://docs.tryterra.co/faq/help-topics/billing-account/dashboard-users-and-connections/delete-deauth-users.md): The dashboard user list is read-only, with no delete button.
- [Where do I find my dev ID and API keys?](https://docs.tryterra.co/faq/help-topics/billing-account/dashboard-users-and-connections/find-dev-id-and-api-keys.md): Your dev ID is shown in the Terra dashboard under the API Keys button at the top right of the screen.
- [How do I rotate my API keys and webhook secret?](https://docs.tryterra.co/faq/help-topics/billing-account/dashboard-users-and-connections/api-key-webhook-secret-rotation.md): API key and webhook secret rotation is coordinated with the Terra team rather than self-service in the dashboard.
- [Can I edit a connection's reference ID via the SDK?](https://docs.tryterra.co/faq/help-topics/billing-account/dashboard-users-and-connections/edit-reference-id.md): You can edit the reference\_id of an existing user connection from the Terra dashboard, by clicking the pencil icon next to the reference ID.
- [Were my team invites actually sent?](https://docs.tryterra.co/faq/help-topics/billing-account/dashboard-users-and-connections/team-invite-no-pending-indicator.md): Team invites are sent as soon as you submit them, even though the dashboard currently shows no pending-invite indicator.
- [Why does my source card say 'apply for credentials'?](https://docs.tryterra.co/faq/help-topics/billing-account/dashboard-users-and-connections/apply-for-credentials-notice-not-error.md): The "apply for credentials" message on a provider's source card is an informational note, not an error.
- [Why don't widget providers match my connections?](https://docs.tryterra.co/faq/help-topics/billing-account/dashboard-users-and-connections/widget-provider-list-vs-sources.md): The widget's provider list and your dashboard Sources panel come from the same place by default, but your app can override the list per session.
- [Why are my sources and API keys empty after signup?](https://docs.tryterra.co/faq/help-topics/billing-account/dashboard-users-and-connections/empty-dashboard-after-signup-provisioning.md): This is almost always account provisioning still completing, not a broken account.
- [Environments, config and going to production](https://docs.tryterra.co/faq/help-topics/billing-account/environments-config-and-going-to-production.md): Environments, config and going to production
- [Why are no users or connections showing in the dashboard?](https://docs.tryterra.co/faq/help-topics/billing-account/environments-config-and-going-to-production/environment-isolation-config-and-data.md): The dashboard separates testing, staging, and production environments, and they are fully independent.
- [Can I replicate my testing config into production?](https://docs.tryterra.co/faq/help-topics/billing-account/environments-config-and-going-to-production/cannot-migrate-between-environments.md): There's no automated way to clone a testing environment into production.
- [How do I move to production?](https://docs.tryterra.co/faq/help-topics/billing-account/environments-config-and-going-to-production/production-rollout-billing.md): Once your subscription is active you can begin authenticating users in your production environment straight away.
- [Data, payloads and destinations](https://docs.tryterra.co/faq/help-topics/billing-account/data-payloads-and-destinations.md): Data, payloads and destinations
- [Why can't I download old payload history?](https://docs.tryterra.co/faq/help-topics/billing-account/data-payloads-and-destinations/payload-history-one-week-retention.md): Payload History on the dashboard is available for recent payloads only, so older payloads can't be downloaded from there.
- [Why doesn't payload history metadata match the payload?](https://docs.tryterra.co/faq/help-topics/billing-account/data-payloads-and-destinations/payload-history-ids-after-deauth.md): When a connection is deauthenticated and reconnected, the dashboard's Payload History may fall back to showing an internal connection ID instead of the Terra…
- [Why doesn't the payload simulator show sample arrays?](https://docs.tryterra.co/faq/help-topics/billing-account/data-payloads-and-destinations/payload-simulator-sample-arrays.md): The dashboard payload simulator does include sample arrays, for example the detailed samples within activity and daily payloads.
- [Why does my S3 destination show AccessDenied?](https://docs.tryterra.co/faq/help-topics/billing-account/data-payloads-and-destinations/s3-destination-iam-connection-test.md): Grant the IAM role s3:GetObject, s3:PutObject, and s3:DeleteObject on the bucket for your S3 destination.
- [Support and getting help](https://docs.tryterra.co/faq/help-topics/billing-account/support-and-getting-help.md): Support and getting help
- [How do I contact Terra support?](https://docs.tryterra.co/faq/help-topics/billing-account/support-and-getting-help/support-channels-and-sla.md): Terra has no public Discord or community channel, and support runs through the dashboard ticketing system.
- [How do I open a support ticket?](https://docs.tryterra.co/faq/help-topics/billing-account/support-and-getting-help/support-channel-dashboard-widget-only.md): Currently the dashboard support widget is the only channel for opening tickets.
- [Usage limits and overage charges](https://docs.tryterra.co/faq/help-topics/billing-account/usage-limits-and-overage-charges.md): Usage limits and overage charges
- [How many devices can I connect in testing or staging?](https://docs.tryterra.co/faq/help-topics/billing-account/usage-limits-and-overage-charges/testing-staging-device-limit.md): Testing and staging environments each allow up to 50 connected users.
- [Webhooks & destinations](https://docs.tryterra.co/faq/help-topics/webhook.md): Webhook delivery, storage destinations, signatures, retries and routing.
- [Failures, errors and retries](https://docs.tryterra.co/faq/help-topics/webhook/failures-errors-and-retries.md): Failures, errors and retries
- [Are my webhook 401/404/500 errors on Terra's side?](https://docs.tryterra.co/faq/help-topics/webhook/failures-errors-and-retries/response-codes-are-your-server.md): The HTTP status shown next to a webhook delivery in the dashboard is the response your endpoint (or a proxy in front of it) returned, not an error generated by…
- [Why is my webhook returning 504 errors?](https://docs.tryterra.co/faq/help-topics/webhook/failures-errors-and-retries/ack-fast-process-async-timeout.md): A 504 means your server did not respond within Terra's roughly 8-second delivery window.
- [When are failed webhooks redelivered, and can I resend them?](https://docs.tryterra.co/faq/help-topics/webhook/failures-errors-and-retries/retry-policy-and-redelivery.md): Failed webhook deliveries are retried automatically with exponential backoff (roughly 5 min, 30 min, 1h, 2h, 4h, up to about 8 retries), always to your…
- [Storage destinations: S3, SQS, Supabase, SQL, GCS](https://docs.tryterra.co/faq/help-topics/webhook/storage-destinations-s3-sqs-supabase-sql-gcs.md): Storage destinations: S3, SQS, Supabase, SQL, GCS
- [Why do my Supabase destination columns not match the docs?](https://docs.tryterra.co/faq/help-topics/webhook/storage-destinations-s3-sqs-supabase-sql-gcs/supabase-destination-schema.md): The Supabase destination uses both SQL tables and a storage bucket.
- [Why is my S3 folder named like a date?](https://docs.tryterra.co/faq/help-topics/webhook/storage-destinations-s3-sqs-supabase-sql-gcs/version-prefix-folder-not-date.md): The dated-looking folder (for example 2022-03-16/) in your cloud-storage destination is the API version prefix, not a data date.
- [How do I set up a Postgres SQL destination?](https://docs.tryterra.co/faq/help-topics/webhook/storage-destinations-s3-sqs-supabase-sql-gcs/sql-destination-schema-setup.md): The SQL destination requires a specific schema and tables to exist before delivery.
- [Why does my SQS destination fail to connect?](https://docs.tryterra.co/faq/help-topics/webhook/storage-destinations-s3-sqs-supabase-sql-gcs/sqs-region-and-message-size.md): When configuring an SQS destination, the region you enter must match the region in your queue URL.
- [Why are my GCS files missing fields seen in webhooks?](https://docs.tryterra.co/faq/help-topics/webhook/storage-destinations-s3-sqs-supabase-sql-gcs/gcs-upsert-permissions.md): Differences between your cloud storage files and the webhook payloads usually trace back to a bucket permissions issue.
- [Destinations and routing setup](https://docs.tryterra.co/faq/help-topics/webhook/destinations-and-routing-setup.md): Destinations and routing setup
- [Can one environment send data to two webhooks?](https://docs.tryterra.co/faq/help-topics/webhook/destinations-and-routing-setup/multiple-destinations-per-env.md): The dashboard self-serves one webhook destination per dev ID.
- [Does changing my webhook URL take effect immediately?](https://docs.tryterra.co/faq/help-topics/webhook/destinations-and-routing-setup/destination-url-change-effective-immediately.md): Changing your webhook destination URL in the dashboard takes effect immediately.
- [Can I filter payload types per destination?](https://docs.tryterra.co/faq/help-topics/webhook/destinations-and-routing-setup/filter-payload-types-per-destination.md): You can disable unwanted DATA types globally in the dashboard
- [Is there an API to manage webhook destinations?](https://docs.tryterra.co/faq/help-topics/webhook/destinations-and-routing-setup/no-api-to-manage-destinations.md): There is no public API to manage webhook destinations; the dashboard endpoints are internal and session-authenticated.
- [Delivery timing, volume and ordering](https://docs.tryterra.co/faq/help-topics/webhook/delivery-timing-volume-and-ordering.md): Delivery timing, volume and ordering
- [Can I reduce or batch webhook delivery frequency?](https://docs.tryterra.co/faq/help-topics/webhook/delivery-timing-volume-and-ordering/throttle-or-batch-delivery-frequency.md): Terra cannot throttle or batch webhook/cloud-storage delivery frequency server-side.
- [What is the webhook delivery cadence per provider?](https://docs.tryterra.co/faq/help-topics/webhook/delivery-timing-volume-and-ordering/provider-poll-cadence-not-realtime.md): Many providers are fetched on a periodic poll schedule rather than in real time, so a webhook will not fire the instant a user logs or records something.
- [Why did my webhook volume suddenly spike?](https://docs.tryterra.co/faq/help-topics/webhook/delivery-timing-volume-and-ordering/backfill-volume-spikes.md): Large webhook bursts are expected recovery traffic, not invalid requests.
- [How do I stop a retried webhook overwriting newer data?](https://docs.tryterra.co/faq/help-topics/webhook/delivery-timing-volume-and-ordering/out-of-order-stale-overwrites.md): Terra does not currently expose an ordering or freshness guarantee for retried webhook deliveries, so a late retry can in principle overwrite newer data.
- [Large payloads and chunking](https://docs.tryterra.co/faq/help-topics/webhook/large-payloads-and-chunking.md): Large payloads and chunking
- [Will Terra retry or chunk a 413 payload for me?](https://docs.tryterra.co/faq/help-topics/webhook/large-payloads-and-chunking/large-payload-chunking-413.md): Terra does not retry with a smaller payload after a 413.
- [How do I know when a chunked backfill is complete?](https://docs.tryterra.co/faq/help-topics/webhook/large-payloads-and-chunking/track-chunked-backfill-via-reference.md): Large or chunked requests are announced by two notification events before the data arrives
- [How do I enable ping-mode for large payloads?](https://docs.tryterra.co/faq/help-topics/webhook/large-payloads-and-chunking/ping-mode-s3-for-large-payloads.md): For large or dense payloads (which can exceed the roughly 8s push timeout and arrive truncated as a 504, or trip your ingress buffer with codes like 507)…
- [Why does a payload data URL fail with 400 expired-token?](https://docs.tryterra.co/faq/help-topics/webhook/large-payloads-and-chunking/presigned-url-expiry.md): The url in each ping / s3\_payload webhook is a signed cloud-storage URL that expires roughly 10 minutes after it is generated.
- [Payload content and provider quirks](https://docs.tryterra.co/faq/help-topics/webhook/payload-content-and-provider-quirks.md): Payload content and provider quirks
- [Why don't Garmin simulator payloads appear in history?](https://docs.tryterra.co/faq/help-topics/webhook/payload-content-and-provider-quirks/garmin-payload-simulator-not-stored.md): Payloads created via the payload generator/simulator are not stored, so they will not appear in payload history even when the response body shows success.
- [Does the Include Samples toggle affect the API too?](https://docs.tryterra.co/faq/help-topics/webhook/payload-content-and-provider-quirks/include-samples-global-scope.md): The Include Samples toggle applies globally, affecting both API responses and webhook payloads.
- [Why do I get multiple Garmin sleep sessions for one night, or a sleep payload that looks incomplete?](https://docs.tryterra.co/faq/help-topics/webhook/payload-content-and-provider-quirks/garmin-two-pass-provisional-final.md): Two separate things commonly look like a problem with Garmin sleep, but both are expected.
- [Why are there two provider enums for Google?](https://docs.tryterra.co/faq/help-topics/webhook/payload-content-and-provider-quirks/google-vs-googlefit-enum.md): Google Fit reports two different provider enum values depending on the connection path
- [Is planned\_workout a valid webhook type?](https://docs.tryterra.co/faq/help-topics/webhook/payload-content-and-provider-quirks/unrecognized-webhook-type-handling.md): planned\_workout is a valid webhook type, sent for integrations that deliver planned-workout data.
- [Security, signatures and network access](https://docs.tryterra.co/faq/help-topics/webhook/security-signatures-and-network-access.md): Security, signatures and network access
- [Why does my webhook signature verification fail?](https://docs.tryterra.co/faq/help-topics/webhook/security-signatures-and-network-access/signature-verification-secret-mismatch.md): Signature failures almost always mean the signing secret used for verification does not match the one Terra signed with, not a change on Terra's side.
- [What webhook URL do I register in the Huawei portal?](https://docs.tryterra.co/faq/help-topics/webhook/security-signatures-and-network-access/provider-portal-webhook-registration.md): For direct provider-app integrations, Terra's push webhook URL must be registered in the provider's own developer dashboard, separate from the OAuth redirect…
- [What source IPs should I allow for Terra webhooks?](https://docs.tryterra.co/faq/help-topics/webhook/security-signatures-and-network-access/source-ip-allowlist.md): Terra's webhook source IPs are documented and rarely change, so first compare your allowlist against the current list in the docs.
- [Why does ModSecurity block my webhooks on JSON keys?](https://docs.tryterra.co/faq/help-topics/webhook/security-signatures-and-network-access/modsecurity-waf-json-keys-rule.md): This is expected for data types with large time-series sample arrays (heart rate, SpO2, and similar), where a full day easily exceeds 1000 JSON keys.
- [Do I need a paid webhook testing service?](https://docs.tryterra.co/faq/help-topics/webhook/security-signatures-and-network-access/webhook-testing-service-not-required.md): No, a paid webhook testing service is not required.
- [Something else](https://docs.tryterra.co/faq/help-topics/something-else.md): Subdomains, realtime, widgets and getting help.
- [Custom subdomains, SSL and security](https://docs.tryterra.co/faq/help-topics/something-else/custom-subdomains-ssl-and-security.md): Custom subdomains, SSL and security
- [Why won't my custom subdomain CNAME or SSL validate?](https://docs.tryterra.co/faq/help-topics/something-else/custom-subdomains-ssl-and-security/cname-validation-ssl-issuance-troubleshooting.md): If a custom subdomain CNAME won't authorise, or the cert won't validate or parse, work through these
- [What redirect and webhook URLs do I use for a custom WHOOP subdomain?](https://docs.tryterra.co/faq/help-topics/something-else/custom-subdomains-ssl-and-security/custom-subdomain-redirect-webhook-setup.md): For a custom-credential provider connection, the redirect URI registered with the provider must be a subdomain on your own domain (for example…
- [Does Terra use my Google OAuth client ID?](https://docs.tryterra.co/faq/help-topics/something-else/custom-subdomains-ssl-and-security/google-oauth-client-ownership.md): No.
- [Docs, support and getting help](https://docs.tryterra.co/faq/help-topics/something-else/docs-support-and-getting-help.md): Docs, support and getting help
- [Can I get a call with someone technical?](https://docs.tryterra.co/faq/help-topics/something-else/docs-support-and-getting-help/technical-help-call-availability.md): For migrations, integration questions, API best practices, or product walkthroughs, support can arrange a call with a technical or product lead, or connect you…
- [What happens to a duplicate ticket I filed?](https://docs.tryterra.co/faq/help-topics/something-else/docs-support-and-getting-help/duplicate-ticket-handling.md): Duplicate tickets are closed and merged into the original thread, so all context and the ongoing investigation stay in one place.
- [Where are the API playground and changelog in the docs?](https://docs.tryterra.co/faq/help-topics/something-else/docs-support-and-getting-help/docs-navigation-finding-pages.md): The API playground lives in the reference section of the docs, under the Health and Fitness API reference pages.
- [Provider data fields and coverage](https://docs.tryterra.co/faq/help-topics/something-else/provider-data-fields-and-coverage.md): Provider data fields and coverage
- [When will field X be available for a provider?](https://docs.tryterra.co/faq/help-topics/something-else/provider-data-fields-and-coverage/provider-doesnt-expose-field.md): Terra can only surface fields a provider exposes through its API.
- [Can I get raw original Garmin FIT files?](https://docs.tryterra.co/faq/help-topics/something-else/provider-data-fields-and-coverage/raw-original-fit-files.md): The FIT files Terra delivers are generated from its internal unified data model, the same as the JSON standard payloads, not the raw original device FIT files.
- [How do I tell apart two hardware versions on one connection?](https://docs.tryterra.co/faq/help-topics/something-else/provider-data-fields-and-coverage/device-version-differentiation-in-payload.md): Dexcom data is returned exactly as Dexcom's API provides it, without splitting by hardware version, so readings from two device generations on one account…
- [Can speed be computed from position samples?](https://docs.tryterra.co/faq/help-topics/something-else/provider-data-fields-and-coverage/no-derived-metrics-from-samples.md): Payloads reflect the raw data each provider supplies.
- [Do Apple Health nutrition values have per-entry timestamps?](https://docs.tryterra.co/faq/help-topics/something-else/provider-data-fields-and-coverage/apple-nutrition-per-entry-timestamps.md): Yes.
- [Is the Fitbit Charge 6 supported?](https://docs.tryterra.co/faq/help-topics/something-else/provider-data-fields-and-coverage/device-model-support.md): Yes, the Charge 6 is supported.
- [Realtime, BLE and mobile delivery](https://docs.tryterra.co/faq/help-topics/something-else/realtime-ble-and-mobile-delivery.md): Realtime, BLE and mobile delivery
- [Why is Samsung background delivery unsupported?](https://docs.tryterra.co/faq/help-topics/something-else/realtime-ble-and-mobile-delivery/android-background-delivery-limits.md): Android background delivery is limited by deep-sleep battery optimisation, which suspends background tasks after a few hours.
- [Why won't the BLE widget find my Garmin watch?](https://docs.tryterra.co/faq/help-topics/something-else/realtime-ble-and-mobile-delivery/ble-streaming-requires-broadcast-mode.md): For BLE / realtime heart-rate streaming, the watch must be actively broadcasting.
- [Why was my app rejected over health permission justifications?](https://docs.tryterra.co/faq/help-topics/something-else/realtime-ble-and-mobile-delivery/app-store-health-permission-rejection.md): When the Play Store rejects your app over its health/nutrition data permissions policy, respond to the review with a clear explanation of how your app uses…
- [How do I set up realtime streaming?](https://docs.tryterra.co/faq/help-topics/something-else/realtime-ble-and-mobile-delivery/realtime-streaming-setup.md): Setup depends on the device.
- [Routing, webhooks and destinations](https://docs.tryterra.co/faq/help-topics/something-else/routing-webhooks-and-destinations.md): Routing, webhooks and destinations
- [Can I route different data types to different destinations?](https://docs.tryterra.co/faq/help-topics/something-else/routing-webhooks-and-destinations/per-destination-data-type-routing.md): Per-destination data-type routing is not currently supported.
- [Can I get alerts for stale user data?](https://docs.tryterra.co/faq/help-topics/something-else/routing-webhooks-and-destinations/stale-user-data-alerts.md): Built-in staleness alerting isn't available.
- [Can I rate-limit backfill webhook delivery?](https://docs.tryterra.co/faq/help-topics/something-else/routing-webhooks-and-destinations/backfill-webhook-rate-limit.md): There's no configurable rate limit on backfill webhook delivery, so large multi-year backfills can produce a high request rate to your endpoint.
- [Can the Supabase destination use an existing project?](https://docs.tryterra.co/faq/help-topics/something-else/routing-webhooks-and-destinations/supabase-link-existing-project.md): The Supabase destination currently creates a new project in your organisation and cannot attach to an existing one.
- [Features, widgets and SDK tools](https://docs.tryterra.co/faq/help-topics/something-else/features-widgets-and-sdk-tools.md): Features, widgets and SDK tools
- [Can I push planned workouts to Zwift?](https://docs.tryterra.co/faq/help-topics/something-else/features-widgets-and-sdk-tools/push-planned-workouts-zwift.md): Pushing planned workouts only works for providers that expose a training-plan write API.
- [Why does the Python client lack reference\_id lookup?](https://docs.tryterra.co/faq/help-topics/something-else/features-widgets-and-sdk-tools/client-library-feature-parity.md): The Python client doesn't currently expose lookup by reference\_id.
- [Is there an API for the payload simulator?](https://docs.tryterra.co/faq/help-topics/something-else/features-widgets-and-sdk-tools/payload-simulator-programmatic-access.md): Sample data is generated from the dashboard's payload simulator, which sends a generated payload to your configured destination using user\_id, reference\_id and…
- [Is there a hosted upload widget for blood reports?](https://docs.tryterra.co/faq/help-topics/something-else/features-widgets-and-sdk-tools/blood-report-upload-widget.md): A hosted file-upload widget for the blood report API is not currently offered.
- [Connections, auth and permissions](https://docs.tryterra.co/faq/help-topics/something-else/connections-auth-and-permissions.md): Connections, auth and permissions
- [How do I check if the HealthKit prompt was shown?](https://docs.tryterra.co/faq/help-topics/something-else/connections-auth-and-permissions/check-healthkit-connection-state.md): HealthKit doesn't expose whether permissions were granted, but you can check whether a connection was previously created
- [Can the auth webhook include the provider user ID?](https://docs.tryterra.co/faq/help-topics/something-else/connections-auth-and-permissions/provider-native-user-id-in-auth.md): The auth webhook payload can't currently include the provider's native user ID.
- [Can I be notified when users connect a disabled provider?](https://docs.tryterra.co/faq/help-topics/something-else/connections-auth-and-permissions/notify-on-disabled-provider-connect.md): Data only flows for providers enabled in the connections dashboard, so always confirm a provider is enabled there before users connect it.
- [Can provider permissions be auto-selected on consent?](https://docs.tryterra.co/faq/help-topics/something-else/connections-auth-and-permissions/auto-select-permissions-consent.md): Health permissions cannot be pre-selected on the provider's consent screen.
- [Which providers have mandatory scopes?](https://docs.tryterra.co/faq/help-topics/something-else/connections-auth-and-permissions/provider-mandatory-scopes.md): Some providers require specific scopes, and authentication fails with an insufficient or missing scopes error if they aren't granted.
- [Provider rules and restrictions](https://docs.tryterra.co/faq/help-topics/something-else/provider-rules-and-restrictions.md): Provider rules and restrictions
- [What are my options under Strava's display restriction?](https://docs.tryterra.co/faq/help-topics/something-else/provider-rules-and-restrictions/strava-third-party-display-restriction.md): Strava's API terms prohibit third-party apps from displaying a user's activity data to anyone other than the user themselves, even with explicit consent.
