# 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 ```js // 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.