athlete_profile endpoint is the primary data source for the athlete detail page, combining profile, metrics, goals, and active plans into a single request. Separate endpoints expose time-series fitness and running stats, and the coach_athletes_metrics endpoint powers the coach roster view with batch data for every athlete in an organization.
Get athlete profile
Returns a comprehensive snapshot of an athlete’s data: user profile, cached fitness metrics, current training goals, active plans, and AI-generated insights. Results are cached in Redis; passrefresh=true to force a fresh fetch.
The athlete’s user ID.
Bypass cache and fetch fresh data from all sources.
200 OK
Current fitness values:
vo2_max, hrv_avg, recovery_score, and 30-day history arrays.Training load for the current week and a rolling 4-week average.
Active or scheduled training plan instances with week progress.
Get fitness stats
Returns overall fitness statistics for the authenticated user over a configurable number of days.Number of days to analyze. Maximum is 365.
200 OK
Total distance in meters.
Total duration in seconds.
Average pace formatted as
M:SS per kilometer.Average heart rate in bpm. Present only if HR data is available.
Get running stats
Returns time-series running metrics aggregated by day, week, month, or year. Every metric type (distance, duration, training_load) is included in the response so clients can switch views without a second request.
Unix timestamp for the start of the range.
Unix timestamp for the end of the range. Must be within 365 days of
from_timestamp and no more than 7 days in the future.Aggregation granularity. One of
daily, weekly, monthly, or yearly.daily→ one point per dayweekly→ one point per day over 7 days (7 data points)monthly→ one point per ISO weekyearly→ one point per calendar month
Primary metric to sort or highlight. One of
distance, duration, or training_load. All metrics are always returned.IANA timezone string for day bucketing (e.g.
"Asia/Tokyo").Legacy UTC offset in minutes. Use
timezone instead when possible.200 OK
Total distance in meters for the period bucket.
Total duration in seconds.
Astral training load score (NR ETE+) — always included regardless of
metric_type.Number of activities in the bucket.
Seconds spent in each pace zone (Z1 = easy through Z5 = max).
Get activity stats (v2)
PostgreSQL-backed activity aggregation. Returns distance, duration, training load, calories, and pace zones grouped by day or month in one response. Results are cached for 5 minutes.Start date in
YYYY-MM-DD format.End date in
YYYY-MM-DD format. Maximum range is 400 days.IANA timezone for date bucketing.
Bucket size:
day or month.Bypass Redis cache.
Get health metrics (v2)
Returns resting heart rate, HRV, and VO2 Max time series from PostgreSQL. Results are cached for 5 minutes.Start date in
YYYY-MM-DD format.End date in
YYYY-MM-DD format. Maximum range is 400 days.Bucket size:
day, week, or month.Bypass Redis cache.
Get coach athletes metrics
Returns batch metrics for every active athlete in a coach’s organization — profile, cached fitness, training load, current plans, and attention signals — in a single API call. Results are cached in Redis for 10 minutes per coach/org combination.Organization ID. Falls back to the authenticated coach’s own
org_id when omitted.Pass
"1" to return only athletes assigned to the current coach.Return athletes from a specific group. Cannot be combined with
unassigned_only.Pass
"1" to return athletes not assigned to any group. Cannot be combined with group_id.Search by athlete username, email, or display name.
Page number for server-side pagination.
Results per page. Maximum 200.
Pass
"1" to bypass Redis cache.200 OK
Array of athlete objects. Each includes full profile, organization membership, and nested metrics.
HRV average from 7 days ago for trend comparison in the attention queue.
AI-computed attention flags that surface athletes who may need coaching intervention.
Error codes
| Status | Meaning |
|---|---|
400 | Validation error — missing or invalid parameters |
401 | Missing or invalid authentication |
403 | Insufficient permissions (e.g. athlete accessing another user’s data) |
404 | No data found for the given user/range |
500 | Internal server error |