Marrow Health
NL
Download

Automatiseringen: je gegevens, volgens een schema verstuurd

Marrow kan een bestand met je gezondheidsgegevens rechtstreeks vanaf de telefoon POSTen naar elke URL die je kiest, met de cadans die jij kiest. Deze pagina is de referentie: hoe je er een instelt, hoe elke payload eruitziet en hoe je iets schrijft dat hem ontvangt.

Kant-en-klare opstellingen voor n8n, Zapier, Make, Home Assistant, Google Sheets en InfluxDB staan onder verbindingen.

Alle handleidingen van Marrow: MCP · Zelfgehoste mirror · Automatiseringen · Bestanden · Ondersteuning

Wat een automatisering is

Een opgeslagen taak onder Exporteer, Geautomatiseerd: één soort gegevens, één formaat, één datumbereik, één URL, één cadans. Marrow bouwt het bestand uit zijn geverifieerde opslag en POST het naar de URL, ook met de app gesloten, na elke synchronisatie en bij elke verversing op de achtergrond, zodra de cadans verstreken is. Er gaat niets via ons: de telefoon praat rechtstreeks met jouw eindpunt.

Een automatisering instellen

  1. Tabblad Exporteer, Geautomatiseerd: zet het aan en kies dan Nieuwe automatisering. Maak je hem vanaf de pagina van een tool (n8n, Zapier, Home Assistant en de rest onder verbindingen), dan krijgt de automatisering de naam van die tool en staat bij elk veld wat de tool daar verwacht.
  2. Adres: de https-URL waarnaar hij POST. Kopteksten: alles wat je ontvanger nodig heeft (een Authorization-bearertoken, een X-Gitlab-Token, wat dan ook). Heeft de tool er geen nodig, dan staat Koptekst toevoegen onder Meer opties.
  3. Gegevens: Gezondheidsstatistieken, Work-outs, Krachtlogboek, Voedingsdagboek, of Symptomen en stemming, als JSON of CSV. Eén automatisering verstuurt één soort, dus maak er één per soort die je wilt. Elke die aanstaat telt als een verbinding: Gratis houdt 1 verbinding tegelijk aan, Marrow Pro maximaal 10, AI's en servers meegerekend.
  4. Cadans: om de zoveel minuten, uren of dagen. Het datumbereik, de aggregatie en de time-out staan onder Meer opties.
  5. Nu uitvoeren verstuurt een eerste payload, zodat je de ontvanger kunt controleren voordat het schema aan de beurt is.

Datumbereiken

Vormen van de payload

Gezondheidsstatistieken (dagtotalen, JSON)

Dezelfde structuur als de metrics van Health Auto Export (een lijst metrics met name, units en data met qty), dus een ontvanger die voor die app is geschreven, heeft maar kleine aanpassingen nodig: datums zijn hier gewone dagen, geen tijdstempels, en de payloads voor work-outs en kracht hieronder zijn van Marrow zelf. Waarden staan in de opgeslagen eenheid uit units (kg, m, mL, degC, kcal, count). Hartslag komt per dag als Avg, Min en Max in bpm, en slaap per nacht met de fases in uren. Reken aan jouw kant om als je imperiale eenheden wilt.

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

Ruwe samples (de groepering Ruwe samples) verstuurt elke sample met begin- en eindtijd in plaats van een dagtotaal. CSV-metrics komen als de brede tabel die op de bestandenpagina staat beschreven.

Work-outs

{"data": {"workouts": [
  {"activity": "Running", "start": "2026-09-11T18:43:41Z", "end": "2026-09-11T19:13:53Z",
   "duration_min": 30.2, "kcal": 512, "distance_mi": 3.06, "avg_hr": 174, "source": "Apple Watch"}
]}}

Krachtlogboek

Elke werkset (opwarmsets blijven weg), plus de voortgang per oefening en het volume per spiergroep. Gewichten staan in de eenheid die je koos bij Instellingen, Eenheden. Het veld unit zegt welke. De set_type van elke set is work, failure of drop, en een set bevat ook rir als je herhalingen in reserve hebt gelogd. set_credits telt de sets die aan een spiergroep worden toegerekend, in breuken als een oefening meerdere groepen werkt.

{"data": {"unit": "lb",
  "sets": [{"time": "2026-09-11T17:02:00Z", "session": "Push day", "exercise": "Bench Press",
            "set": 1, "weight": 185, "reps": 8, "est_1rm": 229.6, "set_type": "work"}],
  "exercises": [{"exercise": "Bench Press", "best_est_1rm": 229.6,
                 "sessions": [{"date": "2026-09-11T17:02:00Z", "sets": 3, "top_weight": 185, "top_reps": 8, "est_1rm": 229.6, "volume": 3885}]}],
  "muscle_groups": [{"group": "Chest", "volume": 3108.0, "set_credits": 2.4}]
}}

Voedingsdagboek

{"data": {"days": [
  {"day": "2026-09-11", "entries": [
    {"meal": "breakfast", "name": "Oatmeal", "grams": 250, "kcal": 300,
     "protein_g": 10, "carbs_g": 54, "fat_g": 5, "logged_at": "2026-09-11T12:10:00Z",
     "nutrients": {"dietary_fiber": 8.0, "dietary_sugar": 1.2}}
  ]}
]}}

Een ontvanger schrijven

Alles wat een HTTPS-POST accepteert en met 2xx antwoordt, werkt: een webhookdienst, een serverless functie, een script op een thuisserver. Drie regels houden het robuust:

Een Python-ontvanger van twaalf regels die elke post archiveert:

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

Zet hem achter HTTPS (een Cloudflare Tunnel, Tailscale Funnel of een reverse proxy) en wijs de automatisering ernaartoe. Wil je een kopie die je kunt bevragen in plaats van een map met bestanden, dan is de zelfgehoste mirror die ontvanger al, kant-en-klaar.

Goed om te weten

Problemen oplossen

Test met Nu uitvoeren. De regel eronder zegt wat er gebeurde, en Meer opties, Activiteitenlog bewaart de laatste 30 runs met dezelfde regel. Zet Meld bij uitvoeren aan (Meer opties) voor een melding bij elke run terwijl je controleert.

Wat Marrow toontWat je kunt doen
Een samenvatting van wat is verstuurd, zoals 12 diary entriesAfgeleverd: de ontvanger antwoordde met 2xx. Zie je aan zijn kant niets, kijk dan naar de laatste rijen hieronder.
Server answered 401 of 403De ontvanger wil een header, of die van jou klopt niet. Controleer de naam en waarde, inclusief Bearer en de spatie erachter.
Server answered 404Verkeerd adres, of de ontvanger luistert niet. Gebruik in n8n de Production URL en activeer de workflow. Kijk of er aan het eind geen pad ontbreekt.
Server answered 405Het adres accepteert geen POST. Wijs het naar het eindpunt dat voor binnenkomende gegevens bedoeld is.
Server answered 413De payload is te groot voor de ontvanger. Kies een korter datumbereik, minder meetwaarden of Dagtotalen in plaats van Ruwe samples.
Server answered 500 of een andere 5xxDe ontvanger faalde bij het verwerken. Kijk in zijn eigen log. Archiveer eerst de ruwe body en verwerk daarna.
De aanvraag is verlopenDe ontvanger deed er langer over dan de time-out. Antwoord eerst en werk daarna, of verhoog Time-out onder Meer opties (tot 300 s).
De App Transport Security-beleidsregel vereist het gebruik van een beveiligde verbindingHet adres is onbeveiligd http op internet. Gebruik https. iOS staat gewone http voor Marrow alleen toe op je eigen netwerk.
Er kan geen server met de opgegeven hostnaam worden gevondenEen typefout in het adres, of een naam die alleen je thuisnetwerk kent. Controleer het in Safari op de telefoon.
No valid URL - set an https endpoint firstHet adres is leeg of begint niet met https:// (of http:// op je eigen netwerk).
Nothing to export in this rangeGeen gegevens van dat soort in het datumbereik. Kies onder Meer opties een langer bereik, of log eerst iets.

Oplossingen per tool staan op de pagina van die tool: n8n, Zapier, Make, Home Assistant, Google Sheets, InfluxDB, elke URL.