movepacketDocs
DEVELOPERS / CORE CONCEPTS

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.

Sports data for what comes next. MovePacket · Private beta
Search across the MovePacket guides · Esc to close