{"openapi":"3.1.0","info":{"title":"FastAPI","version":"0.1.0"},"paths":{"/auth/password":{"get":{"summary":"Password Form","operationId":"password_form_auth_password_get","parameters":[{"name":"next","in":"query","required":false,"schema":{"type":"string","default":"","title":"Next"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Password Login","operationId":"password_login_auth_password_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_password_login_auth_password_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/email":{"get":{"summary":"Email Form","operationId":"email_form_auth_email_get","parameters":[{"name":"next","in":"query","required":false,"schema":{"type":"string","default":"","title":"Next"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Email Send","operationId":"email_send_auth_email_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_email_send_auth_email_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/email/verify":{"get":{"summary":"Email Verify Page","operationId":"email_verify_page_auth_email_verify_get","parameters":[{"name":"t","in":"query","required":false,"schema":{"type":"string","default":"","title":"T"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Email Verify","operationId":"email_verify_auth_email_verify_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_email_verify_auth_email_verify_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/account/export":{"get":{"summary":"Export Data","operationId":"export_data_api_account_export_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/account/delete":{"post":{"summary":"Delete Account","operationId":"delete_account_api_account_delete_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/privacy":{"get":{"summary":"Privacy","operationId":"privacy_privacy_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/fr/confidentialite":{"get":{"summary":"Confidentialite","operationId":"confidentialite_fr_confidentialite_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/terms":{"get":{"summary":"Terms","operationId":"terms_terms_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/fr/conditions":{"get":{"summary":"Conditions","operationId":"conditions_fr_conditions_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/support":{"get":{"summary":"Support","operationId":"support_support_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/fr/soutien":{"get":{"summary":"Soutien","operationId":"soutien_fr_soutien_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/docs/mcp":{"get":{"summary":"Docs Page","operationId":"docs_page_docs_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/docs/mcp.md":{"get":{"summary":"Docs Markdown","operationId":"docs_markdown_docs_mcp_md_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/pro":{"get":{"summary":"Pro Info","operationId":"pro_info_api_pro_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/pro/notify":{"post":{"summary":"Pro Notify","operationId":"pro_notify_api_pro_notify_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/login":{"get":{"summary":"Login","operationId":"login_auth_login_get","parameters":[{"name":"app","in":"query","required":false,"schema":{"type":"string","default":"","title":"App"}},{"name":"next","in":"query","required":false,"schema":{"type":"string","default":"","title":"Next"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/callback":{"get":{"summary":"Auth Callback","operationId":"auth_callback_auth_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/mobile/exchange":{"get":{"summary":"Mobile Exchange","operationId":"mobile_exchange_api_auth_mobile_exchange_get","parameters":[{"name":"token","in":"query","required":false,"schema":{"type":"string","default":"","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/logout":{"get":{"summary":"Logout","operationId":"logout_auth_logout_get","parameters":[{"name":"next","in":"query","required":false,"schema":{"type":"string","default":"","title":"Next"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/me":{"get":{"summary":"Api Me","operationId":"api_me_api_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/habits":{"get":{"summary":"Api Habits","operationId":"api_habits_api_habits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Api Create Habit","operationId":"api_create_habit_api_habits_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/habits/{habit_id}":{"patch":{"summary":"Api Update Habit","operationId":"api_update_habit_api_habits__habit_id__patch","parameters":[{"name":"habit_id","in":"path","required":true,"schema":{"type":"integer","title":"Habit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"summary":"Api Delete Habit","operationId":"api_delete_habit_api_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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/habits/{habit_id}/checkins":{"get":{"summary":"Api Get Checkins","operationId":"api_get_checkins_api_habits__habit_id__checkins_get","parameters":[{"name":"habit_id","in":"path","required":true,"schema":{"type":"integer","title":"Habit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Api Post Checkin","operationId":"api_post_checkin_api_habits__habit_id__checkins_post","parameters":[{"name":"habit_id","in":"path","required":true,"schema":{"type":"integer","title":"Habit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/habits/{habit_id}/checkins/{day}":{"delete":{"summary":"Api Delete Checkin","operationId":"api_delete_checkin_api_habits__habit_id__checkins__day__delete","parameters":[{"name":"habit_id","in":"path","required":true,"schema":{"type":"integer","title":"Habit Id"}},{"name":"day","in":"path","required":true,"schema":{"type":"string","title":"Day"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/today":{"get":{"summary":"Api Today","operationId":"api_today_api_today_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/push/vapid-key":{"get":{"summary":"Api Vapid Key","operationId":"api_vapid_key_api_push_vapid_key_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/push/subscriptions":{"get":{"summary":"Api Get Push Subs","operationId":"api_get_push_subs_api_push_subscriptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/push/subscriptions/{habit_id}":{"patch":{"summary":"Api Patch Push Sub","description":"Show the habit's name in its reminder, or not (never for birth control or alcohol).","operationId":"api_patch_push_sub_api_push_subscriptions__habit_id__patch","parameters":[{"name":"habit_id","in":"path","required":true,"schema":{"type":"integer","title":"Habit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/push/subscribe":{"post":{"summary":"Api Push Subscribe","operationId":"api_push_subscribe_api_push_subscribe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/push/unsubscribe/{habit_id}":{"delete":{"summary":"Api Push Unsubscribe","operationId":"api_push_unsubscribe_api_push_unsubscribe__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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/settings":{"get":{"summary":"Api Get Settings","operationId":"api_get_settings_api_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"patch":{"summary":"Api Patch Settings","operationId":"api_patch_settings_api_settings_patch","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/lang":{"post":{"summary":"Api Set Lang","operationId":"api_set_lang_api_lang_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sw.js":{"get":{"summary":"Service Worker","operationId":"service_worker_sw_js_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/robots.txt":{"get":{"summary":"Robots","operationId":"robots_robots_txt_get","responses":{"200":{"description":"Successful Response"}}}},"/llms.txt":{"get":{"summary":"Llms Txt","description":"Plain-text summary for AI assistants and crawlers (llmstxt.org).","operationId":"llms_txt_llms_txt_get","responses":{"200":{"description":"Successful Response"}}}},"/sitemap.xml":{"get":{"summary":"Sitemap","operationId":"sitemap_sitemap_xml_get","responses":{"200":{"description":"Successful Response"}}}},"/blog":{"get":{"summary":"Blog Index","operationId":"blog_index_blog_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/blog/{slug}":{"get":{"summary":"Blog Post","operationId":"blog_post_blog__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Index","operationId":"index__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/ai/enabled":{"get":{"summary":"Ai Enabled","operationId":"ai_enabled_api_ai_enabled_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/chat/history":{"get":{"summary":"Ai Chat History","description":"Return the user's saved chat history so the conversation is continuous.","operationId":"ai_chat_history_api_ai_chat_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"delete":{"summary":"Ai Chat Clear","description":"Clear the user's saved chat history.","operationId":"ai_chat_clear_api_ai_chat_history_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ai/chat":{"post":{"summary":"Ai Chat","description":"Habit-coaching assistant that can also create habits on request.\n\nThe conversation is persisted per user (hlp_chat) so it stays continuous.","operationId":"ai_chat_api_ai_chat_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/report":{"post":{"summary":"Api Report","description":"Send a user bug report or suggestion to the owner via the Discord bot.","operationId":"api_report_api_report_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ai":{"get":{"summary":"Ai Page","operationId":"ai_page_ai_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/settings":{"get":{"summary":"Settings Page","operationId":"settings_page_settings_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin":{"get":{"summary":"Admin Page","operationId":"admin_page_admin_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/leaderboard":{"get":{"summary":"Leaderboard Page","operationId":"leaderboard_page_leaderboard_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/history":{"get":{"summary":"History Page","operationId":"history_page_history_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/{slug}":{"get":{"summary":"Habit Page","operationId":"habit_page__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/oauth/consent":{"get":{"summary":"Consent","operationId":"consent_oauth_consent_get","parameters":[{"name":"req","in":"query","required":false,"schema":{"type":"string","default":"","title":"Req"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Consent Submit","operationId":"consent_submit_oauth_consent_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_consent_submit_oauth_consent_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/connections":{"get":{"summary":"List Connections","operationId":"list_connections_api_connections_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/connections/{client_id}":{"delete":{"summary":"Revoke Connection","operationId":"revoke_connection_api_connections__client_id__delete","parameters":[{"name":"client_id","in":"path","required":true,"schema":{"type":"string","title":"Client Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/refine":{"get":{"summary":"Refine List","description":"Check-ins an assistant logged as placeholders (needs_detail), last 30 days.","operationId":"refine_list_api_refine_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/oauth-protected-resource":{"get":{"summary":"Protected Resource Root","operationId":"protected_resource_root__well_known_oauth_protected_resource_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"Body_consent_submit_oauth_consent_post":{"properties":{"req":{"type":"string","title":"Req","default":""},"csrf":{"type":"string","title":"Csrf","default":""},"decision":{"type":"string","title":"Decision","default":""}},"type":"object","title":"Body_consent_submit_oauth_consent_post"},"Body_email_send_auth_email_post":{"properties":{"email":{"type":"string","title":"Email","default":""},"next":{"type":"string","title":"Next","default":""}},"type":"object","title":"Body_email_send_auth_email_post"},"Body_email_verify_auth_email_verify_post":{"properties":{"t":{"type":"string","title":"T","default":""}},"type":"object","title":"Body_email_verify_auth_email_verify_post"},"Body_password_login_auth_password_post":{"properties":{"email":{"type":"string","title":"Email","default":""},"password":{"type":"string","title":"Password","default":""},"next":{"type":"string","title":"Next","default":""}},"type":"object","title":"Body_password_login_auth_password_post"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}