{ "openapi": "3.1.0", "info": { "title": "Home Automation Backend (Python)", "description": "Home automation backend with auth, runtime config, Home Assistant integrations, TickTick integration, and SQLite-backed recorders.", "version": "0.1.0" }, "paths": { "/status": { "get": { "tags": [ "system" ], "summary": "Get Status", "operationId": "get_status_status_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StatusResponse" } } } } } } }, "/login": { "get": { "tags": [ "auth" ], "summary": "Login Page", "operationId": "login_page_login_get", "responses": { "200": { "description": "Successful Response", "content": { "text/html": { "schema": { "type": "string" } } } } } }, "post": { "tags": [ "auth" ], "summary": "Login Submit", "operationId": "login_submit_login_post", "requestBody": { "content": { "application/x-www-form-urlencoded": { "schema": { "$ref": "#/components/schemas/Body_login_submit_login_post" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "text/html": { "schema": { "type": "string" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/config/change-password": { "post": { "tags": [ "auth" ], "summary": "Change Password Submit", "operationId": "change_password_submit_config_change_password_post", "requestBody": { "content": { "application/x-www-form-urlencoded": { "schema": { "$ref": "#/components/schemas/Body_change_password_submit_config_change_password_post" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "text/html": { "schema": { "type": "string" } } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/logout": { "post": { "tags": [ "auth" ], "summary": "Logout", "operationId": "logout_logout_post", "requestBody": { "content": { "application/x-www-form-urlencoded": { "schema": { "$ref": "#/components/schemas/Body_logout_logout_post" } } }, "required": true }, "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } }, "422": { "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } } } } } }, "/": { "get": { "tags": [ "pages" ], "summary": "Home", "operationId": "home__get", "responses": { "200": { "description": "Successful Response", "content": { "text/html": { "schema": { "type": "string" } } } } } } }, "/admin": { "get": { "tags": [ "pages" ], "summary": "Admin Redirect", "operationId": "admin_redirect_admin_get", "responses": { "200": { "description": "Successful Response", "content": { "text/html": { "schema": { "type": "string" } } } } } } }, "/config": { "get": { "tags": [ "pages" ], "summary": "Config Page", "operationId": "config_page_config_get", "responses": { "200": { "description": "Successful Response", "content": { "text/html": { "schema": { "type": "string" } } } } } }, "post": { "tags": [ "pages" ], "summary": "Config Submit", "operationId": "config_submit_config_post", "responses": { "200": { "description": "Successful Response", "content": { "text/html": { "schema": { "type": "string" } } } } } } }, "/homeassistant/publish": { "post": { "tags": [ "homeassistant" ], "summary": "Publish From Homeassistant", "operationId": "publish_from_homeassistant_homeassistant_publish_post", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/location/record": { "post": { "tags": [ "location" ], "summary": "Create Location Record", "operationId": "create_location_record_location_record_post", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/poo/record": { "post": { "tags": [ "poo" ], "summary": "Create Poo Record", "operationId": "create_poo_record_poo_record_post", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/poo/latest": { "get": { "tags": [ "poo" ], "summary": "Notify Latest Poo", "operationId": "notify_latest_poo_poo_latest_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/ticktick/auth/start": { "get": { "tags": [ "ticktick" ], "summary": "Start Ticktick Auth", "operationId": "start_ticktick_auth_ticktick_auth_start_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } }, "/ticktick/auth/code": { "get": { "tags": [ "ticktick" ], "summary": "Handle Ticktick Auth Code", "operationId": "handle_ticktick_auth_code_ticktick_auth_code_get", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": {} } } } } } } }, "components": { "schemas": { "Body_change_password_submit_config_change_password_post": { "properties": { "current_password": { "type": "string", "title": "Current Password" }, "new_password": { "type": "string", "title": "New Password" }, "confirm_password": { "type": "string", "title": "Confirm Password" }, "csrf_token": { "type": "string", "title": "Csrf Token" } }, "type": "object", "required": [ "current_password", "new_password", "confirm_password", "csrf_token" ], "title": "Body_change_password_submit_config_change_password_post" }, "Body_login_submit_login_post": { "properties": { "username": { "type": "string", "title": "Username" }, "password": { "type": "string", "title": "Password" }, "csrf_token": { "type": "string", "title": "Csrf Token" } }, "type": "object", "required": [ "username", "password", "csrf_token" ], "title": "Body_login_submit_login_post" }, "Body_logout_logout_post": { "properties": { "csrf_token": { "type": "string", "title": "Csrf Token" } }, "type": "object", "required": [ "csrf_token" ], "title": "Body_logout_logout_post" }, "HTTPValidationError": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError" }, "type": "array", "title": "Detail" } }, "type": "object", "title": "HTTPValidationError" }, "StatusResponse": { "properties": { "status": { "type": "string", "title": "Status" } }, "type": "object", "required": [ "status" ], "title": "StatusResponse" }, "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" } } } }