Product Updates
April 2026 product update: synthetic users let you build a health app before you have any real users
April 2026: synthetic users generate realistic health data on demand, five new sources join the catalogue, and score history gets its own endpoints.
TL;DR: The hardest part of starting a health product used to be the first week, when you have no users, no data, and therefore nothing to build a screen against. Synthetic users solve that: you create one from the dashboard and it produces realistic sleep, activity and daily data through the normal pipeline, into your normal destination, in the normal payload shape. April also added Hevy, wger, My Macros, InBody and Nolio to the source catalogue.
Synthetic users: build and test before a single real user connects
Every team that starts building on a health data API hits the same wall in the first few days. To build the sleep screen you need sleep data. To have sleep data you need a connected user. To have a connected user you need a real person with a real device who has agreed to connect it, and at that point you are one person's sleep away from a demo, and that person is usually you, and you only sleep once a night.
Synthetic users remove the wall. You create one from the dashboard and Terra generates health data for it: sleep sessions with stages and heart rate, daily summaries with steps and resting heart rate, activities with the sample streams attached. It moves through the same pipeline as everything else and lands at your destination in exactly the same payload shape a real user produces, which is the property that makes it useful. A fixture file you wrote by hand agrees with your parser by construction. A synthetic user tests your parser against the real thing.
The obvious use is the first week of a build. The less obvious uses turn out to matter more over time: a demo environment that always has data in it, an integration test suite that does not depend on a colleague wearing a watch, a way to reproduce an edge case such as a night with no deep sleep recorded, and a safe way to test what your app does when a user has been connected for a year.
Five new sources: Hevy, wger, My Macros, InBody and Nolio
April added a run of integrations that between them cover the parts of a person's training life that a watch does not see.
Hevy and wger are strength training logs, where people record the exercises, sets, repetitions and weights they actually lifted. Both also carry body metrics. My Macros is a nutrition logging app. InBody makes the body composition scanners found in a great many gyms, reporting segmental muscle mass, body fat percentage and visceral fat level rather than just a weight. Visceral fat was added as a measurement type in the same month to support it. Nolio is an endurance coaching platform.
All of them arrive through the same payloads you already receive. The full catalogue is on the integrations page.
Score history, without recomputing it yourself
Terra's health scores are computed as data arrives and attached to the payload they belong to, which gives you the present moment for free. April added endpoints that return the history as well, so drawing a user's readiness over the last three months is a single request rather than something you assemble yourself.
This landed alongside a rebuild of how scores are computed and stored, which is what makes the full history retrievable on demand.
Terra now backs off from connections that keep failing
A connection that has genuinely stopped working, because the user revoked it at the provider or deleted their account there, will fail every time it is polled, forever. Polling it costs a request against a rate limit shared with all of your working users, which means one dead connection makes every live one slightly slower.
Terra now detects a connection that is failing persistently and backs off from it rather than retrying at full rate. Polling frequency also became configurable per customer in April, with spreading applied so that your users are not all polled in the same few seconds. The combined effect is that the requests available to you are spent on users who have data.
Also in April
A skip_backfill parameter was added for the case where you only want what happens from now on, which makes onboarding faster and avoids importing history you are not going to use.
Terra now reports which scopes each source supports, so your connection screen can show accurate permissions rather than a generic list.
Garmin: naps are now handled as distinct sleep sessions, and sleep data is enriched from the daily summary where the sleep record alone is incomplete.
Active calories are now derived from total energy expenditure and basal metabolic rate when a source reports only the total, so the field is populated across a far larger share of your user base.
Lab Reports now returns a thumbnail of every processed report, along with date range filters on the list endpoint, so you can build a document browser over a user's results without storing the originals yourself.