All documentation

Going further

Switching from Health Auto Export

Field mappings and compatibility limits.

Compatibility mode keeps existing field names for Home Assistant, MQTT and web address destinations using Metrics JSON.

What maps to what#

Field differences between Hozz’s schema and compatibility mode
HozzCompatibility mode
Date format2026-02-06T22:30:00.000Z2026-02-06 14:30:00 -0800 — local time, space separated, numeric offset, not ISO 8601
Heart rate pointsqtyMin, Avg, Max — capitalised, with no qty
Heart rate unitscount/minbpm
Sleep pointsdate, qty as a raw stage numberstartDate, endDate, qty in hours, value as a stage name
Sleep unitscounthr
Sleep stage0–5In Bed, Asleep, Awake, Core, Deep, REM
Workout nameWorkoutThe activity, e.g. Running
Workout durationabsentSeconds
Per-point unitspresentabsent
A compatibility-mode payload
{
  "data": {
    "metrics": [
      {
        "name": "heart_rate",
        "units": "bpm",
        "data": [
          {
            "date": "2026-02-06 14:30:00 -0800",
            "Min": 62,
            "Avg": 62,
            "Max": 62,
            "source": "Apple Watch"
          }
        ]
      },
      {
        "name": "sleep_analysis",
        "units": "hr",
        "data": [
          {
            "startDate": "2026-02-05 23:00:00 -0800",
            "endDate": "2026-02-06 00:30:00 -0800",
            "qty": 1.5,
            "value": "Core",
            "source": "Apple Watch"
          }
        ]
      }
    ],
    "workouts": [
      {
        "id": "7b21…",
        "name": "Running",
        "start": "2026-02-06 07:00:00 -0800",
        "end": "2026-02-06 07:30:00 -0800",
        "duration": 1800
      }
    ]
  }
}

What this mode does not claim#

Field renaming cannot remove these differences.

A heart rate point carries the same number three times#

Hozz sends individual samples, not rollups. Each heart-rate point repeats its value in Min, Avg and Max. Aggregated sleep is absent.

Automations that require differing Min and Max will not work.

Blood pressure stays split#

Hozz sends systolic and diastolic as separate metrics. It does not guess pairings.

Metadata-derived point fields are not emitted#

Metadata-derived fields such as mealTime and reason are absent.

Deletions are still included#

Hozz adds a deletions key. Existing consumers may ignore it.

Compatibility boundary#

Hozz matches the published data.metrics[].{name, units, data} envelope, the yyyy-MM-dd HH:mm:ss Z timestamp, qty, the capitalised Min/Avg/Max, and the sleep point's startDate/endDate/value.

Undocumented behaviour is not covered. Test any dependency on it.

Running both at once#

Run Hozz beside the existing exporter and compare separate destinations before switching.