{"openapi":"3.1.0","info":{"title":"Workout Relay API","description":"Validate and deliver structured running workouts to Garmin Connect.","version":"0.1.0"},"paths":{"/healthz":{"get":{"tags":["system"],"summary":"Health","operationId":"health_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/readyz":{"get":{"tags":["system"],"summary":"Ready","operationId":"ready_readyz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/policy":{"get":{"tags":["system"],"summary":"Policy","description":"The retention periods the privacy notice quotes.\n\nServed unauthenticated so the notice can state real numbers rather\nthan prose, and so they cannot drift from the configuration.","operationId":"policy_api_v1_policy_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/plan-schema":{"get":{"tags":["plan format"],"summary":"Schema Endpoint","operationId":"schema_endpoint_api_v1_plan_schema_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/plan-example":{"get":{"tags":["plan format"],"summary":"Example Endpoint","operationId":"example_endpoint_api_v1_plan_example_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/plan-format":{"get":{"tags":["plan format"],"summary":"Format Endpoint","operationId":"format_endpoint_api_v1_plan_format_get","parameters":[{"name":"language","in":"query","required":false,"schema":{"type":"string","default":"en","title":"Language"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/register":{"post":{"tags":["auth"],"summary":"Register","operationId":"register_api_v1_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Credentials"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["auth"],"summary":"Login","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Credentials"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["auth"],"summary":"Logout","operationId":"logout_api_v1_auth_logout_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/me":{"get":{"tags":["auth"],"summary":"Me","operationId":"me_api_v1_me_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/me/language":{"put":{"tags":["auth"],"summary":"Set Language","operationId":"set_language_api_v1_me_language_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LanguagePreference"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/me/password":{"post":{"tags":["auth"],"summary":"Change Password","operationId":"change_password_api_v1_me_password_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordChange"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account":{"delete":{"tags":["auth"],"summary":"Delete Account","operationId":"delete_account_api_v1_account_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountDeletion"}}}},"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connections":{"get":{"tags":["Connected assistants"],"summary":"List Connections","operationId":"list_connections_api_v1_connections_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/connections/{family}":{"delete":{"tags":["Connected assistants"],"summary":"Revoke Connection","operationId":"revoke_connection_api_v1_connections__family__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"family","in":"path","required":true,"schema":{"type":"string","title":"Family"}},{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys":{"get":{"tags":["API keys"],"summary":"List Api Keys","operationId":"list_api_keys_api_v1_api_keys_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["API keys"],"summary":"Create Api Key","operationId":"create_api_key_api_v1_api_keys_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/api-keys/{key_id}":{"delete":{"tags":["API keys"],"summary":"Revoke Api Key","operationId":"revoke_api_key_api_v1_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}},{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/activities":{"get":{"tags":["Activities"],"summary":"List Activities","operationId":"list_activities_api_v1_activities_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Limit"}},{"name":"start","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Start"}},{"name":"sport","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sport"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/activities/{activity_id}":{"get":{"tags":["Activities"],"summary":"Get Activity","operationId":"get_activity_api_v1_activities__activity_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"activity_id","in":"path","required":true,"schema":{"type":"string","title":"Activity Id"}},{"name":"samples","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Samples"}},{"name":"laps","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Laps"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/garmin/status":{"get":{"tags":["Garmin"],"summary":"Garmin Status","operationId":"garmin_status_api_v1_garmin_status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/garmin/connect/start":{"post":{"tags":["Garmin"],"summary":"Garmin Connect Start","operationId":"garmin_connect_start_api_v1_garmin_connect_start_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GarminLogin"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/garmin/connect/complete":{"post":{"tags":["Garmin"],"summary":"Garmin Connect Complete","operationId":"garmin_connect_complete_api_v1_garmin_connect_complete_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GarminMfa"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/garmin/connection":{"delete":{"tags":["Garmin"],"summary":"Garmin Disconnect","operationId":"garmin_disconnect_api_v1_garmin_connection_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/plans/validate":{"post":{"tags":["Plans"],"summary":"Validate Endpoint","operationId":"validate_endpoint_api_v1_plans_validate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkoutPlan"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/plans":{"post":{"tags":["Plans"],"summary":"Upload Plan","operationId":"upload_plan_api_v1_plans_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkoutPlan"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Plans"],"summary":"List Plans","operationId":"list_plans_api_v1_plans_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Plans"],"summary":"Clear Plan History","description":"Forget finished submissions, keeping what prevents duplicates.\n\nThe workout links record which Garmin workout each id became. Deleting\nthose would make the next send create a second copy of every workout\nrather than updating the existing one, so history is cleared and the\nlinks stay.","operationId":"clear_plan_history_api_v1_plans_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"X-CSRF-Token","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Csrf-Token"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/plans/{submission_id}":{"get":{"tags":["Plans"],"summary":"Get Plan Status","operationId":"get_plan_status_api_v1_plans__submission_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","title":"Submission Id"}},{"name":"workout_relay_session","in":"cookie","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workout Relay Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AccountDeletion":{"properties":{"password":{"type":"string","maxLength":200,"minLength":1,"format":"password","title":"Password","writeOnly":true}},"type":"object","required":["password"],"title":"AccountDeletion"},"ApiKeyRequest":{"properties":{"name":{"type":"string","maxLength":80,"minLength":1,"title":"Name"},"scopes":{"items":{"type":"string","enum":["plans:read","plans:write","activities:read"]},"type":"array","maxItems":3,"minItems":1,"title":"Scopes"}},"type":"object","required":["name"],"title":"ApiKeyRequest"},"Credentials":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":200,"minLength":12,"format":"password","title":"Password","writeOnly":true}},"type":"object","required":["email","password"],"title":"Credentials"},"GarminLogin":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","maxLength":300,"minLength":1,"format":"password","title":"Password","writeOnly":true},"retention":{"type":"string","pattern":"^(persistent|visit)$","title":"Retention"}},"type":"object","required":["email","password","retention"],"title":"GarminLogin"},"GarminMfa":{"properties":{"attempt_id":{"type":"string","maxLength":100,"minLength":10,"title":"Attempt Id"},"code":{"type":"string","maxLength":20,"minLength":4,"format":"password","title":"Code","writeOnly":true},"retention":{"type":"string","pattern":"^(persistent|visit)$","title":"Retention"}},"type":"object","required":["attempt_id","code","retention"],"title":"GarminMfa"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LanguagePreference":{"properties":{"language":{"type":"string","pattern":"^(en|fr)$","title":"Language"}},"type":"object","required":["language"],"title":"LanguagePreference"},"PasswordChange":{"properties":{"current_password":{"type":"string","maxLength":200,"minLength":1,"format":"password","title":"Current Password","writeOnly":true},"new_password":{"type":"string","maxLength":200,"minLength":12,"format":"password","title":"New Password","writeOnly":true}},"type":"object","required":["current_password","new_password"],"title":"PasswordChange"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WorkoutPlan":{"title":"Workout Relay running plan","type":"object","additionalProperties":false,"required":["schema_version","plan_id","title","workouts"],"properties":{"schema_version":{"const":1},"plan_id":{"type":"string","pattern":"^[a-zA-Z0-9][a-zA-Z0-9_-]{2,99}$"},"title":{"type":"string","minLength":1,"maxLength":120},"description":{"type":"string","maxLength":1000},"workouts":{"type":"array","minItems":1,"maxItems":31,"items":{"$ref":"#/components/schemas/WorkoutPlan/$defs/workout"}}},"$defs":{"workout":{"type":"object","additionalProperties":false,"required":["id","date","sport","title","steps"],"properties":{"id":{"type":"string","pattern":"^[a-z0-9][a-z0-9_-]{1,159}$","description":"Stable workout identity across this account. Keep unchanged when rescheduling."},"date":{"type":"string","format":"date"},"sport":{"const":"running"},"title":{"type":"string","minLength":1,"maxLength":50},"description":{"type":"string","maxLength":500},"estimated_duration_sec":{"type":"integer","minimum":1,"maximum":86400},"steps":{"type":"array","minItems":1,"maxItems":50,"items":{"$ref":"#/components/schemas/WorkoutPlan/$defs/step"}}}},"step":{"oneOf":[{"$ref":"#/components/schemas/WorkoutPlan/$defs/simpleStep"},{"$ref":"#/components/schemas/WorkoutPlan/$defs/repeatStep"}]},"simpleStep":{"type":"object","additionalProperties":false,"required":["type","duration","target"],"properties":{"type":{"enum":["warmup","interval","recovery","cooldown"]},"name":{"type":"string","maxLength":80},"duration":{"$ref":"#/components/schemas/WorkoutPlan/$defs/duration"},"target":{"$ref":"#/components/schemas/WorkoutPlan/$defs/target"}}},"repeatStep":{"type":"object","additionalProperties":false,"required":["type","count","steps"],"properties":{"type":{"const":"repeat"},"name":{"type":"string","maxLength":80},"count":{"type":"integer","minimum":1,"maximum":50},"steps":{"type":"array","minItems":1,"maxItems":5,"items":{"$ref":"#/components/schemas/WorkoutPlan/$defs/simpleStep"}}}},"duration":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type","value"],"properties":{"type":{"const":"time"},"value":{"type":"integer","minimum":1,"maximum":86400}}},{"type":"object","additionalProperties":false,"required":["type","value"],"properties":{"type":{"const":"distance"},"value":{"type":"integer","minimum":1,"maximum":500000}}}]},"target":{"oneOf":[{"type":"object","additionalProperties":false,"required":["type"],"properties":{"type":{"const":"no_target"}}},{"type":"object","additionalProperties":false,"required":["type","low","high"],"properties":{"type":{"const":"heart_rate"},"low":{"type":"integer","minimum":30,"maximum":250},"high":{"type":"integer","minimum":30,"maximum":250}}},{"type":"object","additionalProperties":false,"required":["type","slow","fast"],"properties":{"type":{"const":"pace"},"slow":{"type":"string","pattern":"^[2-9]:[0-5][0-9]$"},"fast":{"type":"string","pattern":"^[2-9]:[0-5][0-9]$"}}}]}}}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}},"servers":[{"url":"https://relay.numerate.tech"}]}