The original, plus structure.
The original FIT file is the source record. Decoded JSON makes its contents easier to use without changing the original. The beta retains the Garmin FIT SDK's field names and units.
Activity metadata#
The activity response describes storage and processing: id, status, sha256, byte_size, created_at, error_code, and retrieval links. duplicate is added to upload responses only.
Activity metadata does not currently include a filename, sport, athlete profile, or summarized ride metrics. Retrieve decoded JSON to read the recorded activity details.
Decoded response#
| Field | Meaning |
|---|---|
schema_version |
Current wrapper version: 0.1 |
parser.name |
Decoder package: @garmin/fitsdk |
parser.version |
Current decoder version: 21.214.0 |
parser.fit_profile |
FIT profile version reported by the decoder |
summary |
Array of decoded session messages |
message_count |
Number of decoded messages |
messages |
Groups of FIT messages, such as recordMesgs, lapMesgs, and deviceInfoMesgs when present |
summary is an array because a file can contain multiple sessions. Do not assume every activity has just one session. Fields and message groups depend on the source device and recording settings.
Read only what is present#
// Run on your server after retrieving the decoded JSON.
const sessions = data.summary;
const records = data.messages.recordMesgs ?? [];
const power = records
.filter(record => Number.isFinite(record.power))
.map(record => ({time: record.timestamp, watts: record.power}));
Missing measurements are not zero. Keep their absence visible in your own charts and calculations. Do not assume the same sampling interval or sensor coverage across files.
Common decoded session fields include totalTimerTime in seconds, totalDistance in meters, avgPower in watts, and avgHeartRate in beats per minute. Keep an explicit unit conversion at your presentation boundary. JavaScript Date values serialize as ISO timestamps; large integer values serialize as decimal strings.
Limits and versioning#
The beta accepts one FIT file up to 4 MiB and caps decoding at 50,000 messages and 16 MiB of serialized message content before the final wrapper is assembled. A file exceeding decoded limits reaches failed with decoded_limit_exceeded; its accepted original remains available.
This is an early FIT response contract, not yet a normalized schema across device providers. Keep schema_version and parser metadata with data you store, tolerate unknown fields, and preserve the original for future reprocessing.