Marrow Health
JA
ダウンロード

オートメーション:スケジュールでデータをプッシュ

Marrowは、あなたが選んだURLに、あなたが選んだ頻度で、iPhoneから直接、健康データのファイルをPOSTできます。このページはそのリファレンスです。設定方法、各ペイロードの形、それを受け取る仕組みの作り方を説明します。

n8n、Zapier、Make、Home Assistant、Google Sheets、InfluxDB向けの設定済みの手順は、接続にあります.

Marrowのガイド一覧: MCP · セルフホスト版ミラー · オートメーション · ファイル · サポート

オートメーションとは

エクスポート、自動に保存されるジョブです。データの種類、形式、日付の範囲、URL、頻度を1つずつ指定します。Marrowは検証済みのストアからファイルを作り、アプリを閉じたままでもURLにPOSTします。同期のコミットのたびと、バックグラウンド更新のたびに、頻度の間隔が過ぎていれば実行されます。私たちのサーバーを経由することはありません。iPhoneがあなたのエンドポイントに直接送ります。

設定方法

  1. エクスポートタブで自動をオンにし、新規オートメーションをタップします。ツールのページ(接続にあるn8n、Zapier、Home Assistantなど)から作ると、オートメーションにそのツールの名前が付き、各項目の横にそのツールが必要とする内容が表示されます。
  2. アドレス:POST先のhttpsのURL。ヘッダー:受信側が必要とするもの(Authorizationのベアラートークン、X-Gitlab-Tokenなど、何でも)。ツールが何も必要としない場合は、「ヘッダーを追加」が「その他のオプション」の中にあります。
  3. データ:健康指標、ワークアウト、筋トレログ、栄養日記、症状と気分のいずれかを、JSONかCSVで。1つのオートメーションで送れるのは1種類なので、必要な種類ごとに作ります。オンにしたものはそれぞれ接続として数えられます。無料プランでは同時に1つ、Marrow Proでは最大10個までオンにでき、AIとサーバーも含まれます。
  4. ケイデンス:何分、何時間、何日ごとに送るか。日付の範囲、集計、タイムアウトはその他のオプションの中にあります.
  5. 今すぐ実行で最初のペイロードを送れるので、スケジュールを待たずに受信側を確認できます。

日付の範囲

ペイロードの形

健康指標(日ごとの合計、JSON)

Health Auto Exportの指標と同じ構造です(name、units、qtyを持つdataから成るmetricsリスト)。そのアプリ用に書いた受信側も、少し変えるだけで使えます。ここでの日付はタイムスタンプではなく日単位で、後述のワークアウトと筋トレのペイロードはMarrow独自のものです。値はunitsに書かれた保存単位(kg、m、mL、degC、kcal、count)です。心拍数は各日のAvg、Min、Maxをbpmで、睡眠は夜ごとのステージ付きで時間単位で届きます。ヤード・ポンド法で使いたい場合は、受信側で変換してください。

{"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の指標は、ファイルのページで説明している横長の表で届きます.

ワークアウト

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

筋トレログ

すべてのワーキングセット(ウォームアップは除く)と、種目ごとの進捗、筋群ごとのボリュームです。重量は設定、単位で選んだ単位で、どちらかはunitフィールドでわかります。各セットのset_typeはwork、failure、dropのいずれかで、余力の回数(RIR)を記録した場合はrirも付きます。set_creditsは筋群ごとに割り当てたセット数で、1つの種目が複数の筋群を鍛える場合は小数になります。

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

栄養日記

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

受信側を作る

HTTPSのPOSTを受け付けて2xxを返すものなら何でも使えます。webhookサービス、サーバーレス関数、ホームサーバー上のスクリプトなどです。次の3つのルールで堅牢になります:

すべての送信をアーカイブする12行のPython受信側:

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、任意のリバースプロキシ)の背後に置いて、オートメーションの送信先に指定します。ファイルの束ではなく、クエリできるコピーが欲しいなら、セルフホスト版ミラーが、すでに書かれた受信側です。

知っておくと便利なこと

トラブルシューティング

今すぐ実行でテストします。その下の行に結果が表示され、その他のオプション、アクティビティログには同じ行が直近30回分残ります。確認している間は実行時に通知(その他のオプション)をオンにすると、実行のたびに通知が届きます。

Marrowの表示対処法
送信した内容の概要(たとえば12 diary entries)送信済み:受信側が2xxを返しました。受信側で何も表示されない場合は、下の最後の行を見てください。
Server answered 401または403受信側がヘッダーを必要としているか、追加したヘッダーが間違っています。名前と値を確認してください。Bearerとその後ろのスペースも含みます。
Server answered 404アドレスが違うか、受信側が待ち受けていません。n8nでは、Production URLを使い、ワークフローを有効にしてください。末尾のパスが抜けていないかも確認してください。
Server answered 405このアドレスはPOSTを受け付けません。受信データ用のエンドポイントを指定してください。
Server answered 413ペイロードが受信側には大きすぎます。日付の範囲を短くするか、指標を減らすか、生サンプルではなく日ごとの合計にしてください。
Server answered 500または他の5xx受信側が処理中に失敗しました。受信側のログを確認してください。先に生の本文をアーカイブしてから、パースしてください。
リクエストがタイムアウトになりました受信側の応答がタイムアウトより長くかかりました。先に応答してから処理するか、その他のオプションのタイムアウトを上げてください(最大300秒)。
App Transport Securityのポリシーにより、安全な接続を使用する必要がありますアドレスが、インターネット上のhttp(暗号化なし)になっています。httpsを使ってください。iOSがMarrowに暗号化なしのhttpを許可するのは、自分のネットワーク内だけです。
指定されたホスト名のサーバが見つかりませんでしたアドレスの打ち間違いか、自宅のネットワークだけが知っている名前です。iPhoneのSafariで開いて確認してください。
No valid URL - set an https endpoint firstアドレスが空か、https://で始まっていません(自分のネットワーク内ならhttp://でも可)。
Nothing to export in this rangeその期間には、その種類のデータがありません。その他のオプションで期間を長くするか、先に何か記録してください。

ツールごとの対処法は、それぞれのページにあります:n8n、Zapier、Make、Home Assistant、Google Sheets、InfluxDB、任意のURL.