Power user reference. You don't need any of this to use veloVigil — it's here if you want to go deeper.
Looking to get started? You probably want Get Your AI Coaching instead. This page is for technical reference.
All data is at this base URL. Replace RIDER_ID with the athlete's rider ID (assigned automatically on first ride).
curl -s https://velovigil-fleet.robert-chuvala.workers.dev/api/v1/riders/RIDER_ID/rides
Returns ride sessions with summary stats. Sessions are auto-detected by gaps > 120 seconds between data points.
curl -s https://velovigil-fleet.robert-chuvala.workers.dev/api/v1/riders/RIDER_ID/rides/SESSION_ID/export
Returns a structured ride summary. Contains:
curl -s "https://velovigil-fleet.robert-chuvala.workers.dev/api/v1/riders/RIDER_ID/rides/SESSION_ID/points?limit=500&offset=0"
Returns individual data points at ~5-second intervals. Each point has HR, power, speed, cadence, distance, GPS, HRV metrics, and g-force. Paginated - use offset to get more.
curl -s https://velovigil-fleet.robert-chuvala.workers.dev/api/v1/riders/RIDER_ID/live
Latest telemetry point. Updates every 5 seconds during a ride.
| Metric | What it tells you | Red flags |
|---|---|---|
| HR zone distribution | Effort profile - was this endurance, tempo, or threshold work? | >50% in Z4-Z5 on a "recovery" ride |
| Cardiac drift | HR rising while power stays flat = dehydration or fatigue | >10% HR increase in second half at same power |
| HRV (RMSSD) | Parasympathetic tone. Higher = more recovered. Dropping during ride = fatigue accumulating | RMSSD < 20 at ride start suggests under-recovered |
| Power consistency | Variability Index - how steady was the effort? | High VI on a flat ride = poor pacing |
| Cadence | Pedaling efficiency and gear selection | Avg < 70 RPM = grinding, likely inefficient |
| G-force peak | Road roughness, crash events, descending style | Sustained >4g for >200ms = possible crash event |
| Zone | BPM range | Feel |
|---|---|---|
| Z1 - Recovery | < 120 | Easy conversation, warmup/cooldown |
| Z2 - Endurance | 120 - 140 | Can talk in sentences, base building |
| Z3 - Tempo | 140 - 160 | Comfortably hard, can say a few words |
| Z4 - Threshold | 160 - 180 | Hard, short phrases only |
| Z5 - VO2max | 180+ | Maximum effort, can't talk |
Note: These are default zones. Ask your athlete for their actual max HR and threshold HR to personalize. If they have an FTP (functional threshold power), ask for that too.
Over time, build up a picture of this athlete. Track these across rides:
| Sensor | Source | Data |
|---|---|---|
| Heart rate | Polar H10 (BLE) | Beat-by-beat, not averaged |
| HRV | Polar H10 RR intervals | RMSSD, SDNN, pNN50 computed on-device |
| Accelerometer | Polar H10 (3-axis, 200Hz) | G-force filtered with 50ms RMS window |
| Power | Karoo (from power meter) | Watts, requires separate power meter |
| Speed | Karoo (GPS) | m/s, converted to km/h in export |
| Cadence | Karoo (from sensor) | RPM |
| GPS | Karoo | Lat/lon at each data point |
| Elevation | Karoo (barometric) | Meters, grade % |
Ride Summary: Tuesday PM - 1h22m, 34km
The big picture: this was a solid endurance ride. 78% of your time in Z2,
which is exactly where you want to be for base building. Your HR averaged
138 and power averaged 185W - that's a good ratio for you.
One thing I noticed: your RMSSD dropped from 42 to 18 in the last 20
minutes. Combined with your HR drifting up 8 BPM at the same power, you
were fatiguing. Not a problem for a Tuesday ride, but if you see this
pattern on back-to-back days, take an easy day.
Cadence was 88 avg - right in your sweet spot.
For Thursday: keep it under 2 hours and stay in Z2. Your HRV at ride
start was lower than your last three rides (28 vs 35 avg), so your body
is still absorbing this week's load.
One thing to try: on your next Z2 ride, check in at the 45-minute mark.
If your HR has climbed more than 5 BPM from the 10-minute mark at the
same power, take a gel. That drift pattern often responds to fueling.