Skip to content

API Export JSON Format

Lybron Sobers edited this page Sep 16, 2025 · 7 revisions

JSON Format

JSON data exported will follow the format described below. All data will be encapsulated in a data object with arrays for each supported data type as inddicated below:

"data": {
    "metrics": <Array>,
    "workouts": <Array>,
    "stateOfMind": <Array>,
    "medications": <Array>,
    "symptoms": <Array>,
    "cycleTracking": <Array>,
    "ecg": <Array>,
    "heartRateNotifications": <Array>
}

Health Metrics

The metrics field is an array of objects, each containing data for a particular health metric. Most health metrics data follows a common structure. Exceptions to this format are also documented below:

Common Format

  • name: <String>
  • units: <String>
  • data: <Array>

The data array attached to a health metric will contain a quantity value that corresponds to the associated units value, along with a timestamp:

"data": [
    {
        "qty": <Number>,
        "date": <Date (yyyy-MM-dd HH:mm:ss Z)>
    }
]

Blood Pressure

"data": [
    {
        "date": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "systolic": <Number>,
        "diastolic": <Number>
    }
]

Heart Rate

"data": [
    {
        "date": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "Min": <Number>,
        "Avg": <Number>,
        "Max": <Number>
    }
]

Sleep Analysis

Sleep data payloads may vary depending on if data aggregation is toggled on or off.

Aggregated

"data": [
    {
        "date": <Date (yyyy-MM-dd)>,
        "totalSleep": <Number>,
        "asleep": <Number>,
        "core": <Number>,
        "deep": <Number>,
        "rem": <Number>,
        "sleepStart": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "sleepEnd": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "inBed": <Number>,
        "inBedStart": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "inBedEnd": <Date (yyyy-MM-dd HH:mm:ss Z)> ,
    }
]

Unaggregated

"data": [
    {
        "startDate": <Date (yyyy-MM-dd)>,
        "endDate": <Number>,
        "qty": <Number>,
        "value": <String> (Awake | Asleep* | In Bed | Core | REM | Deep | Unspecified),
        "deep": <Number>,
        "rem": <Number>,
        "sleepStart": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "sleepEnd": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "inBed": <Number>,
        "inBedStart": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "inBedEnd": <Date (yyyy-MM-dd HH:mm:ss Z)> ,
    }
]

*Asleep refers to an uncategorized sleep phase (rather than total time asleep). This may occur if the data source does not support sleep phase tracking.

Blood Glucose

"data": [
    {
        "date": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "qty": <Number>,
        "mealTime": <String> ("Before Meal" | "After Meal" | "Unspecified")
    }
]

Sexual Activity

"data": [
    {
        "date": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "Unspecified":<Number>,
        "Protection Used":<Number>,
        "Protection Not Used":<Number>,
    }
]

Handwashing

"data": [
    {
        "date": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "qty": <Number>,
        "value":<String> ("Complete" | "Incomplete")
    }
]

Toothbrushing

"data": [
    {
        "date": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "qty": <Number>,
        "value":<String> ("Complete" | "Incomplete")
    }
]

Insulin Delivery

"data": [
    {
        "date": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "qty": <Number>,
        "reason":<String> ("Bolus" | "Basal")
    }
]

Medications

{
    "displayText": <String>,
    "nickname": <String | undefined>,
    "start": <Date (yyyy-MM-dd HH:mm:ss Z)>,
    "end": <Date (yyyy-MM-dd HH:mm:ss Z) | undefined>,
    "scheduledDate": <Date (yyyy-MM-dd HH:mm:ss Z) | undefined>,
    "form": <String> ("Capsule" | "Cream" | "Device" | "Drops" | "Foam" | "Gel" | "Inhaler" | "Injection" | "Liquid" | "Lotion" | "Ointment" | "Patch" | "Powder" | "Spray" | "Suppository" | "Tablet" | "Topical" | "Unknown"),
    "status": <String> ("Not Interacted" | "Notification Not Sent" | "Snoozed" | "Taken" | "Skipped" | "Not Logged" | "Unspecified"),
    "isArchived": <Boolean>,
    "dosage": <Number | undefined>
    "codings": [
        {
            "code": <String>,
            "system": <String>,
            "version": <String | undefined>,
        }
    ]
}

Symptoms

Health Auto Export supports all health symptoms data.

[
    {
        "start": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "end": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "name": <String>,
        "severity": <String>,
        "userEntered": <Boolean>,
        "source": <String>
    }
]

State of Mind

Health Auto Export supports all State of Mind data.

{
    "id": String,
    "start": String,
    "end": String,
    "kind": String,
    "labels": Array<String>,
    "associations": Array<String>,
    "valence": Number,
    "valenceClassification": Number,
    "metadata": Object<String:String>
}

Heart Rate Notifications

Heart Rate Notification data is structured quite differently from other health metric data. At the top level, there is information regarding the start and end of the event. An event threshold is included for high and low heart rate events.

Additional metadata gathered during the heart rate event is included for hear rate and heart rate variation.

The threshold field is only included for high and low heart rate notifications)

[
    {
        "start": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "end": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "threshold": <Number> (For high and low heart rate notifications)
        "heartRate": [
            {
                "hr": <Number>,
                    "units": "bpm",
                    "timestamp": {
                        "start": <Date (yyyy-MM-dd HH:mm:ss Z)>,
                        "end": <Date (yyyy-MM-dd HH:mm:ss Z)>,
                        "interval": {
                            "duration": <Number>,
                            "units": "s" (seconds)
                        }
                    }
            }
        ],
        "heartRateVariation": [
            {
                "hrv": <Number>,
                "units": "ms",
                "timestamp": [
                    "start": <Date (yyyy-MM-dd HH:mm:ss Z)>,
                    "end": <Date (yyyy-MM-dd HH:mm:ss Z)>,
                    "interval": [
                        "duration": <Number>,
                        "units": "s"
                    ]
                ]
            }
        ]
    }
]

ECG

Health Auto Export supports ECG data export in the following format:

[
    {
        "start": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "end": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "classification": <String> ("Sinus Rhythm" | "Atrial Fibrillation" | "High Heart Rate" | "Inconclusive Low Heart Rate" | "Inconclusive High Heart Rate" | "Inconclusive" | "Inconclusive Poor Recording" | "Inconclusive" | "Unrecognized" ),
        "severity": <String>,
        "averageHeartRate": <Number>,
        "numberOfVoltageMeasurements": <Number>
        "voltageMeasurements": Array<VoltageMeasurement>
        "samplingFrequency": <Number> (Hz)
        "source": <String>
    }
]

Voltage Measurement

[
    {
        "date": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "voltage": <Number>,
        "units": <String>
    }
]

Workouts

The workouts field is an array of objects, each containing data for a particular workout. Workouts follow a common structure. Units for a particular field can be variable, depending on user unit preferences (e.g. "kcal" vs "kJ"), and denoted as <String>, or units can fixed and expressed by a hardcoded value.

Workouts v2

{
  "id": <String>,
  "name": <String>,
  "start": <Date (yyyy-MM-dd HH:mm:ss Z)>,
  "end": <Date (yyyy-MM-dd HH:mm:ss Z)>,
  "duration": <Number (seconds)>,


  // Optional fields
  "location": <String | undefined>, ("Indoor" | "Outdoor" | "Pool" | "Open Water")
  "activeEnergyBurned": { "qty": <Number>, "units": <String> } | undefined>,
  "intensity": { "qty": <Number>, "units": "MET" } | undefined>,
  "distance": { "qty": <Number>, "units": <String ("mi" | "km")> } | undefined>,
  "temperature": { "qty": <Number>, "units": <String ("degF" | "degC")> } | undefined>,
  "humidity": { "qty": <Number>, "units": "%" } | undefined>,
  "avgSpeed": { "qty": <Number>, "units": <String ("mph" | "kmph")> } | undefined>,
  "maxSpeed": { "qty": <Number>, "units": <String ("mph" | "kmph")> } | undefined>,
  "elevationUp": { "qty": <Number>, "units": <String ("ft" | "m")> } | undefined>,
  "elevationDown": { "qty": <Number>, "units": <String ("ft" | "m")> } | undefined>,
  "lapLength": { "qty": <Number>, "units": <String ("mi" | "km")> } | undefined>,
  "strokeStyle": <String | undefined> ("Backstroke" | "Breaststroke" | "Butterfly" | "Freestyle" | "Mixed" | "Kickboard" | "Uknown"),
  "swolfScore": <Number | undefined>>,
  "salinity": <String | undefined> ("Fresh Water" | "Salt Water"),
  "activeEnergy": <Array(QuntityData) | undefined>,
  "basalEnergy": <Array(QuntityData) | undefined>,
  "cyclingCadence": <Array(QuntityData) | undefined>,
  "cyclingDistance": <Array(QuntityData) | undefined>,
  "cyclingPower": <Array(QuntityData) | undefined>,
  "cyclingSpeed": <Array(QuntityData) | undefined>,
  "swimDistance": <Array(QuntityData) | undefined>,
  "swimStroke": <Array(QuntityData) | undefined>,
  "stepCount": <Array(QuntityData) | undefined>,
  "walkingAndRunningDistance": <Array(QuntityData) | undefined>,
  "heartRateData": <Array(HeartRateData) | undefined>,
  "heartRateRecovery": <Array(HeartRateData) | undefined>,
  "metadata": <String:Any | undefined>,
  "route": <Array(Location) | undefined>
}

QuntityData

{
    "date": <String (yyyy-MM-dd HH:mm:ss Z)>,
    "qty": <Number>,
    "units": <Stirng>,
    "source": <String>
}

Heart Rate Data

{
    "date": <String (yyyy-MM-dd HH:mm:ss Z)>,
    "Min": <Number>,
    "Avg": <Number>,
    "Max": <Number>,
    "units": <String>,
}

Location

{
    "latitude": <Number>,
    "longitude": <Number>,
    "altitude": <Number>,
    "course": <Number>,
    "courseAccuracy": <Number>,
    "horizontalAccuracy": <Number>,
    "verticalAccuracy": <Number>,
    "timestamp": <String>,
    "speed": <Number>,
    "speedAccuracy": <Number>
}

Workouts v1

[
    {
        "name": <String>,
        "start": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "end": <Date (yyyy-MM-dd HH:mm:ss Z)>,
        "heartRateData": [
            "date": <Date (yyyy-MM-dd HH:mm:ss Z)>
            "qty": <Number>,
            "units": "count"
        ],
        "heartRateRecovery": [
            {
                "date": <Date (yyyy-MM-dd HH:mm:ss Z)>
                "qty": <Number>,
                "units": "count"
            }
        ],
        "route": [
            {
                "lat": <Number>,
                "lon": <Number>,
                "altitude": <Number (in meters)>,
                "timestamp" <Date (yyyy-MM-dd HH:mm:ss Z)>
            }
        ],
        "totalEnergy": {
            "qty": <Number>,
            "units": <String>
        },
        "activeEnergy": {
            "units": <String>,
            "qty": <Number>
        },
        "maxHeartRate": {
            "qty": <Number>,
            "units": "bpm"
        },
        "avgHeartRate": {
            "qty": <Number>,
            "units": "bpm"
        },
        "stepCount": {
            "qty": <Number>,
            "units": "steps"
        },
        "stepCadence": {
            "qty": <Number>,
            "units": "spm"
        },
        "totalSwimmingStrokeCount": {
            "qty": <Number>,
            "units": "count"
        },
        "swimCadence": {
            "qty": <Number>,
            "units": "spm"
        },
        "distance": {
            "qty": <Number>,
            "units": <String>
        },
        "speed": {
            "qty": <Number>,
            "units": <String>
        },
        "flightsClimbed": {
            "qty": <Number>,
            "units": "count"
        },
        "intesity": {
            "qty": <Number>,
            "units": "MET"
        },
        "temperature": {
            "qty": <Number>,
            "units": <String>
        },
        "humidity": {
            "qty": <Number>,
            "units": "%"
        },
        "elevation": {
            "ascent": <Number>,
            "descent": <Number>,
            "units": <String>
        }
    }
]
Clone this wiki locally