{"swagger":"2.0","info":{"title":"Johnson Health Tech Exerciser API","version":"3.73.1","description":"Universal API for Johnson Health Tech Exercisers"},"schemes":["https"],"basePath":"/","produces":["application/json"],"securityDefinitions":{"api_key_auth":{"x-authorize":"./api/authorization/api_key","in":"header","type":"apiKey","name":"x-api-key","scopes":{"api_key":"Validate with API Key","jwt":"Validate with JWT generated when logging in","role_superadmin":"Role can perform any action","role_service":"Role can perform any Service action","role_jwtn":"Role can perform any Johnson Workout Tracking Network action","role_jwt-required":"Role requires a jwt to access resources"}},"jump_auth":{"x-authorize":"./api/authorization/jump_auth","in":"header","type":"bearer","name":"Authorization","scopes":{"jump_id":"Validate with JUMP Id","eapi:exerciser:jump:create":"Has access to create a jump sync record","eapi:exerciser:read":"Has access to read exercisers","eapi:machine_learning:generation_data:read":"Has access to read plan generation plan data for an exerciser","eapi:machine_learning:schedule_generation:write":"Has access to schedule plan generations for an exerciser","eapi:dqa:write":"Has access to write admin features exposed for testing","eapi:dqa:read":"Has access to read admin features exposed for testing","console:read":"Has access to guest and other console specific endpoints","eapi:club:delete":"Has access to delete a club from collection","eapi:club:create":"Has the access to create a new club or update an existing club","eapi:club:read":"Has access to get a club from collection","eapi:tiers:read":"Has access to get tier information","eapi:tiers:write":"Has access to modify tier information","api_key":"BACKWARDS COMPATIBILITY | remove this once all calls use JUMP AUTH","jwt":"BACKWARDS COMPATIBILITY | remove this once all calls use JUMP AUTH","role_superadmin":"BACKWARDS COMPATIBILITY | remove this once all calls use JUMP AUTH","role_service":"BACKWARDS COMPATIBILITY | remove this once all calls use JUMP AUTH","role_jwtn":"BACKWARDS COMPATIBILITY | remove this once all calls use JUMP AUTH","role_jwt-required":"BACKWARDS COMPATIBILITY | remove this once all calls use JUMP AUTH"}},"session_auth":{"x-authorize":"./api/authorization/session","in":"cookie","type":"http","name":"connect.sid","scopes":{"session":"Validate with session","role_personaltrainer_user":"Personal Trainer user session"}}},"parameters":{"APIKey":{"name":"x-api-key","description":"API Key","in":"header","type":"string"}},"paths":{"/admin/benchmark":{"post":{"tags":["Admin"],"summary":"Overwrite one-rep max benchmarks for a user","security":[{"jump_auth":["eapi:dqa:write"]}],"parameters":[{"name":"body","in":"body","description":"Overwrite benchmarks request","required":true,"schema":{"type":"object","required":["user_id","benchmarks"],"properties":{"user_id":{"type":"string","minLength":0},"benchmarks":{"type":"array","items":{"type":"object","required":["machineType","max","updatedAt"],"properties":{"machineType":{"type":"string","minLength":0},"max":{"type":"number"},"updatedAt":{"type":"string","description":"ISO date string","minLength":0}}}}}}}],"responses":{"200":{"description":"Benchmarks updated successfully","schema":{"type":"object","properties":{"updatedBenchmarks":{"type":"array","items":{"type":"object","required":["machineType","max","updatedAt"],"properties":{"machineType":{"type":"string","minLength":0},"max":{"type":"number"},"updatedAt":{"type":"string","description":"ISO date string","minLength":0}}}}}}},"400":{"description":"Bad Request"},"404":{"description":"No exerciser found"},"500":{"description":"Internal Server Error"}}},"delete":{"tags":["Admin"],"summary":"Delete one-rep max benchmarks for a user","security":[{"jump_auth":["eapi:dqa:write"]}],"parameters":[{"name":"user_id","in":"query","required":true,"type":"string","description":"Exerciser user ID"},{"name":"machine_type","in":"query","required":false,"type":"string","description":"If omitted, all benchmarks are deleted"}],"responses":{"200":{"description":"Benchmarks deleted successfully","schema":{"type":"object","properties":{"updatedBenchmarks":{"type":"array","items":{"type":"object","required":["machineType","max","updatedAt"],"properties":{"machineType":{"type":"string","minLength":0},"max":{"type":"number"},"updatedAt":{"type":"string","description":"ISO date string","minLength":0}}}}}}},"400":{"description":"Bad Request"},"404":{"description":"No exerciser found"},"500":{"description":"Internal Server Error"}}},"get":{"tags":["Admin"],"summary":"Get one-rep max benchmarks for a user","security":[{"jump_auth":["eapi:dqa:read"]}],"parameters":[{"name":"user_id","in":"query","required":true,"type":"string","description":"Exerciser user ID"}],"responses":{"200":{"description":"Benchmarks retrieved successfully","schema":{"type":"object","properties":{"weeksUntilStale":{"type":"number"},"availableMachines":{"type":"array","items":{"type":"string"}},"benchmarks":{"type":"array","items":{"type":"object","required":["machineType","max","updatedAt"],"properties":{"machineType":{"type":"string","minLength":0},"max":{"type":"number"},"updatedAt":{"type":"string","description":"ISO date string","minLength":0}}}}}}},"400":{"description":"Bad Request"},"404":{"description":"No exerciser found"},"500":{"description":"Internal Server Error"}}}},"/admin/club":{"post":{"tags":["Admin"],"summary":"Create club configuration in EAPI Mongo collection","security":[{"jump_auth":["eapi:club:create"]}],"parameters":[{"name":"body","in":"body","description":"A new club configuration request","required":true,"schema":{"type":"object","required":["_id","vendors","authentication_map"],"properties":{"_id":{"type":"integer"},"vendors":{"type":"object","additionalProperties":{"type":"object"}},"authentication_map":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"launch_app":{"type":"object"},"membership_support":{"type":"string","minLength":0},"long_term_token":{"type":"boolean"},"machine_learning_provider":{"type":"object","required":["vendor"],"properties":{"vendor":{"type":"string","minLength":0},"model":{"type":"string","minLength":0},"tenantId":{"type":"string","minLength":0}}}}}}],"responses":{"201":{"description":"Club created successfully"},"400":{"description":"Bad Request - Missing parameters"},"500":{"description":"Internal Server Error"}}},"get":{"tags":["Club"],"summary":"Get a club by ID","security":[{"jump_auth":["eapi:club:read"]}],"parameters":[{"name":"club_id","in":"query","required":true,"type":"number","description":"Club ID"}],"responses":{"200":{"description":"Club returned successfully","schema":{"type":"object","required":["_id","vendors","authentication_map"],"properties":{"_id":{"type":"integer"},"vendors":{"type":"object","additionalProperties":{"type":"object"}},"authentication_map":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"launch_app":{"type":"object"},"membership_support":{"type":"string","minLength":0},"long_term_token":{"type":"boolean"},"machine_learning_provider":{"type":"object","required":["vendor"],"properties":{"vendor":{"type":"string","minLength":0},"model":{"type":"string","minLength":0},"tenantId":{"type":"string","minLength":0}}}}}},"400":{"description":"Bad Request"},"500":{"description":"Internal Server Error"}}},"delete":{"tags":["Club"],"summary":"Delete a club","security":[{"jump_auth":["eapi:club:delete"]}],"parameters":[{"name":"club_id","in":"query","required":true,"type":"number","description":"Club ID"}],"responses":{"204":{"description":"Club deleted successfully"},"400":{"description":"Bad Request"},"500":{"description":"Internal Server Error"}}}},"/admin/lookup_user":{"post":{"tags":["Admin"],"summary":"Lookup User","security":[{"jump_auth":["eapi:dqa:read"]}],"parameters":[{"name":"body","in":"body","description":"Lookup User Request","required":true,"schema":{"type":"object","required":["club_id"],"properties":{"user_id":{"type":"string","minLength":0},"club_id":{"type":"number"},"xid":{"type":"string","minLength":0},"machine_id":{"type":"string","minLength":0},"rfid":{"type":"string","minLength":0}}}}],"responses":{"200":{"description":"User data lookup passed"},"400":{"description":"Bad Request - Missing parameters"},"500":{"description":"Internal Server Error"}}}},"/admin/ml_scheduled_plan_events":{"post":{"summary":"Update a scheduled event","security":[{"jump_auth":["eapi:dqa:write"]}],"parameters":[{"name":"body","in":"body","description":"Update scheduled event Request","required":true,"schema":{"type":"object","required":["user_id"],"properties":{"user_id":{"type":"string","minLength":0},"execute_after_minutes":{"type":"number"}}}}],"responses":{"204":{"description":"Scheduled event updated successfully"},"400":{"description":"Bad Request - Missing parameters"},"500":{"description":"Internal Server Error"}}},"get":{"summary":"Get scheduled generation for user","security":[{"jump_auth":["eapi:dqa:read"]}],"parameters":[{"name":"user_id","in":"query","required":true,"type":"string","description":"Exerciser user ID"}],"responses":{"200":{"description":"Scheduled generation retrieved","schema":{"type":"object","properties":{"userId":{"type":"string"},"name":{"type":"string"},"scheduleExpression":{"type":"string"},"scheduleExpressionTimezone":{"type":"string"}}}},"400":{"description":"Bad Request"},"404":{"description":"No exerciser found"},"500":{"description":"Internal Server Error"}}}},"/admin/reset_survey":{"post":{"tags":["Admin"],"summary":"Reset Survey Data","security":[{"jump_auth":["eapi:dqa:write"]}],"parameters":[{"name":"body","in":"body","description":"Reset Survey Request","required":true,"schema":{"type":"object","required":["user_id","club_id"],"properties":{"user_id":{"type":"string","minLength":0},"club_id":{"type":"number"}}}}],"responses":{"204":{"description":"Survey resetted successfully"},"400":{"description":"Bad Request - Missing parameters"},"500":{"description":"Internal Server Error"}}}},"/admin/reset_user_data":{"post":{"tags":["Admin"],"summary":"Reset User Data","security":[{"jump_auth":["eapi:dqa:write"]}],"parameters":[{"name":"body","in":"body","description":"Reset User Data Request","required":true,"schema":{"type":"object","required":["user_id","club_id"],"properties":{"user_id":{"type":"string","minLength":0},"club_id":{"type":"number"},"keep_completed_machine_learning_workouts":{"type":"boolean"},"remove_body_scans":{"type":"boolean"}}}}],"responses":{"204":{"description":"Survey resetted successfully"},"400":{"description":"Bad Request - Missing parameters"},"500":{"description":"Internal Server Error"}}}},"/admin/tiers/chains":{"get":{"tags":["Admin"],"summary":"Get all console feature chains","security":[{"jump_auth":["eapi:tiers:read"]}],"parameters":[],"responses":{"200":{"description":"List of chains","schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"name":{"type":"string"}}}}},"500":{"description":"Internal Server Error"}}},"post":{"tags":["Admin"],"summary":"Create or update a console feature chain","security":[{"jump_auth":["eapi:tiers:write"]}],"parameters":[{"name":"body","in":"body","required":true,"schema":{"type":"object","required":["id","name"],"properties":{"id":{"type":"number"},"name":{"type":"string","minLength":0}}}}],"responses":{"200":{"description":"Chain saved successfully"},"400":{"description":"Bad Request"},"500":{"description":"Internal Server Error"}}},"delete":{"tags":["Admin"],"summary":"Delete a console feature chain","security":[{"jump_auth":["eapi:tiers:write"]}],"parameters":[{"name":"chain_id","in":"query","required":true,"type":"number","description":"Chain ID"}],"responses":{"204":{"description":"Chain deleted successfully"},"400":{"description":"Bad Request"},"500":{"description":"Internal Server Error"}}}},"/admin/tiers/clubs":{"get":{"tags":["Admin"],"summary":"Get all console feature club mappings","security":[{"jump_auth":["eapi:tiers:read"]}],"parameters":[],"responses":{"200":{"description":"List of club-to-chain mappings","schema":{"type":"array","items":{"type":"object","properties":{"club_id":{"type":"number"},"chain_id":{"type":"number"}}}}},"500":{"description":"Internal Server Error"}}},"post":{"tags":["Admin"],"summary":"Create or update a club-to-chain mapping","security":[{"jump_auth":["eapi:tiers:write"]}],"parameters":[{"name":"body","in":"body","required":true,"schema":{"type":"object","required":["club_id","chain_id"],"properties":{"club_id":{"type":"number"},"chain_id":{"type":"number"}}}}],"responses":{"200":{"description":"Club mapping saved successfully"},"400":{"description":"Bad Request"},"500":{"description":"Internal Server Error"}}},"delete":{"tags":["Admin"],"summary":"Delete a club-to-chain mapping","security":[{"jump_auth":["eapi:tiers:write"]}],"parameters":[{"name":"club_id","in":"query","required":true,"type":"number","description":"Club ID"}],"responses":{"204":{"description":"Club mapping deleted successfully"},"400":{"description":"Bad Request"},"500":{"description":"Internal Server Error"}}}},"/admin/tiers/features":{"get":{"tags":["Admin"],"summary":"Get all console features","security":[{"jump_auth":["eapi:tiers:read"]}],"parameters":[],"responses":{"200":{"description":"List of console features","schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"feature_type":{"type":"string"},"name":{"type":"string"},"program_id":{"type":"number"},"app_id":{"type":"string"}}}}},"500":{"description":"Internal Server Error"}}},"post":{"tags":["Admin"],"summary":"Create a console feature","security":[{"jump_auth":["eapi:tiers:write"]}],"parameters":[{"name":"body","in":"body","required":true,"schema":{"type":"object","required":["id","name","feature_type"],"properties":{"id":{"type":"number"},"feature_type":{"type":"string","minLength":0},"name":{"type":"string","minLength":0},"program_id":{"type":"number"},"app_id":{"type":"string","minLength":0}}}}],"responses":{"200":{"description":"Feature created successfully"},"400":{"description":"Bad Request"},"500":{"description":"Internal Server Error"}}},"delete":{"tags":["Admin"],"summary":"Delete a console feature","security":[{"jump_auth":["eapi:tiers:write"]}],"parameters":[{"name":"feature_id","in":"query","required":true,"type":"number","description":"Feature ID"}],"responses":{"204":{"description":"Feature deleted successfully"},"400":{"description":"Bad Request"},"500":{"description":"Internal Server Error"}}}},"/admin/tiers/levels":{"get":{"tags":["Admin"],"summary":"Get console feature membership levels, optionally filtered by chain","security":[{"jump_auth":["eapi:tiers:read"]}],"parameters":[{"name":"chain_id","in":"query","required":false,"type":"number","description":"Filter levels by chain ID"}],"responses":{"200":{"description":"List of membership levels","schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number"},"chain_id":{"type":"number"},"name":{"type":"string"},"internal_name":{"type":"string"},"membership_rank":{"type":"number"},"description":{"type":"string"},"disabled_features":{"type":"array","items":{"type":"number"}},"hidden_features":{"type":"array","items":{"type":"number"}},"image_url":{"type":"string"}}}}},"500":{"description":"Internal Server Error"}}},"post":{"tags":["Admin"],"summary":"Create a new membership level","security":[{"jump_auth":["eapi:tiers:write"]}],"parameters":[{"name":"body","in":"body","required":true,"schema":{"type":"object","required":["id","chain_id","name","internal_name","membership_rank"],"properties":{"id":{"type":"number"},"chain_id":{"type":"number"},"name":{"type":"string","minLength":0},"internal_name":{"type":"string","minLength":0},"membership_rank":{"type":"number"},"description":{"type":"string","minLength":0},"disabled_features":{"type":"array","items":{"type":"number"}},"hidden_features":{"type":"array","items":{"type":"number"}},"image_url":{"type":"string","minLength":0}}}}],"responses":{"201":{"description":"Level created successfully"},"400":{"description":"Bad Request"},"500":{"description":"Internal Server Error"}}},"put":{"tags":["Admin"],"summary":"Update a membership level (partial). Any subset of mutable fields may be supplied.","security":[{"jump_auth":["eapi:tiers:write"]}],"parameters":[{"name":"level_id","in":"query","required":true,"type":"number","description":"Membership level ID"},{"name":"body","in":"body","required":true,"schema":{"type":"object","description":"Any subset of editable level fields. internal_name must match the vendor membership id (see getMembership).","properties":{"chain_id":{"type":"number"},"name":{"type":"string","minLength":0},"internal_name":{"type":"string","description":"Must match the vendor membership id to map a user's membership to this level","minLength":0},"membership_rank":{"type":"number"},"description":{"type":"string","minLength":0},"disabled_features":{"type":"array","items":{"type":"number"}},"hidden_features":{"type":"array","items":{"type":"number"}},"image_url":{"type":"string","minLength":0}}}}],"responses":{"204":{"description":"Level updated successfully"},"400":{"description":"Bad Request"},"500":{"description":"Internal Server Error"}}},"delete":{"tags":["Admin"],"summary":"Delete a membership level","security":[{"jump_auth":["eapi:tiers:write"]}],"parameters":[{"name":"level_id","in":"query","required":true,"type":"number","description":"Membership level ID"}],"responses":{"204":{"description":"Level deleted successfully"},"400":{"description":"Bad Request"},"500":{"description":"Internal Server Error"}}}},"/apollo/exchange_token_for_exerciser":{"post":{"tags":["Apollo","ExerciserByJWT"],"summary":"Authenticate a User","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"body","in":"body","description":"Apollo login & workout Request","required":true,"schema":{"type":"object","required":["vendor","token"],"properties":{"vendor":{"type":"string","minLength":0},"token":{"type":"string","minLength":0}}}}],"consumes":["application/json"],"responses":{"200":{"description":"Exerciser","schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Unique Identifier of the Exerciser"},"first_name":{"type":"string","description":"First Name of the Exerciser"},"last_name":{"type":"string","description":"Last Name of the Exerciser"},"birthday":{"type":"string","format":"date","description":"Date of exercisers birth (YYYY-MM-DD)"},"age":{"type":"number","description":"Age of the Exerciser in years"},"email":{"type":"string","description":"Email address of the exerciser"},"units":{"type":"string","description":"Measurement units of the exerciser: M (Metric), or (I) Imperial","enum":["M","I"]},"gender":{"type":"string","description":"Gender specification of the exerciser: M (Male), F (Female), or X (Non-Binary)","enum":["M","F","X"]},"height":{"type":"number","description":"Height of the exerciser in centimeters (CM)"},"weight":{"type":"number","description":"Weight of the exerciser in kilograms (KG)"},"pictureUrl":{"type":"string","description":"URI of the profile picture of the exerciser"},"extra":{"type":"object"},"identities":{"type":"array","items":{"type":"object","required":["vendor","vendor_id","last_login"],"properties":{"vendor":{"type":"string","description":"Vendor Authentication System"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID of Last Login"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"dateTime","description":"Date of Last Login with Vendor"}}}},"clubs":{"type":"array","items":{"type":"object","properties":{"vendor":{"type":"string","description":"Vendor Authentication System of Last Login"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"date","description":"Date of Last Login with Vendor"}}}},"token":{"type":"string","description":"A JWT that expires in 1 hour.  token only gets set during the /login endpoint logic"}}}}}}},"/assignments/{assignment_id}":{"get":{"tags":["PersonalTrainer"],"summary":"Get assignment by id from a backend training service","security":[{"session_auth":[]}],"parameters":[{"name":"assignment_id","in":"path","description":"Assignment ID","type":"string","required":true}],"responses":{"200":{"description":"Successfully pulled assignment","schema":{"type":"object","properties":{"exerciserId":{"type":"string"},"startDate":{"type":"integer"},"endDate":{"type":"integer"},"name":{"type":"string"},"exercises":{"type":"array","items":{"type":"object","required":["assignedProfile","title","preset"],"properties":{"_id":{"type":"string"},"video":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"equipmentType":{"type":"string"},"cardioProgramId":{"type":"integer"},"assignedProfile":{"type":"object","required":["global"],"properties":{"global":{"type":"object"},"segments":{"type":"array","items":{"type":"object"}}}},"completedProfile":{"type":"object"},"completedDate":{"type":"integer"},"feedback":{"type":"string"},"emoji":{"type":"string"},"exerciserDescription":{"type":"string"},"preset":{"type":"object","required":["metrics"],"properties":{"maxSegments":{"type":"integer"},"metrics":{"type":"array","items":{"type":"object"}}}},"images":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"isPrimary":{"type":"boolean"},"picturePath":{"type":"string"},"transform":{"type":"string"}}}},"assignmentType":{"type":"string"}}}},"_id":{"type":"string"},"facility":{"type":"object","properties":{"name":{"type":"string"},"_id":{"type":"string"}}},"scheduleType":{"type":"string"}}}},"404":{"description":"No assignment for provided ID"},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/assignments":{"get":{"tags":["PersonalTrainer"],"summary":"Get assignments from a backend training service","security":[{"session_auth":[]}],"parameters":[],"responses":{"200":{"description":"Successfully pulled assignments","schema":{"type":"array","items":{"type":"object","properties":{"exerciserId":{"type":"string"},"startDate":{"type":"integer"},"endDate":{"type":"integer"},"name":{"type":"string"},"exercises":{"type":"array","items":{"type":"object","required":["assignedProfile","title","preset"],"properties":{"_id":{"type":"string"},"video":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"equipmentType":{"type":"string"},"cardioProgramId":{"type":"integer"},"assignedProfile":{"type":"object","required":["global"],"properties":{"global":{"type":"object"},"segments":{"type":"array","items":{"type":"object"}}}},"completedProfile":{"type":"object"},"completedDate":{"type":"integer"},"feedback":{"type":"string"},"emoji":{"type":"string"},"exerciserDescription":{"type":"string"},"preset":{"type":"object","required":["metrics"],"properties":{"maxSegments":{"type":"integer"},"metrics":{"type":"array","items":{"type":"object"}}}},"images":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"isPrimary":{"type":"boolean"},"picturePath":{"type":"string"},"transform":{"type":"string"}}}},"assignmentType":{"type":"string"}}}},"_id":{"type":"string"},"facility":{"type":"object","properties":{"name":{"type":"string"},"_id":{"type":"string"}}},"scheduleType":{"type":"string"}}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/clubs/{club_id}/vendors":{"get":{"tags":["Clubs"],"summary":"Retrieve a club's vendors","security":[{"api_key_auth":["api_key","role_service"]}],"parameters":[{"name":"club_id","in":"path","description":"The club id","required":true,"type":"string"}],"consumes":["application/json"],"responses":{"200":{"description":"Object with vendor information associated with the {club_id}.  Can be empty."}}}},"/combined_assignments/exercises/{id}/associate":{"post":{"tags":["PersonalTrainer"],"summary":"associate exercise with exerciser workout","security":[{"session_auth":[]}],"parameters":[{"name":"id","in":"path","description":"id of exercise","type":"string","required":true},{"in":"body","name":"body","required":true,"schema":{"type":"object","properties":{"workoutId":{"type":"string","minLength":0},"workout":{"type":"object","required":["category","completedDate","completedProfile"],"properties":{"completedDate":{"type":"integer"},"category":{"type":"string","minLength":0},"completeState":{"type":"string","required":false,"enum":["not_complete","completed_manually","completed_automatically","skipped","cancelled"]},"benchmark":{"type":"number"},"completedProfile":{"type":"object","properties":{"duration":{"type":"number"},"distance":{"type":"number"},"calories":{"type":"integer"},"speed":{"type":"number","required":false},"avgSpeed":{"type":"number"},"avgIncline":{"type":"number"},"incline":{"type":"number","required":false},"avgResistance":{"type":"number"},"workoutSource":{"type":"string","minLength":0},"exerciserWorkoutId":{"type":"string","minLength":0},"ssaComplete":{"type":"boolean"},"segments":{"type":"array","items":{"type":"object"}},"maxSpeed":{"type":"number","required":false},"maxIncline":{"type":"number","required":false},"maxResistance":{"type":"number","required":false},"minResistance":{"type":"number","required":false},"resistance":{"type":"number","required":false},"floors":{"type":"number","required":false},"cardioProgramLevel":{"type":"number"},"sweatScore":{"type":"number"},"percentTHR":{"type":"number"},"watts":{"type":"number","required":false},"avgHeartRate":{"type":"number","required":false},"peakHeartRate":{"type":"number","required":false}}}}}}}}],"responses":{"200":{"description":"Completed","schema":{"type":"object","required":["assignedProfile","title","preset"],"properties":{"_id":{"type":"string"},"video":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"equipmentType":{"type":"string"},"cardioProgramId":{"type":"integer"},"assignedProfile":{"type":"object","required":["global"],"properties":{"global":{"type":"object"},"segments":{"type":"array","items":{"type":"object"}}}},"completedProfile":{"type":"object"},"completedDate":{"type":"integer"},"feedback":{"type":"string"},"emoji":{"type":"string"},"exerciserDescription":{"type":"string"},"preset":{"type":"object","required":["metrics"],"properties":{"maxSegments":{"type":"integer"},"metrics":{"type":"array","items":{"type":"object"}}}},"images":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"isPrimary":{"type":"boolean"},"picturePath":{"type":"string"},"transform":{"type":"string"}}}},"assignmentType":{"type":"string"}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}},"delete":{"tags":["PersonalTrainer"],"summary":"disassociate exercise from exerciser workout","security":[{"session_auth":[]}],"parameters":[{"name":"id","description":"id of exercise","in":"path","required":true,"type":"string"}],"responses":{"204":{"description":"Completed"},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/combined_assignments/exercises/{id}/workouts":{"get":{"tags":["PersonalTrainer"],"summary":"Get corresponding workouts of exercise","security":[{"session_auth":[]}],"parameters":[{"name":"id","in":"path","description":"id of exercise","type":"string","required":true}],"responses":{"200":{"description":"Completed","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"title":{"type":"string"},"exerciserId":{"type":"string"},"completedDate":{"type":"integer"},"category":{"type":"string"},"equipmentType":{"type":"string"},"completedProfile":{"type":"object"}}}}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/combined_assignments/exercises/{id}":{"put":{"tags":["PersonalTrainer"],"summary":"update exercise","security":[{"session_auth":[]}],"parameters":[{"name":"id","in":"path","description":"id of exercise","type":"string","required":true},{"in":"body","name":"body","required":true,"schema":{"type":"object","properties":{"feedback":{"type":"string","minLength":0},"emoji":{"type":"string","minLength":0},"exerciserDescription":{"type":"string","minLength":0},"video":{"type":"string","minLength":0},"runDate":{"type":"integer"}}}}],"responses":{"200":{"description":"Completed"},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/combined_assignments/{id}":{"get":{"tags":["PersonalTrainer"],"summary":"get combined assignment","security":[{"session_auth":[]}],"parameters":[{"name":"id","in":"path","description":"id of exercise","type":"string","required":true}],"responses":{"200":{"description":"Completed","schema":{"type":"object","required":["_id","assignmentType","startDate","exercises","facility"],"properties":{"_id":{"type":"string"},"assignmentType":{"type":"string"},"exerciserId":{"type":"string"},"startDate":{"type":"integer"},"endDate":{"type":"integer"},"name":{"type":"string"},"scheduleType":{"type":"string"},"exercises":{"type":"array","items":{"type":"object","required":["assignedProfile","title","preset"],"properties":{"_id":{"type":"string"},"video":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"equipmentType":{"type":"string"},"cardioProgramId":{"type":"integer"},"assignedProfile":{"type":"object","required":["global"],"properties":{"global":{"type":"object"},"segments":{"type":"array","items":{"type":"object"}}}},"completedProfile":{"type":"object"},"completedDate":{"type":"integer"},"feedback":{"type":"string"},"emoji":{"type":"string"},"exerciserDescription":{"type":"string"},"preset":{"type":"object","required":["metrics"],"properties":{"maxSegments":{"type":"integer"},"metrics":{"type":"array","items":{"type":"object"}}}},"images":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"isPrimary":{"type":"boolean"},"picturePath":{"type":"string"},"transform":{"type":"string"}}}},"assignmentType":{"type":"string"}}}},"facility":{"type":"object","properties":{"name":{"type":"string"},"_id":{"type":"string"}}},"parentAssignmentId":{"type":"string"},"trainerId":{"type":"string"},"recurrence":{"type":"object"},"trainingPlan":{"type":"object","properties":{"trainingPlanId":{"type":"string"},"trainingPlanName":{"type":"string"},"trainingPlanAssignmentId":{"type":"string"},"repetition":{"type":"number"},"repeats":{"type":"number"},"trainingPlanAssignmentIdx":{"type":"number"}}}}}},"404":{"description":"There is no on-going assignment when \"current\" is requested","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/combined_assignments":{"get":{"tags":["PersonalTrainer"],"summary":"get combined assignments","security":[],"parameters":[{"name":"Authorization","in":"header","description":"Authorization header","type":"string","required":false},{"name":"startDate","description":"filter by start date (timestamp, sec)","in":"query","type":"integer","required":true},{"name":"endDate","description":"filter by end date (timestamp, sec)","in":"query","type":"integer","required":true},{"name":"exerciserId","description":"filter by the exerciser id","in":"query","type":"string"}],"responses":{"200":{"description":"Completed","schema":{"type":"array","items":{"type":"object","required":["_id","assignmentType","startDate","exercises","facility"],"properties":{"_id":{"type":"string"},"assignmentType":{"type":"string"},"exerciserId":{"type":"string"},"startDate":{"type":"integer"},"endDate":{"type":"integer"},"name":{"type":"string"},"scheduleType":{"type":"string"},"exercises":{"type":"array","items":{"type":"object","required":["assignedProfile","title","preset"],"properties":{"_id":{"type":"string"},"video":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"equipmentType":{"type":"string"},"cardioProgramId":{"type":"integer"},"assignedProfile":{"type":"object","required":["global"],"properties":{"global":{"type":"object"},"segments":{"type":"array","items":{"type":"object"}}}},"completedProfile":{"type":"object"},"completedDate":{"type":"integer"},"feedback":{"type":"string"},"emoji":{"type":"string"},"exerciserDescription":{"type":"string"},"preset":{"type":"object","required":["metrics"],"properties":{"maxSegments":{"type":"integer"},"metrics":{"type":"array","items":{"type":"object"}}}},"images":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"isPrimary":{"type":"boolean"},"picturePath":{"type":"string"},"transform":{"type":"string"}}}},"assignmentType":{"type":"string"}}}},"facility":{"type":"object","properties":{"name":{"type":"string"},"_id":{"type":"string"}}},"parentAssignmentId":{"type":"string"},"trainerId":{"type":"string"},"recurrence":{"type":"object"},"trainingPlan":{"type":"object","properties":{"trainingPlanId":{"type":"string"},"trainingPlanName":{"type":"string"},"trainingPlanAssignmentId":{"type":"string"},"repetition":{"type":"number"},"repeats":{"type":"number"},"trainingPlanAssignmentIdx":{"type":"number"}}}}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/console/features/guest":{"get":{"tags":["User"],"summary":"Get guest user features","security":[{"jump_auth":["console:read"]}],"parameters":[{"name":"Authorization","in":"header","description":"The JUMP console token","type":"string"},{"name":"club_id","in":"query","description":"Club Id","type":"string","required":true}],"responses":{"200":{"description":"Guest console features retrieved","schema":{"type":"object","properties":{"disabled_features":{"type":"array","items":{"type":"string","description":"app id or program id for the feature to disable"}},"enabled_features":{"type":"array","items":{"type":"string","description":"app id or program id for the feature to enable"}},"hidden_features":{"type":"array","items":{"type":"string","description":"app id or program id for the feature to hide"}}}},"examples":{"application/json":{"disabled_features":[],"enabled_features":[],"hidden_features":[]}}},"400":{"description":"Bad Request - Missing parameters or club id not found"},"500":{"description":"Internal Server Error"}}}},"/exerciser/by_vendor":{"get":{"tags":["Exerciser"],"summary":"Retrieve an Exerciser Record By Vendor and Vendor ID","security":[{"jump_auth":["eapi:exerciser:read"]}],"parameters":[{"name":"vendor","in":"query","description":"Vendor name","required":true,"type":"string"},{"name":"vendor_id","in":"query","description":"The user's id for that vendor i.e. netpulse id","required":true,"type":"string"},{"name":"Authorization","in":"header","description":"The JUMP access token.","type":"string","required":false}],"consumes":["application/json"],"responses":{"200":{"description":"Exerciser","schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Unique Identifier of the Exerciser"},"first_name":{"type":"string","description":"First Name of the Exerciser"},"last_name":{"type":"string","description":"Last Name of the Exerciser"},"birthday":{"type":"string","format":"date","description":"Date of exercisers birth (YYYY-MM-DD)"},"age":{"type":"number","description":"Age of the Exerciser in years"},"email":{"type":"string","description":"Email address of the exerciser"},"units":{"type":"string","description":"Measurement units of the exerciser: M (Metric), or (I) Imperial","enum":["M","I"]},"gender":{"type":"string","description":"Gender specification of the exerciser: M (Male), F (Female), or X (Non-Binary)","enum":["M","F","X"]},"height":{"type":"number","description":"Height of the exerciser in centimeters (CM)"},"weight":{"type":"number","description":"Weight of the exerciser in kilograms (KG)"},"pictureUrl":{"type":"string","description":"URI of the profile picture of the exerciser"},"extra":{"type":"object"},"identities":{"type":"array","items":{"type":"object","required":["vendor","vendor_id","last_login"],"properties":{"vendor":{"type":"string","description":"Vendor Authentication System"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID of Last Login"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"dateTime","description":"Date of Last Login with Vendor"}}}},"clubs":{"type":"array","items":{"type":"object","properties":{"vendor":{"type":"string","description":"Vendor Authentication System of Last Login"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"date","description":"Date of Last Login with Vendor"}}}},"token":{"type":"string","description":"A JWT that expires in 1 hour.  token only gets set during the /login endpoint logic"}}}},"404":{"description":"No exerciser found with id {vendor_id} for {vendor}"}}}},"/exerciser/feature":{"get":{"tags":["Exerciser"],"summary":"Get all features by the identifier used to associate them.","security":[{"api_key_auth":["api_key","role_service"]}],"parameters":[{"name":"key","in":"query","description":"Identifier to retrieve the features by.","type":"string","required":true}],"consumes":["application/json"],"responses":{"200":{"description":"Successfully associated the features to the specified identifier."},"400":{"description":"Invalid parameters."},"404":{"description":"Could not find features by the specified indentifier."}}},"post":{"tags":["Exerciser"],"summary":"Associate a feature to a user identifier.","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"key","in":"query","description":"Identifier that will be used to associate the feature to","type":"string","required":true},{"name":"body","in":"body","Description":"Exerciser Feature","required":true,"type":"object","schema":{"type":"object","required":["feature","value"],"properties":{"feature":{"type":"string","description":"The feature to either create or add to","minLength":0},"value":{"type":"string","description":"The value(s) to add to the feature. Pre encode as json before encoding the request as json.","minLength":0}}}}],"consumes":["application/json"],"responses":{"201":{"description":"Successfully associated the features to the specified identitfier."},"400":{"description":"Invalid post parameters."}}}},"/exerciser/login/personaltrainer":{"post":{"tags":["Exerciser","Login"],"summary":"Authenticate a User","security":[],"parameters":[{"name":"body","in":"body","description":"Login Request","required":true,"schema":{"type":"object","required":[],"properties":{"exerciser_id":{"type":"string","description":"Exerciser UUID to authenticate","minLength":0},"xid":{"type":"string","description":"Xid to authenticate","minLength":0},"dapi_id":{"type":"string","description":"Dapi UUID to authenticate","minLength":0},"np_id":{"type":"string","description":"Netpulse UUID to authenticate","minLength":0},"club_id":{"type":"number","description":"Club ID to authenticate against"},"machine_id":{"type":"string","description":"Unique identifier of the equipment on which the exerciser is logging in","minLength":0},"userId":{"type":"string","description":"Smart Health User ID to authenticate","minLength":0}}}}],"consumes":["application/json"],"responses":{"200":{"description":"Success Message","schema":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Auth response message"}}}},"403":{"description":"Forbidden Message","schema":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Auth response message"}}}}}}},"/exerciser/login/thirdparty":{"post":{"tags":["Exerciser","Login"],"summary":"Authenticate a User","security":[],"parameters":[{"name":"body","in":"body","description":"Login Request","required":true,"schema":{"type":"object","required":[],"properties":{"exerciser_id":{"type":"string","description":"Exerciser UUID to authenticate","minLength":0},"xid":{"type":"string","description":"Xid to authenticate","minLength":0},"dapi_id":{"type":"string","description":"Dapi UUID to authenticate","minLength":0},"np_id":{"type":"string","description":"Netpulse UUID to authenticate","minLength":0},"club_id":{"type":"number","description":"Club ID to authenticate against"},"machine_id":{"type":"string","description":"Unique identifier of the equipment on which the exerciser is logging in","minLength":0}}}}],"consumes":["application/json"],"responses":{"200":{"description":"Success Message","schema":{"type":"object","properties":{"messages":{"type":"boolean","description":"Whether or not this vendor supports messaging"}}}},"403":{"description":"Forbidden Message","schema":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Auth response message"}}}}}}},"/exerciser/login":{"post":{"tags":["Exerciser","Login"],"summary":"Authenticate a User","security":[{"jump_auth":["api_key"]}],"parameters":[{"name":"body","in":"body","description":"Login Request","required":true,"schema":{"type":"object","required":["username","password"],"properties":{"username":{"type":"string","minLength":0},"password":{"type":"string","minLength":0},"type":{"type":"string","enum":["barcode","custom","guest","jwtn","mwtn","phone_num","rfid","xid","qr_code","jwt","apollo","external-wallet"]},"club_id":{"type":"number","description":"Club ID to authenticate against"},"machine_id":{"type":"string","description":"Unique identifier of the equipment on which the exerciser is logging in","minLength":0},"issuer_id":{"type":"string","description":"The nfc issuer for wallet logins","minLength":0},"debug":{"type":"string","minLength":0}}}}],"consumes":["application/json"],"responses":{"200":{"description":"Exerciser","schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Unique Identifier of the Exerciser"},"first_name":{"type":"string","description":"First Name of the Exerciser"},"last_name":{"type":"string","description":"Last Name of the Exerciser"},"birthday":{"type":"string","format":"date","description":"Date of exercisers birth (YYYY-MM-DD)"},"age":{"type":"number","description":"Age of the Exerciser in years"},"email":{"type":"string","description":"Email address of the exerciser"},"units":{"type":"string","description":"Measurement units of the exerciser: M (Metric), or (I) Imperial","enum":["M","I"]},"gender":{"type":"string","description":"Gender specification of the exerciser: M (Male), F (Female), or X (Non-Binary)","enum":["M","F","X"]},"height":{"type":"number","description":"Height of the exerciser in centimeters (CM)"},"weight":{"type":"number","description":"Weight of the exerciser in kilograms (KG)"},"pictureUrl":{"type":"string","description":"URI of the profile picture of the exerciser"},"extra":{"type":"object"},"identities":{"type":"array","items":{"type":"object","required":["vendor","vendor_id","last_login"],"properties":{"vendor":{"type":"string","description":"Vendor Authentication System"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID of Last Login"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"dateTime","description":"Date of Last Login with Vendor"}}}},"clubs":{"type":"array","items":{"type":"object","properties":{"vendor":{"type":"string","description":"Vendor Authentication System of Last Login"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"date","description":"Date of Last Login with Vendor"}}}},"token":{"type":"string","description":"A JWT that expires in 1 hour.  token only gets set during the /login endpoint logic"}}}}}}},"/exerciser/membership":{"get":{"tags":["Exerciser"],"summary":"Retrieves membership info for a user","security":[{"api_key_auth":["api_key","role_service"]}],"parameters":[{"name":"dapi_uuid","in":"query","description":"DAPI UUID","type":"string","required":true},{"name":"club_id","in":"query","description":"Johnson Health Tech Club ID","type":"integer","required":true},{"name":"machine_uuid","in":"query","description":"Unique Machine UUID","type":"string"}],"consumes":["application/json"],"responses":{"200":{"description":"Exerciser Membership Level","schema":{"type":"object","properties":{"id":{"type":"string","description":"Unique Identifier of the Exerciser"},"first_name":{"type":"string","description":"First Name of the Exerciser"},"last_name":{"type":"string","description":"Last Name of the Exerciser"},"membership":{"type":"object","properties":{"id":{"type":"string","description":"Unique ID of the membership"},"name":{"type":"string","description":"Name (if available) of the membership level"},"upgradable":{"type":"boolean","description":"Whether or not the user can upgrade his/her memebership level"},"upgradable_message":{"type":"string","description":"if the membership can not be upgraged, a message why it might not be possible"},"upgrades":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Unique ID of the Upgrade Available"},"name":{"type":"string","description":"Name (if available) of the upgrade membership level"},"url":{"type":"string","description":"The URL of the upgrade request"},"method":{"type":"string","description":"The HTTP Method of the call to the upgrade URL (POST, GET)","enum":["POST","GET"]}}}}}}}}}}}},"/exerciser/register":{"post":{"tags":["Exerciser"],"summary":"Registers a third-party user","security":[{"api_key_auth":["api_key","role_service"]}],"parameters":[{"name":"body","in":"body","description":"User Registration Information","required":true,"schema":{"type":"object","properties":{"email":{"type":"string","minLength":0},"xid":{"type":"string","description":"The user's xid.","minLength":0},"barcode":{"type":"string","description":"The user's barcode.","minLength":0},"passcode":{"type":"string","minLength":0},"gender":{"type":"string","minLength":0},"weight":{"type":"number"},"age":{"type":"number"},"birthday":{"type":"string","minLength":0},"language_id":{"type":"number"},"units_preference":{"type":"number"},"first_name":{"type":"string","minLength":0},"last_name":{"type":"string","minLength":0},"accepted_terms":{"type":"boolean"},"share_workout_data":{"type":"boolean"},"machine_id":{"type":"string","minLength":0},"club_id":{"type":"number"},"brand_id":{"type":"number"}}}}],"consumes":["application/json"],"responses":{"200":{"description":"Registered User","schema":{"type":"object","properties":{"authType":{"type":"string","description":"Type of login done"},"id":{"type":"number","description":"The Vendor's User Id"}}}},"404":{"description":"Failed to register the user"}}}},"/exerciser/reset_password":{"post":{"tags":["Exerciser"],"summary":"Trigger a password/passcode reset","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"body","in":"body","description":"identification parameters","required":true,"schema":{"type":"object","properties":{"xid":{"type":"string","minLength":0}}}}],"responses":{"200":{"description":"Successfully submitted reset."},"400":{"description":"Request contains invalid parameters."},"404":{"description":"Record(s) can't be found by submitted identification."}}}},"/exerciser/validate":{"post":{"tags":["Exerciser"],"summary":"Validate a User","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"body","in":"body","description":"Validate Request","required":true,"schema":{"type":"object","required":["memberId"],"properties":{"memberId":{"type":"string","minLength":0},"clubId":{"type":"number"}}}}],"consumes":["application/json"],"responses":{"200":{"description":"Exerciser","schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Unique Identifier of the Exerciser"},"first_name":{"type":"string","description":"First Name of the Exerciser"},"last_name":{"type":"string","description":"Last Name of the Exerciser"},"birthday":{"type":"string","format":"date","description":"Date of exercisers birth (YYYY-MM-DD)"},"age":{"type":"number","description":"Age of the Exerciser in years"},"email":{"type":"string","description":"Email address of the exerciser"},"units":{"type":"string","description":"Measurement units of the exerciser: M (Metric), or (I) Imperial","enum":["M","I"]},"gender":{"type":"string","description":"Gender specification of the exerciser: M (Male), F (Female), or X (Non-Binary)","enum":["M","F","X"]},"height":{"type":"number","description":"Height of the exerciser in centimeters (CM)"},"weight":{"type":"number","description":"Weight of the exerciser in kilograms (KG)"},"pictureUrl":{"type":"string","description":"URI of the profile picture of the exerciser"},"extra":{"type":"object"},"identities":{"type":"array","items":{"type":"object","required":["vendor","vendor_id","last_login"],"properties":{"vendor":{"type":"string","description":"Vendor Authentication System"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID of Last Login"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"dateTime","description":"Date of Last Login with Vendor"}}}},"clubs":{"type":"array","items":{"type":"object","properties":{"vendor":{"type":"string","description":"Vendor Authentication System of Last Login"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"date","description":"Date of Last Login with Vendor"}}}},"token":{"type":"string","description":"A JWT that expires in 1 hour.  token only gets set during the /login endpoint logic"}}}},"400":{"description":"Incomplete {vendor_name} user data for user {memberId} at club {clubId}"},"404":{"description":"<ul><li>Unable to validate user {memberId} at club {clubId}</li><li>Club {clubId} not found</li></ul>"},"408":{"description":"Request timed out to {vendor_name} when validating user {memberId} at club {clubId}"}}}},"/exerciser/workouts":{"get":{"tags":["Exerciser","Workouts"],"summary":"Get all workouts for an exerciser","security":[{"jump_auth":[]}],"parameters":[{"name":"Authorization","in":"header","description":"The JUMP access token.","type":"string","required":true},{"name":"startdate","in":"query","description":"Unix Timestamp (seconds).  Only get workouts at or after this date.  Will only apply if a valid enddate is specified and is at or after this","type":"string","required":false},{"name":"enddate","in":"query","description":"Unix Timestamp (seconds).  Only get workouts at or before this date.  Will only apply if a valid startdate is specified and is at or before this","type":"string","required":false},{"name":"hideArchived","in":"query","description":"Set 'true' to not return archived workouts in the response","enum":["true","false"],"type":"string","required":false},{"name":"group","in":"query","description":"Grouping to query by","type":"string","required":false,"enum":["weekly","monthly","yearly"]},{"name":"limit","in":"query","description":"Number of results returned","type":"integer","required":false},{"name":"page_number","in":"query","description":"Page number","type":"integer","required":false}],"consumes":["application/json"],"responses":{"200":{"description":"Array of workouts","schema":{"type":"object","properties":{"messages":{"type":"array","items":{"type":"string"},"description":"A list of messages describing important events that occured while retrieving the exerciser's workouts"},"workouts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Workout ID"},"workout_source":{"type":"string","enum":["connected","third-party","manual"]},"exercise_title":{"type":"string","description":"The title of the workout.  For connected workout sources, 'unknown' will be returned if the exercise title fails to resolve."},"workout_time":{"type":"string","format":"date-time","description":"ISO Date/Time start of the workout (format YYYY-MM-DD'T'HH:mm:ss.SSS'Z')"},"workout_type":{"type":"string","string":"Type of workout"},"machine_id":{"type":"string","description":"DAPI Machine ID"},"machine_type":{"type":"string","description":"Workout machine type.  For connected workout sources, 'unknown' will be returned if the exercise title fails to resolve."},"program_type":{"type":"integer","description":"The program id of the workout"},"duration":{"type":"integer","description":"Workout duration in seconds"},"distance":{"type":"number","description":"Workout distance in meters"},"calories":{"type":"integer","description":"Workout energy expenditure in calories"},"average_heart_rate":{"type":"integer","description":"Average heart rate of the exerciser in beats per minute"},"max_heart_rate":{"type":"integer","description":"Maximum heart rate of the exerciser in beats per minute"},"archived":{"type":"integer","description":"0 - Not archived, 1 - Archived"},"intervals":{"type":"array","items":{"type":"object","required":["duration","distance","speed","incline","resistance"],"properties":{"duration":{"type":"integer","description":"The duration of the interval in seconds."},"average_distance":{"type":"number","description":"The average distance of the interval in meters."},"distance":{"type":"number","description":"The distance of the interval in meters."},"speed":{"type":"number","description":"The speed of the interval in kph."},"cadence":{"type":"integer","description":"The cadence of the interval.  For rowers, this is strokes per minute (SPM)."},"incline":{"type":"number","description":"The incline of the interval."},"resistance":{"type":"integer","description":"The resistance of the interval."},"heart_rate":{"type":"integer","description":"The heart rate of the interval."},"total_steps":{"type":"integer","description":"The total steps of the interval."},"power":{"type":"integer","description":"Average power for the interval"},"rpm":{"type":"integer","description":"Average RPM for the interval"}}}},"sets":{"type":"array","items":{"type":"object","required":["weight","calories","reps","average_heart_rate"],"properties":{"weight":{"type":"integer","description":"The weight of the set in grams"},"set_weight":{"type":"object","description":"The weight of the set.  Contains weights in both ounces and grams.","required":["ounces","grams"],"properties":{"ounces":{"type":"integer","description":"The weight of the set in ounces"},"grams":{"type":"integer","description":"The weight of the set in grams"}}},"calories":{"type":"integer","description":"Total calories burned during the set"},"average_heart_rate":{"type":"number","description":"Average heart rate during the set"},"reps":{"type":"array","items":{"type":"object","required":["start","stop","distance","average_heart_rate","elift_rep_score"],"properties":{"start":{"type":"integer","description":"Start of the rep"},"stop":{"type":"integer","description":"End of the rep"},"distance":{"type":"number","description":"Distance traveled during the rep"},"average_heart_rate":{"type":"number","description":"Average heart rate during the rep"},"elift_rep_score":{"type":"integer","description":"The elift rep score of the rep"}}}}}}}}}},"paging":{"type":"object","properties":{"returned":{"type":"number","description":"The number of workouts returned in this request"},"total":{"type":"number","description":"The total number of workouts"},"page":{"type":"number","description":"The current page of results"}}}}}}}}},"/exerciser/{exerciser_id}/jump":{"post":{"tags":["Exerciser"],"summary":"Saves JUMP ID to exerciser","security":[{"jump_auth":["eapi:exerciser:jump:create"]}],"parameters":[{"name":"exerciser_id","in":"path","description":"Exerciser ID","type":"string","required":true}],"responses":{"200":{"description":"Exerciser","schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Unique Identifier of the Exerciser"},"first_name":{"type":"string","description":"First Name of the Exerciser"},"last_name":{"type":"string","description":"Last Name of the Exerciser"},"birthday":{"type":"string","format":"date","description":"Date of exercisers birth (YYYY-MM-DD)"},"age":{"type":"number","description":"Age of the Exerciser in years"},"email":{"type":"string","description":"Email address of the exerciser"},"units":{"type":"string","description":"Measurement units of the exerciser: M (Metric), or (I) Imperial","enum":["M","I"]},"gender":{"type":"string","description":"Gender specification of the exerciser: M (Male), F (Female), or X (Non-Binary)","enum":["M","F","X"]},"height":{"type":"number","description":"Height of the exerciser in centimeters (CM)"},"weight":{"type":"number","description":"Weight of the exerciser in kilograms (KG)"},"pictureUrl":{"type":"string","description":"URI of the profile picture of the exerciser"},"extra":{"type":"object"},"identities":{"type":"array","items":{"type":"object","required":["vendor","vendor_id","last_login"],"properties":{"vendor":{"type":"string","description":"Vendor Authentication System"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID of Last Login"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"dateTime","description":"Date of Last Login with Vendor"}}}},"clubs":{"type":"array","items":{"type":"object","properties":{"vendor":{"type":"string","description":"Vendor Authentication System of Last Login"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"date","description":"Date of Last Login with Vendor"}}}},"token":{"type":"string","description":"A JWT that expires in 1 hour.  token only gets set during the /login endpoint logic"}}}},"400":{"description":"Duplicate ID found."},"default":{"description":"Unexpected Error"}}}},"/exerciser/{exerciser_id}/ml_assignments":{"get":{"tags":["MachineLearning"],"summary":"poll for machine learning assignments","security":[{"jump_auth":[]}],"parameters":[{"name":"exerciser_id","in":"path","description":"User ID, either exerciser id or JUMP id","type":"string","required":true},{"name":"facilityId","description":"The AM4 club id that the user is at","in":"query","type":"integer","required":true},{"name":"startDate","description":"filter by start date (timestamp, sec)","in":"query","type":"integer","required":true},{"name":"endDate","description":"filter by end date (timestamp, sec)","in":"query","type":"integer","required":false}],"responses":{"200":{"description":"Completed","schema":{"type":"array","items":{"type":"object","required":["_id","assignmentType","startDate","exercises","facility"],"properties":{"_id":{"type":"string"},"assignmentType":{"type":"string"},"exerciserId":{"type":"string"},"startDate":{"type":"integer"},"endDate":{"type":"integer"},"name":{"type":"string"},"scheduleType":{"type":"string"},"exercises":{"type":"array","items":{"type":"object","required":["assignedProfile","title","preset"],"properties":{"_id":{"type":"string"},"video":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"equipmentType":{"type":"string"},"cardioProgramId":{"type":"integer"},"assignedProfile":{"type":"object","required":["global"],"properties":{"global":{"type":"object"},"segments":{"type":"array","items":{"type":"object"}}}},"completedProfile":{"type":"object"},"completedDate":{"type":"integer"},"feedback":{"type":"string"},"emoji":{"type":"string"},"exerciserDescription":{"type":"string"},"preset":{"type":"object","required":["metrics"],"properties":{"maxSegments":{"type":"integer"},"metrics":{"type":"array","items":{"type":"object"}}}},"images":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"isPrimary":{"type":"boolean"},"picturePath":{"type":"string"},"transform":{"type":"string"}}}},"assignmentType":{"type":"string"}}}},"facility":{"type":"object","properties":{"name":{"type":"string"},"_id":{"type":"string"}}},"parentAssignmentId":{"type":"string"},"trainerId":{"type":"string"},"recurrence":{"type":"object"},"trainingPlan":{"type":"object","properties":{"trainingPlanId":{"type":"string"},"trainingPlanName":{"type":"string"},"trainingPlanAssignmentId":{"type":"string"},"repetition":{"type":"number"},"repeats":{"type":"number"},"trainingPlanAssignmentIdx":{"type":"number"}}}}}}},"204":{"description":"Workouts are still generating","schema":{"type":"array","items":{"type":"object","required":["_id","assignmentType","startDate","exercises","facility"],"properties":{"_id":{"type":"string"},"assignmentType":{"type":"string"},"exerciserId":{"type":"string"},"startDate":{"type":"integer"},"endDate":{"type":"integer"},"name":{"type":"string"},"scheduleType":{"type":"string"},"exercises":{"type":"array","items":{"type":"object","required":["assignedProfile","title","preset"],"properties":{"_id":{"type":"string"},"video":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"equipmentType":{"type":"string"},"cardioProgramId":{"type":"integer"},"assignedProfile":{"type":"object","required":["global"],"properties":{"global":{"type":"object"},"segments":{"type":"array","items":{"type":"object"}}}},"completedProfile":{"type":"object"},"completedDate":{"type":"integer"},"feedback":{"type":"string"},"emoji":{"type":"string"},"exerciserDescription":{"type":"string"},"preset":{"type":"object","required":["metrics"],"properties":{"maxSegments":{"type":"integer"},"metrics":{"type":"array","items":{"type":"object"}}}},"images":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"isPrimary":{"type":"boolean"},"picturePath":{"type":"string"},"transform":{"type":"string"}}}},"assignmentType":{"type":"string"}}}},"facility":{"type":"object","properties":{"name":{"type":"string"},"_id":{"type":"string"}}},"parentAssignmentId":{"type":"string"},"trainerId":{"type":"string"},"recurrence":{"type":"object"},"trainingPlan":{"type":"object","properties":{"trainingPlanId":{"type":"string"},"trainingPlanName":{"type":"string"},"trainingPlanAssignmentId":{"type":"string"},"repetition":{"type":"number"},"repeats":{"type":"number"},"trainingPlanAssignmentIdx":{"type":"number"}}}}}}},"400":{"description":"An error occurred","schema":{"type":"object","properties":{"message":{"type":"string"}}}},"500":{"description":"An Unexpected Error Occurred","schema":{"type":"object","properties":{"message":{"type":"string"}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/exerciser/{exerciser_id}/notify_pt":{"post":{"tags":["Exerciser","Workout"],"summary":"Notify pt of exerciser","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"exerciser_id","in":"path","description":"Exerciser ID","type":"string","required":true}],"consumes":["application/json"],"responses":{"200":{"description":"Notified pt"}}}},"/exerciser/{exerciser_id}/workout/archive":{"put":{"tags":["Exerciser","Workout"],"summary":"Archive or unarchive a workout","security":[{"api_key_auth":["api_key","jwt","role_jwt-required","role_service"]}],"parameters":[{"name":"Authorization","in":"header","description":"The jwt ('Bearer' prefix is optional)","type":"string","required":true},{"name":"exerciser_id","in":"path","description":"Exerciser ID","type":"string","required":true},{"name":"body","in":"body","description":"Archive","required":true,"schema":{"type":"object","required":["archive","workoutId"],"properties":{"archive":{"type":"boolean","description":"Workout's archived state"},"workoutId":{"type":"string","description":"The workout's ID","minLength":0}}}}],"consumes":["application/json"],"responses":{"200":{"description":"Workout set to (archived | not archived)"}}}},"/exerciser/{exerciser_id}/workout/{workout_id}":{"get":{"tags":["Workout"],"summary":"Get a single workout object","security":[{"api_key_auth":["api_key","role_service"]}],"parameters":[{"name":"exerciser_id","in":"path","description":"Exerciser ID","required":true,"type":"string"},{"name":"workout_id","in":"path","description":"Workout ID","required":true,"type":"string"}],"consumes":["application/json"],"responses":{"200":{"description":"Workout","schema":{"type":"object","properties":{"id":{"type":"string","description":"Workout ID"},"workout_source":{"type":"string","enum":["connected","third-party","manual"]},"exercise_title":{"type":"string","description":"The title of the workout.  For connected workout sources, 'unknown' will be returned if the exercise title fails to resolve."},"workout_time":{"type":"string","format":"date-time","description":"ISO Date/Time start of the workout (format YYYY-MM-DD'T'HH:mm:ss.SSS'Z')"},"workout_type":{"type":"string","string":"Type of workout"},"machine_id":{"type":"string","description":"DAPI Machine ID"},"machine_type":{"type":"string","description":"Workout machine type.  For connected workout sources, 'unknown' will be returned if the exercise title fails to resolve."},"program_type":{"type":"integer","description":"The program id of the workout"},"duration":{"type":"integer","description":"Workout duration in seconds"},"distance":{"type":"number","description":"Workout distance in meters"},"calories":{"type":"integer","description":"Workout energy expenditure in calories"},"average_heart_rate":{"type":"integer","description":"Average heart rate of the exerciser in beats per minute"},"max_heart_rate":{"type":"integer","description":"Maximum heart rate of the exerciser in beats per minute"},"archived":{"type":"integer","description":"0 - Not archived, 1 - Archived"},"intervals":{"type":"array","items":{"type":"object","required":["duration","distance","speed","incline","resistance"],"properties":{"duration":{"type":"integer","description":"The duration of the interval in seconds."},"average_distance":{"type":"number","description":"The average distance of the interval in meters."},"distance":{"type":"number","description":"The distance of the interval in meters."},"speed":{"type":"number","description":"The speed of the interval in kph."},"cadence":{"type":"integer","description":"The cadence of the interval.  For rowers, this is strokes per minute (SPM)."},"incline":{"type":"number","description":"The incline of the interval."},"resistance":{"type":"integer","description":"The resistance of the interval."},"heart_rate":{"type":"integer","description":"The heart rate of the interval."},"total_steps":{"type":"integer","description":"The total steps of the interval."},"power":{"type":"integer","description":"Average power for the interval"},"rpm":{"type":"integer","description":"Average RPM for the interval"}}}},"sets":{"type":"array","items":{"type":"object","required":["weight","calories","reps","average_heart_rate"],"properties":{"weight":{"type":"integer","description":"The weight of the set in grams"},"set_weight":{"type":"object","description":"The weight of the set.  Contains weights in both ounces and grams.","required":["ounces","grams"],"properties":{"ounces":{"type":"integer","description":"The weight of the set in ounces"},"grams":{"type":"integer","description":"The weight of the set in grams"}}},"calories":{"type":"integer","description":"Total calories burned during the set"},"average_heart_rate":{"type":"number","description":"Average heart rate during the set"},"reps":{"type":"array","items":{"type":"object","required":["start","stop","distance","average_heart_rate","elift_rep_score"],"properties":{"start":{"type":"integer","description":"Start of the rep"},"stop":{"type":"integer","description":"End of the rep"},"distance":{"type":"number","description":"Distance traveled during the rep"},"average_heart_rate":{"type":"number","description":"Average heart rate during the rep"},"elift_rep_score":{"type":"integer","description":"The elift rep score of the rep"}}}}}}}}}}}}},"/exerciser/{exerciser_id}/workouts":{"get":{"tags":["Exerciser","Workouts"],"summary":"Get all workouts for an exerciser","security":[{"jump_auth":["api_key","jwt","role_jwt-required","role_service"]}],"parameters":[{"name":"Authorization","in":"header","description":"The jwt ('Bearer' prefix is optional).  Required for JWTN vendor access.","type":"string"},{"name":"exerciser_id","in":"path","description":"Exerciser ID","type":"string","required":true},{"name":"startdate","in":"query","description":"Unix Timestamp (seconds).  Only get workouts at or after this date.  Will only apply if a valid enddate is specified and is at or after this","type":"string","required":false},{"name":"enddate","in":"query","description":"Unix Timestamp (seconds).  Only get workouts at or before this date.  Will only apply if a valid startdate is specified and is at or before this","type":"string","required":false},{"name":"hideArchived","in":"query","description":"Set 'true' to not return archived workouts in the response","enum":["true","false"],"type":"string","required":false},{"name":"group","in":"query","description":"Grouping to query by","type":"string","required":false,"enum":["weekly","monthly","yearly"]},{"name":"limit","in":"query","description":"Number of results returned","type":"integer","required":false},{"name":"page_number","in":"query","description":"Page number","type":"integer","required":false}],"consumes":["application/json"],"responses":{"200":{"description":"Array of workouts","schema":{"type":"object","properties":{"messages":{"type":"array","items":{"type":"string"},"description":"A list of messages describing important events that occured while retrieving the exerciser's workouts"},"workouts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Workout ID"},"workout_source":{"type":"string","enum":["connected","third-party","manual"]},"exercise_title":{"type":"string","description":"The title of the workout.  For connected workout sources, 'unknown' will be returned if the exercise title fails to resolve."},"workout_time":{"type":"string","format":"date-time","description":"ISO Date/Time start of the workout (format YYYY-MM-DD'T'HH:mm:ss.SSS'Z')"},"workout_type":{"type":"string","string":"Type of workout"},"machine_id":{"type":"string","description":"DAPI Machine ID"},"machine_type":{"type":"string","description":"Workout machine type.  For connected workout sources, 'unknown' will be returned if the exercise title fails to resolve."},"program_type":{"type":"integer","description":"The program id of the workout"},"duration":{"type":"integer","description":"Workout duration in seconds"},"distance":{"type":"number","description":"Workout distance in meters"},"calories":{"type":"integer","description":"Workout energy expenditure in calories"},"average_heart_rate":{"type":"integer","description":"Average heart rate of the exerciser in beats per minute"},"max_heart_rate":{"type":"integer","description":"Maximum heart rate of the exerciser in beats per minute"},"archived":{"type":"integer","description":"0 - Not archived, 1 - Archived"},"intervals":{"type":"array","items":{"type":"object","required":["duration","distance","speed","incline","resistance"],"properties":{"duration":{"type":"integer","description":"The duration of the interval in seconds."},"average_distance":{"type":"number","description":"The average distance of the interval in meters."},"distance":{"type":"number","description":"The distance of the interval in meters."},"speed":{"type":"number","description":"The speed of the interval in kph."},"cadence":{"type":"integer","description":"The cadence of the interval.  For rowers, this is strokes per minute (SPM)."},"incline":{"type":"number","description":"The incline of the interval."},"resistance":{"type":"integer","description":"The resistance of the interval."},"heart_rate":{"type":"integer","description":"The heart rate of the interval."},"total_steps":{"type":"integer","description":"The total steps of the interval."},"power":{"type":"integer","description":"Average power for the interval"},"rpm":{"type":"integer","description":"Average RPM for the interval"}}}},"sets":{"type":"array","items":{"type":"object","required":["weight","calories","reps","average_heart_rate"],"properties":{"weight":{"type":"integer","description":"The weight of the set in grams"},"set_weight":{"type":"object","description":"The weight of the set.  Contains weights in both ounces and grams.","required":["ounces","grams"],"properties":{"ounces":{"type":"integer","description":"The weight of the set in ounces"},"grams":{"type":"integer","description":"The weight of the set in grams"}}},"calories":{"type":"integer","description":"Total calories burned during the set"},"average_heart_rate":{"type":"number","description":"Average heart rate during the set"},"reps":{"type":"array","items":{"type":"object","required":["start","stop","distance","average_heart_rate","elift_rep_score"],"properties":{"start":{"type":"integer","description":"Start of the rep"},"stop":{"type":"integer","description":"End of the rep"},"distance":{"type":"number","description":"Distance traveled during the rep"},"average_heart_rate":{"type":"number","description":"Average heart rate during the rep"},"elift_rep_score":{"type":"integer","description":"The elift rep score of the rep"}}}}}}}}}},"paging":{"type":"object","properties":{"returned":{"type":"number","description":"The number of workouts returned in this request"},"total":{"type":"number","description":"The total number of workouts"},"page":{"type":"number","description":"The current page of results"}}}}}}}}},"/exerciser/{exerciser_id}":{"get":{"tags":["Exerciser"],"summary":"Get exerciser by id","security":[{"jump_auth":["api_key","role_service","eapi:exerciser:read"]}],"parameters":[{"name":"exerciser_id","in":"path","description":"Exerciser ID","type":"string","required":true}],"responses":{"200":{"description":"Successfully pulled exerciser","schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Unique Identifier of the Exerciser"},"first_name":{"type":"string","description":"First Name of the Exerciser"},"last_name":{"type":"string","description":"Last Name of the Exerciser"},"birthday":{"type":"string","format":"date","description":"Date of exercisers birth (YYYY-MM-DD)"},"age":{"type":"number","description":"Age of the Exerciser in years"},"email":{"type":"string","description":"Email address of the exerciser"},"units":{"type":"string","description":"Measurement units of the exerciser: M (Metric), or (I) Imperial","enum":["M","I"]},"gender":{"type":"string","description":"Gender specification of the exerciser: M (Male), F (Female), or X (Non-Binary)","enum":["M","F","X"]},"height":{"type":"number","description":"Height of the exerciser in centimeters (CM)"},"weight":{"type":"number","description":"Weight of the exerciser in kilograms (KG)"},"pictureUrl":{"type":"string","description":"URI of the profile picture of the exerciser"},"extra":{"type":"object"},"identities":{"type":"array","items":{"type":"object","required":["vendor","vendor_id","last_login"],"properties":{"vendor":{"type":"string","description":"Vendor Authentication System"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID of Last Login"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"dateTime","description":"Date of Last Login with Vendor"}}}},"clubs":{"type":"array","items":{"type":"object","properties":{"vendor":{"type":"string","description":"Vendor Authentication System of Last Login"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"date","description":"Date of Last Login with Vendor"}}}},"token":{"type":"string","description":"A JWT that expires in 1 hour.  token only gets set during the /login endpoint logic"}}}},"404":{"description":"No exerciser for provided ID"},"default":{"description":"Unexpected Error"}}},"put":{"tags":["Exerciser"],"summary":"Update exerciser on backend services","security":[{"api_key_auth":["api_key","role_service"]}],"parameters":[{"name":"exerciser_id","in":"path","description":"Exerciser ID","type":"string","required":true},{"name":"body","in":"body","description":"Exerciser","required":true,"schema":{"type":"object","properties":{"first_name":{"type":"string","minLength":0},"last_name":{"type":"string","minLength":0},"email":{"type":"string","minLength":0},"birthday":{"type":"string","minLength":0},"age":{"type":"number"},"units":{"type":"string","enum":["M","I"]},"height":{"type":"number"},"weight":{"type":"number"},"gender":{"type":"string","minLength":0},"pictureUrl":{"type":"string","minLength":0}}}}],"responses":{"204":{"description":"Completed"},"408":{"description":"Request timed out to {vendor_name} when validating user {memberId} at club {clubId}"},"default":{"description":"Unexpected Error"}}}},"/exerciser":{"get":{"tags":["Exerciser"],"summary":"Retrieve an Exerciser Record By Jump token. (Deprecated - By Vendor and Vendor ID)","security":[{"jump_auth":["api_key","role_service"]}],"parameters":[{"name":"vendor","in":"query","description":"Vendor name","required":false,"type":"string"},{"name":"vendor_id","in":"query","description":"The user's id for that vendor i.e. netpulse id","required":false,"type":"string"},{"name":"user_id","in":"query","description":"The user's id","required":false,"type":"string"},{"name":"Authorization","in":"header","description":"The JUMP access token.","type":"string","required":false}],"consumes":["application/json"],"responses":{"200":{"description":"Exerciser","schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Unique Identifier of the Exerciser"},"first_name":{"type":"string","description":"First Name of the Exerciser"},"last_name":{"type":"string","description":"Last Name of the Exerciser"},"birthday":{"type":"string","format":"date","description":"Date of exercisers birth (YYYY-MM-DD)"},"age":{"type":"number","description":"Age of the Exerciser in years"},"email":{"type":"string","description":"Email address of the exerciser"},"units":{"type":"string","description":"Measurement units of the exerciser: M (Metric), or (I) Imperial","enum":["M","I"]},"gender":{"type":"string","description":"Gender specification of the exerciser: M (Male), F (Female), or X (Non-Binary)","enum":["M","F","X"]},"height":{"type":"number","description":"Height of the exerciser in centimeters (CM)"},"weight":{"type":"number","description":"Weight of the exerciser in kilograms (KG)"},"pictureUrl":{"type":"string","description":"URI of the profile picture of the exerciser"},"extra":{"type":"object"},"identities":{"type":"array","items":{"type":"object","required":["vendor","vendor_id","last_login"],"properties":{"vendor":{"type":"string","description":"Vendor Authentication System"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID of Last Login"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"dateTime","description":"Date of Last Login with Vendor"}}}},"clubs":{"type":"array","items":{"type":"object","properties":{"vendor":{"type":"string","description":"Vendor Authentication System of Last Login"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"date","description":"Date of Last Login with Vendor"}}}},"token":{"type":"string","description":"A JWT that expires in 1 hour.  token only gets set during the /login endpoint logic"}}}},"404":{"description":"No exerciser found with id {vendor_id} for {vendor}"}}}},"/exercises/{id}/associate":{"post":{"tags":["PersonalTrainer"],"summary":"associate exercise with netpulse workout","security":[{"session_auth":[]}],"parameters":[{"name":"id","in":"path","description":"id of exercise","type":"string","required":true},{"in":"body","name":"body","required":true,"schema":{"type":"object","properties":{"workoutId":{"type":"string","minLength":0},"workout":{"type":"object","required":["category","completedDate","completedProfile"],"properties":{"completedDate":{"type":"integer"},"category":{"type":"string","minLength":0},"completeState":{"type":"string","required":false,"enum":["not_complete","completed_manually","completed_automatically","skipped","cancelled"]},"benchmark":{"type":"number"},"completedProfile":{"type":"object","properties":{"duration":{"type":"number"},"distance":{"type":"number"},"calories":{"type":"integer"},"speed":{"type":"number","required":false},"avgSpeed":{"type":"number"},"avgIncline":{"type":"number"},"incline":{"type":"number","required":false},"avgResistance":{"type":"number"},"workoutSource":{"type":"string","minLength":0},"exerciserWorkoutId":{"type":"string","minLength":0},"ssaComplete":{"type":"boolean"},"segments":{"type":"array","items":{"type":"object"}},"maxSpeed":{"type":"number","required":false},"maxIncline":{"type":"number","required":false},"maxResistance":{"type":"number","required":false},"minResistance":{"type":"number","required":false},"resistance":{"type":"number","required":false},"floors":{"type":"number","required":false},"cardioProgramLevel":{"type":"number"},"sweatScore":{"type":"number"},"percentTHR":{"type":"number"},"watts":{"type":"number","required":false},"avgHeartRate":{"type":"number","required":false},"peakHeartRate":{"type":"number","required":false}}}}}}}}],"responses":{"200":{"description":"Completed","schema":{"type":"object","required":["assignedProfile","title","preset"],"properties":{"_id":{"type":"string"},"video":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"equipmentType":{"type":"string"},"cardioProgramId":{"type":"integer"},"assignedProfile":{"type":"object","required":["global"],"properties":{"global":{"type":"object"},"segments":{"type":"array","items":{"type":"object"}}}},"completedProfile":{"type":"object"},"completedDate":{"type":"integer"},"feedback":{"type":"string"},"emoji":{"type":"string"},"exerciserDescription":{"type":"string"},"preset":{"type":"object","required":["metrics"],"properties":{"maxSegments":{"type":"integer"},"metrics":{"type":"array","items":{"type":"object"}}}},"images":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"isPrimary":{"type":"boolean"},"picturePath":{"type":"string"},"transform":{"type":"string"}}}},"assignmentType":{"type":"string"}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}},"delete":{"tags":["PersonalTrainer"],"summary":"disassociate exercise from netpulse workout","security":[{"session_auth":[]}],"parameters":[{"name":"id","description":"id of exercise","in":"path","required":true,"type":"string"}],"responses":{"204":{"description":"Completed"},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/exercises/{id}/workouts":{"get":{"tags":["PersonalTrainer"],"summary":"Get corresponding workouts of exercise","security":[{"session_auth":[]}],"parameters":[{"name":"id","in":"path","description":"id of exercise","type":"string","required":true}],"responses":{"200":{"description":"Completed","schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"title":{"type":"string"},"exerciserId":{"type":"string"},"completedDate":{"type":"integer"},"category":{"type":"string"},"equipmentType":{"type":"string"},"completedProfile":{"type":"object"}}}}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/exercises/{id}":{"get":{"tags":["PersonalTrainer"],"summary":"Get exercises by id from a backend training service","security":[{"session_auth":[]}],"parameters":[{"name":"id","in":"path","description":"Exercises ID","type":"string","required":true}],"responses":{"200":{"description":"Successfully pulled exercises"},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}},"put":{"tags":["PersonalTrainer"],"summary":"update exercise","security":[{"session_auth":[]}],"parameters":[{"name":"id","in":"path","description":"id of exercise","type":"string","required":true},{"in":"body","name":"body","required":true,"schema":{"type":"object","properties":{"feedback":{"type":"string","minLength":0},"emoji":{"type":"string","minLength":0},"exerciserDescription":{"type":"string","minLength":0},"video":{"type":"string","minLength":0},"runDate":{"type":"integer"}}}}],"responses":{"200":{"description":"Completed"},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/facility_assignments":{"get":{"tags":["PersonalTrainer"],"summary":"read facility assignments for logged in user's current facility or specified club (auth not required)","security":[{"session_auth":[]}],"parameters":[{"name":"Authorization","in":"header","description":"Authorization header","type":"string","required":false},{"name":"startDate","in":"query","description":"filter by start date (timestamp, sec), used with startDate","required":false,"type":"integer"},{"name":"endDate","in":"query","description":"filter by end date (timestamp, sec), used with endDate","required":false,"type":"integer"},{"name":"clubUuid","in":"query","description":"filter by clubUuid","required":false,"type":"string"}],"responses":{"200":{"description":"Successfully pulled facility assignments"}}}},"/home_club":{"get":{"tags":["Exerciser"],"summary":"Get home club for a given brand","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"brand","description":"The vendor brand","in":"query","type":"string"}],"responses":{"200":{"description":"Completed","schema":{"type":"array","items":{}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/jump/exerciser":{"get":{"tags":["Exerciser"],"summary":"Gets JUMP ID and exerciser id for a JUMP token","security":[{"jump_auth":[]}],"parameters":[{"name":"Authorization","in":"header","description":"The JUMP access token.","type":"string","required":true}],"responses":{"200":{"description":"Information about the exerciser associated to the JUMP token","schema":{"type":"object","properties":{"exerciser_id":{"type":"string","description":"The exerciser id associated with the JUMP token"},"jump_id":{"type":"string","description":"This will match the 'sub' in the JUMP token. This is 1:1 with exerciser id since JUMP has non-prod/prod envs"}}}},"default":{"description":"Unexpected Error"}}}},"/launch_app":{"get":{"tags":["Utilities"],"summary":"Retrieves the launch app information","security":[{"api_key_auth":["api_key","role_service"]}],"parameters":[{"name":"club_id","in":"query","description":"Club ID","type":"integer","required":true},{"name":"user_id","in":"query","description":"User ID","type":"string"}],"consumes":["application/json"],"responses":{"200":{"description":"Object with the Launch App information","schema":{"type":"object","properties":{"app_id":{"type":"integer","description":"Launch app's App ID"},"url":{"type":"string","description":"Launch app's URL"}}}},"404":{"description":"<ul><li>No launch app found for club {club_id}</li><li>No access token found for user {exerciser_id} at club {club_id}</li></ul>"}}}},"/machine_learning/generation_data":{"get":{"tags":["Machine Learning"],"summary":"Get machine learning generation data","security":[{"jump_auth":["eapi:machine_learning:generation_data:read"]}],"parameters":[{"name":"user_id","in":"query","description":"user id to gather info for","type":"string","required":true},{"name":"machine_learning_vendor","in":"query","description":"machine learning provider name. Example: seca","type":"string","required":true}],"responses":{"204":{"description":"generation data retrieved"},"400":{"description":"Bad Request - Missing parameters or vendor/club or user id not found"},"500":{"description":"Internal Server Error"}}}},"/machine_learning/schedule_generation":{"post":{"tags":["Machine Learning"],"summary":"Schedule a plan generation","security":[{"jump_auth":["eapi:machine_learning:schedule_generation:write"]}],"parameters":[{"name":"body","in":"body","description":"Survey Request","required":true,"schema":{"type":"object","required":["user_id","machine_learning_vendor"],"properties":{"user_id":{"type":"string","description":"user id to gather info for","minLength":0},"machine_learning_vendor":{"type":"string","description":"machine learning provider name. Example: seca","minLength":0}}}}],"responses":{"201":{"description":"Generation scheduled"},"400":{"description":"Bad Request - Missing parameters or vendor/club or user id not found"},"500":{"description":"Internal Server Error"}}}},"/matrix_method/disclaimer":{"put":{"tags":["Matrix Method"],"summary":"Accept or decline the disclaimer","security":[{"jump_auth":[]}],"consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","required":true,"schema":{"type":"object","required":["disclaimer_accepted"],"properties":{"disclaimer_accepted":{"type":"boolean"}}}}],"responses":{"201":{"description":"disclaimer status updated"},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/matrix_method/program":{"get":{"tags":["Matrix Method"],"summary":"Get Matrix Method program for the authenticated user","security":[{"jump_auth":[]}],"produces":["application/json"],"responses":{"200":{"description":"Matrix Method program for user","schema":{"type":"object","required":["id","programId"],"properties":{"id":{"type":"string","description":"Program ID"},"userId":{"type":"string","description":"Exerciser ID (from auth)"},"programId":{"type":"number","description":"Program enum ID"},"assessmentBaselineKph":{"type":"number"},"backupGoalBaseline":{"type":"number"},"baselineKph":{"type":"number"},"goalBaselineKph":{"type":"number"},"goalIncrementKph":{"type":"number"},"goalTimeAcknowledged":{"type":"boolean"},"programEvents":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object"}}}}},"additionalProperties":true}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}},"post":{"tags":["Matrix Method"],"summary":"Create a new Matrix Method program","security":[{"jump_auth":[]}],"consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","required":true,"schema":{"type":"object","required":["id","programId"],"properties":{"id":{"type":"string","minLength":0},"programId":{"type":"number"},"assessmentBaselineKph":{"type":"number"},"backupGoalBaseline":{"type":"number"},"baselineKph":{"type":"number"},"goalBaselineKph":{"type":"number"},"goalIncrementKph":{"type":"number"},"goalTimeAcknowledged":{"type":"boolean"},"programEvents":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object"}}}}},"additionalProperties":true}}],"responses":{"200":{"description":"Program created","schema":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}},"patch":{"tags":["Matrix Method"],"summary":"Update Matrix Method program metadata (excluding events)","security":[{"jump_auth":[]}],"consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","required":true,"schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","minLength":0},"baselineKph":{"type":"number"},"goalBaselineKph":{"type":"number"},"goalIncrementKph":{"type":"number"},"goalTimeAcknowledged":{"type":"boolean"},"userId":{"type":"string","not":{"type":"string"},"minLength":0},"programEvents":{"type":"string","not":{"type":"string"},"minLength":0}},"additionalProperties":true}}],"responses":{"200":{"description":"Program updated","schema":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}},"delete":{"tags":["Matrix Method"],"summary":"Delete Matrix Method program by ID","security":[{"jump_auth":[]}],"consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","required":true,"schema":{"type":"object","required":["id"],"properties":{"id":{"type":"string","minLength":0}}}}],"responses":{"200":{"description":"Program deleted","schema":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/matrix_method/program_events":{"patch":{"tags":["Matrix Method"],"summary":"Update program events by program UUID\nIf null is sent, the element at that index is removed.","security":[{"jump_auth":[]}],"consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","required":true,"schema":{"type":"object","required":["id","eventsToUpdate"],"properties":{"id":{"type":"string","minLength":0},"eventsToUpdate":{"type":"object","description":"Keys are stringified numeric indices (e.g. '0', '1'), values are partial MatrixMethodProgramEvent objects","additionalProperties":{"type":"object","properties":{"index":{"type":"integer"},"startTime":{"type":"integer","format":"int64"},"endTime":{"type":"integer","format":"int64"},"completed":{"type":"boolean"},"label":{"type":"integer"},"workoutDistance":{"type":"number"},"workoutTime":{"type":"integer"},"totalTime":{"type":"integer"},"totalDistance":{"type":"number"},"totalCalories":{"type":"number"},"totalAverageSpeed":{"type":"number"},"totalPeakSpeed":{"type":"number"},"totalAverageHeartRate":{"type":"number"},"totalElevation":{"type":"number"},"baseline":{"type":"number"},"goalTimeExisted":{"type":"boolean"}},"additionalProperties":true}}},"example":{"id":"uuid","eventsToUpdate":{"0":{"index":0,"completed":true,"workoutDistance":5.5,"additionalProp1":"anything"},"2":{"index":2,"completed":false,"workoutTime":1200000},"3":null}}}}],"responses":{"200":{"description":"Program events updated","schema":{"type":"object","properties":{"id":{"type":"string"},"userId":{"type":"string"}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/messages/broadcast":{"post":{"tags":["PersonalTrainer"],"summary":"Send messages to multiple users on a backend training service","security":[{"session_auth":[]}],"parameters":[{"in":"body","name":"body","required":true,"schema":{"type":"object","properties":{"message":{"type":"string","minLength":0},"recipients":{"type":"array","items":{"type":"string","minLength":0}},"facility":{"type":"string","minLength":0}}}}],"responses":{"201":{"description":"Completed"},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/messages/message/{messageId}":{"put":{"tags":["PersonalTrainer"],"summary":"Update message on backend training service","security":[{"session_auth":[]}],"parameters":[{"name":"messageId","in":"path","description":"id of message","type":"string","required":true},{"in":"body","name":"body","required":true,"type":"object"}],"responses":{"204":{"description":"Completed"},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/messages/thread/{userId}":{"get":{"tags":["PersonalTrainer"],"summary":"Get messages from user on a backend training service","security":[{"session_auth":[]}],"parameters":[{"name":"userId","in":"path","description":"user id to get messages from","type":"string","required":true}],"responses":{"200":{"description":"Completed"},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}},"post":{"tags":["PersonalTrainer"],"summary":"Send message to user on a backend training service","security":[{"session_auth":[]}],"parameters":[{"name":"userId","in":"path","description":"user id to send message to","type":"string","required":true},{"in":"body","name":"body","required":true,"schema":{"type":"object","properties":{"message":{"type":"string","minLength":0}}}}],"responses":{"201":{"description":"Completed"},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/messages/users":{"get":{"tags":["PersonalTrainer"],"summary":"Get messages for user on a backend training service","security":[{"session_auth":[]}],"parameters":[{"name":"userIds","in":"query","description":"user ids to get messagable users","type":"string"}],"responses":{"200":{"description":"Completed"},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/messages":{"get":{"tags":["PersonalTrainer"],"summary":"Get user messages from a backend training service","security":[{"session_auth":[]}],"parameters":[{"name":"newerThan","in":"query","description":"unixTimestamp to get newer messages than","type":"number"}],"responses":{"200":{"description":"Successfully pulled messages"}}}},"/metrics/{type}":{"get":{"tags":["PersonalTrainer"],"summary":"get metrics by type","security":[],"parameters":[{"name":"type","in":"path","description":"metrics type string","required":true,"type":"string"}],"responses":{"200":{"description":"Completed","schema":{"type":"object","properties":{"_id":{"type":"string"},"type":{"type":"string"},"metrics":{"type":"object","properties":{"title":{"type":"string"},"name":{"type":"string"},"forSegment":{"type":"boolean"},"validation":{"type":"object"},"math":{"type":"string","required":false,"enum":["sum","average"]},"unit":{"type":"string","required":false,"enum":["","seconds","min","calories","%","watts","level"]}}},"maxSegments":{"type":"number"}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}},"/metrics":{"get":{"tags":["PersonalTrainer"],"summary":"get all metrics","security":[],"responses":{"200":{"description":"Completed","schema":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"type":{"type":"string"},"metrics":{"type":"object","properties":{"title":{"type":"string"},"name":{"type":"string"},"forSegment":{"type":"boolean"},"validation":{"type":"object"},"math":{"type":"string","required":false,"enum":["sum","average"]},"unit":{"type":"string","required":false,"enum":["","seconds","min","calories","%","watts","level"]}}},"maxSegments":{"type":"number"}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}}},"/notifications":{"post":{"tags":["Exerciser","PersonalTrainer"],"summary":"Send a push notification","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"body","in":"body","description":"Validate Request","required":true,"schema":{"type":"object","required":["exerciserApiId","message"],"properties":{"exerciserApiId":{"type":"string","minLength":0},"message":{"type":"string","minLength":0}}}}],"consumes":["application/json"],"responses":{"204":{"description":"No Content"}}}},"/np/login":{"post":{"tags":["NetPulse","Login"],"summary":"Authenticate User with xID and Passcode","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"body","in":"body","description":"Login Request","required":true,"schema":{"type":"object","properties":{"username":{"type":"string","minLength":0},"password":{"type":"string","minLength":0}}}}],"consumes":["application/json"],"responses":{"200":{"description":"Exerciser","schema":{"type":"object"}}}}},"/np/validate":{"post":{"tags":["Exerciser"],"summary":"Used to check if an email address is available and valid through the Netpulse service.","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"body","in":"body","description":"Validate Request","required":false,"schema":{"type":"object","properties":{"email":{"type":"string","minLength":0},"xid":{"type":"string","minLength":0},"passcode":{"type":"string","minLength":0}}}}],"responses":{"200":{"description":"Received a successful response from Netpulse service. Email availability determined by response object.","schema":{"type":"object"}},"500":{"description":"An unknown error has occured"}}}},"/np/{uuid}/profile":{"get":{"tags":["Exerciser"],"summary":"Fetch the Netpulse profile information for a given user UUID from the Netpulse partner API","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"uuid","in":"path","description":"user id of exerciser","type":"string","required":true}],"responses":{"200":{"description":"Request was completed successfully for user {uuid}."},"404":{"description":"Could not fetch profile data for {uuid}."},"500":{"description":"An unknown error has occured"}}}},"/survey":{"post":{"tags":["Survey"],"summary":"Send Survey Data","security":[{"jump_auth":["api_key","role_service"]}],"parameters":[{"name":"body","in":"body","description":"Survey Request","required":true,"schema":{"type":"object","required":["user_id","club_id","survey","machine_id"],"properties":{"user_id":{"type":"string","minLength":0},"club_id":{"type":"number"},"survey":{"type":"object"},"machine_id":{"type":"string","minLength":0}}}}],"responses":{"204":{"description":"Survey posted successfully"},"400":{"description":"Bad Request - Missing parameters or vendor/club or user id not found"},"500":{"description":"Internal Server Error"}}}},"/user_metadata":{"post":{"tags":["User"],"summary":"Post User Metadata","security":[{"jump_auth":[]}],"parameters":[{"name":"Authorization","in":"header","description":"The JUMP jwt","type":"string"},{"name":"body","in":"body","description":"Survey Request","required":true,"schema":{"type":"object","required":["club_id","setting_names","machine_id"],"properties":{"setting_names":{"type":"array","description":"A list of settings you want returned.","items":{"type":"string","minLength":0}},"club_id":{"type":"number","description":"Club ID the machine is at"},"machine_type":{"type":"string","description":"Used to lookup high sweat score values, will lookup machine type using the id if this is incorrect or unset","minLength":0},"machine_id":{"type":"string","description":"Used to lookup high sweat score/benchmarks. Please send machine_type if you have it, that is preferred.","minLength":0}}}}],"responses":{"200":{"description":"User meta data retrieved","schema":{"type":"object","properties":{"ptp":{"type":"boolean"},"high_sweat_score":{"type":"number","description":"If this is a cardio machine and there is a high score, it sent in here"},"max_weight_grams":{"type":"number","description":"If this is a strength machine and there is a benchmark, it sent in here"}},"allOf":[{"type":"object","properties":{"disabled_features":{"type":"array","items":{"type":"string","description":"app id or program id for the feature to disable"}},"enabled_features":{"type":"array","items":{"type":"string","description":"app id or program id for the feature to enable"}},"hidden_features":{"type":"array","items":{"type":"string","description":"app id or program id for the feature to hide"}}}}],"additionalProperties":true},"examples":{"application/json":{"bluetoothmacaddress":"{\"user_ble_audio_mac_address\":\"\",\"user_ble_hr_mac_address\":\"\",\"user_ant_hr_device_id\":\"\"}","phoenix_user_settings":"{\"max_hr\":145,\"ftp\":100}","handgripsettings":"{\"user_haptics_on\":true,\"user_led_style\":0}","ptp":true,"matrix_method_disclaimer_accepted":1,"high_sweat_score":10,"disabled_features":[],"enabled_features":[],"hidden_features":[]}}},"400":{"description":"Bad Request - Missing parameters or club or user id not found"},"500":{"description":"Internal Server Error"}}}},"/user_state":{"get":{"tags":["Survey"],"summary":"Get User State Data","security":[{"jump_auth":[]}],"parameters":[{"name":"Authorization","in":"header","description":"The JUMP jwt","type":"string"},{"name":"club_id","in":"query","description":"club id","type":"number","required":true}],"responses":{"200":{"description":"State data returned successfully","schema":{"type":"object","properties":{"surveyState":{"type":"string","example":"show_survey"},"scanState":{"type":"string","example":"scan_stale"},"scan":{"type":"object","properties":{"id":{"type":"string"},"measurementDate":{"type":"string","format":"date-time","example":"2026-02-17T00:00:00Z"},"user":{"type":"object","properties":{"firstName":{"type":"string","example":"Test"},"lastName":{"type":"string","example":"User"},"gender":{"type":"string","example":"male"},"ethnicity":{"type":"string","example":"white"},"birthDate":{"type":"string","format":"date","example":"1990-01-01"}}},"biaCalculations":{"type":"object","properties":{"tbs":{"type":"object","properties":{"value":{"type":"number","example":97},"normType":{"type":"string","example":"Bronze"}}},"ffm":{"type":"object","properties":{"value":{"type":"number","example":61.47}}},"fmp":{"type":"object","properties":{"value":{"type":"number","example":17.7}}},"smmp":{"type":"object","properties":{"value":{"type":"number","example":39.1}}}}}}},"scannerImage":{"type":"string","example":"https://cdn.uat.fakeurl.com/path1/path2/path3/552/v1/image.png"},"benchmarkState":{"type":"object","additionalProperties":{"type":"string"},"example":{"ConvergingChestPress":"complete","LegPress":"stale"}}}}},"400":{"description":"Bad Request - Missing parameters or vendor/club not found"},"500":{"description":"Internal Server Error"}}}},"/users/anonymize":{"post":{"tags":["Exerciser"],"summary":"Anonymizes users by Exerciser IDs","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"body","in":"body","description":"Exerciser IDs to be anonymized","required":true,"schema":{"type":"object","properties":{"user_ids":{"description":"Array of Exerciser UUIDs","type":"array","items":{"type":"string","minLength":0}}}}}],"consumes":["application/json"],"responses":{"200":{"description":"Anonymized Users","schema":{"type":"array","items":{"type":"object","required":["user_id","success"],"properties":{"user_id":{"type":"string"},"success":{"type":"boolean"}}}}}}}},"/users/delete":{"delete":{"tags":["Exerciser"],"summary":"Deletes users by Exerciser IDs","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"body","in":"body","description":"Exerciser IDs to be deleted","required":true,"schema":{"type":"object","properties":{"user_ids":{"description":"Array of Exerciser UUIDs","type":"array","items":{"type":"string","minLength":0}}}}}],"consumes":["application/json"],"responses":{"200":{"description":"Deleted Users","schema":{"type":"object","properties":{"exercisers":{"type":"array","items":{"type":"object","required":["user_ids","success"],"properties":{"user_ids":{"type":"array","items":{"type":"string"}},"success":{"type":"boolean"}}}},"machineLearning":{"type":"array","items":{"type":"object","required":["vendor","user_ids","success"],"properties":{"vendor":{"type":"string"},"user_ids":{"type":"array","items":{"type":"string"}},"success":{"type":"boolean"}}}}}}}}}},"/users/me/club/{club_id}":{"put":{"tags":["PersonalTrainer"],"summary":"Update the current user's active club","security":[{"session_auth":[]}],"parameters":[{"name":"club_id","in":"path","description":"Club ID","type":"integer","required":true}],"responses":{"204":{"description":"Successfully updated the user's active club"},"400":{"description":"An error occured because of the following issues:\n* - clubId is not present\n* - clubId is not an integer\n* - Failed to update because user does not belong to a club"}}}},"/users/me":{"get":{"tags":["PersonalTrainer"],"summary":"Get current user","security":[{"session_auth":[]}],"parameters":[],"responses":{"200":{"description":"Successfully received user"}}}},"/users/{user_id}/associate_pt_club":{"get":{"tags":["Exerciser"],"summary":"Check to see if the personal trainer app is active for a user at a club","description":"Call this with a valid club id to see if an exerciser has the personal trainer app active for that club.<br /><br />Calling this endpoint with no club id will return a list of clubs for which an exerciser has the personal trainer app active for that deployment.","security":[{"api_key_auth":["api_key","role_service"]}],"parameters":[{"name":"user_id","in":"path","description":"user id of exerciser","type":"string","required":true},{"name":"clubId","in":"query","description":"club to check","type":"number","required":false}],"responses":{"200":{"description":"<ul><li>Personal trainer app for user {user_id} at club {clubId} is active.</li><li>Personal trainer app for user {user_id} is active at clubs: {list of active clubs}.</li></ul>"},"404":{"description":"<ul><li>Personal trainer app for user {user_id} at club {clubId} is not active.</li><li>Personal trainer app for user {user_id} is not active for any clubs.</li></ul>"},"500":{"description":"An unknown error has occured"}}},"post":{"tags":["Exerciser"],"summary":"Sets up the personal trainer app for an exerciser at a club","security":[{"api_key_auth":["api_key","role_service"]}],"parameters":[{"name":"user_id","in":"path","description":"user_id of exerciser","type":"string","required":true},{"name":"body","in":"body","Description":"","required":true,"type":"object","schema":{"type":"object","required":["clubId"],"properties":{"clubId":{"type":"integer","description":"The Club ID to activate"},"password":{"type":"string","description":"The exerciser's password.","minLength":0}}}}],"responses":{"200":{"description":"Personal trainer app activated for {user_id} at club {clubId}."},"401":{"description":"Failed to auth user against netpulse"},"408":{"description":"Request to Netpulse failed: one of ['ESOCKETTIMEDOUT', 'ETIMEDOUT', 'ECONNRESET', 'ECONNREFUSED']"},"500":{"description":"An unknown error has occured"}}},"delete":{"tags":["Exerciser"],"summary":"Removes the personal trainer app for an exerciser at a club","security":[{"api_key_auth":["api_key","role_service"]}],"parameters":[{"name":"user_id","in":"path","description":"user_id of exerciser","type":"string","required":true},{"name":"body","in":"body","required":true,"type":"object","schema":{"type":"object","required":["clubId"],"properties":{"clubId":{"type":"integer","description":"The Club ID to deactivate"}}}}],"responses":{"200":{"description":"Personal trainer app deactivated for {user_id} at club {clubId}."}}}},"/users/{user_id}/pt_status":{"get":{"tags":["Exerciser"],"summary":"Check to see if the personal trainer app is active for a user at a club","description":"Call this with a valid club id to see if an exerciser has the personal trainer app active for that club.<br /><br />Calling this endpoint with no club id will return a list of clubs for which an exerciser has the personal trainer app active for that deployment.","security":[{"api_key_auth":["api_key","role_service"]}],"parameters":[{"name":"user_id","in":"path","description":"user id of exerciser","type":"string","required":true},{"name":"clubId","in":"query","description":"club to check","type":"integer","required":false}],"responses":{"200":{"description":"Found clubs with Personal Trainer active for {user_id}","schema":{"type":"object","required":["userId"],"properties":{"userId":{"type":"string","description":"The user id with Personal Trainer active"},"activePTClubs":{"type":"array","description":"Array of active clubs"}}}},"204":{"description":"Personal Trainer is active for user {user_id} at {clubId}."},"404":{"description":"User {user_id} does not have Personal Trainer active at any clubs.","schema":{"type":"object","properties":{"message":{"type":"string","required":true}}}},"500":{"description":"An unknown error has occured"}}}},"/vendors/brandapi/images":{"get":{"tags":["Exerciser"],"summary":"Product Type Images","security":[{"api_key_auth":["api_key"]}],"consumes":["application/json"],"responses":{"200":{"description":"Mapping of product types to hero image","schema":{"type":"array","items":{"type":"object"}}}}}},"/vendors/evolt/{exerciser_id}/scans":{"get":{"tags":["Exerciser"],"summary":"Get all scans for an exerciser","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"Authorization","in":"header","description":"Required for Evolt vendor access.","type":"string"},{"name":"exerciser_id","in":"path","description":"Exerciser ID","type":"string","required":true}],"consumes":["application/json"],"responses":{"200":{"description":"User object containing an array of scans","schema":{"type":"object","properties":{"type":{"type":"string","description":"Type of request"},"status":{"type":"number","description":"Request status"},"id":{"type":"number","description":"The external member ID"},"email":{"type":"string","description":"The member's email"},"first_name":{"type":"string","description":"The member's first name"},"last_name":{"type":"string","description":"The member's last name"},"mobile":{"type":"string","description":"The member's phone number"},"height":{"type":"number","description":"The member's height"},"gender":{"type":"string","description":"The member's gender"},"dob":{"type":"string","description":"The member's date of birth (YYYY-MM-DD)"},"country":{"type":"string","description":"The member's country"},"measurement":{"type":"string","description":"The member's unit of measurement"},"scans":{"type":"number","description":"Number of scans for given member"},"currentItemCount":{"type":"number","description":"Number of scans in query"},"itemsPerPage":{"type":"number","description":"Number of scans per page"},"totalItems":{"type":"number","description":"Total number of scans"},"pageIndex":{"type":"number","description":"Current page"},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"The scan ID"},"date_time":{"type":"date","description":"Local time of scan"},"weight_result":{"type":"number","description":"The weight given from the scan"},"lean_body_mass_result":{"type":"number","description":"The lean body mass weight given from the scan"},"body_fat_result":{"type":"number","description":"The body fat weight given from the scan"},"skeletal_muscle_mass_result":{"type":"number","description":"The skeletal muscle mass weight given from the scan"},"body_fat_percentage":{"type":"number","description":"The body fat percentage given from the scan"},"visceral_fat_level":{"type":"number","description":"The visceral fat level given from the scan"}}}}}}}}}},"/vendors/smarthealth/search":{"get":{"tags":["Exerciser"],"summary":"Search profiles","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"club_id","in":"query","description":"AM4 Club ID","type":"number","required":true},{"name":"q","in":"query","description":"Search query","type":"string","required":false}],"consumes":["application/json"],"responses":{"200":{"description":"Array of matching user profiles","schema":{"type":"array","items":{"type":"object","properties":{"UserId":{"type":"string","description":"User ID"},"FullName":{"type":"string","description":"Full Name"},"Email":{"type":"string","description":"Email Address"},"PicUrl":{"type":"string","description":"Picture URL"},"Barcode":{"type":"string","description":"Barcode"}}}}}}}},"/vendors/welld/assign":{"post":{"tags":["Exerciser"],"summary":"Authenticate a User","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"body","in":"body","description":"Welld Assign","required":true,"schema":{"type":"object","required":["xid","expires"],"properties":{"xid":{"type":"string","minLength":0},"vendor_id":{"type":"string","minLength":0},"expires":{"type":"number"}}}}],"consumes":["application/json"],"responses":{"200":{"description":"Successfully assigned Welld identity"}}}},"/workout/{workout_id}":{"put":{"tags":["Workout"],"summary":"Update and retry to send a workout to a vendor","security":[{"api_key_auth":["api_key"]}],"parameters":[{"name":"body","in":"body","description":"Workout","required":true,"schema":{"type":"object","required":["duration","distance","workout_time","calories","average_heart_rate","max_heart_rate","type"],"properties":{"workout_id":{"type":"string","description":"A unique identifier for the workout.","minLength":0},"exerciser_id":{"type":"string","description":"Exerciser ID of the exerciser who submitted the workout.","minLength":0},"exercise_title":{"type":"string","description":"The title of the workout.  For connected workout sources, 'unknown' will be returned if the exercise title fails to resolve.","minLength":0},"xid":{"type":"string","description":"XID of the user. Required for netpulse workout submission.","minLength":0},"passcode":{"type":"string","description":"Passcode of the user. Required for netpulse workout submission.","minLength":0},"workout_originator":{"type":"string","description":"The application that starts and controls the workout.","minLength":0},"program_level":{"type":"number","description":"The program level for the workout."},"duration":{"type":"integer","description":"Total duration of the workout in seconds."},"distance":{"type":"number","description":"Total distance of the workout in meters."},"machine_type":{"type":"string","description":"The modality type of the equipment the workout was performed on.","minLength":0},"machine_id":{"type":"string","description":"Machine ID of the machine the workout was performed on.","minLength":0},"workout_time":{"type":"string","format":"dateTime","description":"Date and time the workout had begun. 24 hour format in UTC.","minLength":0},"calories":{"type":"integer","description":"Total calories burned."},"average_heart_rate":{"type":"integer","description":"Average heart rate during the workout."},"average_pace":{"type":"integer","description":"Average pace during the workout."},"max_heart_rate":{"type":"integer","description":"Maximum heart rate during the workout."},"min_heart_rate":{"type":"integer","description":"Minimum heart rate during the workout."},"program_id":{"type":"string","description":"The program uuid of the workout","minLength":0},"program_type":{"type":"integer","description":"The program id of the workout"},"model_id":{"type":"string","description":"The model id from the workout","minLength":0},"sprint_scores":{"type":"object","description":"The individual Sprint 8 scores","properties":{"1":{"type":"number"},"2":{"type":"number"},"3":{"type":"number"},"4":{"type":"number"},"5":{"type":"number"},"6":{"type":"number"},"7":{"type":"number"},"8":{"type":"number"}}},"total_sweat_score":{"type":"number","description":"The total Sprint 8 sweat score"},"sprint_8_program_level":{"type":"number","description":"Sprint 8 program level. Should be an integer between 1 and 21."},"watts_kg":{"type":"number","description":"The power to weight ratio of the workout"},"type":{"type":"string","description":"The type of workout performed.","enum":["cardio","strength"]},"interval_seconds":{"type":"integer","description":"The interval split in seconds."},"intervals":{"type":"array","items":{"type":"object","required":["duration","distance","speed","incline","resistance"],"properties":{"duration":{"type":"integer","description":"The duration of the interval in seconds."},"average_distance":{"type":"number","description":"The average distance of the interval in meters."},"distance":{"type":"number","description":"The distance of the interval in meters."},"speed":{"type":"number","description":"The speed of the interval in kph."},"cadence":{"type":"integer","description":"The cadence of the interval.  For rowers, this is strokes per minute (SPM)."},"incline":{"type":"number","description":"The incline of the interval."},"resistance":{"type":"integer","description":"The resistance of the interval."},"heart_rate":{"type":"integer","description":"The heart rate of the interval."},"total_steps":{"type":"integer","description":"The total steps of the interval."},"power":{"type":"integer","description":"Average power for the interval"},"rpm":{"type":"integer","description":"Average RPM for the interval"}}}},"sets":{"type":"array","items":{"type":"object","required":["weight","calories","reps","average_heart_rate"],"properties":{"weight":{"type":"integer","description":"The weight of the set in grams"},"set_weight":{"type":"object","description":"The weight of the set.  Contains weights in both ounces and grams.","required":["ounces","grams"],"properties":{"ounces":{"type":"integer","description":"The weight of the set in ounces"},"grams":{"type":"integer","description":"The weight of the set in grams"}}},"calories":{"type":"integer","description":"Total calories burned during the set"},"average_heart_rate":{"type":"number","description":"Average heart rate during the set"},"reps":{"type":"array","items":{"type":"object","required":["start","stop","distance","average_heart_rate","elift_rep_score"],"properties":{"start":{"type":"integer","description":"Start of the rep"},"stop":{"type":"integer","description":"End of the rep"},"distance":{"type":"number","description":"Distance traveled during the rep"},"average_heart_rate":{"type":"number","description":"Average heart rate during the rep"},"elift_rep_score":{"type":"integer","description":"The elift rep score of the rep"}}}}}}},"function_threshold_power":{"type":"number","description":"Indoor Cycle function threshold power"},"average_rpm":{"type":"number","description":"Indoor Cycle average RPM"},"peak_rpm":{"type":"number","description":"Indoor Cycle peak RPM"},"peak_spm":{"type":"number","description":"Rower Peak SPM"},"total_strokes":{"type":"number","description":"Rower Total Strokes"},"peak_watts":{"type":"number","description":"Cardio Frame measurement"},"average_watts":{"type":"number","description":"Cardio Frame measurement"},"total_floors":{"type":"number","description":"Climbmill and Stepper floors"},"integration_metadata":{"type":"object","description":"Data for integration partners"}}}}],"consumes":["application/json"],"responses":{"200":{"description":"Workout"},"400":{"description":"Workout"}}}},"/workout":{"post":{"tags":["Workout"],"summary":"Save and send a workout to a vendor","security":[{"api_key_auth":["api_key","role_service"]}],"parameters":[{"name":"body","in":"body","description":"Workout","required":true,"schema":{"type":"object","required":["duration","distance","workout_time","calories","average_heart_rate","max_heart_rate","type"],"properties":{"workout_id":{"type":"string","description":"A unique identifier for the workout.","minLength":0},"exerciser_id":{"type":"string","description":"Exerciser ID of the exerciser who submitted the workout.","minLength":0},"exercise_title":{"type":"string","description":"The title of the workout.  For connected workout sources, 'unknown' will be returned if the exercise title fails to resolve.","minLength":0},"xid":{"type":"string","description":"XID of the user. Required for netpulse workout submission.","minLength":0},"passcode":{"type":"string","description":"Passcode of the user. Required for netpulse workout submission.","minLength":0},"workout_originator":{"type":"string","description":"The application that starts and controls the workout.","minLength":0},"program_level":{"type":"number","description":"The program level for the workout."},"duration":{"type":"integer","description":"Total duration of the workout in seconds."},"distance":{"type":"number","description":"Total distance of the workout in meters."},"machine_type":{"type":"string","description":"The modality type of the equipment the workout was performed on.","minLength":0},"machine_id":{"type":"string","description":"Machine ID of the machine the workout was performed on.","minLength":0},"workout_time":{"type":"string","format":"dateTime","description":"Date and time the workout had begun. 24 hour format in UTC.","minLength":0},"calories":{"type":"integer","description":"Total calories burned."},"average_heart_rate":{"type":"integer","description":"Average heart rate during the workout."},"average_pace":{"type":"integer","description":"Average pace during the workout."},"max_heart_rate":{"type":"integer","description":"Maximum heart rate during the workout."},"min_heart_rate":{"type":"integer","description":"Minimum heart rate during the workout."},"program_id":{"type":"string","description":"The program uuid of the workout","minLength":0},"program_type":{"type":"integer","description":"The program id of the workout"},"model_id":{"type":"string","description":"The model id from the workout","minLength":0},"sprint_scores":{"type":"object","description":"The individual Sprint 8 scores","properties":{"1":{"type":"number"},"2":{"type":"number"},"3":{"type":"number"},"4":{"type":"number"},"5":{"type":"number"},"6":{"type":"number"},"7":{"type":"number"},"8":{"type":"number"}}},"total_sweat_score":{"type":"number","description":"The total Sprint 8 sweat score"},"sprint_8_program_level":{"type":"number","description":"Sprint 8 program level. Should be an integer between 1 and 21."},"watts_kg":{"type":"number","description":"The power to weight ratio of the workout"},"type":{"type":"string","description":"The type of workout performed.","enum":["cardio","strength"]},"interval_seconds":{"type":"integer","description":"The interval split in seconds."},"intervals":{"type":"array","items":{"type":"object","required":["duration","distance","speed","incline","resistance"],"properties":{"duration":{"type":"integer","description":"The duration of the interval in seconds."},"average_distance":{"type":"number","description":"The average distance of the interval in meters."},"distance":{"type":"number","description":"The distance of the interval in meters."},"speed":{"type":"number","description":"The speed of the interval in kph."},"cadence":{"type":"integer","description":"The cadence of the interval.  For rowers, this is strokes per minute (SPM)."},"incline":{"type":"number","description":"The incline of the interval."},"resistance":{"type":"integer","description":"The resistance of the interval."},"heart_rate":{"type":"integer","description":"The heart rate of the interval."},"total_steps":{"type":"integer","description":"The total steps of the interval."},"power":{"type":"integer","description":"Average power for the interval"},"rpm":{"type":"integer","description":"Average RPM for the interval"}}}},"sets":{"type":"array","items":{"type":"object","required":["weight","calories","reps","average_heart_rate"],"properties":{"weight":{"type":"integer","description":"The weight of the set in grams"},"set_weight":{"type":"object","description":"The weight of the set.  Contains weights in both ounces and grams.","required":["ounces","grams"],"properties":{"ounces":{"type":"integer","description":"The weight of the set in ounces"},"grams":{"type":"integer","description":"The weight of the set in grams"}}},"calories":{"type":"integer","description":"Total calories burned during the set"},"average_heart_rate":{"type":"number","description":"Average heart rate during the set"},"reps":{"type":"array","items":{"type":"object","required":["start","stop","distance","average_heart_rate","elift_rep_score"],"properties":{"start":{"type":"integer","description":"Start of the rep"},"stop":{"type":"integer","description":"End of the rep"},"distance":{"type":"number","description":"Distance traveled during the rep"},"average_heart_rate":{"type":"number","description":"Average heart rate during the rep"},"elift_rep_score":{"type":"integer","description":"The elift rep score of the rep"}}}}}}},"function_threshold_power":{"type":"number","description":"Indoor Cycle function threshold power"},"average_rpm":{"type":"number","description":"Indoor Cycle average RPM"},"peak_rpm":{"type":"number","description":"Indoor Cycle peak RPM"},"peak_spm":{"type":"number","description":"Rower Peak SPM"},"total_strokes":{"type":"number","description":"Rower Total Strokes"},"peak_watts":{"type":"number","description":"Cardio Frame measurement"},"average_watts":{"type":"number","description":"Cardio Frame measurement"},"total_floors":{"type":"number","description":"Climbmill and Stepper floors"},"integration_metadata":{"type":"object","description":"Data for integration partners"}}}}],"consumes":["application/json"],"responses":{"201":{"description":"Successfully submitted the workout to the returned vendors and saved the workout in the database."},"400":{"description":"Invalid post parameters."}}}},"/wotd":{"get":{"tags":["PersonalTrainer"],"summary":"get workout of the day","security":[],"parameters":[{"name":"isCRM","description":"This flag is required for CRM - always true, to send additional data that it needs","in":"query","enum":["true","false"],"type":"string","required":false},{"name":"timestamp","description":"used to get current day's facility assignment","in":"query","type":"integer","required":false},{"name":"club_uuid","description":"filter by netpulse clubId","in":"query","type":"string","required":false},{"name":"club_id","description":"filter by asset management's clubId","in":"query","type":"string","required":false},{"name":"preset","description":"whether to include exercise presets","in":"query","enum":["true","false"],"type":"string","required":false}],"responses":{"200":{"description":"Completed","schema":{"type":"array","items":{"type":"object","properties":{"settings":{"type":"object","properties":{"language":{"type":"string"},"measurementUnit":{"type":"string"},"dateFormat":{"type":"string"},"timeFormat":{"type":"number"}}},"assignments":{"type":"array","items":{"type":"object","required":["_id","assignmentType","startDate","exercises","facility"],"properties":{"_id":{"type":"string"},"assignmentType":{"type":"string"},"exerciserId":{"type":"string"},"startDate":{"type":"integer"},"endDate":{"type":"integer"},"name":{"type":"string"},"scheduleType":{"type":"string"},"exercises":{"type":"array","items":{"type":"object","required":["assignedProfile","title","preset"],"properties":{"_id":{"type":"string"},"video":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"equipmentType":{"type":"string"},"cardioProgramId":{"type":"integer"},"assignedProfile":{"type":"object","required":["global"],"properties":{"global":{"type":"object"},"segments":{"type":"array","items":{"type":"object"}}}},"completedProfile":{"type":"object"},"completedDate":{"type":"integer"},"feedback":{"type":"string"},"emoji":{"type":"string"},"exerciserDescription":{"type":"string"},"preset":{"type":"object","required":["metrics"],"properties":{"maxSegments":{"type":"integer"},"metrics":{"type":"array","items":{"type":"object"}}}},"images":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"isPrimary":{"type":"boolean"},"picturePath":{"type":"string"},"transform":{"type":"string"}}}},"assignmentType":{"type":"string"}}}},"facility":{"type":"object","properties":{"name":{"type":"string"},"_id":{"type":"string"}}},"parentAssignmentId":{"type":"string"},"trainerId":{"type":"string"},"recurrence":{"type":"object"},"trainingPlan":{"type":"object","properties":{"trainingPlanId":{"type":"string"},"trainingPlanName":{"type":"string"},"trainingPlanAssignmentId":{"type":"string"},"repetition":{"type":"number"},"repeats":{"type":"number"},"trainingPlanAssignmentIdx":{"type":"number"}}}}}}}}},"default":{"description":"Unexpected Error","schema":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}}}}}}}},"definitions":{"AuthResponse":{"type":"object","required":["message"],"properties":{"message":{"type":"string","description":"Auth response message"}}},"Club":{"type":"object","required":["_id","vendors","authentication_map"],"properties":{"_id":{"type":"integer"},"vendors":{"type":"object","additionalProperties":{"type":"object"}},"authentication_map":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"launch_app":{"type":"object"},"membership_support":{"type":"string","minLength":0},"long_term_token":{"type":"boolean"},"machine_learning_provider":{"type":"object","required":["vendor"],"properties":{"vendor":{"type":"string","minLength":0},"model":{"type":"string","minLength":0},"tenantId":{"type":"string","minLength":0}}}}},"ConsoleFeatures":{"type":"object","properties":{"disabled_features":{"type":"array","items":{"type":"string","description":"app id or program id for the feature to disable"}},"enabled_features":{"type":"array","items":{"type":"string","description":"app id or program id for the feature to enable"}},"hidden_features":{"type":"array","items":{"type":"string","description":"app id or program id for the feature to hide"}}}},"Exerciser":{"type":"object","required":["id"],"properties":{"id":{"type":"string","description":"Unique Identifier of the Exerciser"},"first_name":{"type":"string","description":"First Name of the Exerciser"},"last_name":{"type":"string","description":"Last Name of the Exerciser"},"birthday":{"type":"string","format":"date","description":"Date of exercisers birth (YYYY-MM-DD)"},"age":{"type":"number","description":"Age of the Exerciser in years"},"email":{"type":"string","description":"Email address of the exerciser"},"units":{"type":"string","description":"Measurement units of the exerciser: M (Metric), or (I) Imperial","enum":["M","I"]},"gender":{"type":"string","description":"Gender specification of the exerciser: M (Male), F (Female), or X (Non-Binary)","enum":["M","F","X"]},"height":{"type":"number","description":"Height of the exerciser in centimeters (CM)"},"weight":{"type":"number","description":"Weight of the exerciser in kilograms (KG)"},"pictureUrl":{"type":"string","description":"URI of the profile picture of the exerciser"},"extra":{"type":"object"},"identities":{"type":"array","items":{"type":"object","required":["vendor","vendor_id","last_login"],"properties":{"vendor":{"type":"string","description":"Vendor Authentication System"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID of Last Login"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"dateTime","description":"Date of Last Login with Vendor"}}}},"clubs":{"type":"array","items":{"type":"object","properties":{"vendor":{"type":"string","description":"Vendor Authentication System of Last Login"},"vendor_id":{"type":"string","description":"Unique Vendor Identifier"},"vendor_club_id":{"type":"string","description":"Vendor Club ID of Last Login"},"club_id":{"type":"string","description":"Johnson Health Tech Club ID"},"machine_id":{"type":"string","description":"Johnson Health Tech Machine ID of Last Login"},"membership_type":{"type":"string","description":"Vendor Club Membership Type"},"last_login":{"type":"string","format":"date","description":"Date of Last Login with Vendor"}}}},"token":{"type":"string","description":"A JWT that expires in 1 hour.  token only gets set during the /login endpoint logic"}}},"Interval":{"type":"object","required":["duration","distance","speed","incline","resistance"],"properties":{"duration":{"type":"integer","description":"The duration of the interval in seconds."},"average_distance":{"type":"number","description":"The average distance of the interval in meters."},"distance":{"type":"number","description":"The distance of the interval in meters."},"speed":{"type":"number","description":"The speed of the interval in kph."},"cadence":{"type":"integer","description":"The cadence of the interval.  For rowers, this is strokes per minute (SPM)."},"incline":{"type":"number","description":"The incline of the interval."},"resistance":{"type":"integer","description":"The resistance of the interval."},"heart_rate":{"type":"integer","description":"The heart rate of the interval."},"total_steps":{"type":"integer","description":"The total steps of the interval."},"power":{"type":"integer","description":"Average power for the interval"},"rpm":{"type":"integer","description":"Average RPM for the interval"}}},"MachineOneRepMaxBenchmark":{"type":"object","required":["machineType","max","updatedAt"],"properties":{"machineType":{"type":"string","minLength":0},"max":{"type":"number"},"updatedAt":{"type":"string","description":"ISO date string","minLength":0}}},"MatrixMethodProgram":{"type":"object","required":["id","programId"],"properties":{"id":{"type":"string","description":"Program ID"},"userId":{"type":"string","description":"Exerciser ID (from auth)"},"programId":{"type":"number","description":"Program enum ID"},"assessmentBaselineKph":{"type":"number"},"backupGoalBaseline":{"type":"number"},"baselineKph":{"type":"number"},"goalBaselineKph":{"type":"number"},"goalIncrementKph":{"type":"number"},"goalTimeAcknowledged":{"type":"boolean"},"programEvents":{"type":"object","properties":{"events":{"type":"array","items":{"type":"object"}}}}},"additionalProperties":true},"NpWorkout":{"type":"object","properties":{"_id":{"type":"string"},"title":{"type":"string"},"exerciserId":{"type":"string"},"completedDate":{"type":"integer"},"category":{"type":"string"},"equipmentType":{"type":"string"},"completedProfile":{"type":"object"}}},"PtAssignment":{"type":"object","properties":{"exerciserId":{"type":"string"},"startDate":{"type":"integer"},"endDate":{"type":"integer"},"name":{"type":"string"},"exercises":{"type":"array","items":{"type":"object","required":["assignedProfile","title","preset"],"properties":{"_id":{"type":"string"},"video":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"equipmentType":{"type":"string"},"cardioProgramId":{"type":"integer"},"assignedProfile":{"type":"object","required":["global"],"properties":{"global":{"type":"object"},"segments":{"type":"array","items":{"type":"object"}}}},"completedProfile":{"type":"object"},"completedDate":{"type":"integer"},"feedback":{"type":"string"},"emoji":{"type":"string"},"exerciserDescription":{"type":"string"},"preset":{"type":"object","required":["metrics"],"properties":{"maxSegments":{"type":"integer"},"metrics":{"type":"array","items":{"type":"object"}}}},"images":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"isPrimary":{"type":"boolean"},"picturePath":{"type":"string"},"transform":{"type":"string"}}}},"assignmentType":{"type":"string"}}}},"_id":{"type":"string"},"facility":{"type":"object","properties":{"name":{"type":"string"},"_id":{"type":"string"}}},"scheduleType":{"type":"string"}}},"PtCombinedAssignment":{"type":"object","required":["_id","assignmentType","startDate","exercises","facility"],"properties":{"_id":{"type":"string"},"assignmentType":{"type":"string"},"exerciserId":{"type":"string"},"startDate":{"type":"integer"},"endDate":{"type":"integer"},"name":{"type":"string"},"scheduleType":{"type":"string"},"exercises":{"type":"array","items":{"type":"object","required":["assignedProfile","title","preset"],"properties":{"_id":{"type":"string"},"video":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"equipmentType":{"type":"string"},"cardioProgramId":{"type":"integer"},"assignedProfile":{"type":"object","required":["global"],"properties":{"global":{"type":"object"},"segments":{"type":"array","items":{"type":"object"}}}},"completedProfile":{"type":"object"},"completedDate":{"type":"integer"},"feedback":{"type":"string"},"emoji":{"type":"string"},"exerciserDescription":{"type":"string"},"preset":{"type":"object","required":["metrics"],"properties":{"maxSegments":{"type":"integer"},"metrics":{"type":"array","items":{"type":"object"}}}},"images":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"isPrimary":{"type":"boolean"},"picturePath":{"type":"string"},"transform":{"type":"string"}}}},"assignmentType":{"type":"string"}}}},"facility":{"type":"object","properties":{"name":{"type":"string"},"_id":{"type":"string"}}},"parentAssignmentId":{"type":"string"},"trainerId":{"type":"string"},"recurrence":{"type":"object"},"trainingPlan":{"type":"object","properties":{"trainingPlanId":{"type":"string"},"trainingPlanName":{"type":"string"},"trainingPlanAssignmentId":{"type":"string"},"repetition":{"type":"number"},"repeats":{"type":"number"},"trainingPlanAssignmentIdx":{"type":"number"}}}}},"PtEmbeddedExercise":{"type":"object","required":["assignedProfile","title","preset"],"properties":{"_id":{"type":"string"},"video":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"equipmentType":{"type":"string"},"cardioProgramId":{"type":"integer"},"assignedProfile":{"type":"object","required":["global"],"properties":{"global":{"type":"object"},"segments":{"type":"array","items":{"type":"object"}}}},"completedProfile":{"type":"object"},"completedDate":{"type":"integer"},"feedback":{"type":"string"},"emoji":{"type":"string"},"exerciserDescription":{"type":"string"},"preset":{"type":"object","required":["metrics"],"properties":{"maxSegments":{"type":"integer"},"metrics":{"type":"array","items":{"type":"object"}}}},"images":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"isPrimary":{"type":"boolean"},"picturePath":{"type":"string"},"transform":{"type":"string"}}}},"assignmentType":{"type":"string"}}},"PtError":{"type":"object","required":["code","message"],"properties":{"message":{"type":"string"}}},"PtManualWorkoutRequest":{"type":"object","properties":{"workoutId":{"type":"string","minLength":0},"workout":{"type":"object","required":["category","completedDate","completedProfile"],"properties":{"completedDate":{"type":"integer"},"category":{"type":"string","minLength":0},"completeState":{"type":"string","required":false,"enum":["not_complete","completed_manually","completed_automatically","skipped","cancelled"]},"benchmark":{"type":"number"},"completedProfile":{"type":"object","properties":{"duration":{"type":"number"},"distance":{"type":"number"},"calories":{"type":"integer"},"speed":{"type":"number","required":false},"avgSpeed":{"type":"number"},"avgIncline":{"type":"number"},"incline":{"type":"number","required":false},"avgResistance":{"type":"number"},"workoutSource":{"type":"string","minLength":0},"exerciserWorkoutId":{"type":"string","minLength":0},"ssaComplete":{"type":"boolean"},"segments":{"type":"array","items":{"type":"object"}},"maxSpeed":{"type":"number","required":false},"maxIncline":{"type":"number","required":false},"maxResistance":{"type":"number","required":false},"minResistance":{"type":"number","required":false},"resistance":{"type":"number","required":false},"floors":{"type":"number","required":false},"cardioProgramLevel":{"type":"number"},"sweatScore":{"type":"number"},"percentTHR":{"type":"number"},"watts":{"type":"number","required":false},"avgHeartRate":{"type":"number","required":false},"peakHeartRate":{"type":"number","required":false}}}}}}},"PtMessage":{"type":"object","properties":{"message":{"type":"string","minLength":0}}},"PtMessageBroadcast":{"type":"object","properties":{"message":{"type":"string","minLength":0},"recipients":{"type":"array","items":{"type":"string","minLength":0}},"facility":{"type":"string","minLength":0}}},"PtMetric":{"type":"object","properties":{"title":{"type":"string"},"name":{"type":"string"},"forSegment":{"type":"boolean"},"validation":{"type":"object"},"math":{"type":"string","required":false,"enum":["sum","average"]},"unit":{"type":"string","required":false,"enum":["","seconds","min","calories","%","watts","level"]}}},"PtMetricsInfo":{"type":"object","properties":{"_id":{"type":"string"},"type":{"type":"string"},"metrics":{"type":"object","properties":{"title":{"type":"string"},"name":{"type":"string"},"forSegment":{"type":"boolean"},"validation":{"type":"object"},"math":{"type":"string","required":false,"enum":["sum","average"]},"unit":{"type":"string","required":false,"enum":["","seconds","min","calories","%","watts","level"]}}},"maxSegments":{"type":"number"}}},"PtUpdateExercise":{"type":"object","properties":{"feedback":{"type":"string","minLength":0},"emoji":{"type":"string","minLength":0},"exerciserDescription":{"type":"string","minLength":0},"video":{"type":"string","minLength":0},"runDate":{"type":"integer"}}},"PtWotd":{"type":"object","properties":{"settings":{"type":"object","properties":{"language":{"type":"string"},"measurementUnit":{"type":"string"},"dateFormat":{"type":"string"},"timeFormat":{"type":"number"}}},"assignments":{"type":"array","items":{"type":"object","required":["_id","assignmentType","startDate","exercises","facility"],"properties":{"_id":{"type":"string"},"assignmentType":{"type":"string"},"exerciserId":{"type":"string"},"startDate":{"type":"integer"},"endDate":{"type":"integer"},"name":{"type":"string"},"scheduleType":{"type":"string"},"exercises":{"type":"array","items":{"type":"object","required":["assignedProfile","title","preset"],"properties":{"_id":{"type":"string"},"video":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"equipmentType":{"type":"string"},"cardioProgramId":{"type":"integer"},"assignedProfile":{"type":"object","required":["global"],"properties":{"global":{"type":"object"},"segments":{"type":"array","items":{"type":"object"}}}},"completedProfile":{"type":"object"},"completedDate":{"type":"integer"},"feedback":{"type":"string"},"emoji":{"type":"string"},"exerciserDescription":{"type":"string"},"preset":{"type":"object","required":["metrics"],"properties":{"maxSegments":{"type":"integer"},"metrics":{"type":"array","items":{"type":"object"}}}},"images":{"type":"array","items":{"type":"object","properties":{"_id":{"type":"string"},"isPrimary":{"type":"boolean"},"picturePath":{"type":"string"},"transform":{"type":"string"}}}},"assignmentType":{"type":"string"}}}},"facility":{"type":"object","properties":{"name":{"type":"string"},"_id":{"type":"string"}}},"parentAssignmentId":{"type":"string"},"trainerId":{"type":"string"},"recurrence":{"type":"object"},"trainingPlan":{"type":"object","properties":{"trainingPlanId":{"type":"string"},"trainingPlanName":{"type":"string"},"trainingPlanAssignmentId":{"type":"string"},"repetition":{"type":"number"},"repeats":{"type":"number"},"trainingPlanAssignmentIdx":{"type":"number"}}}}}}}},"Scan":{"type":"object","properties":{"type":{"type":"string","description":"Type of request"},"status":{"type":"number","description":"Request status"},"member_id":{"type":"number","description":"The external member ID"},"member_email":{"type":"string","description":"The member's email"},"member_firstname":{"type":"string","description":"The member's first name"},"member_lastname":{"type":"string","description":"The member's last name"},"member_age":{"type":"number","description":"The member's age"},"member_height":{"type":"number","description":"The member's height"},"member_scans":{"type":"number","description":"Number of scans for given member"},"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"The scan ID"},"date_time":{"type":"date","description":"Local time of scan"},"weight_result":{"type":"number","description":"The weight given from the scan"},"lean_body_mass_result":{"type":"number","description":"The lean body mass weight given from the scan"},"body_fat_result":{"type":"number","description":"The body fat weight given from the scan"},"skeletal_muscle_mass_result":{"type":"number","description":"The skeletal muscle mass weight given from the scan"},"body_fat_percentage":{"type":"number","description":"The body fat percentage given from the scan"},"visceral_fat_level":{"type":"number","description":"The visceral fat level given from the scan"}}}}}},"Scans":{"type":"object","properties":{"id":{"type":"number","description":"The scan ID"},"date_time":{"type":"date","description":"Local time of scan"},"weight_result":{"type":"number","description":"The weight given from the scan"},"lean_body_mass_result":{"type":"number","description":"The lean body mass weight given from the scan"},"body_fat_result":{"type":"number","description":"The body fat weight given from the scan"},"skeletal_muscle_mass_result":{"type":"number","description":"The skeletal muscle mass weight given from the scan"},"body_fat_percentage":{"type":"number","description":"The body fat percentage given from the scan"},"visceral_fat_level":{"type":"number","description":"The visceral fat level given from the scan"}}},"Set":{"type":"object","required":["weight","calories","reps","average_heart_rate"],"properties":{"weight":{"type":"integer","description":"The weight of the set in grams"},"set_weight":{"type":"object","description":"The weight of the set.  Contains weights in both ounces and grams.","required":["ounces","grams"],"properties":{"ounces":{"type":"integer","description":"The weight of the set in ounces"},"grams":{"type":"integer","description":"The weight of the set in grams"}}},"calories":{"type":"integer","description":"Total calories burned during the set"},"average_heart_rate":{"type":"number","description":"Average heart rate during the set"},"reps":{"type":"array","items":{"type":"object","required":["start","stop","distance","average_heart_rate","elift_rep_score"],"properties":{"start":{"type":"integer","description":"Start of the rep"},"stop":{"type":"integer","description":"End of the rep"},"distance":{"type":"number","description":"Distance traveled during the rep"},"average_heart_rate":{"type":"number","description":"Average heart rate during the rep"},"elift_rep_score":{"type":"integer","description":"The elift rep score of the rep"}}}}}},"SubmittedWorkout":{"type":"object","required":["duration","distance","workout_time","calories","average_heart_rate","max_heart_rate","type"],"properties":{"workout_id":{"type":"string","description":"A unique identifier for the workout.","minLength":0},"exerciser_id":{"type":"string","description":"Exerciser ID of the exerciser who submitted the workout.","minLength":0},"exercise_title":{"type":"string","description":"The title of the workout.  For connected workout sources, 'unknown' will be returned if the exercise title fails to resolve.","minLength":0},"xid":{"type":"string","description":"XID of the user. Required for netpulse workout submission.","minLength":0},"passcode":{"type":"string","description":"Passcode of the user. Required for netpulse workout submission.","minLength":0},"workout_originator":{"type":"string","description":"The application that starts and controls the workout.","minLength":0},"program_level":{"type":"number","description":"The program level for the workout."},"duration":{"type":"integer","description":"Total duration of the workout in seconds."},"distance":{"type":"number","description":"Total distance of the workout in meters."},"machine_type":{"type":"string","description":"The modality type of the equipment the workout was performed on.","minLength":0},"machine_id":{"type":"string","description":"Machine ID of the machine the workout was performed on.","minLength":0},"workout_time":{"type":"string","format":"dateTime","description":"Date and time the workout had begun. 24 hour format in UTC.","minLength":0},"calories":{"type":"integer","description":"Total calories burned."},"average_heart_rate":{"type":"integer","description":"Average heart rate during the workout."},"average_pace":{"type":"integer","description":"Average pace during the workout."},"max_heart_rate":{"type":"integer","description":"Maximum heart rate during the workout."},"min_heart_rate":{"type":"integer","description":"Minimum heart rate during the workout."},"program_id":{"type":"string","description":"The program uuid of the workout","minLength":0},"program_type":{"type":"integer","description":"The program id of the workout"},"model_id":{"type":"string","description":"The model id from the workout","minLength":0},"sprint_scores":{"type":"object","description":"The individual Sprint 8 scores","properties":{"1":{"type":"number"},"2":{"type":"number"},"3":{"type":"number"},"4":{"type":"number"},"5":{"type":"number"},"6":{"type":"number"},"7":{"type":"number"},"8":{"type":"number"}}},"total_sweat_score":{"type":"number","description":"The total Sprint 8 sweat score"},"sprint_8_program_level":{"type":"number","description":"Sprint 8 program level. Should be an integer between 1 and 21."},"watts_kg":{"type":"number","description":"The power to weight ratio of the workout"},"type":{"type":"string","description":"The type of workout performed.","enum":["cardio","strength"]},"interval_seconds":{"type":"integer","description":"The interval split in seconds."},"intervals":{"type":"array","items":{"type":"object","required":["duration","distance","speed","incline","resistance"],"properties":{"duration":{"type":"integer","description":"The duration of the interval in seconds."},"average_distance":{"type":"number","description":"The average distance of the interval in meters."},"distance":{"type":"number","description":"The distance of the interval in meters."},"speed":{"type":"number","description":"The speed of the interval in kph."},"cadence":{"type":"integer","description":"The cadence of the interval.  For rowers, this is strokes per minute (SPM)."},"incline":{"type":"number","description":"The incline of the interval."},"resistance":{"type":"integer","description":"The resistance of the interval."},"heart_rate":{"type":"integer","description":"The heart rate of the interval."},"total_steps":{"type":"integer","description":"The total steps of the interval."},"power":{"type":"integer","description":"Average power for the interval"},"rpm":{"type":"integer","description":"Average RPM for the interval"}}}},"sets":{"type":"array","items":{"type":"object","required":["weight","calories","reps","average_heart_rate"],"properties":{"weight":{"type":"integer","description":"The weight of the set in grams"},"set_weight":{"type":"object","description":"The weight of the set.  Contains weights in both ounces and grams.","required":["ounces","grams"],"properties":{"ounces":{"type":"integer","description":"The weight of the set in ounces"},"grams":{"type":"integer","description":"The weight of the set in grams"}}},"calories":{"type":"integer","description":"Total calories burned during the set"},"average_heart_rate":{"type":"number","description":"Average heart rate during the set"},"reps":{"type":"array","items":{"type":"object","required":["start","stop","distance","average_heart_rate","elift_rep_score"],"properties":{"start":{"type":"integer","description":"Start of the rep"},"stop":{"type":"integer","description":"End of the rep"},"distance":{"type":"number","description":"Distance traveled during the rep"},"average_heart_rate":{"type":"number","description":"Average heart rate during the rep"},"elift_rep_score":{"type":"integer","description":"The elift rep score of the rep"}}}}}}},"function_threshold_power":{"type":"number","description":"Indoor Cycle function threshold power"},"average_rpm":{"type":"number","description":"Indoor Cycle average RPM"},"peak_rpm":{"type":"number","description":"Indoor Cycle peak RPM"},"peak_spm":{"type":"number","description":"Rower Peak SPM"},"total_strokes":{"type":"number","description":"Rower Total Strokes"},"peak_watts":{"type":"number","description":"Cardio Frame measurement"},"average_watts":{"type":"number","description":"Cardio Frame measurement"},"total_floors":{"type":"number","description":"Climbmill and Stepper floors"},"integration_metadata":{"type":"object","description":"Data for integration partners"}}},"UserMetadata":{"type":"object","properties":{"ptp":{"type":"boolean"},"high_sweat_score":{"type":"number","description":"If this is a cardio machine and there is a high score, it sent in here"},"max_weight_grams":{"type":"number","description":"If this is a strength machine and there is a benchmark, it sent in here"}},"allOf":[{"type":"object","properties":{"disabled_features":{"type":"array","items":{"type":"string","description":"app id or program id for the feature to disable"}},"enabled_features":{"type":"array","items":{"type":"string","description":"app id or program id for the feature to enable"}},"hidden_features":{"type":"array","items":{"type":"string","description":"app id or program id for the feature to hide"}}}}],"additionalProperties":true},"Workout":{"type":"object","properties":{"id":{"type":"string","description":"Workout ID"},"workout_source":{"type":"string","enum":["connected","third-party","manual"]},"exercise_title":{"type":"string","description":"The title of the workout.  For connected workout sources, 'unknown' will be returned if the exercise title fails to resolve."},"workout_time":{"type":"string","format":"date-time","description":"ISO Date/Time start of the workout (format YYYY-MM-DD'T'HH:mm:ss.SSS'Z')"},"workout_type":{"type":"string","string":"Type of workout"},"machine_id":{"type":"string","description":"DAPI Machine ID"},"machine_type":{"type":"string","description":"Workout machine type.  For connected workout sources, 'unknown' will be returned if the exercise title fails to resolve."},"program_type":{"type":"integer","description":"The program id of the workout"},"duration":{"type":"integer","description":"Workout duration in seconds"},"distance":{"type":"number","description":"Workout distance in meters"},"calories":{"type":"integer","description":"Workout energy expenditure in calories"},"average_heart_rate":{"type":"integer","description":"Average heart rate of the exerciser in beats per minute"},"max_heart_rate":{"type":"integer","description":"Maximum heart rate of the exerciser in beats per minute"},"archived":{"type":"integer","description":"0 - Not archived, 1 - Archived"},"intervals":{"type":"array","items":{"type":"object","required":["duration","distance","speed","incline","resistance"],"properties":{"duration":{"type":"integer","description":"The duration of the interval in seconds."},"average_distance":{"type":"number","description":"The average distance of the interval in meters."},"distance":{"type":"number","description":"The distance of the interval in meters."},"speed":{"type":"number","description":"The speed of the interval in kph."},"cadence":{"type":"integer","description":"The cadence of the interval.  For rowers, this is strokes per minute (SPM)."},"incline":{"type":"number","description":"The incline of the interval."},"resistance":{"type":"integer","description":"The resistance of the interval."},"heart_rate":{"type":"integer","description":"The heart rate of the interval."},"total_steps":{"type":"integer","description":"The total steps of the interval."},"power":{"type":"integer","description":"Average power for the interval"},"rpm":{"type":"integer","description":"Average RPM for the interval"}}}},"sets":{"type":"array","items":{"type":"object","required":["weight","calories","reps","average_heart_rate"],"properties":{"weight":{"type":"integer","description":"The weight of the set in grams"},"set_weight":{"type":"object","description":"The weight of the set.  Contains weights in both ounces and grams.","required":["ounces","grams"],"properties":{"ounces":{"type":"integer","description":"The weight of the set in ounces"},"grams":{"type":"integer","description":"The weight of the set in grams"}}},"calories":{"type":"integer","description":"Total calories burned during the set"},"average_heart_rate":{"type":"number","description":"Average heart rate during the set"},"reps":{"type":"array","items":{"type":"object","required":["start","stop","distance","average_heart_rate","elift_rep_score"],"properties":{"start":{"type":"integer","description":"Start of the rep"},"stop":{"type":"integer","description":"End of the rep"},"distance":{"type":"number","description":"Distance traveled during the rep"},"average_heart_rate":{"type":"number","description":"Average heart rate during the rep"},"elift_rep_score":{"type":"integer","description":"The elift rep score of the rep"}}}}}}}}}}}