Marrow Health
ID
Unduh

Otomatisasi: datamu, dikirim sesuai jadwal

Marrow bisa mengirim POST berisi file data kesehatanmu ke URL mana pun yang kamu pilih, dengan jadwal yang kamu pilih, langsung dari ponsel. Halaman ini adalah referensinya: cara mengaturnya, seperti apa tiap payload, dan cara menulis sesuatu yang menerimanya.

Pengaturan siap pakai untuk n8n, Zapier, Make, Home Assistant, Google Sheets, dan InfluxDB ada di bawah koneksi.

Semua panduan Marrow: MCP · Mirror self-hosted · Otomatisasi · File · Dukungan

Apa itu otomatisasi

Pekerjaan tersimpan di Ekspor, Otomatis: satu jenis data, satu format, satu rentang tanggal, satu URL, satu jadwal. Marrow membuat file dari penyimpanannya yang terverifikasi dan mengirim POST ke URL itu tanpa aplikasi dibuka, setelah setiap sinkronisasi selesai dan pada setiap penyegaran latar belakang, setiap kali jadwal sudah terlewati. Tidak ada yang melewati kami: ponsel berbicara langsung ke endpoint kamu.

Cara mengaturnya

  1. Tab Ekspor, Otomatis: aktifkan, lalu Otomatisasi Baru. Jika dibuat dari halaman sebuah tool (n8n, Zapier, Home Assistant, dan lainnya di bawah koneksi), otomatisasi itu memakai nama tool tersebut dan menjelaskan di samping tiap kolom apa yang diinginkan tool itu di sana.
  2. Alamat: URL https tujuan POST. Header: apa pun yang dibutuhkan penerimamu (token bearer Authorization, X-Gitlab-Token, apa saja). Jika tool tidak membutuhkannya, Tambah header ada di bawah Opsi lainnya.
  3. Data: Metrik kesehatan, Latihan, Catatan kekuatan, Buku harian nutrisi, atau Gejala dan suasana hati, sebagai JSON atau CSV. Satu otomatisasi membawa satu jenis, jadi buat satu per jenis yang kamu mau. Setiap yang aktif dihitung sebagai satu koneksi: Gratis menjaga 1 koneksi aktif sekaligus, Marrow Pro hingga 10, termasuk AI dan server.
  4. Kadensi: setiap sekian menit, jam, atau hari. Rentang tanggal, agregasi, dan batas waktu ada di bawah Opsi lainnya.
  5. Jalankan sekarang mengirim payload pertama agar kamu bisa memeriksa penerimanya sebelum menunggu jadwal.

Rentang tanggal

Bentuk payload

Metrik kesehatan (total harian, JSON)

Struktur yang sama dengan metrik Health Auto Export (daftar metrics berisi name, units, dan data dengan qty), jadi penerima yang ditulis untuk aplikasi itu hanya butuh sedikit perubahan: tanggal di sini berupa hari biasa, bukan timestamp, dan payload latihan dan kekuatan di bawah adalah milik Marrow sendiri. Nilai dalam satuan tersimpan yang disebut di units (kg, m, mL, degC, kcal, count). Detak jantung datang sebagai Avg, Min, dan Max tiap hari dalam bpm, dan tidur sebagai tiap malam beserta tahapnya dalam jam. Konversi di sisi kamu kalau kamu ingin satuan imperial.

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

Sampel mentah (pengelompokan Sampel mentah) mengirim setiap sampel dengan waktu mulai dan selesainya, bukan total harian. Metrik CSV datang sebagai tabel lebar yang dijelaskan di halaman file.

Latihan

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

Catatan kekuatan

Setiap set kerja (pemanasan tidak disertakan), ditambah kemajuan per latihan dan volume per kelompok otot. Beban dalam satuan yang kamu pilih di Pengaturan, Satuan. Kolom unit menyebutkan yang mana. set_type tiap set adalah work, failure, atau drop, dan sebuah set juga membawa rir kalau kamu mencatat repetisi cadangan. set_credits menghitung set yang dikreditkan ke sebuah kelompok otot, dalam pecahan kalau satu latihan melibatkan beberapa kelompok.

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

Buku harian nutrisi

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

Menulis penerima

Apa pun yang menerima POST HTTPS dan menjawab 2xx bisa dipakai: layanan webhook, fungsi serverless, atau skrip di server rumah. Tiga aturan membuatnya tangguh:

Penerima Python dua belas baris yang mengarsipkan setiap kiriman:

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

Letakkan di balik HTTPS (Cloudflare Tunnel, Tailscale Funnel, atau reverse proxy apa pun) dan arahkan otomatisasi ke sana. Kalau yang kamu mau adalah salinan yang bisa di-query, bukan folder berisi file, mirror self-hosted adalah penerima yang sudah jadi.

Perlu diketahui

Pemecahan masalah

Uji dengan Jalankan sekarang. Baris di bawahnya menjelaskan apa yang terjadi, dan Opsi lainnya, Log aktivitas menyimpan 30 proses terakhir dengan baris yang sama. Aktifkan Beri tahu saat dijalankan (Opsi lainnya) untuk mendapat notifikasi di setiap proses selama kamu memeriksa.

Yang ditampilkan MarrowYang harus dilakukan
Ringkasan isi yang dikirim, seperti 12 diary entriesTerkirim: penerima menjawab 2xx. Kalau tidak ada yang muncul di sisinya, lihat baris terakhir di bawah.
Server answered 401 atau 403Penerima menginginkan header, atau header yang kamu tambahkan salah. Periksa nama dan nilainya, termasuk Bearer dan spasi setelahnya.
Server answered 404Alamat salah, atau penerima tidak mendengarkan. Di n8n, pakai Production URL dan aktifkan workflow. Periksa apakah path di bagian akhir terlewat.
Server answered 405Alamat itu tidak menerima POST. Arahkan ke endpoint yang memang untuk data masuk.
Server answered 413Payload terlalu besar untuk penerima. Pilih rentang tanggal yang lebih pendek, lebih sedikit metrik, atau Total harian sebagai ganti Sampel mentah.
Server answered 500 atau 5xx lainnyaPenerima gagal saat menanganinya. Lihat lognya sendiri. Arsipkan body mentah dulu, baru parse.
Waktu permintaan habisPenerima butuh waktu lebih lama dari batas waktu. Jawab dulu lalu kerjakan setelahnya, atau naikkan Batas waktu di Opsi lainnya (hingga 300 detik).
Kebijakan App Transport Security mengharuskan penggunaan koneksi yang amanAlamatnya http biasa di internet. Pakai https. iOS hanya mengizinkan Marrow memakai http biasa di jaringan kamu sendiri.
Server dengan nama host yang ditentukan tidak ditemukanSalah ketik di alamat, atau nama yang hanya dikenal jaringan rumahmu. Periksa di Safari di ponsel.
No valid URL - set an https endpoint firstAlamat kosong atau tidak diawali https:// (atau http:// di jaringan kamu sendiri).
Nothing to export in this rangeTidak ada data jenis itu dalam rentang tanggal. Pilih rentang yang lebih panjang di Opsi lainnya, atau catat sesuatu dulu.

Solusi untuk tiap tool ada di halamannya masing-masing: n8n, Zapier, Make, Home Assistant, Google Sheets, InfluxDB, URL apa pun.