Надсилання даних Apple Health у вебхук
В Apple Health немає веб-API, тому ваші дані потрапляють у вебхук лише тоді, коли їх надсилає застосунок на вашому iPhone. Marrow Health робить це безкоштовно: автоматизація відправляє POST-запитом ваші показники здоров'я, тренування, силові підходи, щоденник харчування або симптоми й настрій на будь-який URL, у форматі JSON чи CSV, за обраним вами розкладом, коли застосунок закрито. Нижче описано налаштування, структуру даних і робочі приймачі для n8n, Home Assistant і звичайного сервера. Marrow робимо ми.
Налаштуйте автоматизацію
- У Marrow Health відкрийте вкладку Експорт, потім Автоматизовано, потім Нова автоматизація.
- Вставте URL вашого вебхука (використовуйте HTTPS). Додайте заголовки, які перевіряє ваш приймач, наприклад токен
Authorizationтипу bearer або ключ 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)
Приймання в Home Assistant
Тригер вебхука приймає 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 Cloud. Установітьfalse, коли телефон надсилає дані через інтернет на вашу власну адресу HTTPS.- Ідентифікатор вебхука це єдиний секрет, тож зробіть його довгим і випадковим.
(Документація Home Assistant про тригер вебхука)
Приймання на власному сервері
Підійде будь-яка кінцева точка, що приймає POST через HTTPS і відповідає кодом 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 можуть читати вимірювання здоров'я й надсилати їх діями Get Contents of URL в особистій автоматизації за визначеним часом. Це безкоштовно, але читати дані «Здоров'я» вони можуть лише коли телефон розблоковано, а кожен показник ви збираєте й підтримуєте самі.
- export.zip від Apple це разова повна резервна копія, а не потік даних. Щоб перетворити його на CSV, скористайтеся нашим конвертером у браузері.