Fitness
Fields marked * are required. Updates keep every field they are not given. An AI app can ask vritto_describe for the same details, filtered to what its connection may use.
Fitness Summaryfitness_summaryHealth, off until allowed
Dashboard, trends, insights, correlations, and yearly recap; read-only.
fitness_queryFitnessCorrelationsFindthrough vritto_findRead honest journal-tag correlations over the last 90 days: 'on days tagged X, your sleep / resting HR / HRV averaged Y vs Z' with sample sizes. Statistics, not causal claims, needs enough tagged days to report anything (ready=false otherwise). The tags come from the user's private Journal and only entries they shared with AI are included (journalEntriesWithheld counts the rest): report the correlation itself and never quote, expand on, or speculate about what was written behind a tag.
No input.
fitness_queryFitnessDashboardFindthrough vritto_findRead the fitness dashboard: profile with goals and units, 12 weeks of daily summaries, recent workouts with sets, routines, sleep sessions, measurements, PRs, hydration, and gear.
No input.
fitness_queryFitnessInsightsFindthrough vritto_findRead server-computed daily insights: today's readiness score with band and disclosed component weights, a training prescription for today, weekly WHO-style intensity minutes vs the 150 target, and training load (fitness/fatigue/form). Quote these numbers instead of re-deriving them.
No input.
fitness_queryFitnessRecapFindthrough vritto_findRead a year-in-review recap: workout count, total minutes and distance, strength sets, PR count, active days, total steps, and top activity for a given year.
| Field | Type | Description |
|---|---|---|
| year | integer | Calendar year; defaults to the current year. |
fitness_queryFitnessTrendsFindthrough vritto_findRead a year of slim daily series (steps, energy, exercise/zone minutes, sleep, resting HR, HRV, VO2max) plus weight history, for trend questions like 'is my resting HR improving'.
No input.
WorkoutworkoutHealth, off until allowed
One workout, cardio or strength.
fitness_upsertWorkoutCreate or Updatethrough vritto_create or vritto_updateLog a workout the user describes ('I ran 5k in 28 minutes this morning'). Provide durationSec or endedAt. For strength workouts include exercises with sets; mark warm-ups with setType 'warmup' (excluded from PRs). PRs are detected automatically. Include record.id to correct a previously logged workout.
| Field | Type | Description |
|---|---|---|
| record* | object | |
| record.id | string | Existing workout ID from the dashboard to update. Omit to create. |
| record.activityType* | string | Unified activity type, e.g. running, walking, cycling, strength_training, hiit, yoga, swimming_pool. Unknown values fall back to 'other'. |
| record.title | string | |
| record.startedAt* | string | ISO date-time when the workout started. |
| record.endedAt | string | ISO date-time when the workout ended, alternative to durationSec. |
| record.durationSec | integer | Duration in seconds. Required unless endedAt is provided. |
| record.timeZoneId | string | IANA time zone of the workout, e.g. 'America/New_York'. |
| record.distanceM | number | |
| record.activeEnergyKcal | number | |
| record.avgHr | number | Average heart rate, bpm. |
| record.maxHr | number | Max heart rate, bpm. |
| record.elevationGainM | number | Elevation gain in meters. |
| record.effortRpe | number | Perceived effort 1-10; 7+ counts as vigorous. |
| record.feels | integer | How the workout felt, 1 (awful) to 5 (great). |
| record.notes | string | |
| record.routineId | string | ID of the routine this workout followed, from the dashboard's routines: never invented. |
| record.exercises | list of object | Strength exercises with sets; omit for cardio. |
Example input
{
"record": {
"activityType": "running",
"title": "Morning 5K",
"startedAt": "2026-09-26T07:05:00-05:00",
"durationSec": 1680,
"distanceM": 5000
}
}Sleep Sessionsleep_sessionHealth, off until allowed
One night's sleep or a nap.
fitness_upsertSleepSessionCreate or Updatethrough vritto_create or vritto_updateLog a sleep session ('I slept 11pm to 7am'). Wake time must be after bed time. Include record.id to correct a previously logged session.
| Field | Type | Description |
|---|---|---|
| record* | object | |
| record.id | string | Existing sleep session ID from the dashboard to update. Omit to create. |
| record.startedAt* | string | ISO date-time the user went to bed. |
| record.endedAt* | string | ISO date-time the user woke up. |
| record.timeZoneId | string | IANA time zone of the night, e.g. 'America/New_York'. |
| record.isNap | boolean | |
| record.qualityRating | integer | |
| record.interruptions | integer | Number of times the user woke during the night. |
| record.stages | list of object | Sleep-stage spans, if the user reports them. Usually omit for manual logs. |
| record.notes | string |
Example input
{
"record": {
"startedAt": "2026-09-25T23:10:00-05:00",
"endedAt": "2026-09-26T06:50:00-05:00",
"qualityRating": 4
}
}Body Measurementbody_measurementHealth, off until allowed
A weight, body fat, or body measurement.
fitness_upsertMeasurementCreate or Updatethrough vritto_create or vritto_updateLog a body measurement. SI units: kg for weight/lean_mass, cm for lengths, percent for body_fat. Include record.id to correct a previously logged measurement.
Note: SI units: kg for weight and lean mass, cm for lengths, percent for body fat.
| Field | Type | Description |
|---|---|---|
| record* | object | |
| record.id | string | Existing measurement ID from the dashboard to update. Omit to create. |
| record.type* | one of weight, body_fat, lean_mass, height, neck, shoulders, chest, waist, hips, biceps_left, biceps_right, forearm_left, forearm_right, thigh_left, thigh_right, calf_left, calf_right | |
| record.value* | number | SI value (kg / cm / percent). |
| record.measuredAt | string | ISO date-time; defaults to now. |
| record.notes | string |
Example input
{
"record": {
"type": "weight",
"value": 78.4,
"measuredAt": "2026-09-26T07:30:00-05:00"
}
}HydrationhydrationHealth, off until allowed
Water the user drank.
fitness_logHydrationCreatethrough vritto_createLog water the user drank, in milliliters.
| Field | Type | Description |
|---|---|---|
| volumeMl* | number | Volume in ml, e.g. 500. |
| loggedAt | string | ISO date-time the water was drunk; defaults to now. Use for backfills like 'this morning'. |
Example input
{
"volumeMl": 500
}Daily Activitydaily_activityHealth, off until allowed
A day's manual activity totals: steps, exercise, energy.
fitness_logActivityUpdatethrough vritto_updateSet the user's manual daily activity totals (steps, exercise minutes, active energy, distance, mindful minutes). Values REPLACE the day's manual entry: read the dashboard first when adjusting.
Note: Values replace the day's manual entry; read the dashboard first when adjusting.
| Field | Type | Description |
|---|---|---|
| date | string | Defaults to today. |
| steps | integer | |
| exerciseMinutes | number | |
| activeEnergyKcal | number | |
| distanceM | number | |
| floors | number | Floors/flights climbed. |
| mindfulMinutes | number | |
| timeZoneId | string | IANA time zone the day belongs to, e.g. 'America/New_York'. |
Example input
{
"date": "2026-09-25",
"steps": 9420,
"exerciseMinutes": 35
}NutritionnutritionHealth, off until allowed
A meal's calorie and macro totals.
fitness_logNutritionCreatethrough vritto_createLog a meal's nutrition totals (calories, protein, carbs, fat), light totals only, not a food database. At least one value must be > 0. Each call creates a new log entry that rolls into the day's totals.
| Field | Type | Description |
|---|---|---|
| name | string | What was eaten, e.g. 'Chicken burrito'. |
| mealType | one of breakfast, lunch, dinner, snack, unknown | Defaults to 'unknown'. |
| kcal | number | Calories. |
| proteinG | number | Protein in grams. |
| carbsG | number | Carbohydrates in grams. |
| fatG | number | Fat in grams. |
| loggedAt | string | ISO date-time the meal was eaten; defaults to now. Use for backfills. |
Example input
{
"name": "Chicken burrito bowl",
"mealType": "lunch",
"kcal": 720,
"proteinG": 48,
"carbsG": 70,
"fatG": 24
}