CorrConnectDocs
Early accessRequest access

Concepts

Data model

CorrConnect returns one kind of record today, an activity summary. Every activity has the same required fields; the optional ones depend on where it came from.

Activities

JSON
{
  "id": "act_0123456789abcdef0123456789abcdef",
  "source": "tcx",
  "activity_type": "run",
  "started_at": "2026-10-12T06:31:05Z",
  "duration_seconds": 2914.0,
  "duration_basis": "recorded_lap_sum",
  "distance_meters": 8012.4,
  "distance_basis": "recorded_lap_sum",
  "provenance": {"format": "TCX", "version": "2", "activity_index": 1},
  "laps": [
    {
      "index": 1,
      "started_at": "2026-10-12T06:31:05Z",
      "duration_seconds": 2914.0,
      "distance_meters": 8012.4,
      "tracks": [{"index": 1, "point_count": 2914, "started_at": "2026-10-12T06:31:05Z", "ended_at": "2026-10-12T07:19:39Z"}]
    }
  ],
  "created_at": "2026-10-12T08:02:44+00:00"
}
FieldAlways thereNotes
idYesact_ and 32 hex characters. Stable for the life of the record.
sourceYesWhere it came from. See the table below.
activity_typeYesrun, ride, swim, walk, strength or other.
started_atYesISO 8601 with a UTC offset.
duration_secondsYesA number; files can give fractions of a second.
created_atYesWhen CorrConnect stored it. Lists are ordered by this, newest first.
distance_metersNoMissing, or null, when the source has no distance. Never estimated.
titleNoMissing or null when there isn't one.
duration_basis, distance_basisNoHow the number was measured, for example recorded_lap_sum.
provenanceNoThe file format and the position of this activity in the file.
lapsNoTCX and FIT: per-lap start, duration and distance.
segmentsNoGPX: per-segment point count, start, end and elapsed seconds.

New optional fields and new values for source and the basis fields can appear without notice. Ignore what you don't recognize, and don't fill gaps: a missing distance means the source didn't record one.

Sources

`source`Comes fromWhat to expect
manual_jsonA summary the athlete imported in the portaldistance_meters and title are present, possibly null. No basis fields.
gpxA GPX 1.1 fileactivity_type is always other (GPX has no sport). duration_basis is derived_segment_elapsed_sum. No distance. title from the track name. segments.
tcxA TCX v2 filerun, ride or other. Duration and distance are recorded_lap_sum. laps with track point counts.
fitA FIT activity fileSport from the session: running, cycling, swimming, walking and strength training map to the five types; anything else is other. recorded_session_total_elapsed_time, and recorded_session_total_distance when recorded. laps.

One file can hold up to 20 activities (GPX tracks or TCX activities) or 20 FIT sessions; each becomes its own record. More about files in workout files.

What CorrConnect does not return

  • GPS coordinates. Files are checked for valid positions, but points are never stored or returned.
  • Sensor streams (heart rate, power, cadence by the second).
  • The original file. There is no download endpoint.
  • The athlete's email, name or CorrConnect account ID. You get the pairwise sub instead.

IDs

PrefixWhat
app_Your app's client_id
act_Activity
ccu_Athlete subject for your app (sub)
evt_Webhook event; the same on every retry
whs_Webhook subscription
whd_One delivery of an event to one subscription
req_Request ID on every response and error
cca_, ccr_, ccc_Access token, refresh token, authorization code

IDs are opaque. Compare them as whole strings and don't derive anything from the characters after the prefix.

Times

Every timestamp is ISO 8601 with a UTC offset, so parse them with a full ISO 8601 parser. CorrConnect's own times (created_at, event times) end in +00:00. Times read from a GPX, TCX or FIT file are converted to UTC and end in Z. A manual_json summary keeps the offset the athlete sent, for example 2026-09-22T07:15:00-04:00.