AI & Claude
Your health data is most useful when you can ask questions about it in plain language. VitalTrends gives you three ways to bring your data into an AI conversation.
Option 1: CSV export (any AI)
The simplest approach. Export your data as a CSV and upload it directly to Claude, ChatGPT, or any AI with file upload.
In the dashboard, navigate to Export in the sidebar. Choose your date range and data types.
Click Export CSV. The file downloads immediately.
Attach the CSV in Claude.ai or ChatGPT, then ask questions about it.
Example prompts
- "What is my average HRV over the last 90 days, and does it correlate with my recovery score?"
- "On days when my strain is above 15, how does my next-day recovery compare to lower-strain days?"
- "Show me which days I had below 70% sleep performance and what my recovery was the following day."
- "Plot my weight trend over the last 6 months and estimate the trajectory."
Option 2: API + Python / notebooks
For repeatable analysis, query the REST API directly from a Jupyter notebook or script.
import requests
import pandas as pd
API_KEY = "YOUR_API_KEY"
BASE = "https://vitaltrends.net/api/v1"
def get_whoop_daily(days=90):
from datetime import date, timedelta
start = (date.today() - timedelta(days=days)).isoformat()
r = requests.get(
f"{BASE}/whoop/daily",
params={"start": start, "per_page": 1000},
headers={"Authorization": f"Bearer {API_KEY}"},
)
r.raise_for_status()
return pd.DataFrame(r.json()["data"])
df = get_whoop_daily(90)
print(df[["date","recovery_score","hrv_rmssd_milli"]].describe())
From there you can feed the dataframe as context to the Claude API or use any AI SDK to generate insights programmatically.
The REST API reads and writes. An agent with a workout:write key can upload strength workouts via POST /workout-logs/import (one row per exercise) or POST /workout-logs (structured JSON); uploads are deduplicated against Hevy and appear in the Training Log, stats, and unified feed. Each exercise can include an optional muscle_group, validated against the documented canonical vocabulary so AI-generated logs feed the muscle map consistently. If the field is omitted and the exercise is unknown, VitalTrends retains the normalized input for review instead of silently dropping its classification. A mapping selected in Training Log applies to historical analytics and future occurrences, and workout-log exercise responses return the resolved muscle_group. Agents can read chart-ready muscle balance data with GET /training/muscle-groups/usage, using an inclusive date range or all_time=true. Before writing, an agent can send dedup_mode: "preview"; the response reports whether VitalTrends would create, merge, or update and normalizes all timing without changing the workout or its exercise/equipment mappings. See Uploading workouts.
Option 3: MCP Server (Claude Desktop native)
The most seamless experience. The VitalTrends MCP server connects Claude Desktop directly to your data with no exports needed. Ask questions in Claude and it queries your data in real time.
Read the MCP setup guide to get started.
Privacy note
When you upload a CSV or send API data to a third-party AI (Claude.ai, ChatGPT, etc.), that data leaves VitalTrends and is subject to the AI provider's privacy policy. Use the MCP server if you prefer to keep queries server-side and minimize data exposure.