{"components":{"schemas":{"AddressIn":{"additionalProperties":false,"description":"pincode + city + state must match a row of the pincode table; that row's id is stored.","properties":{"address_line_0":{"maxLength":255,"minLength":1,"title":"Address Line 0","type":"string"},"address_line_1":{"anyOf":[{"maxLength":255,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Address Line 1"},"city":{"maxLength":100,"minLength":1,"title":"City","type":"string"},"is_primary":{"default":false,"title":"Is Primary","type":"boolean"},"landmark":{"anyOf":[{"maxLength":255,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Landmark"},"pincode":{"maxLength":10,"minLength":1,"title":"Pincode","type":"string"},"state":{"maxLength":100,"minLength":1,"title":"State","type":"string"}},"required":["address_line_0","pincode","city","state"],"title":"AddressIn","type":"object"},"AddressOut":{"properties":{"address_line_0":{"title":"Address Line 0","type":"string"},"address_line_1":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 1"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"id":{"title":"Id","type":"integer"},"is_primary":{"title":"Is Primary","type":"boolean"},"landmark":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Landmark"},"pincode":{"$ref":"#/components/schemas/PincodeOut"}},"required":["id","address_line_0","address_line_1","landmark","is_primary","pincode","created_by","created_on"],"title":"AddressOut","type":"object"},"ExistingOwner":{"additionalProperties":false,"properties":{"user_id":{"exclusiveMinimum":0,"title":"User Id","type":"integer"}},"required":["user_id"],"title":"ExistingOwner","type":"object"},"FlatIn":{"additionalProperties":false,"properties":{"active":{"default":true,"title":"Active","type":"boolean"},"flat_no":{"maxLength":20,"minLength":1,"title":"Flat No","type":"string"},"owners":{"items":{"anyOf":[{"$ref":"#/components/schemas/ExistingOwner"},{"$ref":"#/components/schemas/NewUserIn"}]},"maxItems":20,"title":"Owners","type":"array"}},"required":["flat_no"],"title":"FlatIn","type":"object"},"FlatOut":{"properties":{"active":{"title":"Active","type":"boolean"},"flat_no":{"title":"Flat No","type":"string"},"id":{"title":"Id","type":"integer"},"owners":{"items":{"$ref":"#/components/schemas/OwnerOut"},"title":"Owners","type":"array"},"tower_id":{"title":"Tower Id","type":"integer"}},"required":["id","tower_id","flat_no","active","owners"],"title":"FlatOut","type":"object"},"FlatRow":{"properties":{"active":{"title":"Active","type":"boolean"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"flat_no":{"title":"Flat No","type":"string"},"id":{"title":"Id","type":"integer"},"tower_id":{"title":"Tower Id","type":"integer"}},"required":["id","tower_id","flat_no","active","created_by","created_on"],"title":"FlatRow","type":"object"},"FlatVehicleOut":{"properties":{"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"flat_id":{"title":"Flat Id","type":"integer"},"vehicle_id":{"title":"Vehicle Id","type":"integer"},"vehicle_no":{"title":"Vehicle No","type":"string"}},"required":["flat_id","vehicle_id","vehicle_no","created_by","created_on"],"title":"FlatVehicleOut","type":"object"},"NewUserIn":{"additionalProperties":false,"description":"A new login account + user (also used for new owners in create_project/tower/flat).","properties":{"email":{"format":"email","title":"Email","type":"string"},"face_id":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"title":"Face Id"},"full_name":{"maxLength":150,"minLength":1,"title":"Full Name","type":"string"},"password":{"minLength":6,"title":"Password","type":"string"},"username":{"pattern":"^[A-Za-z0-9_.@-]{3,150}$","title":"Username","type":"string"}},"required":["username","password","full_name","email"],"title":"NewUserIn","type":"object"},"OwnerOut":{"properties":{"email":{"title":"Email","type":"string"},"face_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Face Id"},"full_name":{"title":"Full Name","type":"string"},"new_account":{"default":false,"title":"New Account","type":"boolean"},"user_id":{"title":"User Id","type":"integer"},"username":{"title":"Username","type":"string"}},"required":["user_id","username","full_name","email","face_id"],"title":"OwnerOut","type":"object"},"OwnerRow":{"properties":{"active":{"title":"Active","type":"boolean"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"flat_id":{"title":"Flat Id","type":"integer"},"user_id":{"title":"User Id","type":"integer"}},"required":["user_id","flat_id","active","created_by","created_on"],"title":"OwnerRow","type":"object"},"PincodeOut":{"properties":{"city":{"title":"City","type":"string"},"country":{"title":"Country","type":"string"},"id":{"title":"Id","type":"integer"},"pincode":{"title":"Pincode","type":"string"},"state":{"title":"State","type":"string"}},"required":["id","pincode","city","state","country"],"title":"PincodeOut","type":"object"},"ProjectOut":{"properties":{"active":{"title":"Active","type":"boolean"},"address":{"anyOf":[{"$ref":"#/components/schemas/AddressOut"},{"type":"null"}]},"id":{"title":"Id","type":"integer"},"name":{"title":"Name","type":"string"},"towers":{"items":{"$ref":"#/components/schemas/TowerOut"},"title":"Towers","type":"array"}},"required":["id","name","active","address","towers"],"title":"ProjectOut","type":"object"},"RoleOut":{"properties":{"active":{"title":"Active","type":"boolean"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"id":{"title":"Id","type":"integer"},"role":{"title":"Role","type":"string"}},"required":["id","role","active","created_by","created_on"],"title":"RoleOut","type":"object"},"TowerIn":{"additionalProperties":false,"properties":{"active":{"default":true,"title":"Active","type":"boolean"},"flats":{"items":{"$ref":"#/components/schemas/FlatIn"},"maxItems":500,"title":"Flats","type":"array"},"name":{"maxLength":100,"minLength":1,"title":"Name","type":"string"}},"required":["name"],"title":"TowerIn","type":"object"},"TowerOut":{"properties":{"active":{"title":"Active","type":"boolean"},"flats":{"items":{"$ref":"#/components/schemas/FlatOut"},"title":"Flats","type":"array"},"id":{"title":"Id","type":"integer"},"name":{"title":"Name","type":"string"},"project_id":{"title":"Project Id","type":"integer"}},"required":["id","project_id","name","active","flats"],"title":"TowerOut","type":"object"},"TowerRow":{"properties":{"active":{"title":"Active","type":"boolean"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"id":{"title":"Id","type":"integer"},"name":{"title":"Name","type":"string"},"project_id":{"title":"Project Id","type":"integer"}},"required":["id","project_id","name","active","created_by","created_on"],"title":"TowerRow","type":"object"},"UserOut":{"properties":{"active":{"title":"Active","type":"boolean"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"email":{"title":"Email","type":"string"},"face_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Face Id"},"full_name":{"title":"Full Name","type":"string"},"id":{"title":"Id","type":"integer"},"username":{"title":"Username","type":"string"}},"required":["id","username","full_name","email","face_id","active","created_on"],"title":"UserOut","type":"object"},"UserRoleOut":{"properties":{"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"id":{"title":"Id","type":"integer"},"role_id":{"title":"Role Id","type":"integer"},"user_id":{"title":"User Id","type":"integer"}},"required":["id","user_id","role_id","created_by","created_on"],"title":"UserRoleOut","type":"object"},"UserRoleProjectOut":{"properties":{"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"flat_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Flat Id"},"id":{"title":"Id","type":"integer"},"project_id":{"title":"Project Id","type":"integer"},"role_id":{"title":"Role Id","type":"integer"},"tower_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tower Id"},"user_id":{"title":"User Id","type":"integer"}},"required":["id","user_id","role_id","project_id","tower_id","flat_id","created_by","created_on"],"title":"UserRoleProjectOut","type":"object"},"VehicleOut":{"properties":{"active":{"title":"Active","type":"boolean"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"id":{"title":"Id","type":"integer"},"vehicle_no":{"title":"Vehicle No","type":"string"}},"required":["id","vehicle_no","active","created_by","created_on"],"title":"VehicleOut","type":"object"}},"securitySchemes":{"bearer":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},"info":{"title":"MyGate API","version":"0.1.0"},"openapi":"3.1.0","paths":{"/api/addresses":{"get":{"description":"","operationId":"get_list_addresses","parameters":[{"in":"query","name":"limit","schema":{"default":50,"maximum":200,"minimum":1,"title":"Limit","type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"minimum":0,"title":"Offset","type":"integer"}},{"in":"query","name":"pincode","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Pincode"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/AddressOut"},"title":"Items","type":"array"},"total":{"title":"Total","type":"integer"}},"required":["items","total"],"title":"Page[AddressOut]","type":"object"}}},"description":""}},"summary":"List addresses. Filter: pincode.","tags":["Address"]}},"/api/addresses/{address_id}":{"delete":{"description":"","operationId":"delete_delete_address","parameters":[{"in":"path","name":"address_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"summary":"Delete an address that no project uses.","tags":["Address"]},"get":{"description":"","operationId":"get_get_address","parameters":[{"in":"path","name":"address_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"address_line_0":{"title":"Address Line 0","type":"string"},"address_line_1":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 1"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"id":{"title":"Id","type":"integer"},"is_primary":{"title":"Is Primary","type":"boolean"},"landmark":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Landmark"},"pincode":{"$ref":"#/components/schemas/PincodeOut"}},"required":["id","address_line_0","address_line_1","landmark","is_primary","pincode","created_by","created_on"],"title":"AddressOut","type":"object"}}},"description":""}},"summary":"One address with its pincode.","tags":["Address"]}},"/api/auth/change_password":{"post":{"description":"","operationId":"post_change_password","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"current_password":{"title":"Current Password","type":"string"},"new_password":{"minLength":6,"title":"New Password","type":"string"}},"required":["current_password","new_password"],"title":"ChangePasswordIn","type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"summary":"Change the logged-in user's password. All existing tokens stop working: log in again.","tags":["Auth"]}},"/api/auth/forget_password":{"post":{"description":"","operationId":"post_forget_password","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"email":{"anyOf":[{"format":"email","type":"string"},{"type":"null"}],"default":null,"title":"Email"},"username":{"anyOf":[{"pattern":"^[A-Za-z0-9_.@-]{3,150}$","type":"string"},{"type":"null"}],"default":null,"title":"Username"}},"title":"ForgetPasswordIn","type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"security":[],"summary":"Email a 6-digit OTP. The reply is the same whether or not the account exists.","tags":["Auth"]}},"/api/auth/login":{"post":{"description":"","operationId":"post_login","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"password":{"title":"Password","type":"string"},"username":{"pattern":"^[A-Za-z0-9_.@-]{3,150}$","title":"Username","type":"string"}},"required":["username","password"],"title":"LoginIn","type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"access_token":{"title":"Access Token","type":"string"},"expires_in":{"title":"Expires In","type":"integer"},"token_type":{"const":"bearer","default":"bearer","title":"Token Type","type":"string"}},"required":["access_token","expires_in"],"title":"TokenOut","type":"object"}}},"description":""}},"security":[],"summary":"Username + password -> Bearer token.","tags":["Auth"]}},"/api/auth/logout":{"post":{"description":"","operationId":"post_logout","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"summary":"Revoke the current token.","tags":["Auth"]}},"/api/auth/me":{"get":{"description":"","operationId":"get_me","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"active":{"title":"Active","type":"boolean"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"email":{"title":"Email","type":"string"},"face_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Face Id"},"full_name":{"title":"Full Name","type":"string"},"id":{"title":"Id","type":"integer"},"username":{"title":"Username","type":"string"}},"required":["id","username","full_name","email","face_id","active","created_on"],"title":"UserOut","type":"object"}}},"description":""}},"summary":"The logged-in user.","tags":["Auth"]}},"/api/auth/reset_password":{"post":{"description":"","operationId":"post_reset_password","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"new_password":{"minLength":6,"title":"New Password","type":"string"},"otp":{"pattern":"^\\d{6}$","title":"Otp","type":"string"},"username":{"pattern":"^[A-Za-z0-9_.@-]{3,150}$","title":"Username","type":"string"}},"required":["username","otp","new_password"],"title":"ResetPasswordIn","type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"security":[],"summary":"Set a new password with the OTP from forget_password.","tags":["Auth"]}},"/api/auth/signup":{"post":{"description":"","operationId":"post_signup","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"description":"A new login account + user (also used for new owners in create_project/tower/flat).","properties":{"email":{"format":"email","title":"Email","type":"string"},"face_id":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"title":"Face Id"},"full_name":{"maxLength":150,"minLength":1,"title":"Full Name","type":"string"},"password":{"minLength":6,"title":"Password","type":"string"},"username":{"pattern":"^[A-Za-z0-9_.@-]{3,150}$","title":"Username","type":"string"}},"required":["username","password","full_name","email"],"title":"NewUserIn","type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"active":{"title":"Active","type":"boolean"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"email":{"title":"Email","type":"string"},"face_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Face Id"},"full_name":{"title":"Full Name","type":"string"},"id":{"title":"Id","type":"integer"},"username":{"title":"Username","type":"string"}},"required":["id","username","full_name","email","face_id","active","created_on"],"title":"UserOut","type":"object"}}},"description":""}},"security":[],"summary":"Create a new account. It can log in once an admin has activated it.","tags":["Auth"]}},"/api/create_address":{"post":{"description":"","operationId":"post_create_address","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"description":"pincode + city + state must match a row of the pincode table; that row's id is stored.","properties":{"address_line_0":{"maxLength":255,"minLength":1,"title":"Address Line 0","type":"string"},"address_line_1":{"anyOf":[{"maxLength":255,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Address Line 1"},"city":{"maxLength":100,"minLength":1,"title":"City","type":"string"},"is_primary":{"default":false,"title":"Is Primary","type":"boolean"},"landmark":{"anyOf":[{"maxLength":255,"minLength":1,"type":"string"},{"type":"null"}],"default":null,"title":"Landmark"},"pincode":{"maxLength":10,"minLength":1,"title":"Pincode","type":"string"},"state":{"maxLength":100,"minLength":1,"title":"State","type":"string"}},"required":["address_line_0","pincode","city","state"],"title":"AddressIn","type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"address_line_0":{"title":"Address Line 0","type":"string"},"address_line_1":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 1"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"id":{"title":"Id","type":"integer"},"is_primary":{"title":"Is Primary","type":"boolean"},"landmark":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Landmark"},"pincode":{"$ref":"#/components/schemas/PincodeOut"}},"required":["id","address_line_0","address_line_1","landmark","is_primary","pincode","created_by","created_on"],"title":"AddressOut","type":"object"}}},"description":""}},"summary":"Create an address.","tags":["Address"]}},"/api/create_flat":{"post":{"description":"","operationId":"post_create_flat","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"flats":{"items":{"$ref":"#/components/schemas/FlatIn"},"maxItems":500,"minItems":1,"title":"Flats","type":"array"},"project_id":{"exclusiveMinimum":0,"title":"Project Id","type":"integer"},"tower_id":{"exclusiveMinimum":0,"title":"Tower Id","type":"integer"}},"required":["project_id","tower_id","flats"],"title":"FlatCreateIn","type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"flats":{"items":{"$ref":"#/components/schemas/FlatOut"},"title":"Flats","type":"array"},"project_id":{"title":"Project Id","type":"integer"},"tower_id":{"title":"Tower Id","type":"integer"}},"required":["project_id","tower_id","flats"],"title":"FlatCreateOut","type":"object"}}},"description":""}},"summary":"Add flats (with optional owners) to an existing tower of the project.","tags":["Project"]}},"/api/create_flatvehicle":{"post":{"description":"","operationId":"post_create_flatvehicle","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"description":"Give vehicle_id (existing) or vehicle_no (reused if it exists, else created).","properties":{"flat_id":{"exclusiveMinimum":0,"title":"Flat Id","type":"integer"},"vehicle_id":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Vehicle Id"},"vehicle_no":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"title":"Vehicle No"}},"required":["flat_id"],"title":"FlatVehicleIn","type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"flat_id":{"title":"Flat Id","type":"integer"},"vehicle_id":{"title":"Vehicle Id","type":"integer"},"vehicle_no":{"title":"Vehicle No","type":"string"}},"required":["flat_id","vehicle_id","vehicle_no","created_by","created_on"],"title":"FlatVehicleOut","type":"object"}}},"description":""}},"summary":"Link a vehicle to a flat.","tags":["Vehicle"]}},"/api/create_project":{"post":{"description":"","operationId":"post_create_project","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"description":"Address is optional: give address_id (existing) or address (new), not both.","properties":{"active":{"default":true,"title":"Active","type":"boolean"},"address":{"anyOf":[{"$ref":"#/components/schemas/AddressIn"},{"type":"null"}],"default":null},"address_id":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Address Id"},"name":{"maxLength":150,"minLength":1,"title":"Name","type":"string"},"towers":{"items":{"$ref":"#/components/schemas/TowerIn"},"maxItems":100,"title":"Towers","type":"array"}},"required":["name"],"title":"ProjectIn","type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"active":{"title":"Active","type":"boolean"},"address":{"anyOf":[{"$ref":"#/components/schemas/AddressOut"},{"type":"null"}]},"id":{"title":"Id","type":"integer"},"name":{"title":"Name","type":"string"},"towers":{"items":{"$ref":"#/components/schemas/TowerOut"},"title":"Towers","type":"array"}},"required":["id","name","active","address","towers"],"title":"ProjectOut","type":"object"}}},"description":""}},"summary":"Create a project with optional address, towers, flats and owners.","tags":["Project"]}},"/api/create_role":{"post":{"description":"","operationId":"post_create_role","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"active":{"default":true,"title":"Active","type":"boolean"},"role":{"maxLength":50,"minLength":1,"title":"Role","type":"string"}},"required":["role"],"title":"RoleIn","type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"active":{"title":"Active","type":"boolean"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"id":{"title":"Id","type":"integer"},"role":{"title":"Role","type":"string"}},"required":["id","role","active","created_by","created_on"],"title":"RoleOut","type":"object"}}},"description":""}},"summary":"Create a role.","tags":["Role"]}},"/api/create_tower":{"post":{"description":"","operationId":"post_create_tower","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"project_id":{"exclusiveMinimum":0,"title":"Project Id","type":"integer"},"towers":{"items":{"$ref":"#/components/schemas/TowerIn"},"maxItems":100,"minItems":1,"title":"Towers","type":"array"}},"required":["project_id","towers"],"title":"TowerCreateIn","type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"project_id":{"title":"Project Id","type":"integer"},"towers":{"items":{"$ref":"#/components/schemas/TowerOut"},"title":"Towers","type":"array"}},"required":["project_id","towers"],"title":"TowerCreateOut","type":"object"}}},"description":""}},"summary":"Add towers (with optional flats and owners) to an existing project.","tags":["Project"]}},"/api/create_userrole":{"post":{"description":"","operationId":"post_create_userrole","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"role_id":{"exclusiveMinimum":0,"title":"Role Id","type":"integer"},"user_id":{"exclusiveMinimum":0,"title":"User Id","type":"integer"}},"required":["user_id","role_id"],"title":"UserRoleIn","type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"id":{"title":"Id","type":"integer"},"role_id":{"title":"Role Id","type":"integer"},"user_id":{"title":"User Id","type":"integer"}},"required":["id","user_id","role_id","created_by","created_on"],"title":"UserRoleOut","type":"object"}}},"description":""}},"summary":"Give a user a role.","tags":["Role"]}},"/api/create_userroleproject":{"post":{"description":"","operationId":"post_create_userroleproject","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"description":"Role scoped to a project, optionally a tower and/or flat. With only flat_id, tower_id is filled in.","properties":{"flat_id":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Flat Id"},"project_id":{"exclusiveMinimum":0,"title":"Project Id","type":"integer"},"role_id":{"exclusiveMinimum":0,"title":"Role Id","type":"integer"},"tower_id":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"type":"null"}],"default":null,"title":"Tower Id"},"user_id":{"exclusiveMinimum":0,"title":"User Id","type":"integer"}},"required":["user_id","role_id","project_id"],"title":"UserRoleProjectIn","type":"object"}}}},"responses":{"201":{"content":{"application/json":{"schema":{"properties":{"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"flat_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Flat Id"},"id":{"title":"Id","type":"integer"},"project_id":{"title":"Project Id","type":"integer"},"role_id":{"title":"Role Id","type":"integer"},"tower_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tower Id"},"user_id":{"title":"User Id","type":"integer"}},"required":["id","user_id","role_id","project_id","tower_id","flat_id","created_by","created_on"],"title":"UserRoleProjectOut","type":"object"}}},"description":""}},"summary":"Scope a user's role to a project, optionally a tower and/or flat.","tags":["Role"]}},"/api/flats":{"get":{"description":"","operationId":"get_list_flats","parameters":[{"in":"query","name":"limit","schema":{"default":50,"maximum":200,"minimum":1,"title":"Limit","type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"minimum":0,"title":"Offset","type":"integer"}},{"in":"query","name":"project_id","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Project Id"}},{"in":"query","name":"tower_id","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Tower Id"}},{"in":"query","name":"active","schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"Active"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/FlatRow"},"title":"Items","type":"array"},"total":{"title":"Total","type":"integer"}},"required":["items","total"],"title":"Page[FlatRow]","type":"object"}}},"description":""}},"summary":"List flats. Filters: project_id, tower_id, active.","tags":["Project"]}},"/api/flats/{flat_id}":{"delete":{"description":"","operationId":"delete_delete_flat","parameters":[{"in":"path","name":"flat_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"summary":"Delete a flat that has no owners, vehicles or project user roles left.","tags":["Project"]},"get":{"description":"","operationId":"get_get_flat","parameters":[{"in":"path","name":"flat_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"active":{"title":"Active","type":"boolean"},"flat_no":{"title":"Flat No","type":"string"},"id":{"title":"Id","type":"integer"},"owners":{"items":{"$ref":"#/components/schemas/OwnerOut"},"title":"Owners","type":"array"},"tower_id":{"title":"Tower Id","type":"integer"}},"required":["id","tower_id","flat_no","active","owners"],"title":"FlatOut","type":"object"}}},"description":""}},"summary":"One flat with its owners.","tags":["Project"]}},"/api/flatvehicles":{"get":{"description":"","operationId":"get_list_flatvehicles","parameters":[{"in":"query","name":"limit","schema":{"default":50,"maximum":200,"minimum":1,"title":"Limit","type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"minimum":0,"title":"Offset","type":"integer"}},{"in":"query","name":"flat_id","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Flat Id"}},{"in":"query","name":"vehicle_id","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Vehicle Id"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/FlatVehicleOut"},"title":"Items","type":"array"},"total":{"title":"Total","type":"integer"}},"required":["items","total"],"title":"Page[FlatVehicleOut]","type":"object"}}},"description":""}},"summary":"List vehicles linked to flats. Filters: flat_id, vehicle_id.","tags":["Vehicle"]}},"/api/flatvehicles/{flat_id}/{vehicle_id}":{"delete":{"description":"","operationId":"delete_delete_flatvehicle","parameters":[{"in":"path","name":"flat_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"vehicle_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"summary":"Unlink a vehicle from a flat (the vehicle stays).","tags":["Vehicle"]},"get":{"description":"","operationId":"get_get_flatvehicle","parameters":[{"in":"path","name":"flat_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"vehicle_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"flat_id":{"title":"Flat Id","type":"integer"},"vehicle_id":{"title":"Vehicle Id","type":"integer"},"vehicle_no":{"title":"Vehicle No","type":"string"}},"required":["flat_id","vehicle_id","vehicle_no","created_by","created_on"],"title":"FlatVehicleOut","type":"object"}}},"description":""}},"summary":"One flat-vehicle link.","tags":["Vehicle"]}},"/api/owners":{"get":{"description":"","operationId":"get_list_owners","parameters":[{"in":"query","name":"limit","schema":{"default":50,"maximum":200,"minimum":1,"title":"Limit","type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"minimum":0,"title":"Offset","type":"integer"}},{"in":"query","name":"flat_id","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Flat Id"}},{"in":"query","name":"user_id","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"User Id"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/OwnerRow"},"title":"Items","type":"array"},"total":{"title":"Total","type":"integer"}},"required":["items","total"],"title":"Page[OwnerRow]","type":"object"}}},"description":""}},"summary":"List flat owners. Filters: flat_id, user_id.","tags":["Project"]}},"/api/owners/{user_id}/{flat_id}":{"delete":{"description":"","operationId":"delete_delete_owner","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"flat_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"summary":"Remove a user as owner of a flat (the user and the flat stay).","tags":["Project"]},"get":{"description":"","operationId":"get_get_owner","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}},{"in":"path","name":"flat_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"active":{"title":"Active","type":"boolean"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"flat_id":{"title":"Flat Id","type":"integer"},"user_id":{"title":"User Id","type":"integer"}},"required":["user_id","flat_id","active","created_by","created_on"],"title":"OwnerRow","type":"object"}}},"description":""}},"summary":"One owner link (user + flat).","tags":["Project"]}},"/api/pincodes/{pincode}":{"get":{"description":"","operationId":"get_get_pincodes","parameters":[{"in":"path","name":"pincode","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PincodeOut"},"type":"array"}}},"description":"Built-in mutable sequence.\n\nIf no argument is given, the constructor creates a new empty list.\nThe argument must be an iterable if specified."}},"summary":"Every city/state row for a pincode (an empty list if there is none).","tags":["Address"]}},"/api/projects":{"get":{"description":"","operationId":"get_list_projects","parameters":[{"in":"query","name":"limit","schema":{"default":50,"maximum":200,"minimum":1,"title":"Limit","type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"minimum":0,"title":"Offset","type":"integer"}},{"in":"query","name":"name","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Name"}},{"in":"query","name":"active","schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"Active"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/ProjectOut"},"title":"Items","type":"array"},"total":{"title":"Total","type":"integer"}},"required":["items","total"],"title":"Page[ProjectOut]","type":"object"}}},"description":""}},"summary":"List projects, each with its address, towers, flats and owners. Filters: name (contains, any case), active.","tags":["Project"]}},"/api/projects/{project_id}":{"delete":{"description":"","operationId":"delete_delete_project","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"summary":"Delete a project that has no towers or project user roles left.","tags":["Project"]},"get":{"description":"","operationId":"get_get_project","parameters":[{"in":"path","name":"project_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"active":{"title":"Active","type":"boolean"},"address":{"anyOf":[{"$ref":"#/components/schemas/AddressOut"},{"type":"null"}]},"id":{"title":"Id","type":"integer"},"name":{"title":"Name","type":"string"},"towers":{"items":{"$ref":"#/components/schemas/TowerOut"},"title":"Towers","type":"array"}},"required":["id","name","active","address","towers"],"title":"ProjectOut","type":"object"}}},"description":""}},"summary":"One project with its address, towers, flats and owners.","tags":["Project"]}},"/api/roles":{"get":{"description":"","operationId":"get_list_roles","parameters":[{"in":"query","name":"limit","schema":{"default":50,"maximum":200,"minimum":1,"title":"Limit","type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"minimum":0,"title":"Offset","type":"integer"}},{"in":"query","name":"active","schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"Active"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/RoleOut"},"title":"Items","type":"array"},"total":{"title":"Total","type":"integer"}},"required":["items","total"],"title":"Page[RoleOut]","type":"object"}}},"description":""}},"summary":"List roles. Filter: active.","tags":["Role"]}},"/api/roles/{role_id}":{"delete":{"description":"","operationId":"delete_delete_role","parameters":[{"in":"path","name":"role_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"summary":"Delete a role that no user has.","tags":["Role"]},"get":{"description":"","operationId":"get_get_role","parameters":[{"in":"path","name":"role_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"active":{"title":"Active","type":"boolean"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"id":{"title":"Id","type":"integer"},"role":{"title":"Role","type":"string"}},"required":["id","role","active","created_by","created_on"],"title":"RoleOut","type":"object"}}},"description":""}},"summary":"One role.","tags":["Role"]}},"/api/towers":{"get":{"description":"","operationId":"get_list_towers","parameters":[{"in":"query","name":"limit","schema":{"default":50,"maximum":200,"minimum":1,"title":"Limit","type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"minimum":0,"title":"Offset","type":"integer"}},{"in":"query","name":"project_id","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Project Id"}},{"in":"query","name":"active","schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"Active"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/TowerRow"},"title":"Items","type":"array"},"total":{"title":"Total","type":"integer"}},"required":["items","total"],"title":"Page[TowerRow]","type":"object"}}},"description":""}},"summary":"List towers. Filters: project_id, active.","tags":["Project"]}},"/api/towers/{tower_id}":{"delete":{"description":"","operationId":"delete_delete_tower","parameters":[{"in":"path","name":"tower_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"summary":"Delete a tower that has no flats or project user roles left.","tags":["Project"]},"get":{"description":"","operationId":"get_get_tower","parameters":[{"in":"path","name":"tower_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"active":{"title":"Active","type":"boolean"},"flats":{"items":{"$ref":"#/components/schemas/FlatOut"},"title":"Flats","type":"array"},"id":{"title":"Id","type":"integer"},"name":{"title":"Name","type":"string"},"project_id":{"title":"Project Id","type":"integer"}},"required":["id","project_id","name","active","flats"],"title":"TowerOut","type":"object"}}},"description":""}},"summary":"One tower with its flats and owners.","tags":["Project"]}},"/api/userroleprojects":{"get":{"description":"","operationId":"get_list_userroleprojects","parameters":[{"in":"query","name":"limit","schema":{"default":50,"maximum":200,"minimum":1,"title":"Limit","type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"minimum":0,"title":"Offset","type":"integer"}},{"in":"query","name":"user_id","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"User Id"}},{"in":"query","name":"role_id","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Role Id"}},{"in":"query","name":"project_id","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Project Id"}},{"in":"query","name":"tower_id","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Tower Id"}},{"in":"query","name":"flat_id","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Flat Id"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UserRoleProjectOut"},"title":"Items","type":"array"},"total":{"title":"Total","type":"integer"}},"required":["items","total"],"title":"Page[UserRoleProjectOut]","type":"object"}}},"description":""}},"summary":"List project-scoped user roles. Filters: user_id, role_id, project_id, tower_id, flat_id.","tags":["Role"]}},"/api/userroleprojects/{userroleproject_id}":{"delete":{"description":"","operationId":"delete_delete_userroleproject","parameters":[{"in":"path","name":"userroleproject_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"summary":"Delete a project-scoped user role.","tags":["Role"]},"get":{"description":"","operationId":"get_get_userroleproject","parameters":[{"in":"path","name":"userroleproject_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"flat_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Flat Id"},"id":{"title":"Id","type":"integer"},"project_id":{"title":"Project Id","type":"integer"},"role_id":{"title":"Role Id","type":"integer"},"tower_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tower Id"},"user_id":{"title":"User Id","type":"integer"}},"required":["id","user_id","role_id","project_id","tower_id","flat_id","created_by","created_on"],"title":"UserRoleProjectOut","type":"object"}}},"description":""}},"summary":"One project-scoped user role.","tags":["Role"]},"patch":{"description":"","operationId":"patch_change_userroleproject","parameters":[{"in":"path","name":"userroleproject_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"role_id":{"exclusiveMinimum":0,"title":"Role Id","type":"integer"}},"required":["role_id"],"title":"RoleChangeIn","type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"flat_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Flat Id"},"id":{"title":"Id","type":"integer"},"project_id":{"title":"Project Id","type":"integer"},"role_id":{"title":"Role Id","type":"integer"},"tower_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Tower Id"},"user_id":{"title":"User Id","type":"integer"}},"required":["id","user_id","role_id","project_id","tower_id","flat_id","created_by","created_on"],"title":"UserRoleProjectOut","type":"object"}}},"description":""}},"summary":"Change the role of a project-scoped user role (to change the scope, delete it and create a new one).","tags":["Role"]}},"/api/userroles":{"get":{"description":"","operationId":"get_list_userroles","parameters":[{"in":"query","name":"limit","schema":{"default":50,"maximum":200,"minimum":1,"title":"Limit","type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"minimum":0,"title":"Offset","type":"integer"}},{"in":"query","name":"user_id","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"User Id"}},{"in":"query","name":"role_id","schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Role Id"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UserRoleOut"},"title":"Items","type":"array"},"total":{"title":"Total","type":"integer"}},"required":["items","total"],"title":"Page[UserRoleOut]","type":"object"}}},"description":""}},"summary":"List user roles. Filters: user_id, role_id.","tags":["Role"]}},"/api/userroles/{userrole_id}":{"delete":{"description":"","operationId":"delete_delete_userrole","parameters":[{"in":"path","name":"userrole_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"summary":"Take a role away from a user.","tags":["Role"]},"get":{"description":"","operationId":"get_get_userrole","parameters":[{"in":"path","name":"userrole_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"id":{"title":"Id","type":"integer"},"role_id":{"title":"Role Id","type":"integer"},"user_id":{"title":"User Id","type":"integer"}},"required":["id","user_id","role_id","created_by","created_on"],"title":"UserRoleOut","type":"object"}}},"description":""}},"summary":"One user role.","tags":["Role"]},"patch":{"description":"","operationId":"patch_change_userrole","parameters":[{"in":"path","name":"userrole_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"role_id":{"exclusiveMinimum":0,"title":"Role Id","type":"integer"}},"required":["role_id"],"title":"RoleChangeIn","type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"id":{"title":"Id","type":"integer"},"role_id":{"title":"Role Id","type":"integer"},"user_id":{"title":"User Id","type":"integer"}},"required":["id","user_id","role_id","created_by","created_on"],"title":"UserRoleOut","type":"object"}}},"description":""}},"summary":"Change which role a user role gives.","tags":["Role"]}},"/api/users":{"get":{"description":"","operationId":"get_list_users","parameters":[{"in":"query","name":"limit","schema":{"default":50,"maximum":200,"minimum":1,"title":"Limit","type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"minimum":0,"title":"Offset","type":"integer"}},{"in":"query","name":"username","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Username"}},{"in":"query","name":"email","schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Email"}},{"in":"query","name":"active","schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"title":"Active"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/UserOut"},"title":"Items","type":"array"},"total":{"title":"Total","type":"integer"}},"required":["items","total"],"title":"Page[UserOut]","type":"object"}}},"description":""}},"summary":"List users. Filters: username, email (exact, any case), active.","tags":["User"]}},"/api/users/{user_id}":{"delete":{"description":"","operationId":"delete_delete_user","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"summary":"Delete a user and their login account. Not allowed while they own flats or have roles.","tags":["User"]},"get":{"description":"","operationId":"get_get_user","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"active":{"title":"Active","type":"boolean"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"email":{"title":"Email","type":"string"},"face_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Face Id"},"full_name":{"title":"Full Name","type":"string"},"id":{"title":"Id","type":"integer"},"username":{"title":"Username","type":"string"}},"required":["id","username","full_name","email","face_id","active","created_on"],"title":"UserOut","type":"object"}}},"description":""}},"summary":"One user.","tags":["User"]},"patch":{"description":"","operationId":"patch_set_user_active","parameters":[{"in":"path","name":"user_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"active":{"title":"Active","type":"boolean"}},"required":["active"],"title":"ActiveIn","type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"active":{"title":"Active","type":"boolean"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"email":{"title":"Email","type":"string"},"face_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Face Id"},"full_name":{"title":"Full Name","type":"string"},"id":{"title":"Id","type":"integer"},"username":{"title":"Username","type":"string"}},"required":["id","username","full_name","email","face_id","active","created_on"],"title":"UserOut","type":"object"}}},"description":""}},"summary":"Activate (or deactivate) a user. A deactivated user's tokens stop working at once.","tags":["User"]}},"/api/vehicles":{"get":{"description":"","operationId":"get_list_vehicles","parameters":[{"in":"query","name":"limit","schema":{"default":50,"maximum":200,"minimum":1,"title":"Limit","type":"integer"}},{"in":"query","name":"offset","schema":{"default":0,"minimum":0,"title":"Offset","type":"integer"}},{"in":"query","name":"vehicle_no","schema":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"title":"Vehicle No"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"items":{"items":{"$ref":"#/components/schemas/VehicleOut"},"title":"Items","type":"array"},"total":{"title":"Total","type":"integer"}},"required":["items","total"],"title":"Page[VehicleOut]","type":"object"}}},"description":""}},"summary":"List vehicles. Filter: vehicle_no.","tags":["Vehicle"]}},"/api/vehicles/{vehicle_id}":{"delete":{"description":"","operationId":"delete_delete_vehicle","parameters":[{"in":"path","name":"vehicle_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"message":{"title":"Message","type":"string"}},"required":["message"],"title":"MessageOut","type":"object"}}},"description":""}},"summary":"Delete a vehicle that is not linked to any flat.","tags":["Vehicle"]},"get":{"description":"","operationId":"get_get_vehicle","parameters":[{"in":"path","name":"vehicle_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"properties":{"active":{"title":"Active","type":"boolean"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"created_on":{"format":"date-time","title":"Created On","type":"string"},"id":{"title":"Id","type":"integer"},"vehicle_no":{"title":"Vehicle No","type":"string"}},"required":["id","vehicle_no","active","created_by","created_on"],"title":"VehicleOut","type":"object"}}},"description":""}},"summary":"One vehicle.","tags":["Vehicle"]}}},"security":[{"bearer":[]}]}
