---
url: /docs/api/core/functions/validateRoundTrip.md
---
[**@kaiord/core**](../README.md)

***

[@kaiord/core](../README.md) / validateRoundTrip

# Function: validateRoundTrip()

> **validateRoundTrip**(`binaryReader`, `binaryWriter`, `toleranceChecker`, `logger`): `object`

Defined in: [packages/core/src/application/round-trip/validate-round-trip.ts:36](https://github.com/pablo-albaladejo/kaiord/blob/3eacbe62ef72342d970523967cc5155b5935bb85/packages/core/src/application/round-trip/validate-round-trip.ts#L36)

Validates round-trip conversion between a binary format and KRD.

Format-agnostic in mechanism: it depends only on the injected
`BinaryReader`/`BinaryWriter` ports, so it validates any binary adapter
(FIT today). It exposes `validateBinaryRoundTrip` (binary → KRD → binary)
and `validateKrdRoundTrip` (KRD → binary → KRD), each returning the
tolerance violations found. Default tolerances: time ±1 s, power ±1 W or
±1% FTP, heart rate ±1 bpm, cadence ±1 rpm.

## Parameters

### binaryReader

[`BinaryReader`](../type-aliases/BinaryReader.md)

binary-format reader implementation

### binaryWriter

[`BinaryWriter`](../type-aliases/BinaryWriter.md)

binary-format writer implementation

### toleranceChecker

[`ToleranceChecker`](../type-aliases/ToleranceChecker.md)

tolerance checker with configured thresholds

### logger

[`Logger`](../type-aliases/Logger.md)

logger for operation tracking

## Returns

### validateBinaryRoundTrip

> **validateBinaryRoundTrip**: (`params`) => `Promise`<`object`\[]>

#### Parameters

##### params

###### originalBinary

`Uint8Array`

#### Returns

`Promise`<`object`\[]>

### ~~validateFitToKrdToFit~~

> **validateFitToKrdToFit**: (`params`) => `Promise`<`object`\[]>

#### Parameters

##### params

###### originalFit

`Uint8Array`

#### Returns

`Promise`<`object`\[]>

#### Deprecated

Use validateBinaryRoundTrip; the reader/writer are format-agnostic binary ports, not FIT-specific.

### validateKrdRoundTrip

> **validateKrdRoundTrip**: (`params`) => `Promise`<`object`\[]>

#### Parameters

##### params

###### originalKrd

{ `events?`: `object`\[]; `extensions?`: {\[`key`: `string`]: `unknown`; `course?`: `unknown`; `course_points?`: `unknown`; `fit?`: `unknown`; `health?`: {\[`key`: `string`]: `unknown`; `bodyComposition?`: { `basalMetabolicRateKcal?`: ... | ...; `bmi?`: ... | ...; `bodyFatPercent?`: ... | ...; `bodyWaterPercent?`: ... | ...; `boneMassKilograms?`: ... | ...; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"bodyComposition"`; `leanMassKilograms?`: ... | ...; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `visceralFatRating?`: ... | ...; }; `daily?`: { `activeCalories`: `number`; `date`: `string`; `externalId?`: ... | ...; `floorsClimbed?`: ... | ...; `intensityMinutes`: { `moderate`: ...; `vigorous`: ...; }; `kaiordRecordId?`: ... | ...; `kind`: `"daily"`; `restingCalories`: `number`; `sourceBridgeId?`: ... | ...; `steps`: `number`; `version`: `string`; }; `hrv?`: { `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"hrv"`; `measuredAt`: `string`; `measurementWindow`: ... | ...; `rMSSD`: `number`; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `version`: `string`; }; `sleep?`: { `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"sleep"`; `restingHeartRate?`: ... | ...; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `stages`: ...\[]; `startTime`: `string`; `totalDurationSeconds?`: ... | ...; `version`: `string`; }; `stress?`: { `averageLevel`: `number`; `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"stress"`; `peakLevel`: `number`; `sourceBridgeId?`: ... | ...; `startTime`: `string`; `version`: `string`; }; `weight?`: { `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"weight"`; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `weightKilograms`: `number`; }; }; `structured_workout?`: `unknown`; }; `laps?`: `object`\[]; `metadata`: { `created`: `string`; `manufacturer?`: `string`; `product?`: `string`; `serialNumber?`: `string`; `sport?`: `string`; `subSport?`: `string`; }; `records?`: `object`\[]; `sessions?`: `object`\[]; `type`: `"structured_workout"` | `"recorded_activity"` | `"course"` | `"sleep_record"` | `"weight_measurement"` | `"hrv_summary"` | `"daily_wellness"` | `"body_composition"` | `"stress_episode"`; `version`: `string`; }

###### originalKrd.events?

`object`\[] = `...`

###### originalKrd.extensions?

{\[`key`: `string`]: `unknown`; `course?`: `unknown`; `course_points?`: `unknown`; `fit?`: `unknown`; `health?`: {\[`key`: `string`]: `unknown`; `bodyComposition?`: { `basalMetabolicRateKcal?`: ... | ...; `bmi?`: ... | ...; `bodyFatPercent?`: ... | ...; `bodyWaterPercent?`: ... | ...; `boneMassKilograms?`: ... | ...; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"bodyComposition"`; `leanMassKilograms?`: ... | ...; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `visceralFatRating?`: ... | ...; }; `daily?`: { `activeCalories`: `number`; `date`: `string`; `externalId?`: ... | ...; `floorsClimbed?`: ... | ...; `intensityMinutes`: { `moderate`: ...; `vigorous`: ...; }; `kaiordRecordId?`: ... | ...; `kind`: `"daily"`; `restingCalories`: `number`; `sourceBridgeId?`: ... | ...; `steps`: `number`; `version`: `string`; }; `hrv?`: { `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"hrv"`; `measuredAt`: `string`; `measurementWindow`: ... | ...; `rMSSD`: `number`; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `version`: `string`; }; `sleep?`: { `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"sleep"`; `restingHeartRate?`: ... | ...; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `stages`: ...\[]; `startTime`: `string`; `totalDurationSeconds?`: ... | ...; `version`: `string`; }; `stress?`: { `averageLevel`: `number`; `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"stress"`; `peakLevel`: `number`; `sourceBridgeId?`: ... | ...; `startTime`: `string`; `version`: `string`; }; `weight?`: { `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"weight"`; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `weightKilograms`: `number`; }; }; `structured_workout?`: `unknown`; } = `...`

###### originalKrd.extensions.course?

`unknown` = `...`

###### originalKrd.extensions.course_points?

`unknown` = `...`

###### originalKrd.extensions.fit?

`unknown` = `...`

###### originalKrd.extensions.health?

{\[`key`: `string`]: `unknown`; `bodyComposition?`: { `basalMetabolicRateKcal?`: ... | ...; `bmi?`: ... | ...; `bodyFatPercent?`: ... | ...; `bodyWaterPercent?`: ... | ...; `boneMassKilograms?`: ... | ...; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"bodyComposition"`; `leanMassKilograms?`: ... | ...; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `visceralFatRating?`: ... | ...; }; `daily?`: { `activeCalories`: `number`; `date`: `string`; `externalId?`: ... | ...; `floorsClimbed?`: ... | ...; `intensityMinutes`: { `moderate`: ...; `vigorous`: ...; }; `kaiordRecordId?`: ... | ...; `kind`: `"daily"`; `restingCalories`: `number`; `sourceBridgeId?`: ... | ...; `steps`: `number`; `version`: `string`; }; `hrv?`: { `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"hrv"`; `measuredAt`: `string`; `measurementWindow`: ... | ...; `rMSSD`: `number`; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `version`: `string`; }; `sleep?`: { `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"sleep"`; `restingHeartRate?`: ... | ...; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `stages`: ...\[]; `startTime`: `string`; `totalDurationSeconds?`: ... | ...; `version`: `string`; }; `stress?`: { `averageLevel`: `number`; `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"stress"`; `peakLevel`: `number`; `sourceBridgeId?`: ... | ...; `startTime`: `string`; `version`: `string`; }; `weight?`: { `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"weight"`; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `weightKilograms`: `number`; }; } = `...`

###### originalKrd.extensions.health.bodyComposition?

{ `basalMetabolicRateKcal?`: ... | ...; `bmi?`: ... | ...; `bodyFatPercent?`: ... | ...; `bodyWaterPercent?`: ... | ...; `boneMassKilograms?`: ... | ...; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"bodyComposition"`; `leanMassKilograms?`: ... | ...; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `visceralFatRating?`: ... | ...; } = `...`

###### originalKrd.extensions.health.bodyComposition.basalMetabolicRateKcal?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.bmi?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.bodyFatPercent?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.bodyWaterPercent?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.boneMassKilograms?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.externalId?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.kaiordRecordId?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.kind

`"bodyComposition"` = `...`

###### originalKrd.extensions.health.bodyComposition.leanMassKilograms?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.measuredAt

`string` = `...`

###### originalKrd.extensions.health.bodyComposition.sourceBridgeId?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.version

`string` = `healthVersionSchema`

###### originalKrd.extensions.health.bodyComposition.visceralFatRating?

... | ... = `...`

###### originalKrd.extensions.health.daily?

{ `activeCalories`: `number`; `date`: `string`; `externalId?`: ... | ...; `floorsClimbed?`: ... | ...; `intensityMinutes`: { `moderate`: ...; `vigorous`: ...; }; `kaiordRecordId?`: ... | ...; `kind`: `"daily"`; `restingCalories`: `number`; `sourceBridgeId?`: ... | ...; `steps`: `number`; `version`: `string`; } = `...`

###### originalKrd.extensions.health.daily.activeCalories

`number` = `...`

###### originalKrd.extensions.health.daily.date

`string` = `...`

###### originalKrd.extensions.health.daily.externalId?

... | ... = `...`

###### originalKrd.extensions.health.daily.floorsClimbed?

... | ... = `...`

###### originalKrd.extensions.health.daily.intensityMinutes

{ `moderate`: ...; `vigorous`: ...; } = `...`

###### originalKrd.extensions.health.daily.intensityMinutes.moderate

... = `...`

###### originalKrd.extensions.health.daily.intensityMinutes.vigorous

... = `...`

###### originalKrd.extensions.health.daily.kaiordRecordId?

... | ... = `...`

###### originalKrd.extensions.health.daily.kind

`"daily"` = `...`

###### originalKrd.extensions.health.daily.restingCalories

`number` = `...`

###### originalKrd.extensions.health.daily.sourceBridgeId?

... | ... = `...`

###### originalKrd.extensions.health.daily.steps

`number` = `...`

###### originalKrd.extensions.health.daily.version

`string` = `healthVersionSchema`

###### originalKrd.extensions.health.hrv?

{ `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"hrv"`; `measuredAt`: `string`; `measurementWindow`: ... | ...; `rMSSD`: `number`; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `version`: `string`; } = `...`

###### originalKrd.extensions.health.hrv.externalId?

... | ... = `...`

###### originalKrd.extensions.health.hrv.kaiordRecordId?

... | ... = `...`

###### originalKrd.extensions.health.hrv.kind

`"hrv"` = `...`

###### originalKrd.extensions.health.hrv.measuredAt

`string` = `...`

###### originalKrd.extensions.health.hrv.measurementWindow

... | ... = `...`

###### originalKrd.extensions.health.hrv.rMSSD

`number` = `...`

###### originalKrd.extensions.health.hrv.score?

... | ... = `...`

###### originalKrd.extensions.health.hrv.sourceBridgeId?

... | ... = `...`

###### originalKrd.extensions.health.hrv.version

`string` = `healthVersionSchema`

###### originalKrd.extensions.health.sleep?

{ `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"sleep"`; `restingHeartRate?`: ... | ...; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `stages`: ...\[]; `startTime`: `string`; `totalDurationSeconds?`: ... | ...; `version`: `string`; } = `...`

###### originalKrd.extensions.health.sleep.endTime

`string` = `...`

###### originalKrd.extensions.health.sleep.externalId?

... | ... = `...`

###### originalKrd.extensions.health.sleep.kaiordRecordId?

... | ... = `...`

###### originalKrd.extensions.health.sleep.kind

`"sleep"` = `...`

###### originalKrd.extensions.health.sleep.restingHeartRate?

... | ... = `...`

###### originalKrd.extensions.health.sleep.score?

... | ... = `...`

###### originalKrd.extensions.health.sleep.sourceBridgeId?

... | ... = `...`

###### originalKrd.extensions.health.sleep.stages

...\[] = `...`

###### originalKrd.extensions.health.sleep.startTime

`string` = `...`

###### originalKrd.extensions.health.sleep.totalDurationSeconds?

... | ... = `...`

###### originalKrd.extensions.health.sleep.version

`string` = `healthVersionSchema`

###### originalKrd.extensions.health.stress?

{ `averageLevel`: `number`; `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"stress"`; `peakLevel`: `number`; `sourceBridgeId?`: ... | ...; `startTime`: `string`; `version`: `string`; } = `...`

###### originalKrd.extensions.health.stress.averageLevel

`number` = `...`

###### originalKrd.extensions.health.stress.endTime

`string` = `...`

###### originalKrd.extensions.health.stress.externalId?

... | ... = `...`

###### originalKrd.extensions.health.stress.kaiordRecordId?

... | ... = `...`

###### originalKrd.extensions.health.stress.kind

`"stress"` = `...`

###### originalKrd.extensions.health.stress.peakLevel

`number` = `...`

###### originalKrd.extensions.health.stress.sourceBridgeId?

... | ... = `...`

###### originalKrd.extensions.health.stress.startTime

`string` = `...`

###### originalKrd.extensions.health.stress.version

`string` = `healthVersionSchema`

###### originalKrd.extensions.health.weight?

{ `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"weight"`; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `weightKilograms`: `number`; } = `...`

###### originalKrd.extensions.health.weight.externalId?

... | ... = `...`

###### originalKrd.extensions.health.weight.kaiordRecordId?

... | ... = `...`

###### originalKrd.extensions.health.weight.kind

`"weight"` = `...`

###### originalKrd.extensions.health.weight.measuredAt

`string` = `...`

###### originalKrd.extensions.health.weight.sourceBridgeId?

... | ... = `...`

###### originalKrd.extensions.health.weight.version

`string` = `healthVersionSchema`

###### originalKrd.extensions.health.weight.weightKilograms

`number` = `...`

###### originalKrd.extensions.structured_workout?

`unknown` = `...`

###### originalKrd.laps?

`object`\[] = `...`

###### originalKrd.metadata

{ `created`: `string`; `manufacturer?`: `string`; `product?`: `string`; `serialNumber?`: `string`; `sport?`: `string`; `subSport?`: `string`; } = `krdMetadataSchema`

###### originalKrd.metadata.created

`string` = `...`

###### originalKrd.metadata.manufacturer?

`string` = `...`

###### originalKrd.metadata.product?

`string` = `...`

###### originalKrd.metadata.serialNumber?

`string` = `...`

###### originalKrd.metadata.sport?

`string` = `...`

**See**

sportSchema for known sport values. Accepts custom strings for forward compatibility.

Optional at the metadata level because health-metric KRD types
(sleep, weight, HRV, daily wellness, body composition, stress)
have no associated sport. A conditional refinement on `krdSchema`
still requires `sport` for the three legacy workout/activity/course
types so v1.x consumers see no change for those.

###### originalKrd.metadata.subSport?

`string` = `...`

###### originalKrd.records?

`object`\[] = `...`

###### originalKrd.sessions?

`object`\[] = `...`

###### originalKrd.type

`"structured_workout"` | `"recorded_activity"` | `"course"` | `"sleep_record"` | `"weight_measurement"` | `"hrv_summary"` | `"daily_wellness"` | `"body_composition"` | `"stress_episode"` = `fileTypeSchema`

###### originalKrd.version

`string` = `...`

#### Returns

`Promise`<`object`\[]>

### ~~validateKrdToFitToKrd~~

> **validateKrdToFitToKrd**: (`params`) => `Promise`<`object`\[]>

#### Parameters

##### params

###### originalKrd

{ `events?`: `object`\[]; `extensions?`: {\[`key`: `string`]: `unknown`; `course?`: `unknown`; `course_points?`: `unknown`; `fit?`: `unknown`; `health?`: {\[`key`: `string`]: `unknown`; `bodyComposition?`: { `basalMetabolicRateKcal?`: ... | ...; `bmi?`: ... | ...; `bodyFatPercent?`: ... | ...; `bodyWaterPercent?`: ... | ...; `boneMassKilograms?`: ... | ...; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"bodyComposition"`; `leanMassKilograms?`: ... | ...; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `visceralFatRating?`: ... | ...; }; `daily?`: { `activeCalories`: `number`; `date`: `string`; `externalId?`: ... | ...; `floorsClimbed?`: ... | ...; `intensityMinutes`: { `moderate`: ...; `vigorous`: ...; }; `kaiordRecordId?`: ... | ...; `kind`: `"daily"`; `restingCalories`: `number`; `sourceBridgeId?`: ... | ...; `steps`: `number`; `version`: `string`; }; `hrv?`: { `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"hrv"`; `measuredAt`: `string`; `measurementWindow`: ... | ...; `rMSSD`: `number`; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `version`: `string`; }; `sleep?`: { `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"sleep"`; `restingHeartRate?`: ... | ...; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `stages`: ...\[]; `startTime`: `string`; `totalDurationSeconds?`: ... | ...; `version`: `string`; }; `stress?`: { `averageLevel`: `number`; `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"stress"`; `peakLevel`: `number`; `sourceBridgeId?`: ... | ...; `startTime`: `string`; `version`: `string`; }; `weight?`: { `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"weight"`; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `weightKilograms`: `number`; }; }; `structured_workout?`: `unknown`; }; `laps?`: `object`\[]; `metadata`: { `created`: `string`; `manufacturer?`: `string`; `product?`: `string`; `serialNumber?`: `string`; `sport?`: `string`; `subSport?`: `string`; }; `records?`: `object`\[]; `sessions?`: `object`\[]; `type`: `"structured_workout"` | `"recorded_activity"` | `"course"` | `"sleep_record"` | `"weight_measurement"` | `"hrv_summary"` | `"daily_wellness"` | `"body_composition"` | `"stress_episode"`; `version`: `string`; }

###### originalKrd.events?

`object`\[] = `...`

###### originalKrd.extensions?

{\[`key`: `string`]: `unknown`; `course?`: `unknown`; `course_points?`: `unknown`; `fit?`: `unknown`; `health?`: {\[`key`: `string`]: `unknown`; `bodyComposition?`: { `basalMetabolicRateKcal?`: ... | ...; `bmi?`: ... | ...; `bodyFatPercent?`: ... | ...; `bodyWaterPercent?`: ... | ...; `boneMassKilograms?`: ... | ...; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"bodyComposition"`; `leanMassKilograms?`: ... | ...; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `visceralFatRating?`: ... | ...; }; `daily?`: { `activeCalories`: `number`; `date`: `string`; `externalId?`: ... | ...; `floorsClimbed?`: ... | ...; `intensityMinutes`: { `moderate`: ...; `vigorous`: ...; }; `kaiordRecordId?`: ... | ...; `kind`: `"daily"`; `restingCalories`: `number`; `sourceBridgeId?`: ... | ...; `steps`: `number`; `version`: `string`; }; `hrv?`: { `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"hrv"`; `measuredAt`: `string`; `measurementWindow`: ... | ...; `rMSSD`: `number`; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `version`: `string`; }; `sleep?`: { `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"sleep"`; `restingHeartRate?`: ... | ...; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `stages`: ...\[]; `startTime`: `string`; `totalDurationSeconds?`: ... | ...; `version`: `string`; }; `stress?`: { `averageLevel`: `number`; `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"stress"`; `peakLevel`: `number`; `sourceBridgeId?`: ... | ...; `startTime`: `string`; `version`: `string`; }; `weight?`: { `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"weight"`; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `weightKilograms`: `number`; }; }; `structured_workout?`: `unknown`; } = `...`

###### originalKrd.extensions.course?

`unknown` = `...`

###### originalKrd.extensions.course_points?

`unknown` = `...`

###### originalKrd.extensions.fit?

`unknown` = `...`

###### originalKrd.extensions.health?

{\[`key`: `string`]: `unknown`; `bodyComposition?`: { `basalMetabolicRateKcal?`: ... | ...; `bmi?`: ... | ...; `bodyFatPercent?`: ... | ...; `bodyWaterPercent?`: ... | ...; `boneMassKilograms?`: ... | ...; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"bodyComposition"`; `leanMassKilograms?`: ... | ...; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `visceralFatRating?`: ... | ...; }; `daily?`: { `activeCalories`: `number`; `date`: `string`; `externalId?`: ... | ...; `floorsClimbed?`: ... | ...; `intensityMinutes`: { `moderate`: ...; `vigorous`: ...; }; `kaiordRecordId?`: ... | ...; `kind`: `"daily"`; `restingCalories`: `number`; `sourceBridgeId?`: ... | ...; `steps`: `number`; `version`: `string`; }; `hrv?`: { `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"hrv"`; `measuredAt`: `string`; `measurementWindow`: ... | ...; `rMSSD`: `number`; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `version`: `string`; }; `sleep?`: { `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"sleep"`; `restingHeartRate?`: ... | ...; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `stages`: ...\[]; `startTime`: `string`; `totalDurationSeconds?`: ... | ...; `version`: `string`; }; `stress?`: { `averageLevel`: `number`; `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"stress"`; `peakLevel`: `number`; `sourceBridgeId?`: ... | ...; `startTime`: `string`; `version`: `string`; }; `weight?`: { `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"weight"`; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `weightKilograms`: `number`; }; } = `...`

###### originalKrd.extensions.health.bodyComposition?

{ `basalMetabolicRateKcal?`: ... | ...; `bmi?`: ... | ...; `bodyFatPercent?`: ... | ...; `bodyWaterPercent?`: ... | ...; `boneMassKilograms?`: ... | ...; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"bodyComposition"`; `leanMassKilograms?`: ... | ...; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `visceralFatRating?`: ... | ...; } = `...`

###### originalKrd.extensions.health.bodyComposition.basalMetabolicRateKcal?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.bmi?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.bodyFatPercent?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.bodyWaterPercent?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.boneMassKilograms?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.externalId?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.kaiordRecordId?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.kind

`"bodyComposition"` = `...`

###### originalKrd.extensions.health.bodyComposition.leanMassKilograms?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.measuredAt

`string` = `...`

###### originalKrd.extensions.health.bodyComposition.sourceBridgeId?

... | ... = `...`

###### originalKrd.extensions.health.bodyComposition.version

`string` = `healthVersionSchema`

###### originalKrd.extensions.health.bodyComposition.visceralFatRating?

... | ... = `...`

###### originalKrd.extensions.health.daily?

{ `activeCalories`: `number`; `date`: `string`; `externalId?`: ... | ...; `floorsClimbed?`: ... | ...; `intensityMinutes`: { `moderate`: ...; `vigorous`: ...; }; `kaiordRecordId?`: ... | ...; `kind`: `"daily"`; `restingCalories`: `number`; `sourceBridgeId?`: ... | ...; `steps`: `number`; `version`: `string`; } = `...`

###### originalKrd.extensions.health.daily.activeCalories

`number` = `...`

###### originalKrd.extensions.health.daily.date

`string` = `...`

###### originalKrd.extensions.health.daily.externalId?

... | ... = `...`

###### originalKrd.extensions.health.daily.floorsClimbed?

... | ... = `...`

###### originalKrd.extensions.health.daily.intensityMinutes

{ `moderate`: ...; `vigorous`: ...; } = `...`

###### originalKrd.extensions.health.daily.intensityMinutes.moderate

... = `...`

###### originalKrd.extensions.health.daily.intensityMinutes.vigorous

... = `...`

###### originalKrd.extensions.health.daily.kaiordRecordId?

... | ... = `...`

###### originalKrd.extensions.health.daily.kind

`"daily"` = `...`

###### originalKrd.extensions.health.daily.restingCalories

`number` = `...`

###### originalKrd.extensions.health.daily.sourceBridgeId?

... | ... = `...`

###### originalKrd.extensions.health.daily.steps

`number` = `...`

###### originalKrd.extensions.health.daily.version

`string` = `healthVersionSchema`

###### originalKrd.extensions.health.hrv?

{ `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"hrv"`; `measuredAt`: `string`; `measurementWindow`: ... | ...; `rMSSD`: `number`; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `version`: `string`; } = `...`

###### originalKrd.extensions.health.hrv.externalId?

... | ... = `...`

###### originalKrd.extensions.health.hrv.kaiordRecordId?

... | ... = `...`

###### originalKrd.extensions.health.hrv.kind

`"hrv"` = `...`

###### originalKrd.extensions.health.hrv.measuredAt

`string` = `...`

###### originalKrd.extensions.health.hrv.measurementWindow

... | ... = `...`

###### originalKrd.extensions.health.hrv.rMSSD

`number` = `...`

###### originalKrd.extensions.health.hrv.score?

... | ... = `...`

###### originalKrd.extensions.health.hrv.sourceBridgeId?

... | ... = `...`

###### originalKrd.extensions.health.hrv.version

`string` = `healthVersionSchema`

###### originalKrd.extensions.health.sleep?

{ `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"sleep"`; `restingHeartRate?`: ... | ...; `score?`: ... | ...; `sourceBridgeId?`: ... | ...; `stages`: ...\[]; `startTime`: `string`; `totalDurationSeconds?`: ... | ...; `version`: `string`; } = `...`

###### originalKrd.extensions.health.sleep.endTime

`string` = `...`

###### originalKrd.extensions.health.sleep.externalId?

... | ... = `...`

###### originalKrd.extensions.health.sleep.kaiordRecordId?

... | ... = `...`

###### originalKrd.extensions.health.sleep.kind

`"sleep"` = `...`

###### originalKrd.extensions.health.sleep.restingHeartRate?

... | ... = `...`

###### originalKrd.extensions.health.sleep.score?

... | ... = `...`

###### originalKrd.extensions.health.sleep.sourceBridgeId?

... | ... = `...`

###### originalKrd.extensions.health.sleep.stages

...\[] = `...`

###### originalKrd.extensions.health.sleep.startTime

`string` = `...`

###### originalKrd.extensions.health.sleep.totalDurationSeconds?

... | ... = `...`

###### originalKrd.extensions.health.sleep.version

`string` = `healthVersionSchema`

###### originalKrd.extensions.health.stress?

{ `averageLevel`: `number`; `endTime`: `string`; `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"stress"`; `peakLevel`: `number`; `sourceBridgeId?`: ... | ...; `startTime`: `string`; `version`: `string`; } = `...`

###### originalKrd.extensions.health.stress.averageLevel

`number` = `...`

###### originalKrd.extensions.health.stress.endTime

`string` = `...`

###### originalKrd.extensions.health.stress.externalId?

... | ... = `...`

###### originalKrd.extensions.health.stress.kaiordRecordId?

... | ... = `...`

###### originalKrd.extensions.health.stress.kind

`"stress"` = `...`

###### originalKrd.extensions.health.stress.peakLevel

`number` = `...`

###### originalKrd.extensions.health.stress.sourceBridgeId?

... | ... = `...`

###### originalKrd.extensions.health.stress.startTime

`string` = `...`

###### originalKrd.extensions.health.stress.version

`string` = `healthVersionSchema`

###### originalKrd.extensions.health.weight?

{ `externalId?`: ... | ...; `kaiordRecordId?`: ... | ...; `kind`: `"weight"`; `measuredAt`: `string`; `sourceBridgeId?`: ... | ...; `version`: `string`; `weightKilograms`: `number`; } = `...`

###### originalKrd.extensions.health.weight.externalId?

... | ... = `...`

###### originalKrd.extensions.health.weight.kaiordRecordId?

... | ... = `...`

###### originalKrd.extensions.health.weight.kind

`"weight"` = `...`

###### originalKrd.extensions.health.weight.measuredAt

`string` = `...`

###### originalKrd.extensions.health.weight.sourceBridgeId?

... | ... = `...`

###### originalKrd.extensions.health.weight.version

`string` = `healthVersionSchema`

###### originalKrd.extensions.health.weight.weightKilograms

`number` = `...`

###### originalKrd.extensions.structured_workout?

`unknown` = `...`

###### originalKrd.laps?

`object`\[] = `...`

###### originalKrd.metadata

{ `created`: `string`; `manufacturer?`: `string`; `product?`: `string`; `serialNumber?`: `string`; `sport?`: `string`; `subSport?`: `string`; } = `krdMetadataSchema`

###### originalKrd.metadata.created

`string` = `...`

###### originalKrd.metadata.manufacturer?

`string` = `...`

###### originalKrd.metadata.product?

`string` = `...`

###### originalKrd.metadata.serialNumber?

`string` = `...`

###### originalKrd.metadata.sport?

`string` = `...`

**See**

sportSchema for known sport values. Accepts custom strings for forward compatibility.

Optional at the metadata level because health-metric KRD types
(sleep, weight, HRV, daily wellness, body composition, stress)
have no associated sport. A conditional refinement on `krdSchema`
still requires `sport` for the three legacy workout/activity/course
types so v1.x consumers see no change for those.

###### originalKrd.metadata.subSport?

`string` = `...`

###### originalKrd.records?

`object`\[] = `...`

###### originalKrd.sessions?

`object`\[] = `...`

###### originalKrd.type

`"structured_workout"` | `"recorded_activity"` | `"course"` | `"sleep_record"` | `"weight_measurement"` | `"hrv_summary"` | `"daily_wellness"` | `"body_composition"` | `"stress_episode"` = `fileTypeSchema`

###### originalKrd.version

`string` = `...`

#### Returns

`Promise`<`object`\[]>

#### Deprecated

Use validateKrdRoundTrip.
