Marrow Health
FR
Télécharger

Automatisations : vos données, envoyées selon un calendrier

Marrow peut envoyer en POST un fichier de vos données de santé vers n’importe quelle URL de votre choix, à la cadence de votre choix, directement depuis le téléphone. Cette page est la référence : comment en configurer une, à quoi ressemble chaque charge utile, et comment écrire ce qui la reçoit.

Des configurations prêtes à l’emploi pour n8n, Zapier, Make, Home Assistant, Google Sheets et InfluxDB se trouvent sous connexions.

Tous les guides Marrow: MCP · Miroir autohébergé · Automatisations · Fichiers · Assistance

Ce qu’est une automatisation

Une tâche enregistrée dans Exporter, Automatisé : un type de données, un format, une période, une URL, une cadence. Marrow construit le fichier à partir de son stock vérifié et l’envoie en POST à l’URL, app fermée, après chaque synchronisation validée et à chaque actualisation en arrière-plan, dès que la cadence est écoulée. Rien ne passe par nous : le téléphone parle directement à votre point de terminaison.

La configurer

  1. Onglet Exporter, Automatisé : activez-le, puis Nouvelle automatisation. Quand elle est créée depuis la page d’un outil (n8n, Zapier, Home Assistant et les autres sous connexions), l’automatisation porte le nom de cet outil et indique à côté de chaque champ ce que l’outil attend.
  2. Adresse : l’URL https vers laquelle envoyer le POST. En-têtes : ceux dont votre récepteur a besoin (un jeton bearer Authorization, un X-Gitlab-Token, ce que vous voulez). Quand l’outil n’en demande aucun, Ajouter un en-tête se trouve sous Plus d’options.
  3. Données : Mesures de santé, Entraînements, Journal de musculation, Journal alimentaire, ou Symptômes et humeur, en JSON ou CSV. Une automatisation porte un seul type, donc créez-en une par type voulu. Chacune qui est activée compte comme une connexion : Gratuit garde 1 connexion active à la fois, Marrow Pro jusqu’à 10, IA et serveurs compris.
  4. Cadence : toutes les X minutes, heures ou jours. La période, l’agrégation et le délai d’expiration se trouvent sous Plus d’options.
  5. Lancer maintenant envoie une première charge utile pour que vous puissiez vérifier le récepteur sans attendre le calendrier.

Périodes

Forme des charges utiles

Mesures de santé (totaux quotidiens, JSON)

La même structure que les mesures de Health Auto Export (une liste metrics de name, units et data avec qty), si bien qu’un récepteur écrit pour cette app n’a besoin que de petites modifications : ici, les dates sont de simples jours, pas des horodatages, et les charges utiles des entraînements et de la musculation plus bas sont propres à Marrow. Les valeurs sont dans l’unité stockée indiquée dans units (kg, m, mL, degC, kcal, count). La fréquence cardiaque arrive avec les Avg, Min et Max de chaque jour en bpm, et le sommeil avec chaque nuit et ses phases en heures. Convertissez de votre côté si vous voulez des unités impériales.

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

Les échantillons bruts (le regroupement Échantillons bruts) envoient chaque échantillon avec ses heures de début et de fin au lieu d’un total quotidien. Les mesures en CSV arrivent sous la forme du tableau large décrit sur la page des fichiers.

Entraînements

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

Journal de musculation

Chaque série de travail (les échauffements sont exclus), plus la progression par exercice et le volume par groupe musculaire. Les poids sont dans l’unité choisie sous Réglages, Unités. Le champ unit l’indique. Le set_type de chaque série vaut work, failure ou drop, et une série porte aussi rir quand vous avez noté les répétitions en réserve. set_credits compte les séries attribuées à un groupe musculaire, en fractions quand un exercice sollicite plusieurs groupes.

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

Journal alimentaire

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

Écrire un récepteur

Tout ce qui accepte un POST HTTPS et répond en 2xx convient : un service de webhook, une fonction serverless, un script sur un serveur domestique. Trois règles le rendent robuste :

Un récepteur Python de douze lignes qui archive chaque envoi :

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

Placez-le derrière HTTPS (un Cloudflare Tunnel, Tailscale Funnel ou n’importe quel reverse proxy) et pointez l’automatisation vers lui. Si vous voulez une copie interrogeable plutôt qu’un dossier de fichiers, le miroir autohébergé est ce récepteur déjà écrit.

Bon à savoir

Dépannage

Testez avec Lancer maintenant. La ligne en dessous dit ce qui s’est passé, et Plus d’options, Historique d’activité garde les 30 dernières exécutions avec la même ligne. Activez Avertir lors de l’exécution (Plus d’options) pour recevoir une notification à chaque exécution pendant vos vérifications.

Ce que Marrow afficheQue faire
Un résumé de ce qui a été envoyé, par exemple 12 diary entriesLivré : le récepteur a répondu en 2xx. Si rien n’apparaît de son côté, voir les dernières lignes plus bas.
Server answered 401 ou 403Le récepteur veut un en-tête, ou celui que vous avez ajouté est faux. Vérifiez son nom et sa valeur, y compris Bearer et l’espace qui le suit.
Server answered 404Mauvaise adresse, ou le récepteur n’écoute pas. Dans n8n, utilisez la Production URL et activez le workflow. Vérifiez qu’il ne manque pas un chemin à la fin.
Server answered 405L’adresse n’accepte pas de POST. Pointez vers le point de terminaison prévu pour les données entrantes.
Server answered 413La charge utile est trop grosse pour le récepteur. Choisissez une période plus courte, moins de mesures, ou Totaux quotidiens à la place d’Échantillons bruts.
Server answered 500 ou une autre erreur 5xxLe récepteur a échoué en la traitant. Regardez son propre journal. Archivez d’abord le corps brut, puis analysez-le.
La requête a expiréLe récepteur a mis plus longtemps que le délai. Répondez d’abord et travaillez ensuite, ou augmentez le Délai d’expiration sous Plus d’options (jusqu’à 300 s).
La politique App Transport Security exige l’utilisation d’une connexion sécuriséeL’adresse est en http simple sur internet. Utilisez https. iOS ne laisse Marrow utiliser http simple que sur votre propre réseau.
Impossible de trouver un serveur avec le nom d’hôte spécifiéUne faute de frappe dans l’adresse, ou un nom que seul votre réseau domestique connaît. Vérifiez-la dans Safari sur le téléphone.
No valid URL - set an https endpoint firstL’adresse est vide ou ne commence pas par https:// (ou http:// sur votre propre réseau).
Nothing to export in this rangeAucune donnée de ce type sur la période. Choisissez une période plus longue sous Plus d’options, ou enregistrez d’abord quelque chose.

Les solutions pour chaque outil se trouvent sur sa page : n8n, Zapier, Make, Home Assistant, Google Sheets, InfluxDB, n’importe quelle URL.