Guide

Apple Health Wrapped 2026

Your year in Apple Health on one page: total steps and distance, workouts by type, average sleep, your best month and most active day, and how your resting heart rate and VO2 max moved. Paste one prompt into Claude or ChatGPT with HealthAPI connected, and it takes about a dozen requests.

  • Claude and ChatGPT
  • Read only
  • Updated 22 October 2026

HealthAPI: Free for 2 days, no card needed. Then an optional 7-day free trial when you subscribe.

Your 2026

3.1M

steps, and 2,240 km walked and run

JanDec

Workouts

184

  • Running92 · 61 h
  • Strength51 · 38 h
  • Cycling41 · 44 h

Best month

May

318,400 steps


Resting heart rate

58 → 54 bpm

What's in it

In your WrappedRead from
Steps, distance and active energy for the yearA year of daily totals, one lookup each
Best month and most active dayThe same daily totals
Workouts by type, with hoursEvery workout of the year
Average sleep per nightEvery night of the year
Resting heart rate and VO2 max, January against DecemberA year of daily averages, one lookup each

Totals for steps and energy are Apple Health's own daily totals, so they match the Health app. VO2 max only appears if your watch records it. Workout types HealthAPI doesn't name, such as tennis or skiing, are grouped as other; the named ones are on the metrics page.

Before you start

  • Have the whole year synced. HealthAPI imports a year of history by default. If you installed it recently, check that Settings, Sync Settings, Import History says your history is up to date.
  • Connect your AI. Claude on every plan (guide), ChatGPT on Plus or higher (guide), approved on your iPhone.
  • Make it in December. The year-long lookups count back 365 days from today, so on December 31 they cover the whole year. After that, see the January answer below.
  • Two sleep trackers are fine. If an Apple Watch and a ring or band both record your nights, each night still counts once (Oura, WHOOP, Garmin).

The prompt

Paste it into a new chat with HealthAPI connected. Naming the lookups keeps the AI from reading your year day by day, which would take hundreds of requests.

PromptText
Make my Apple Health Wrapped 2026 from HealthAPI, using as few requests as you can:
1. get_health_overview once, to see what I have.
2. get_trend with days 365 for stepCount, distanceWalkingRunning, activeEnergyBurned, restingHeartRate and vo2Max. Keep only 2026 dates.
3. get_workouts from 2026-01-01 to 2026-12-31, limit 100. Only if it says the list was cut short, fetch it a quarter at a time.
4. get_sleep for 2026, in four calls of up to 92 nights.
Don't fetch day by day or week by week.

Then show:
- total steps, distance and active energy
- workouts by type, with count and hours
- average sleep per night, by month
- my best month for steps and my most active day
- how my resting heart rate and VO2 max changed from January to December
Skip anything I have no data for, and list the totals you used at the end.

“Make my Apple Health Wrapped 2026.”

Your 2026: 3.1 million steps and 2,240 km. 184 workouts, mostly running. You slept 7.2 h a night, May was your best month, and resting heart rate fell from 58 to 54 bpm.

In Claude: an artifact

Add this line to the prompt to get a page you can keep:

Text
Build it as an artifact: one page, a card per stat and a bar chart of steps by month, with the numbers written into the page.

Artifacts work on every Claude plan. If Claude answers in plain text instead, check that code execution and file creation is on under Settings, Capabilities.

In ChatGPT: right in the chat

OpenAI took canvas out of ChatGPT's current models in May 2026, so ask for the recap in the chat:

Text
Show it here in the chat: a short summary, then a table for each section.

For a page to keep, add “Then give me the whole recap as one HTML file in a code block”, save it as wrapped.html and open it in your browser.

How many requests it takes

Part of the recapLookupRequests
What you have syncedget_health_overview1
Steps, distance, active energyget_trend, 365 days each3
Resting heart rate, VO2 maxget_trend, 365 days each2
Workouts by typeget_workouts, the whole year, up to 1001, or 5 if you logged more than 100
Average sleepget_sleep, up to 92 nights each4
TotalOne request per lookupAbout 11

That fits a day on any plan: 25 requests a day during the preview, 100 on Pro and 1,000 on Developer, with room for follow-up questions. Requests reset at midnight UTC. If you see the AI fetching one day or one week at a time, stop it and paste the prompt again.

Before you share it

A Wrapped is made to be shared, but this one is your health record. Read it first, and decide what you're happy for others to see.

  • Claude. The numbers Claude writes into an artifact go wherever the artifact goes. On Pro and Max you can set it to Anyone with the link; set it back to Only you to stop sharing.
  • ChatGPT. Anyone with a link from a personal ChatGPT account can view the shared chat, and OpenAI advises against putting health information in shared content. Delete links under Settings, Data controls, Shared links.
  • Make a share version. Ask for “a second version with only steps, distance and workouts, no sleep, heart rate or dates”, or post a screenshot of the cards you're happy to show.
  • Your account stays yours. A shared link shows what's on the page and nothing more. Only the AI apps you approved on your iPhone can read your HealthAPI data, and only to read it.

HealthAPI and the AI apps aren't medical devices. A change in resting heart rate or VO2 max over a year is a pattern to notice, not a diagnosis; talk to a doctor about anything that worries you.

For developers: the same recap over REST

With your API key the recap takes about 60 requests: five trends, one call for every workout, and 52 or 53 weekly summaries for sleep, since the REST API has no per-night range. That fits Pro's 100 a day. Setup and the key are in Apple Health data in Python.

wrapped_2026.pyPython
import os
from datetime import date

import pandas as pd
import requests

API = "https://healthapi.app/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['HEALTHAPI_KEY']}"}
YEAR = 2026


def get(path, **params):
    r = requests.get(API + path, headers=HEADERS, params=params, timeout=60)
    r.raise_for_status()
    return r.json()


def year_of(metric):
    """One value per day of YEAR: the total for steps and energy, the average otherwise."""
    t = get("/query/trends", type=metric, days=365)
    col = "total" if t["aggregation"] == "sum" else "avg"
    s = pd.Series({d["date"]: d[col] for d in t["data"]}, dtype=float)
    s.index = pd.to_datetime(s.index)
    return s[s.index.year == YEAR].sort_index()


# 5 requests
steps, km = year_of("stepCount"), year_of("distanceWalkingRunning") / 1000
kcal, rhr = year_of("activeEnergyBurned"), year_of("restingHeartRate")
vo2 = year_of("vo2Max")
print(f"{steps.sum():,.0f} steps, {km.sum():,.0f} km, {kcal.sum():,.0f} kcal")
print("Best month:", steps.resample("MS").sum().idxmax().strftime("%B"))
print("Most active day:", kcal.idxmax().date())
if len(rhr):
    print("Resting HR:", round(rhr.iloc[:30].mean()), "->", round(rhr.iloc[-30:].mean()))
if len(vo2):
    print("VO2 max:", round(vo2.iloc[0], 1), "->", round(vo2.iloc[-1], 1))

# 1 request: every workout of the year
w = pd.DataFrame(get("/health/workouts", start_date=f"{YEAR}-01-01",
                     end_date=f"{YEAR}-12-31", limit=1000))
if len(w):
    by_type = w.groupby("activity_type").agg(
        workouts=("duration_seconds", "size"), hours=("duration_seconds", "sum"))
    by_type["hours"] = (by_type["hours"] / 3600).round(1)
    print(by_type.sort_values("workouts", ascending=False))

# 52 or 53 requests: sleep per night, from the weekly summaries
nights = []
for week in range(1, date(YEAR, 12, 28).isocalendar()[1] + 1):
    summary = get("/health/weekly-summary", week=f"{YEAR}-W{week:02d}")
    for day in summary["daily_breakdown"]:
        if day["date"].startswith(str(YEAR)) and day["sleep"]["total_hours"] > 0:
            nights.append(day["sleep"]["total_hours"])
if nights:
    print(f"Average sleep: {sum(nights) / len(nights):.1f} h over {len(nights)} nights")

To compute everything offline instead, download the JSON export, which doesn't count toward your requests. Run the script in December for the same reason as the prompt: days=365 counts back from today.

Questions

What is Apple Health Wrapped?

A year in review of your own Apple Health data, in the style of the recaps music apps make each December: your totals, your best month, your workouts and how your heart numbers changed. This page shows how to have Claude or ChatGPT build one from your synced data.

How many requests does it use?

About 11 HealthAPI requests, one per lookup (15 if you logged more than 100 workouts), which fits a day on every plan, even the preview's 25. Follow-up questions use a few more.

Can I make it in January?

Yes. The year-long trend lookups reach 365 days back from today, so after December 31 they miss the first days of 2026. Ask the AI to fill them in with get_weekly_summary, one request per week it is missing.

Can it compare 2026 with 2025?

Yes, if you import two years of history (Settings, Sync Settings, Import History, 2 Years). The trend lookups don't reach back that far, so the AI reads 2025 week by week: about 60 more requests. On Pro, do it on a different day from this recap.

I wear a ring and an Apple Watch to bed. Does that double my sleep?

No. When two devices record the same night, HealthAPI counts it once, keeping the fuller record, so your average is what one tracker would show. A nap only one of them caught still counts.

Is it safe to share?

Only after you've read it. A shared artifact or chat shows the numbers in it to anyone with the link, though it never gives them access to your HealthAPI account. Make a share version with only the stats you're happy to post.

The HealthAPI app icon

Your 2026, in one prompt.

Get HealthAPI for iPhone, connect Claude or ChatGPT, and ask for your Wrapped.