Отправка данных Apple Health в вебхук
У Apple Health нет веб-API, поэтому ваши данные попадают в вебхук, только если их отправляет приложение на iPhone. Marrow Health делает это бесплатно: автоматизация отправляет POST-запросом ваши показатели здоровья, тренировки, силовые подходы, дневник питания или симптомы и настроение на любой URL, в формате JSON или CSV, по выбранному вами расписанию и при закрытом приложении. Ниже описаны настройка, содержимое запроса и рабочие приемники для n8n, Home Assistant и обычного сервера. Мы делаем Marrow.
Настройка автоматизации
- В Marrow Health откройте вкладку «Экспорт», затем Автоматически, затем Новая автоматизация.
- Вставьте URL вашего вебхука (используйте HTTPS). Добавьте заголовки, которые проверяет ваш приемник, например bearer-токен
Authorizationили ключ header-auth из n8n. - Выберите вид данных: Показатели здоровья, Тренировки, Журнал силовых, Дневник питания или Симптомы и настроение. Одна автоматизация отправляет один вид, а всего их можно создать до десяти.
- Выберите JSON или CSV, диапазон дат (по умолчанию С последнего запуска) и как часто она запускается: в минутах, часах или днях.
- Включите ее и нажмите Запустить сейчас, чтобы отправить первые данные, пока вы наблюдаете за приемником.
Каждый запрос отправляется методом POST с Content-Type: application/json (или text/csv) и вашими заголовками. Каждый запуск с кодом ответа записывается в историю автоматизации в приложении.
Что приходит
Показатели здоровья приходят как дневные итоги в единице, указанной в units. Пульс приходит как среднее, минимум и максимум за каждый день, а сон как каждая ночь с ее фазами, в часах:
{"data": {"metrics": [
{"name": "body_mass", "units": "kg",
"data": [{"date": "2026-09-11", "qty": 81.3}]},
{"name": "step_count", "units": "count",
"data": [{"date": "2026-09-11", "qty": 8746}]},
{"name": "heart_rate", "units": "bpm",
"data": [{"date": "2026-09-11", "Avg": 71, "Min": 52, "Max": 148}]},
{"name": "sleep_analysis", "units": "h",
"data": [{"date": "2026-09-11", "totalSleep": 7.2, "asleep": 7.2, "deep": 1.1, "rem": 1.6, "core": 4.3, "awake": 0.2,
"sleepStart": "2026-09-10 23:36:00 -0400", "sleepEnd": "2026-09-11 07:02:00 -0400"}]}
]}}
Содержимое запросов для тренировок, силовых, питания и настроения, исходные записи вместо дневных итогов и структура CSV описаны в справочнике по автоматизациям.
Прием в n8n
- Добавьте узел Webhook. Установите HTTP Method в
POSTи задайте путь, напримерapple-health. - Для секретного ключа установите Authentication в Header Auth и добавьте то же имя и значение заголовка в автоматизацию Marrow.
- Нажмите Listen for test event, затем в течение двух минут нажмите Запустить сейчас в Marrow. Данные появятся в редакторе.
- Опубликуйте рабочий процесс и укажите в Marrow Production URL (тот, где
/webhook/, а не/webhook-test/). Тестовый URL перестает принимать запросы после теста.
Данные лежат в body, поэтому шаги за сегодня в выражении выглядят так: {{ $json.body.data.metrics.find(m => m.name === 'step_count').data.at(-1).qty }}. Добавьте узел Split Out на body.data.metrics, чтобы обрабатывать каждый показатель как отдельный элемент. По умолчанию n8n принимает данные до 16 МБ, этого хватает на годы дневных итогов. Рабочие запуски отображаются в разделе Executions, а не в редакторе. (n8n Webhook docs)
Прием в Home Assistant
Триггер webhook принимает POST по адресу /api/webhook/<webhook_id>. Эта автоматизация сохраняет последнее число шагов во вспомогательном числовом элементе input_number.steps_today (сначала создайте его с максимумом выше вашего лучшего дня):
automation:
- alias: "Apple Health from Marrow"
triggers:
- trigger: webhook
webhook_id: "pick-a-long-random-id"
allowed_methods:
- POST
local_only: false
actions:
- action: input_number.set_value
target:
entity_id: input_number.steps_today
data:
value: >-
{{ ((trigger.json.data.metrics
| selectattr('name', 'eq', 'step_count') | first).data
| last).qty }}
- JSON лежит в
trigger.json, потому что Marrow отправляетContent-Type: application/json. local_onlyвключен по умолчанию, поэтому запросы принимаются только из вашей домашней сети или через облачный URL вебхука Nabu Casa. Поставьтеfalse, когда телефон отправляет данные через интернет на ваш собственный HTTPS-адрес.- ID вебхука служит единственным секретом, поэтому сделайте его длинным и случайным.
(Документация Home Assistant по триггеру webhook)
Прием на вашем собственном сервере
Подойдет любой адрес, который принимает HTTPS POST и отвечает кодом 2xx. Этот сохраняет каждый запрос в файл:
from http.server import BaseHTTPRequestHandler, HTTPServer
import time
class H(BaseHTTPRequestHandler):
def do_POST(self):
body = self.rfile.read(int(self.headers.get("Content-Length", 0)))
with open(f"marrow-{int(time.time())}.json", "wb") as f:
f.write(body)
self.send_response(200)
self.end_headers()
HTTPServer(("0.0.0.0", 8798), H).serve_forever()
Откройте его по HTTPS через Cloudflare Tunnel, Tailscale Funnel или обратный прокси. Если вам нужна база данных с запросами, а не папка с файлами, зеркало Marrow на своем сервере как раз такой готовый приемник, и ИИ-агенты тоже могут с ним работать.
Три правила для приемника, который не теряет данные
- Побеждает последнее. Храните каждое значение по ключу «показатель и день» и перезаписывайте при повторе. С последнего запуска намеренно отправляет заново последние два дня, потому что Apple Health продолжает дописывать день после его окончания.
- Сначала сохраняйте тело запроса как есть, затем разбирайте его. Ошибка разбора не должна стоить вам данных.
- Отвечайте быстро. Marrow ждет не дольше заданного вами таймаута (по умолчанию 60 секунд), а неудавшийся запуск повторяет в следующий раз, начиная с последнего успешного периода.
Когда это запускается?
Когда iOS позволяет Marrow работать: после синхронизации с Apple Health, при открытии приложения и во время фонового обновления, как только пройдет выбранный вами интервал. Когда произойдет фоновое обновление, решает iOS, поэтому телефон, который весь день был заблокирован, отправит данные при следующей разблокировке, а С последнего запуска закроет пропуск.
Другие способы
- Health Auto Export тоже отправляет данные Apple Health в вебхуки, и его JSON с показателями имеет ту же структуру, что и у Marrow. Для его автоматизаций нужен тариф Premium.
- Команды Apple (Shortcuts) умеют читать замеры здоровья и отправлять их действием Получить содержимое URL в личной автоматизации в заданное время. Это бесплатно, но данные «Здоровья» читаются только при разблокированном телефоне, а каждый показатель вы собираете и поддерживаете сами.
- export.zip от Apple представляет собой разовую полную копию, а не постоянный поток данных. Чтобы превратить его в CSV, используйте наш конвертер в браузере.