{"openapi":"3.1.0","info":{"title":"Personal OS","version":"dev"},"paths":{"/api/v1/auth/sign-up":{"post":{"tags":["Auth"],"summary":"Sign Up","description":"Register a new user.","operationId":"sign_up_api_v1_auth_sign_up_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignUpRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/sign-in":{"post":{"tags":["Auth"],"summary":"Sign In","description":"Sign in a user.","operationId":"sign_in_api_v1_auth_sign_in_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["Auth"],"summary":"Me","description":"Get current user from session.","operationId":"me_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignInApiResponse"}}}}}}},"/api/v1/auth/sign-out":{"post":{"tags":["Auth"],"summary":"Sign Out","description":"Sign out a user.","operationId":"sign_out_api_v1_auth_sign_out_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}}}}},"/api/v1/habits/":{"post":{"tags":["Habits"],"summary":"Create Habit","description":"Create a new habit.","operationId":"create_habit_api_v1_habits__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateHabitRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HabitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Habits"],"summary":"Get Habits","description":"Get all habits for the current user.","operationId":"get_habits_api_v1_habits__get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","description":"Filter only active habits","default":false,"title":"Active Only"},"description":"Filter only active habits"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HabitListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/habits/{habit_id}":{"get":{"tags":["Habits"],"summary":"Get Habit","description":"Get a habit by ID.","operationId":"get_habit_api_v1_habits__habit_id__get","parameters":[{"name":"habit_id","in":"path","required":true,"schema":{"type":"integer","title":"Habit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HabitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Habits"],"summary":"Update Habit","description":"Update a habit.","operationId":"update_habit_api_v1_habits__habit_id__put","parameters":[{"name":"habit_id","in":"path","required":true,"schema":{"type":"integer","title":"Habit Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateHabitRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HabitResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Habits"],"summary":"Delete Habit","description":"Delete a habit.","operationId":"delete_habit_api_v1_habits__habit_id__delete","parameters":[{"name":"habit_id","in":"path","required":true,"schema":{"type":"integer","title":"Habit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/habits/{habit_id}/log":{"post":{"tags":["Habits"],"summary":"Log Habit Completion","description":"Log a habit completion.","operationId":"log_habit_completion_api_v1_habits__habit_id__log_post","parameters":[{"name":"habit_id","in":"path","required":true,"schema":{"type":"integer","title":"Habit Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogHabitRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/plans/":{"post":{"tags":["Workout - Plans"],"summary":"Create Plan","description":"Create a new plan.","operationId":"create_plan_api_v1_workout_plans__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePlanRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Workout - Plans"],"summary":"Get Plans","description":"Get all plans for the current user.","operationId":"get_plans_api_v1_workout_plans__get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","description":"Filter only active plans","default":false,"title":"Active Only"},"description":"Filter only active plans"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/plans/{plan_id}":{"get":{"tags":["Workout - Plans"],"summary":"Get Plan","description":"Get a plan by ID with its routines.","operationId":"get_plan_api_v1_workout_plans__plan_id__get","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"integer","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Workout - Plans"],"summary":"Update Plan","description":"Update a plan.","operationId":"update_plan_api_v1_workout_plans__plan_id__put","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"integer","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePlanRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workout - Plans"],"summary":"Delete Plan","description":"Delete a plan.","operationId":"delete_plan_api_v1_workout_plans__plan_id__delete","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"integer","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/routines/":{"post":{"tags":["Workout - Routines"],"summary":"Create Routine","description":"Create a new routine.","operationId":"create_routine_api_v1_workout_routines__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRoutineRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/routines/{routine_id}":{"get":{"tags":["Workout - Routines"],"summary":"Get Routine","description":"Get a routine by ID with its exercises.","operationId":"get_routine_api_v1_workout_routines__routine_id__get","parameters":[{"name":"routine_id","in":"path","required":true,"schema":{"type":"integer","title":"Routine Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Workout - Routines"],"summary":"Update Routine","description":"Update a routine.","operationId":"update_routine_api_v1_workout_routines__routine_id__put","parameters":[{"name":"routine_id","in":"path","required":true,"schema":{"type":"integer","title":"Routine Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRoutineRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoutineResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workout - Routines"],"summary":"Delete Routine","description":"Delete a routine.","operationId":"delete_routine_api_v1_workout_routines__routine_id__delete","parameters":[{"name":"routine_id","in":"path","required":true,"schema":{"type":"integer","title":"Routine Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/routines/{routine_id}/exercises":{"post":{"tags":["Workout - Routines"],"summary":"Add Exercise To Routine","description":"Add an exercise to a routine.","operationId":"add_exercise_to_routine_api_v1_workout_routines__routine_id__exercises_post","parameters":[{"name":"routine_id","in":"path","required":true,"schema":{"type":"integer","title":"Routine Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddExerciseToRoutineRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/routines/{routine_id}/exercises/{exercise_id}":{"delete":{"tags":["Workout - Routines"],"summary":"Remove Exercise From Routine","description":"Remove an exercise from a routine.","operationId":"remove_exercise_from_routine_api_v1_workout_routines__routine_id__exercises__exercise_id__delete","parameters":[{"name":"routine_id","in":"path","required":true,"schema":{"type":"integer","title":"Routine Id"}},{"name":"exercise_id","in":"path","required":true,"schema":{"type":"integer","title":"Exercise Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Workout - Routines"],"summary":"Update Routine Exercise","description":"Update sets/reps/rest/target_weight of an exercise in a routine.","operationId":"update_routine_exercise_api_v1_workout_routines__routine_id__exercises__exercise_id__put","parameters":[{"name":"routine_id","in":"path","required":true,"schema":{"type":"integer","title":"Routine Id"}},{"name":"exercise_id","in":"path","required":true,"schema":{"type":"integer","title":"Exercise Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRoutineExerciseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/exercises/":{"post":{"tags":["Workout - Exercises"],"summary":"Create Exercise","description":"Create a new exercise.","operationId":"create_exercise_api_v1_workout_exercises__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateExerciseRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExerciseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Workout - Exercises"],"summary":"Get Exercises","description":"Get all exercises for the current user.","operationId":"get_exercises_api_v1_workout_exercises__get","parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search exercises by name","title":"Search"},"description":"Search exercises by name"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExerciseListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/exercises/{exercise_id}":{"get":{"tags":["Workout - Exercises"],"summary":"Get Exercise","description":"Get an exercise by ID.","operationId":"get_exercise_api_v1_workout_exercises__exercise_id__get","parameters":[{"name":"exercise_id","in":"path","required":true,"schema":{"type":"integer","title":"Exercise Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExerciseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Workout - Exercises"],"summary":"Update Exercise","description":"Update an exercise.","operationId":"update_exercise_api_v1_workout_exercises__exercise_id__put","parameters":[{"name":"exercise_id","in":"path","required":true,"schema":{"type":"integer","title":"Exercise Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateExerciseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExerciseResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workout - Exercises"],"summary":"Delete Exercise","description":"Delete an exercise.","operationId":"delete_exercise_api_v1_workout_exercises__exercise_id__delete","parameters":[{"name":"exercise_id","in":"path","required":true,"schema":{"type":"integer","title":"Exercise Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/workouts/":{"post":{"tags":["Workout - Workouts"],"summary":"Start Workout","description":"Start a new workout.","operationId":"start_workout_api_v1_workout_workouts__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartWorkoutRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Workout - Workouts"],"summary":"Get Workouts","description":"Get all workouts for the current user.","operationId":"get_workouts_api_v1_workout_workouts__get","parameters":[{"name":"routine_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by routine ID","title":"Routine Id"},"description":"Filter by routine ID"},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Limit number of results","title":"Limit"},"description":"Limit number of results"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkoutListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/workouts/{workout_id}":{"get":{"tags":["Workout - Workouts"],"summary":"Get Workout","description":"Get a workout by ID with sets, routine and exercises (full detail).","operationId":"get_workout_api_v1_workout_workouts__workout_id__get","parameters":[{"name":"workout_id","in":"path","required":true,"schema":{"type":"integer","title":"Workout Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkoutDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workout - Workouts"],"summary":"Delete Workout","description":"Delete a workout and all its sets.","operationId":"delete_workout_api_v1_workout_workouts__workout_id__delete","parameters":[{"name":"workout_id","in":"path","required":true,"schema":{"type":"integer","title":"Workout Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/workouts/{workout_id}/complete":{"put":{"tags":["Workout - Workouts"],"summary":"Complete Workout","description":"Complete a workout.","operationId":"complete_workout_api_v1_workout_workouts__workout_id__complete_put","parameters":[{"name":"workout_id","in":"path","required":true,"schema":{"type":"integer","title":"Workout Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteWorkoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/workouts/{workout_id}/sets":{"post":{"tags":["Workout - Workouts"],"summary":"Add Set To Workout","description":"Add a set to a workout.","operationId":"add_set_to_workout_api_v1_workout_workouts__workout_id__sets_post","parameters":[{"name":"workout_id","in":"path","required":true,"schema":{"type":"integer","title":"Workout Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddWorkoutSetRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/workouts/{workout_id}/sets/{set_id}":{"put":{"tags":["Workout - Workouts"],"summary":"Update Workout Set","description":"Update a workout set.","operationId":"update_workout_set_api_v1_workout_workouts__workout_id__sets__set_id__put","parameters":[{"name":"workout_id","in":"path","required":true,"schema":{"type":"integer","title":"Workout Id"}},{"name":"set_id","in":"path","required":true,"schema":{"type":"integer","title":"Set Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWorkoutSetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Workout - Workouts"],"summary":"Delete Workout Set","description":"Delete a workout set.","operationId":"delete_workout_set_api_v1_workout_workouts__workout_id__sets__set_id__delete","parameters":[{"name":"workout_id","in":"path","required":true,"schema":{"type":"integer","title":"Workout Id"}},{"name":"set_id","in":"path","required":true,"schema":{"type":"integer","title":"Set Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/workouts/calendar":{"get":{"tags":["Workout - Workouts"],"summary":"Get Workout Calendar","description":"Get workout calendar entries (completed workouts grouped by date) for a year.","operationId":"get_workout_calendar_api_v1_workout_workouts_calendar_get","parameters":[{"name":"year","in":"query","required":true,"schema":{"type":"integer","maximum":2100,"minimum":2000,"description":"Calendar year","title":"Year"},"description":"Calendar year"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/workouts/exercise/{exercise_id}/progression":{"get":{"tags":["Workout - Workouts"],"summary":"Get Exercise Progression","description":"Get personal record and per-workout history points for one exercise (for charts).","operationId":"get_exercise_progression_api_v1_workout_workouts_exercise__exercise_id__progression_get","parameters":[{"name":"exercise_id","in":"path","required":true,"schema":{"type":"integer","title":"Exercise Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/workouts/exercise/{exercise_id}/last-sets":{"get":{"tags":["Workout - Workouts"],"summary":"Get Last Sets For Exercise","description":"Get the sets of the most recent completed workout that included this exercise.","operationId":"get_last_sets_for_exercise_api_v1_workout_workouts_exercise__exercise_id__last_sets_get","parameters":[{"name":"exercise_id","in":"path","required":true,"schema":{"type":"integer","title":"Exercise Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/body/":{"post":{"tags":["Workout - Body"],"summary":"Create Body Metric","description":"Record a new body weight measurement.","operationId":"create_body_metric_api_v1_workout_body__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBodyMetricRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Workout - Body"],"summary":"Get Body Metrics","description":"Get all body weight measurements for the current user.","operationId":"get_body_metrics_api_v1_workout_body__get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Limit number of results","title":"Limit"},"description":"Limit number of results"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/workout/body/{metric_id}":{"delete":{"tags":["Workout - Body"],"summary":"Delete Body Metric","description":"Delete a body weight measurement.","operationId":"delete_body_metric_api_v1_workout_body__metric_id__delete","parameters":[{"name":"metric_id","in":"path","required":true,"schema":{"type":"integer","title":"Metric Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/accounts/":{"post":{"tags":["Finance - Accounts"],"summary":"Create Account","description":"Create a new account.","operationId":"create_account_api_v1_finance_accounts__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccountRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Finance - Accounts"],"summary":"Get Accounts","description":"Get all accounts for the current user.","operationId":"get_accounts_api_v1_finance_accounts__get","parameters":[{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","description":"Include archived accounts","default":false,"title":"Include Archived"},"description":"Include archived accounts"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/accounts/{account_id}":{"get":{"tags":["Finance - Accounts"],"summary":"Get Account","description":"Get an account by ID.","operationId":"get_account_api_v1_finance_accounts__account_id__get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Finance - Accounts"],"summary":"Update Account","description":"Update an account.","operationId":"update_account_api_v1_finance_accounts__account_id__put","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAccountRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Finance - Accounts"],"summary":"Delete Account","description":"Delete an account.","operationId":"delete_account_api_v1_finance_accounts__account_id__delete","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"integer","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/transactions/":{"post":{"tags":["Finance - Transactions"],"summary":"Create Transaction","description":"Create a new transaction.","operationId":"create_transaction_api_v1_finance_transactions__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTransactionRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Finance - Transactions"],"summary":"List Transactions","description":"List transactions with optional filters.","operationId":"list_transactions_api_v1_finance_transactions__get","parameters":[{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Account Id"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/TransactionTypeEnum"},{"type":"null"}],"title":"Type"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date To"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":500,"minimum":1},{"type":"null"}],"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/transactions/overview":{"get":{"tags":["Finance - Transactions"],"summary":"Get Overview","description":"Get financial overview for a period.","operationId":"get_overview_api_v1_finance_transactions_overview_get","parameters":[{"name":"date_from","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date From"}},{"name":"date_to","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OverviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/transactions/{transaction_id}":{"get":{"tags":["Finance - Transactions"],"summary":"Get Transaction","description":"Get a transaction by ID.","operationId":"get_transaction_api_v1_finance_transactions__transaction_id__get","parameters":[{"name":"transaction_id","in":"path","required":true,"schema":{"type":"integer","title":"Transaction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Finance - Transactions"],"summary":"Update Transaction","description":"Update a transaction.","operationId":"update_transaction_api_v1_finance_transactions__transaction_id__put","parameters":[{"name":"transaction_id","in":"path","required":true,"schema":{"type":"integer","title":"Transaction Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTransactionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Finance - Transactions"],"summary":"Delete Transaction","description":"Delete a transaction.","operationId":"delete_transaction_api_v1_finance_transactions__transaction_id__delete","parameters":[{"name":"transaction_id","in":"path","required":true,"schema":{"type":"integer","title":"Transaction Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/settings/":{"get":{"tags":["Finance - Settings"],"summary":"Get Finance Settings","description":"Get finance settings for the current user.","operationId":"get_finance_settings_api_v1_finance_settings__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}}}},"put":{"tags":["Finance - Settings"],"summary":"Update Finance Settings","description":"Update finance settings.","operationId":"update_finance_settings_api_v1_finance_settings__put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFinanceSettingsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/recurring/":{"post":{"tags":["Finance - Recurring"],"summary":"Create Recurring","description":"Create a recurring transaction.","operationId":"create_recurring_api_v1_finance_recurring__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRecurringRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Finance - Recurring"],"summary":"List Recurrings","description":"List recurring transactions.","operationId":"list_recurrings_api_v1_finance_recurring__get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/recurring/{recurring_id}":{"put":{"tags":["Finance - Recurring"],"summary":"Update Recurring","description":"Update a recurring transaction.","operationId":"update_recurring_api_v1_finance_recurring__recurring_id__put","parameters":[{"name":"recurring_id","in":"path","required":true,"schema":{"type":"integer","title":"Recurring Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRecurringRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Finance - Recurring"],"summary":"Delete Recurring","description":"Delete a recurring transaction.","operationId":"delete_recurring_api_v1_finance_recurring__recurring_id__delete","parameters":[{"name":"recurring_id","in":"path","required":true,"schema":{"type":"integer","title":"Recurring Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/recurring/process":{"post":{"tags":["Finance - Recurring"],"summary":"Process Due Recurrings","description":"Process all due recurring transactions.","operationId":"process_due_recurrings_api_v1_finance_recurring_process_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}}}}},"/api/v1/finance/recurring/{recurring_id}/projected-cost":{"get":{"tags":["Finance - Recurring"],"summary":"Get Projected Cost","description":"Compound 'cost-of-habit' over N years (naive sum + opportunity cost if invested).","operationId":"get_projected_cost_api_v1_finance_recurring__recurring_id__projected_cost_get","parameters":[{"name":"recurring_id","in":"path","required":true,"schema":{"type":"integer","title":"Recurring Id"}},{"name":"years","in":"query","required":true,"schema":{"type":"integer","maximum":60,"minimum":1,"title":"Years"}},{"name":"annual_rate","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":30.0,"minimum":-20.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Annual Rate"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/budgets/":{"get":{"tags":["Finance - Budgets"],"summary":"List Budgets","description":"List user budgets with spending for a period.","operationId":"list_budgets_api_v1_finance_budgets__get","parameters":[{"name":"date_from","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date From"}},{"name":"date_to","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Finance - Budgets"],"summary":"Upsert Budget","description":"Create or update a budget for a category.","operationId":"upsert_budget_api_v1_finance_budgets__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertBudgetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/budgets/{budget_id}":{"delete":{"tags":["Finance - Budgets"],"summary":"Delete Budget","description":"Delete a budget.","operationId":"delete_budget_api_v1_finance_budgets__budget_id__delete","parameters":[{"name":"budget_id","in":"path","required":true,"schema":{"type":"integer","title":"Budget Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/networth/timeline":{"get":{"tags":["Finance - Net Worth"],"summary":"Get Timeline","description":"Cumulative net worth over time (compound effect curve).","operationId":"get_timeline_api_v1_finance_networth_timeline_get","parameters":[{"name":"date_from","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date From"}},{"name":"date_to","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Date To"}},{"name":"granularity","in":"query","required":false,"schema":{"enum":["day","week","month"],"type":"string","default":"month","title":"Granularity"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/networth/projection":{"get":{"tags":["Finance - Net Worth"],"summary":"Get Projection","description":"Project future net worth using compound interest on average monthly savings.","operationId":"get_projection_api_v1_finance_networth_projection_get","parameters":[{"name":"years","in":"query","required":true,"schema":{"type":"integer","maximum":60,"minimum":1,"title":"Years"}},{"name":"annual_rate","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":30.0,"minimum":-20.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Annual Rate"}},{"name":"monthly_contribution","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Monthly Contribution"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/finance/networth/savings-stats":{"get":{"tags":["Finance - Net Worth"],"summary":"Get Savings Stats","description":"Monthly savings rate vs target with current and best streak.","operationId":"get_savings_stats_api_v1_finance_networth_savings_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}}}}},"/api/v1/reading/":{"post":{"tags":["Reading"],"summary":"Create Book","operationId":"create_book_api_v1_reading__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBookRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Reading"],"summary":"List Books","operationId":"list_books_api_v1_reading__get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/BookStatusEnum"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reading/stats":{"get":{"tags":["Reading"],"summary":"Get Stats","operationId":"get_stats_api_v1_reading_stats_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"type":"integer","default":2026,"title":"Year"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reading/{book_id}":{"get":{"tags":["Reading"],"summary":"Get Book","operationId":"get_book_api_v1_reading__book_id__get","parameters":[{"name":"book_id","in":"path","required":true,"schema":{"type":"integer","title":"Book Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Reading"],"summary":"Update Book","operationId":"update_book_api_v1_reading__book_id__put","parameters":[{"name":"book_id","in":"path","required":true,"schema":{"type":"integer","title":"Book Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBookRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Reading"],"summary":"Delete Book","operationId":"delete_book_api_v1_reading__book_id__delete","parameters":[{"name":"book_id","in":"path","required":true,"schema":{"type":"integer","title":"Book Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reading/reorder":{"put":{"tags":["Reading"],"summary":"Reorder Books","description":"Batch update position_in_queue for multiple books. Body: {\"order\": [id1, id2, id3, ...]}","operationId":"reorder_books_api_v1_reading_reorder_put","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reading/log":{"post":{"tags":["Reading"],"summary":"Log Reading","operationId":"log_reading_api_v1_reading_log_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogReadingRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reading/highlights":{"post":{"tags":["Reading"],"summary":"Create Highlight","operationId":"create_highlight_api_v1_reading_highlights_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateHighlightRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reading/{book_id}/highlights":{"get":{"tags":["Reading"],"summary":"Get Book Highlights","operationId":"get_book_highlights_api_v1_reading__book_id__highlights_get","parameters":[{"name":"book_id","in":"path","required":true,"schema":{"type":"integer","title":"Book Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reading/highlights/{highlight_id}":{"delete":{"tags":["Reading"],"summary":"Delete Highlight","operationId":"delete_highlight_api_v1_reading_highlights__highlight_id__delete","parameters":[{"name":"highlight_id","in":"path","required":true,"schema":{"type":"integer","title":"Highlight Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/reading/goals":{"post":{"tags":["Reading"],"summary":"Upsert Goal","operationId":"upsert_goal_api_v1_reading_goals_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertGoalRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AccountListResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"AccountListResponse"},"AccountResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"AccountResponse"},"AccountTypeEnum":{"type":"string","enum":["checking","savings","credit_card","cash","investment","other"],"title":"AccountTypeEnum"},"AddExerciseToRoutineRequest":{"properties":{"exercise_id":{"type":"integer","title":"Exercise Id","examples":[1]},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"},"sets":{"type":"integer","title":"Sets","default":3,"examples":[3]},"reps":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Reps","examples":["8-12"]},"rest_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rest Seconds","examples":[90]},"target_weight_kg":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Target Weight Kg","examples":[50.0]}},"additionalProperties":false,"type":"object","required":["exercise_id"],"title":"AddExerciseToRoutineRequest"},"AddWorkoutSetRequest":{"properties":{"exercise_id":{"type":"integer","title":"Exercise Id","examples":[1]},"set_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Set Number"},"weight_kg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weight Kg","examples":[80.0]},"reps":{"type":"integer","title":"Reps","examples":[10]},"rest_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rest Seconds","examples":[90]},"notes":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","required":["exercise_id","reps"],"title":"AddWorkoutSetRequest"},"ApiResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"ApiResponse"},"BookStatusEnum":{"type":"string","enum":["to_read","reading","completed"],"title":"BookStatusEnum"},"CompleteWorkoutRequest":{"properties":{"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","title":"CompleteWorkoutRequest"},"CreateAccountRequest":{"properties":{"name":{"type":"string","maxLength":100,"title":"Name","examples":["Conto principale"]},"type":{"$ref":"#/components/schemas/AccountTypeEnum","examples":["checking"]},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency","default":"EUR","examples":["EUR"]},"initial_balance":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Initial Balance","default":"0.00","examples":["1500.00"]},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon","examples":["wallet"]},"color":{"anyOf":[{"type":"string","maxLength":7},{"type":"null"}],"title":"Color","examples":["#10b981"]}},"additionalProperties":false,"type":"object","required":["name","type"],"title":"CreateAccountRequest"},"CreateBodyMetricRequest":{"properties":{"weight_kg":{"type":"number","maximum":500.0,"exclusiveMinimum":0.0,"title":"Weight Kg","description":"Body weight in kilograms"},"recorded_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Recorded At","description":"When the measurement was taken (default: now)"},"notes":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","required":["weight_kg"],"title":"CreateBodyMetricRequest"},"CreateBookRequest":{"properties":{"title":{"type":"string","maxLength":255,"title":"Title","examples":["Atomic Habits"]},"author":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Author","examples":["James Clear"]},"total_pages":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Total Pages","examples":[320]},"cover_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Cover Url"},"genre":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Genre","examples":["self-improvement"]},"status":{"$ref":"#/components/schemas/BookStatusEnum","default":"to_read"},"note":{"anyOf":[{"type":"string","maxLength":700},{"type":"null"}],"title":"Note","examples":["Consigliato da Marco"]},"started_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Started At"}},"additionalProperties":false,"type":"object","required":["title"],"title":"CreateBookRequest"},"CreateExerciseRequest":{"properties":{"name":{"type":"string","maxLength":100,"title":"Name","examples":["Panca piana"]},"description":{"anyOf":[{"type":"string","maxLength":700},{"type":"null"}],"title":"Description"},"muscle_groups":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Muscle Groups","examples":["Chest, Triceps"]},"equipment":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Equipment","examples":["Barbell, Bench"]}},"additionalProperties":false,"type":"object","required":["name"],"title":"CreateExerciseRequest"},"CreateHabitRequest":{"properties":{"name":{"type":"string","maxLength":100,"title":"Name","examples":["Meditazione mattutina"]},"description":{"anyOf":[{"type":"string","maxLength":700},{"type":"null"}],"title":"Description","examples":["10 minuti di meditazione ogni mattina"]},"frequency":{"$ref":"#/components/schemas/FrequencyEnum","default":"daily","examples":["daily"]},"start_date":{"type":"string","format":"date-time","title":"Start Date","examples":["2025-01-01T00:00:00Z"]},"end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date","examples":["2025-12-31T23:59:59Z"]}},"additionalProperties":false,"type":"object","required":["name","start_date"],"title":"CreateHabitRequest"},"CreateHighlightRequest":{"properties":{"book_id":{"type":"integer","title":"Book Id","examples":[1]},"text":{"type":"string","maxLength":2000,"title":"Text","examples":["You do not rise to the level of your goals..."]},"page_number":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Page Number","examples":[42]},"note":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Note","examples":["Applicabile al mio progetto"]}},"additionalProperties":false,"type":"object","required":["book_id","text"],"title":"CreateHighlightRequest"},"CreatePlanRequest":{"properties":{"name":{"type":"string","maxLength":100,"title":"Name","examples":["Push Pull Legs"]},"description":{"anyOf":[{"type":"string","maxLength":700},{"type":"null"}],"title":"Description","examples":["Piano di allenamento Push Pull Legs"]},"is_active":{"type":"boolean","title":"Is Active","default":true}},"additionalProperties":false,"type":"object","required":["name"],"title":"CreatePlanRequest"},"CreateRecurringRequest":{"properties":{"account_id":{"type":"integer","title":"Account Id","examples":[1]},"amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Amount","examples":["1500.00"]},"type":{"$ref":"#/components/schemas/TransactionTypeEnum","examples":["income"]},"category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Category","examples":["salary"]},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description","examples":["Stipendio"]},"recurrence":{"$ref":"#/components/schemas/RecurrenceEnum","examples":["monthly"]},"next_occurrence":{"type":"string","format":"date","title":"Next Occurrence","examples":["2026-06-15"]}},"additionalProperties":false,"type":"object","required":["account_id","amount","type","recurrence","next_occurrence"],"title":"CreateRecurringRequest"},"CreateRoutineRequest":{"properties":{"plan_id":{"type":"integer","title":"Plan Id","examples":[1]},"name":{"type":"string","maxLength":100,"title":"Name","examples":["PUSH"]},"description":{"anyOf":[{"type":"string","maxLength":700},{"type":"null"}],"title":"Description"},"order":{"type":"integer","title":"Order","default":0,"examples":[1]}},"additionalProperties":false,"type":"object","required":["plan_id","name"],"title":"CreateRoutineRequest"},"CreateTransactionRequest":{"properties":{"account_id":{"type":"integer","title":"Account Id","examples":[1]},"destination_account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Destination Account Id","examples":[2]},"amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Amount","examples":["25.50"]},"type":{"$ref":"#/components/schemas/TransactionTypeEnum","examples":["expense"]},"category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Category","examples":["food"]},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description","examples":["Spesa al supermercato"]},"transaction_date":{"type":"string","format":"date","title":"Transaction Date","examples":["2026-05-19"]},"notes":{"anyOf":[{"type":"string","maxLength":700},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","required":["account_id","amount","type","transaction_date"],"title":"CreateTransactionRequest"},"ExerciseListResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"ExerciseListResponse"},"ExerciseResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"ExerciseResponse"},"FrequencyEnum":{"type":"string","enum":["daily","weekly","monthly"],"title":"FrequencyEnum"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HabitListResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"HabitListResponse"},"HabitResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"HabitResponse"},"LogHabitRequest":{"properties":{"completed_at":{"type":"string","format":"date","title":"Completed At","examples":["2025-01-15"]},"notes":{"anyOf":[{"type":"string","maxLength":700},{"type":"null"}],"title":"Notes","examples":["Completato con successo"]}},"additionalProperties":false,"type":"object","required":["completed_at"],"title":"LogHabitRequest"},"LogReadingRequest":{"properties":{"book_id":{"type":"integer","title":"Book Id","examples":[1]},"page_reached":{"type":"integer","minimum":0.0,"title":"Page Reached","examples":[85]},"logged_at":{"type":"string","format":"date","title":"Logged At","examples":["2026-05-20"]},"minutes_spent":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Minutes Spent","examples":[30]}},"additionalProperties":false,"type":"object","required":["book_id","page_reached","logged_at"],"title":"LogReadingRequest"},"OverviewResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"OverviewResponse"},"PlanListResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"PlanListResponse"},"PlanResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"PlanResponse"},"RecurrenceEnum":{"type":"string","enum":["weekly","monthly","yearly"],"title":"RecurrenceEnum"},"RoutineResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"RoutineResponse"},"SignInApiResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"SignInApiResponse"},"SignInRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email","examples":["john.doe@example.com"]},"password":{"type":"string","title":"Password","examples":["password"]}},"additionalProperties":false,"type":"object","required":["email","password"],"title":"SignInRequest"},"SignUpRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email","examples":["john.doe@example.com"]},"password":{"type":"string","minLength":8,"title":"Password","examples":["SecureP@ss1"]},"first_name":{"type":"string","maxLength":100,"minLength":1,"title":"First Name","examples":["John"]},"last_name":{"type":"string","maxLength":100,"minLength":1,"title":"Last Name","examples":["Doe"]}},"additionalProperties":false,"type":"object","required":["email","password","first_name","last_name"],"title":"SignUpRequest"},"StartWorkoutRequest":{"properties":{"routine_id":{"type":"integer","title":"Routine Id","examples":[1]},"started_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Started At"},"notes":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","required":["routine_id"],"title":"StartWorkoutRequest"},"TransactionListResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"TransactionListResponse"},"TransactionResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"TransactionResponse"},"TransactionTypeEnum":{"type":"string","enum":["income","expense","transfer"],"title":"TransactionTypeEnum"},"UpdateAccountRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name"},"type":{"anyOf":[{"$ref":"#/components/schemas/AccountTypeEnum"},{"type":"null"}]},"currency":{"anyOf":[{"type":"string","maxLength":3,"minLength":3},{"type":"null"}],"title":"Currency"},"initial_balance":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Initial Balance"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon"},"color":{"anyOf":[{"type":"string","maxLength":7},{"type":"null"}],"title":"Color"},"is_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Archived"}},"additionalProperties":false,"type":"object","title":"UpdateAccountRequest"},"UpdateBookRequest":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title"},"author":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Author"},"total_pages":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Total Pages"},"cover_url":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Cover Url"},"genre":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Genre"},"status":{"anyOf":[{"$ref":"#/components/schemas/BookStatusEnum"},{"type":"null"}]},"rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Rating"},"summary":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Summary"},"note":{"anyOf":[{"type":"string","maxLength":700},{"type":"null"}],"title":"Note"},"current_page":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Current Page"},"position_in_queue":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Position In Queue"},"started_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Completed At"}},"additionalProperties":false,"type":"object","title":"UpdateBookRequest"},"UpdateExerciseRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":700},{"type":"null"}],"title":"Description"},"muscle_groups":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Muscle Groups"},"equipment":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Equipment"}},"additionalProperties":false,"type":"object","title":"UpdateExerciseRequest"},"UpdateFinanceSettingsRequest":{"properties":{"payday_day":{"anyOf":[{"type":"integer","maximum":31.0,"minimum":1.0},{"type":"null"}],"title":"Payday Day","examples":[15]},"savings_rate_target":{"anyOf":[{"type":"number","maximum":100.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Savings Rate Target","examples":["20.00"]},"projection_annual_rate":{"anyOf":[{"type":"number","maximum":30.0,"minimum":-20.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Projection Annual Rate","examples":["6.00"]}},"additionalProperties":false,"type":"object","title":"UpdateFinanceSettingsRequest"},"UpdateHabitRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name","examples":["Meditazione mattutina"]},"description":{"anyOf":[{"type":"string","maxLength":700},{"type":"null"}],"title":"Description","examples":["10 minuti di meditazione ogni mattina"]},"frequency":{"anyOf":[{"$ref":"#/components/schemas/FrequencyEnum"},{"type":"null"}],"examples":["daily"]},"start_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Start Date","examples":["2025-01-01T00:00:00Z"]},"end_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"End Date","examples":["2025-12-31T23:59:59Z"]}},"additionalProperties":false,"type":"object","title":"UpdateHabitRequest"},"UpdatePlanRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name","examples":["Push Pull Legs"]},"description":{"anyOf":[{"type":"string","maxLength":700},{"type":"null"}],"title":"Description"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"additionalProperties":false,"type":"object","title":"UpdatePlanRequest"},"UpdateRecurringRequest":{"properties":{"account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Account Id"},"amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Amount"},"type":{"anyOf":[{"$ref":"#/components/schemas/TransactionTypeEnum"},{"type":"null"}]},"category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Category"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description"},"recurrence":{"anyOf":[{"$ref":"#/components/schemas/RecurrenceEnum"},{"type":"null"}]},"next_occurrence":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Next Occurrence"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"additionalProperties":false,"type":"object","title":"UpdateRecurringRequest"},"UpdateRoutineExerciseRequest":{"properties":{"sets":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Sets","examples":[3]},"reps":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Reps","examples":["8-12"]},"rest_seconds":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Rest Seconds","examples":[90]},"target_weight_kg":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Target Weight Kg","examples":[50.0]}},"additionalProperties":false,"type":"object","title":"UpdateRoutineExerciseRequest"},"UpdateRoutineRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":700},{"type":"null"}],"title":"Description"},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"},"scheduled_weekdays":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Scheduled Weekdays"}},"additionalProperties":false,"type":"object","title":"UpdateRoutineRequest"},"UpdateTransactionRequest":{"properties":{"account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Account Id"},"amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Amount"},"type":{"anyOf":[{"$ref":"#/components/schemas/TransactionTypeEnum"},{"type":"null"}]},"category":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Category"},"description":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Description"},"transaction_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Transaction Date"},"notes":{"anyOf":[{"type":"string","maxLength":700},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","title":"UpdateTransactionRequest"},"UpdateWorkoutSetRequest":{"properties":{"set_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Set Number"},"weight_kg":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Weight Kg"},"reps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reps"},"rest_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rest Seconds"},"notes":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","title":"UpdateWorkoutSetRequest"},"UpsertBudgetRequest":{"properties":{"category":{"type":"string","maxLength":50,"title":"Category","examples":["food"]},"amount":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Amount","examples":["300.00"]}},"additionalProperties":false,"type":"object","required":["category","amount"],"title":"UpsertBudgetRequest"},"UpsertGoalRequest":{"properties":{"year":{"type":"integer","maximum":2100.0,"minimum":2020.0,"title":"Year","examples":[2026]},"target_books":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Target Books","examples":[24]},"target_pages_per_day":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Target Pages Per Day","examples":[20]}},"additionalProperties":false,"type":"object","required":["year","target_books","target_pages_per_day"],"title":"UpsertGoalRequest"},"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"},"WorkoutDetailResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"WorkoutDetailResponse","description":"Workout with sets and routine (with exercises enriched with full exercise details)."},"WorkoutListResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"WorkoutListResponse"},"WorkoutResponse":{"properties":{"status":{"type":"string","title":"Status","default":"successo"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","title":"WorkoutResponse"}}}}