Marrow Health
NB
Last ned

Send Apple Health-data til en webhook

Apple Health har ingen web-API, så dataene dine når en webhook bare når en app på iPhonen sender dem. Marrow Health gjør dette gratis: en automatisering sender helsemålingene, treningsøktene, styrkesettene, matdagboken eller symptomene og humøret dine med POST til en hvilken som helst URL, som JSON eller CSV, etter tidsplanen du velger, med appen lukket. Nedenfor står oppsettet, nyttelasten og fungerende mottakere for n8n, Home Assistant og en vanlig server. Vi lager Marrow.

Sett opp automatiseringen

  1. Åpne fanen Eksporter i Marrow Health, deretter Automatisert, deretter Ny automatisering.
  2. Lim inn webhook-URL-en din (bruk HTTPS). Legg til eventuelle overskrifter mottakeren din sjekker, for eksempel et Authorization-bearer-token eller en n8n-nøkkel for header-autentisering.
  3. Velg typen data: Helsemålinger, Treningsøkter, Styrkelogg, Ernæringsdagbok eller Symptomer og humør. Én automatisering sender én type, og du kan ha opptil ti.
  4. Velg JSON eller CSV, datoperioden (Siden forrige kjøring er standard) og hvor ofte den kjører, i minutter, timer eller dager.
  5. Slå den på og trykk på Kjør nå for å sende en første nyttelast mens du følger med på mottakeren.

Hver forespørsel er en POST med Content-Type: application/json (eller text/csv) og overskriftene dine. Hver kjøring, med svarkoden sin, står i automatiseringens historikk i appen.

Det som kommer frem

Helsemålinger kommer som dagstotaler, i enheten som er oppgitt i units. Puls kommer som gjennomsnitt, minimum og maksimum for hver dag, og søvn som hver natt med fasene sine, i timer:

{"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"}]}
]}}

Nyttelastene for treningsøkter, styrke, ernæring og humør, råprøver i stedet for dagstotaler og CSV-oppsettet står i referansen for automatiseringer.

Motta den i n8n

  1. Legg til en Webhook-node. Sett HTTP Method til POST og gi den en bane, for eksempel apple-health.
  2. For en hemmelighet setter du Authentication til Header Auth og legger til det samme overskriftsnavnet og den samme verdien i Marrow-automatiseringen.
  3. Klikk Listen for test event, og trykk deretter på Kjør nå i Marrow innen to minutter. Nyttelasten vises i editoren.
  4. Publiser arbeidsflyten og pek Marrow til Production URL (den med /webhook/, ikke /webhook-test/). Test-URL-en slutter å lytte etter en test.

Nyttelasten ligger under body, så dagens skritt er {{ $json.body.data.metrics.find(m => m.name === 'step_count').data.at(-1).qty }} i et uttrykk. Legg til en Split Out-node på body.data.metrics for å behandle hver måling som sin egen post. n8n tar som standard imot nyttelaster på opptil 16 MB, noe som dekker flere år med dagstotaler. Produksjonskjøringer vises under Executions, ikke i editoren. (n8n Webhook docs)

Motta den i Home Assistant

En webhook-trigger tar imot POST-en på /api/webhook/<webhook_id>. Denne automatiseringen lagrer det siste skrittallet i en tallhjelper som heter input_number.steps_today (opprett den først, med et maksimum over din beste dag):

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 }}

(Dokumentasjon for webhook-triggeren i Home Assistant)

Motta den på din egen server

Ethvert endepunkt som godtar en HTTPS POST og svarer 2xx, fungerer. Dette arkiverer hver nyttelast til en fil:

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()

Sett den bak HTTPS med en Cloudflare Tunnel, Tailscale Funnel eller en reverse proxy. Vil du heller ha en database du kan spørre i enn en mappe med filer, er Marrows selvdrevne speil akkurat den mottakeren, ferdig skrevet, og AI-agenter kan spørre i det også.

Tre regler for en mottaker som aldri mister data

Når kjører den?

Når som helst iOS lar Marrow kjøre: etter at den har synkronisert med Apple Health, når du åpner den, og under oppdatering i bakgrunnen, så snart intervallet du valgte har gått. iOS bestemmer når oppdatering i bakgrunnen skjer, så en telefon som ligger låst hele dagen, sender når den låses opp neste gang, og Siden forrige kjøring dekker gapet.

Andre måter å gjøre det på