Releasesv0.1.0

Terra API alternative

Open Health Sync and the Terra API side by side: price, where the data is kept, sources, FHIR R4 and Open mHealth, MCP, when Terra fits better, and how to move.

Open Health Sync is an open source, self-hosted alternative to the Terra API. Both give your product one API for data from wearables and health apps. Terra runs that API for you, as a hosted service with a monthly subscription. Open Health Sync is software you run yourself: one Go binary and Postgres, free under AGPL-3.0, with the data on servers you choose.

This page compares the two, says when Terra is the better pick, and maps Terra's concepts to Open Health Sync for a move. Facts about Terra come from its own site and documentation, checked on 2026-10-17. They change, so check tryterra.co as well.

At a glance

Open Health SyncTerra API
What it isOpen source software you runA hosted API, sold as a subscription
LicenseAGPL-3.0Proprietary
PriceFree. You pay for your own serverFrom $399 a month billed annually, or $499 billed monthly, with 100,000 credits. Each source a user connects costs 200 credits a month (pricing)
Where the data is keptYour Postgres and your raw store, for as long as you decideTerra's cloud, usually for two days and at most six months, then your destination (privacy policy)
Sources13 available, 4 more on main for the next release (list)500+ wearables and health sources advertised, Garmin included
GarminNext release: a Health API connector (guide) for operators with their own Garmin app. Garmin has paused new developer access requests, per its replies to applicants. Garmin exports import as activity files (next release)Yes, through Terra's existing partnership
Data modelOne canonical model, one unit per quantity, UCUM units and LOINC codes (data model)Terra's own JSON models: Activity, Body, Daily, Sleep, Nutrition, Menstruation and others
FHIRFHIR R4, checked with the official HL7 validator in CI (FHIR R4)A FHIR processing option. The documentation names no FHIR version
Open mHealthYes, checked against the official schemas (Open mHealth)Not found in its documentation
Raw payloadsEvery payload kept verbatim, so a mapping fix can re-process historyRecent payloads in the dashboard
How you get the dataREST read API, signed webhooks, CSV and Parquet exports, or SQL on your own PostgresPushed to a destination (webhooks, Postgres, MySQL, S3, GCS, Azure Blob, SQS, Kafka), REST requests for history
AI agentsRead-only MCP server on your instance, over stdio or Streamable HTTP (MCP)Read-only MCP server ("AI Interface")
Mobile SDKsSwift, Kotlin, React Native and Flutter, installed from the repository for now (SDKs)iOS, Android, React Native and Flutter
Vendor developer appsYou register your own app with each vendorTerra's own for providers such as Fitbit, Oura, Polar and Withings. Yours for others, such as Strava, WHOOP and Dexcom
ComplianceNot certified. It depends on how you run it (security model)HIPAA, GDPR and SOC 2 Type II, per Terra
Runs onLinux, macOS, Docker, Kubernetes, a Raspberry Pi 5Terra's cloud

What it costs

Terra's Quick Start plan includes 100,000 credits a month, and one connected source for one user costs 200 credits a month (the first 400 events of each connection are free). By our arithmetic from the public pricing page, that covers about 500 connections, and each connection past those costs about $1 a month at the starting credit price, which Terra lowers as usage grows. A product with 2,000 users who each connect one source would pay about $2,000 a month at the listed starting prices, before any volume discount.

Open Health Sync costs nothing to use. You pay for the server it runs on, and for any vendor program that charges developers (some partner programs do). It idles in about 22 MB of memory and runs on a Raspberry Pi 5 with 4 GB (benchmarks).

Pick Terra when

  • You need Garmin today. Garmin has not taken new developer applications since spring 2026, and Terra has held a Garmin integration for years.
  • You need devices beyond the 13 sources here, such as Peloton, Zwift, Wahoo or COROS through their APIs, under one contract.
  • You do not want to run a server, or to register a developer app with each vendor.
  • You need your vendor's compliance attestations, such as SOC 2 Type II and HIPAA.
  • You also want lab results or ready-made health scores, which Terra sells as add-ons.

Pick Open Health Sync when

  • The data has to stay on infrastructure you choose, for privacy, data residency or a regulator.
  • Per-user fees do not fit: a free tier for your users, a research study, a non-profit, or your own data on a home server.
  • You need standard output: FHIR R4 for a clinical or research system, Open mHealth for analysis tools, Parquet for a data warehouse.
  • You want every original payload kept, so a fix in a mapper re-processes history instead of losing it.
  • You want to read and change the code: see how a value was converted, fix a mapper, add a source.
  • You want it small: one binary and Postgres, on a laptop, a VM or a Raspberry Pi.

Moving from Terra

Most of Terra's concepts have a direct counterpart. The data types map like this:

TerraOpen Health Sync
A Terra user (user_id) per connection, with your reference_idOne user per person (POST /v1/users with your own external_ref), with any number of connections (API)
Widget session (POST /api/widget/session)Connect session (POST /v1/users/{id}/connect-sessions), a hosted page that lists the providers (hosted connection page)
Webhook destinationOutgoing webhooks: data.written names the user, provider and days that changed (webhooks)
Database and storage destinationsThe data already sits in your Postgres. Exports as CSV or Parquet (exports)
Activityworkouts, and each workout's route
Sleepsleep, and each session's phases
Dailydaily: one summary per local calendar day
Bodysamples: weight, body fat, blood pressure, glucose, heart rate and the other quantity types
Nutritionnutrition
Menstruationcategory-samples and menstrual-cycles
Historical data requests (GET /activity, /sleep, /daily, /body)A backfill when a user connects, then reads with start and end on GET /v1/users/{id}/<resource>
FHIR processingGET /v1/users/{id}/fhir/Observation and the other FHIR routes (FHIR R4)
AI Interface (MCP)ohs mcp for desktop agents, or /mcp over HTTP (MCP)

For each cloud provider, register your own developer app and set its keys: every connector guide starts with that step (connectors). Apple Health and Health Connect data comes from your mobile app, through the Swift and Kotlin SDKs or the upload contract.

Try it

The quickstart starts an instance with Docker Compose and fills it with 90 days of synthetic data from six sources, so you can call every route before you connect a real account.

See also: all the options compared, Open Health Sync vs Open Wearables, Junction alternative and Spike API alternative.

Edit on GitHub

On this page