Terra

Terra is a unified wearables and health-data API that aggregates data from 500+ wearables, fitness trackers, and health apps - Garmin, Fitbit, Oura, Apple Health, Whoop, Strava, Google Fit, Polar, Withings, and many more - behind a single normalized REST interface. Developers connect end users through the Terra Widget or a custom authentication flow, then receive normalized Activity, Body, Daily, Sleep, Nutrition, Menstruation, and Athlete data. Terra's primary delivery model is asynchronous - requested and newly available health data is streamed to a developer-configured webhook destination rather than returned inline, with REST read endpoints available for on-demand historical pulls.

11 APIs 0 Features
WearablesHealth DataFitnessAggregatorWebhooksDigital Health

APIs

Terra Authentication API

Connect end users to their wearable and health accounts. Generate a Terra Widget session or a custom authentication link, mint auth tokens for the Terra mobile SDKs, and deauthe...

Terra User Management API

Look up connected users and their metadata. Retrieve a single user by Terra user ID or your reference ID, list all connected user IDs (subscriptions) with pagination, and batch-...

Terra Activity API

Retrieve normalized workout and exercise sessions for a user over a date range - GPS routes, heart-rate zones, distance, calories, power, cadence, and per-activity samples. Resu...

Terra Body API

Retrieve body and biometric measurements for a user - weight, body composition, blood pressure, blood glucose, SpO2, hydration, temperature, and continuous heart-rate samples - ...

Terra Daily API

Retrieve day-level aggregated summaries for a user - steps, distance, active and total calories, active durations, heart-rate summaries, and stress - rolled up per calendar day ...

Terra Sleep API

Retrieve sleep sessions for a user - total, light, deep, and REM durations, sleep stages, respiration, heart-rate variability, and readiness or recovery metrics - normalized acr...

Terra Nutrition API

Retrieve logged nutrition and dietary intake for a user - meals, macronutrients, micronutrients, water intake, and per-meal detail - from apps such as MyFitnessPal and other sup...

Terra Menstruation API

Retrieve menstrual cycle and reproductive health data for a user - cycle phases, period days, predicted and actual menstruation events, and related symptoms - from cycle-trackin...

Terra Athlete API

Retrieve the athlete profile for a connected user - name, age, sex, height, weight, country, and other demographic attributes reported by the upstream provider - to enrich and c...

Terra Integrations API

Discover which of Terra's 500+ wearables, trackers, and health apps are available to your account. List supported integrations, and query a detailed view filtered by the data sc...

Terra Webhooks

Terra's primary data-delivery mechanism. Rather than a polling or WebSocket transport, Terra streams normalized health data and lifecycle events - auth, deauth, connection error...

Collections

Terra API

OPEN

Pricing Plans

Terra Api Plans Pricing

4 plans

PLANS

Rate Limits

Terra Api Rate Limits

3 limits

RATE LIMITS

FinOps

Resources

🔗
DomainSecurity
DomainSecurity
🔑
Authentication
Authentication
👥
GitHubOrganization
GitHubOrganization
🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps
📰
Blog
Blog

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Terra API
  version: '2.0'
request:
  headers:
  - name: dev-id
    value: '{{devId}}'
  - name: x-api-key
    value: '{{apiKey}}'
items:
- info:
    name: Authentication
    type: folder
  items:
  - info:
      name: Authenticate user (custom link).
      type: http
    http:
      method: POST
      url: https://api.tryterra.co/v2/auth/authenticateUser
      body:
        type: json
        data: "{\n  \"resource\": \"GARMIN\",\n  \"reference_id\": \"my-user-123\",\n  \"auth_success_redirect_url\": \"https://example.com/success\"\
          ,\n  \"auth_failure_redirect_url\": \"https://example.com/failure\"\n}"
    docs: Generates an authentication URL for a specific provider so an end user can connect their account.
  - info:
      name: Generate widget session.
      type: http
    http:
      method: POST
      url: https://api.tryterra.co/v2/auth/generateWidgetSession
      body:
        type: json
        data: "{\n  \"language\": \"en\",\n  \"reference_id\": \"my-user-123\",\n  \"auth_success_redirect_url\": \"https://example.com/success\"\
          ,\n  \"auth_failure_redirect_url\": \"https://example.com/failure\"\n}"
    docs: Generates a hosted Terra Widget authentication link for the end user to pick a provider and connect.
  - info:
      name: Generate auth token (mobile SDK).
      type: http
    http:
      method: POST
      url: https://api.tryterra.co/v2/auth/generateAuthToken
      body:
        type: json
        data: '{}'
    docs: Mints a short-lived token to initialize the Terra iOS/Android SDKs.
  - info:
      name: Deauthenticate user.
      type: http
    http:
      method: DELETE
      url: https://api.tryterra.co/v2/auth/deauthenticateUser?user_id={{user_id}}
      params:
      - name: user_id
        value: ''
        type: query
        description: The Terra user ID to deauthenticate.
    docs: Disconnects a connected user and revokes Terra's access to their data.
- info:
    name: Users
    type: folder
  items:
  - info:
      name: Get user info.
      type: http
    http:
      method: GET
      url: https://api.tryterra.co/v2/userInfo?user_id={{user_id}}
      params:
      - name: user_id
        value: ''
        type: query
        description: Terra user ID.
      - name: reference_id
        value: ''
        type: query
        description: Your reference ID (alternative to user_id).
    docs: Retrieves a single connected user by Terra user ID or reference ID.
  - info:
      name: List subscriptions.
      type: http
    http:
      method: GET
      url: https://api.tryterra.co/v2/subscriptions
    docs: Returns all Terra user IDs connected to your developer account (paginated).
  - info:
      name: Bulk user info.
      type: http
    http:
      method: POST
      url: https://api.tryterra.co/v2/bulkUserInfo
      body:
        type: json
        data: "{\n  \"user_ids\": [\"user-id-1\", \"user-id-2\"]\n}"
    docs: Batch-retrieves metadata for multiple connected users.
- info:
    name: Data
    type: folder
  items:
  - info:
      name: Get activity.
      type: http
    http:
      method: GET
      url: https://api.tryterra.co/v2/activity?user_id={{user_id}}&start_date=2026-06-01&end_date=2026-06-30&to_webhook=true
      params:
      - name: user_id
        value: ''
        type: query
        description: Terra user ID (required).
      - name: start_date
        value: '2026-06-01'
        type: query
        description: Start of range (required).
      - name: end_date
        value: '2026-06-30'
        type: query
        description: End of range (optional).
      - name: to_webhook
        value: 'true'
        type: query
        description: Stream payload to webhook (default true).
    docs: Retrieves normalized workout/exercise sessions over a date range. Streamed to your webhook when to_webhook=true.
  - info:
      name: Get body.
      type: http
    http:
      method: GET
      url: https://api.tryterra.co/v2/body?user_id={{user_id}}&start_date=2026-06-01&end_date=2026-06-30&to_webhook=true
      params:
      - name: user_id
        value: ''
        type: query
        description: Terra user ID (required).
      - name: start_date
        value: '2026-06-01'
        type: query
        description: Start of range (required).
      - name: end_date
        value: '2026-06-30'
        type: query
        description: End of range (optional).
      - name: to_webhook
        value: 'true'
        type: query
        description: Stream payload to webhook (default true).
    docs: Retrieves body and biometric measurements over a date range.
  - info:
      name: Get daily.
      type: http
    http:
      method: GET
      url: https://api.tryterra.co/v2/daily?user_id={{user_id}}&start_date=2026-06-01&end_date=2026-06-30&to_webhook=true
      params:
      - name: user_id
        value: ''
        type: query
        description: Terra user ID (required).
      - name: start_date
        value: '2026-06-01'
        type: query
        description: Start of range (required).
      - name: end_date
        value: '2026-06-30'
        type: query
        description: End of range (optional).
      - name: to_webhook
        value: 'true'
        type: query
        description: Stream payload to webhook (default true).
    docs: Retrieves day-level aggregated summaries over a date range.
  - info:
      name: Get sleep.
      type: http
    http:
      method: GET
      url: https://api.tryterra.co/v2/sleep?user_id={{user_id}}&start_date=2026-06-01&end_date=2026-06-30&to_webhook=true
      params:
      - name: user_id
        value: ''
        type: query
        description: Terra user ID (required).
      - name: start_date
        value: '2026-06-01'
        type: query
        description: Start of range (required).
      - name: end_date
        value: '2026-06-30'
        type: query
        description: End of range (optional).
      - name: to_webhook
        value: 'true'
        type: query
        description: Stream payload to webhook (default true).
    docs: Retrieves sleep sessions and stages over a date range.
  - info:
      name: Get nutrition.
      type: http
    http:
      method: GET
      url: https://api.tryterra.co/v2/nutrition?user_id={{user_id}}&start_date=2026-06-01&end_date=2026-06-30&to_webhook=true
      params:
      - name: user_id
        value: ''
        type: query
        description: Terra user ID (required).
      - name: start_date
        value: '2026-06-01'
        type: query
        description: Start of range (required).
      - name: end_date
        value: '2026-06-30'
        type: query
        description: End of range (optional).
      - name: to_webhook
        value: 'true'
        type: query
        description: Stream payload to webhook (default true).
    docs: Retrieves logged nutrition and dietary intake over a date range.
  - info:
      name: Get menstruation.
      type: http
    http:
      method: GET
      url: https://api.tryterra.co/v2/menstruation?user_id={{user_id}}&start_date=2026-06-01&end_date=2026-06-30&to_webhook=true
      params:
      - name: user_id
        value: ''
        type: query
        description: Terra user ID (required).
      - name: start_date
        value: '2026-06-01'
        type: query
        description: Start of range (required).
      - name: end_date
        value: '2026-06-30'
        type: query
        description: End of range (optional).
      - name: to_webhook
        value: 'true'
        type: query
        description: Stream payload to webhook (default true).
    docs: Retrieves menstrual cycle and reproductive health data over a date range.
  - info:
      name: Get athlete.
      type: http
    http:
      method: GET
      url: https://api.tryterra.co/v2/athlete?user_id={{user_id}}&to_webhook=true
      params:
      - name: user_id
        value: ''
        type: query
        description: Terra user ID (required).
      - name: to_webhook
        value: 'true'
        type: query
        description: Stream payload to webhook (default true).
    docs: Retrieves the athlete profile and demographics for a connected user.
- info:
    name: Integrations
    type: folder
  items:
  - info:
      name: List integrations.
      type: http
    http:
      method: GET
      url: https://api.tryterra.co/v2/integrations
    docs: Lists the wearables, trackers, and health apps available to your account.
  - info:
      name: List detailed integrations.
      type: http
    http:
      method: GET
      url: https://api.tryterra.co/v2/integrations/detailed
    docs: Lists supported integrations with detail on data scopes and SDK support.
bundled: true