{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/coachwatts-com/json-schema/coachwatts-com-wellness-upload-schema.json",
  "title": "WellnessUpload",
  "x-generated": "2026-11-04",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/coachwatts-com-openapi.yml#/components/schemas/WellnessUpload",
  "type": "object",
  "required": [
    "date"
  ],
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "description": "YYYY-MM-DD or ISO string"
    },
    "hrv": {
      "type": "number",
      "description": "Heart Rate Variability (ms)"
    },
    "hrvSdnn": {
      "type": "number",
      "description": "Standard deviation of NN intervals (ms)"
    },
    "restingHr": {
      "type": "integer",
      "description": "Resting Heart Rate (bpm)"
    },
    "avgSleepingHr": {
      "type": "integer",
      "description": "Average HR during sleep (bpm)"
    },
    "sleepScore": {
      "type": "integer",
      "description": "Sleep quality score (1-100)"
    },
    "sleepHours": {
      "type": "number",
      "description": "Total sleep duration in hours"
    },
    "sleepSecs": {
      "type": "integer",
      "description": "Total sleep duration in seconds"
    },
    "sleepQuality": {
      "type": "integer",
      "description": "Subjective sleep quality (1-10)"
    },
    "sleepDeepSecs": {
      "type": "integer",
      "description": "Deep sleep duration in seconds"
    },
    "sleepRemSecs": {
      "type": "integer",
      "description": "REM sleep duration in seconds"
    },
    "sleepLightSecs": {
      "type": "integer",
      "description": "Light sleep duration in seconds"
    },
    "sleepAwakeSecs": {
      "type": "integer",
      "description": "Awake duration during sleep session in seconds"
    },
    "readiness": {
      "type": "integer",
      "description": "Overall readiness score (1-100)"
    },
    "recoveryScore": {
      "type": "integer",
      "description": "Recovery score (1-100)"
    },
    "weight": {
      "type": "number",
      "description": "Body weight (kg)"
    },
    "bodyFat": {
      "type": "number",
      "description": "Body fat percentage (%)"
    },
    "bloodGlucose": {
      "type": "number",
      "description": "Blood glucose levels"
    },
    "skinTemp": {
      "type": "number",
      "description": "Skin temperature deviation (Celsius)"
    },
    "respiration": {
      "type": "number",
      "description": "Respiratory rate (breaths per min)"
    },
    "spO2": {
      "type": "number",
      "description": "Blood oxygen saturation (%)"
    },
    "vo2max": {
      "type": "number",
      "description": "Estimated VO2 Max"
    },
    "restingCaloriesBurned": {
      "type": "integer",
      "description": "Resting calories burned for the day (kcal)"
    },
    "activeCaloriesBurned": {
      "type": "integer",
      "description": "Active calories burned for the day (kcal)"
    },
    "totalCaloriesBurned": {
      "type": "integer",
      "description": "Total calories burned for the day (kcal)"
    },
    "steps": {
      "type": "integer",
      "description": "Daily step count"
    },
    "distanceMeters": {
      "type": "number",
      "description": "Daily activity distance in meters"
    },
    "exerciseMinutes": {
      "type": "integer",
      "description": "Daily exercise minutes"
    },
    "floors": {
      "type": "integer",
      "description": "Daily floors climbed"
    },
    "systolic": {
      "type": "integer",
      "description": "Systolic blood pressure"
    },
    "diastolic": {
      "type": "integer",
      "description": "Diastolic blood pressure"
    },
    "ctl": {
      "type": "number",
      "description": "Chronic Training Load (Fitness)"
    },
    "atl": {
      "type": "number",
      "description": "Acute Training Load (Fatigue)"
    },
    "stress": {
      "type": "integer",
      "description": "Subjective stress level (1-10)"
    },
    "mood": {
      "type": "integer",
      "description": "Subjective mood level (1-10)"
    },
    "motivation": {
      "type": "integer",
      "description": "Subjective motivation (1-10)"
    },
    "fatigue": {
      "type": "integer",
      "description": "Subjective fatigue (1-10)"
    },
    "soreness": {
      "type": "integer",
      "description": "Subjective soreness (1-10)"
    },
    "comments": {
      "type": "string",
      "description": "User notes or journal entry"
    },
    "rawJson": {
      "type": "object",
      "description": "Raw developer data for historical reference"
    }
  }
}