{"openapi":"3.1.0","info":{"title":"VPS Manager","description":"Professional KVM/Ceph VPS Management System","version":"1.0.0"},"paths":{"/api/auth/login":{"post":{"tags":["Authentication"],"summary":"Login","description":"Authenticate user and return JWT token (or require 2FA)","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login_api_auth_login_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/verify-2fa":{"post":{"tags":["Authentication"],"summary":"Verify 2Fa","description":"Verify 2FA code and return full access token","operationId":"verify_2fa_api_auth_verify_2fa_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFAVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/validate-vat":{"post":{"tags":["Authentication"],"summary":"Validate Vat Number","description":"Validate EU VAT number via VIES and return company details.\nUse this before registration to verify VAT and pre-fill company data.","operationId":"validate_vat_number_api_auth_validate_vat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VIESValidationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VIESValidationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/register":{"post":{"tags":["Authentication"],"summary":"Register","description":"Register a new user account","operationId":"register_api_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/me":{"get":{"tags":["Authentication"],"summary":"Get Current User Info","description":"Get current user information","operationId":"get_current_user_info_api_auth_me_get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}}},"put":{"tags":["Authentication"],"summary":"Update Current User","description":"Update current user profile","operationId":"update_current_user_api_auth_me_put","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"type":"string","title":"Email"}},{"name":"full_name","in":"query","required":false,"schema":{"type":"string","title":"Full Name"}},{"name":"password","in":"query","required":false,"schema":{"type":"string","title":"Password"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/api-key":{"post":{"tags":["Authentication"],"summary":"Generate New Api Key","description":"Generate a new API key for the current user","operationId":"generate_new_api_key_api_auth_api_key_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Generate New Api Key Api Auth Api Key Post"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]},"delete":{"tags":["Authentication"],"summary":"Revoke Api Key","description":"Revoke current API key","operationId":"revoke_api_key_api_auth_api_key_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/auth/change-password":{"post":{"tags":["Authentication"],"summary":"Change Password","description":"Change user password (requires current password verification)","operationId":"change_password_api_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordChangeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/auth/profile":{"put":{"tags":["Authentication"],"summary":"Update Profile","description":"Update user profile information","operationId":"update_profile_api_auth_profile_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/auth/forgot-password":{"post":{"tags":["Authentication"],"summary":"Forgot Password","description":"Request a password reset email.\nAlways returns success to prevent email enumeration.","operationId":"forgot_password_api_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/reset-password":{"post":{"tags":["Authentication"],"summary":"Reset Password","description":"Reset password using a valid reset token","operationId":"reset_password_api_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/verify-reset-token":{"get":{"tags":["Authentication"],"summary":"Verify Reset Token","description":"Verify if a reset token is valid (used by frontend)","operationId":"verify_reset_token_api_auth_verify_reset_token_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/public/plans":{"get":{"tags":["Authentication"],"summary":"List Public Plans","description":"List available VPS plans (public endpoint for pricing page).\nNo authentication required.","operationId":"list_public_plans_api_auth_public_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PlanResponse"},"type":"array","title":"Response List Public Plans Api Auth Public Plans Get"}}}}}}},"/api/vms/images":{"get":{"tags":["Virtual Machines"],"summary":"List Os Images","description":"List available OS images for VM creation","operationId":"list_os_images_api_vms_images_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OSImageResponse"},"type":"array","title":"Response List Os Images Api Vms Images Get"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/vms/plans":{"get":{"tags":["Virtual Machines"],"summary":"List Plans","description":"List available VPS plans for VM creation","operationId":"list_plans_api_vms_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PlanResponse"},"type":"array","title":"Response List Plans Api Vms Plans Get"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/vms/available-ips":{"get":{"tags":["Virtual Machines"],"summary":"List Available Ips","description":"List available (unassigned) IP addresses for VM creation (admin only)","operationId":"list_available_ips_api_vms_available_ips_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/IPAddressResponse"},"type":"array","title":"Response List Available Ips Api Vms Available Ips Get"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/vms/ssh-keys":{"get":{"tags":["Virtual Machines"],"summary":"List Ssh Keys","description":"List SSH keys available for VM creation (user's own + global keys)","operationId":"list_ssh_keys_api_vms_ssh_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SSHKeyResponse"},"type":"array","title":"Response List Ssh Keys Api Vms Ssh Keys Get"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]},"post":{"tags":["Virtual Machines"],"summary":"Create User Ssh Key","description":"Create a new SSH key for the current user","operationId":"create_user_ssh_key_api_vms_ssh_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSHKeyCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSHKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/vms/ssh-keys/{key_id}":{"delete":{"tags":["Virtual Machines"],"summary":"Delete User Ssh Key","description":"Delete user's own SSH key","operationId":"delete_user_ssh_key_api_vms_ssh_keys__key_id__delete","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vms":{"get":{"tags":["Virtual Machines"],"summary":"List Vms","description":"List virtual machines for current user (admins see all)","operationId":"list_vms_api_vms_get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Per Page"}},{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VMListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Virtual Machines"],"summary":"Create Vm","description":"Create a new virtual machine (requires payment for non-admin users)","operationId":"create_vm_api_vms_post","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VMCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vms/{vm_id}":{"get":{"tags":["Virtual Machines"],"summary":"Get Vm","description":"Get virtual machine details","operationId":"get_vm_api_vms__vm_id__get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VMResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Virtual Machines"],"summary":"Update Vm","description":"Update VM configuration (display name, resize CPU/RAM)","operationId":"update_vm_api_vms__vm_id__put","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VMUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VMResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Virtual Machines"],"summary":"Delete Vm","description":"Delete a virtual machine","operationId":"delete_vm_api_vms__vm_id__delete","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vms/{vm_id}/action":{"post":{"tags":["Virtual Machines"],"summary":"Vm Action","description":"Perform action on a VM (start, stop, reboot, etc.)","operationId":"vm_action_api_vms__vm_id__action_post","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VMActionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vms/{vm_id}/rescue":{"post":{"tags":["Virtual Machines"],"summary":"Enable Rescue Mode","description":"Enable rescue mode - boots VM from rescue system","operationId":"enable_rescue_mode_api_vms__vm_id__rescue_post","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Virtual Machines"],"summary":"Disable Rescue Mode","description":"Disable rescue mode - boots VM from normal disk","operationId":"disable_rescue_mode_api_vms__vm_id__rescue_delete","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vms/{vm_id}/reinstall":{"post":{"tags":["Virtual Machines"],"summary":"Reinstall Vm","description":"Reinstall VM with a new OS image","operationId":"reinstall_vm_api_vms__vm_id__reinstall_post","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VMReinstallRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vms/{vm_id}/migrate":{"post":{"tags":["Virtual Machines"],"summary":"Migrate Vm","description":"Migrate VM to another compute node (admin only)","operationId":"migrate_vm_api_vms__vm_id__migrate_post","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VMMigrateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vms/{vm_id}/stats":{"get":{"tags":["Virtual Machines"],"summary":"Get Vm Stats","description":"Get real-time VM statistics","operationId":"get_vm_stats_api_vms__vm_id__stats_get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VMStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vms/{vm_id}/stats/history":{"get":{"tags":["Virtual Machines"],"summary":"Get Vm Stats History","description":"Get historical VM statistics (last 24 hours by default)","operationId":"get_vm_stats_history_api_vms__vm_id__stats_history_get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vms/{vm_id}/console":{"get":{"tags":["Virtual Machines"],"summary":"Get Console Url","description":"Get VNC console connection info","operationId":"get_console_url_api_vms__vm_id__console_get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vms/tags/list":{"get":{"tags":["Virtual Machines"],"summary":"List Tags","description":"List all tags for current user","operationId":"list_tags_api_vms_tags_list_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TagResponse"},"type":"array","title":"Response List Tags Api Vms Tags List Get"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/vms/tags":{"post":{"tags":["Virtual Machines"],"summary":"Create Tag","description":"Create a new tag","operationId":"create_tag_api_vms_tags_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/vms/tags/{tag_id}":{"put":{"tags":["Virtual Machines"],"summary":"Update Tag","description":"Update a tag","operationId":"update_tag_api_vms_tags__tag_id__put","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","title":"Tag Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Virtual Machines"],"summary":"Delete Tag","description":"Delete a tag","operationId":"delete_tag_api_vms_tags__tag_id__delete","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","title":"Tag Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vms/{vm_id}/tags/{tag_id}":{"post":{"tags":["Virtual Machines"],"summary":"Add Tag To Vm","description":"Add a tag to a VM","operationId":"add_tag_to_vm_api_vms__vm_id__tags__tag_id__post","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}},{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","title":"Tag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Virtual Machines"],"summary":"Remove Tag From Vm","description":"Remove a tag from a VM","operationId":"remove_tag_from_vm_api_vms__vm_id__tags__tag_id__delete","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}},{"name":"tag_id","in":"path","required":true,"schema":{"type":"string","title":"Tag Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/dashboard":{"get":{"tags":["Admin"],"summary":"Get Dashboard Stats","description":"Get system-wide dashboard statistics","operationId":"get_dashboard_stats_api_admin_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardStats"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/admin/users":{"get":{"tags":["Admin"],"summary":"List Users","description":"List all users","operationId":"list_users_api_admin_users_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/UserResponse"},"type":"array","title":"Response List Users Api Admin Users Get"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]},"post":{"tags":["Admin"],"summary":"Create User","description":"Create a new user (admin)","operationId":"create_user_api_admin_users_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/admin/users/{user_id}":{"get":{"tags":["Admin"],"summary":"Get User","description":"Get user details","operationId":"get_user_api_admin_users__user_id__get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin"],"summary":"Update User","description":"Update user including billing information","operationId":"update_user_api_admin_users__user_id__put","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin"],"summary":"Delete User","description":"Delete user","operationId":"delete_user_api_admin_users__user_id__delete","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/disable-2fa":{"post":{"tags":["Admin"],"summary":"Disable User 2Fa","description":"Disable 2FA for a user.\n\nArgs:\n    request.type: 'totp' to disable TOTP only, 'webauthn' to disable passkeys only,\n                  or None/empty to disable all 2FA methods","operationId":"disable_user_2fa_api_admin_users__user_id__disable_2fa_post","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/Disable2FARequest"},{"type":"null"}],"title":"Request"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/nodes":{"get":{"tags":["Admin"],"summary":"List Nodes","description":"List all compute nodes","operationId":"list_nodes_api_admin_nodes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ComputeNodeResponse"},"type":"array","title":"Response List Nodes Api Admin Nodes Get"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/admin/nodes/{node_id}":{"get":{"tags":["Admin"],"summary":"Get Node","description":"Get compute node details","operationId":"get_node_api_admin_nodes__node_id__get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"node_id","in":"path","required":true,"schema":{"type":"string","title":"Node Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeNodeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin"],"summary":"Update Node","description":"Update compute node settings","operationId":"update_node_api_admin_nodes__node_id__put","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"node_id","in":"path","required":true,"schema":{"type":"string","title":"Node Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeNodeUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeNodeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/nodes/{node_id}/stats":{"get":{"tags":["Admin"],"summary":"Get Node Stats","description":"Get real-time node statistics","operationId":"get_node_stats_api_admin_nodes__node_id__stats_get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"node_id","in":"path","required":true,"schema":{"type":"string","title":"Node Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeStatsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/images":{"get":{"tags":["Admin"],"summary":"List Images","description":"List all OS images","operationId":"list_images_api_admin_images_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OSImageResponse"},"type":"array","title":"Response List Images Api Admin Images Get"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]},"post":{"tags":["Admin"],"summary":"Create Image","description":"Add a new OS image","operationId":"create_image_api_admin_images_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OSImageCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OSImageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/admin/images/{image_id}":{"put":{"tags":["Admin"],"summary":"Update Image","description":"Update an OS image","operationId":"update_image_api_admin_images__image_id__put","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"image_id","in":"path","required":true,"schema":{"type":"string","title":"Image Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OSImageUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OSImageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin"],"summary":"Delete Image","description":"Delete an OS image","operationId":"delete_image_api_admin_images__image_id__delete","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"image_id","in":"path","required":true,"schema":{"type":"string","title":"Image Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/plans":{"get":{"tags":["Admin"],"summary":"List Plans","description":"List all plans","operationId":"list_plans_api_admin_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PlanResponse"},"type":"array","title":"Response List Plans Api Admin Plans Get"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]},"post":{"tags":["Admin"],"summary":"Create Plan","description":"Create a new plan","operationId":"create_plan_api_admin_plans_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanCreate"}}},"required":true},"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"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/admin/plans/{plan_id}":{"get":{"tags":["Admin"],"summary":"Get Plan","description":"Get plan details","operationId":"get_plan_api_admin_plans__plan_id__get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","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":["Admin"],"summary":"Update Plan","description":"Update a plan","operationId":"update_plan_api_admin_plans__plan_id__put","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanUpdate"}}}},"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":["Admin"],"summary":"Delete Plan","description":"Delete a plan","operationId":"delete_plan_api_admin_plans__plan_id__delete","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/ips":{"get":{"tags":["Admin"],"summary":"List Ips","description":"List all IP addresses","operationId":"list_ips_api_admin_ips_get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IPAddressResponse"},"title":"Response List Ips Api Admin Ips Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/ips/{ip_id}/release":{"post":{"tags":["Admin"],"summary":"Release Ip","description":"Force release an IP address","operationId":"release_ip_api_admin_ips__ip_id__release_post","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"ip_id","in":"path","required":true,"schema":{"type":"string","title":"Ip Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/ssh-keys":{"get":{"tags":["Admin"],"summary":"List Ssh Keys","description":"List all SSH keys (admin view - includes all users' keys)","operationId":"list_ssh_keys_api_admin_ssh_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SSHKeyResponse"},"type":"array","title":"Response List Ssh Keys Api Admin Ssh Keys Get"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]},"post":{"tags":["Admin"],"summary":"Create Ssh Key","description":"Create a new SSH key (global or for specific user)","operationId":"create_ssh_key_api_admin_ssh_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSHKeyCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSHKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/admin/ssh-keys/{key_id}":{"get":{"tags":["Admin"],"summary":"Get Ssh Key","description":"Get SSH key details","operationId":"get_ssh_key_api_admin_ssh_keys__key_id__get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSHKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin"],"summary":"Update Ssh Key","description":"Update an SSH key","operationId":"update_ssh_key_api_admin_ssh_keys__key_id__put","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSHKeyUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SSHKeyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin"],"summary":"Delete Ssh Key","description":"Delete an SSH key","operationId":"delete_ssh_key_api_admin_ssh_keys__key_id__delete","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/plans/{plan_id}/periods":{"get":{"tags":["Admin"],"summary":"Get Plan Periods","description":"Get subscription periods for a plan with their discounts","operationId":"get_plan_periods_api_admin_plans__plan_id__periods_get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionPeriodResponse"},"title":"Response Get Plan Periods Api Admin Plans  Plan Id  Periods Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Admin"],"summary":"Update Plan Periods","description":"Update subscription periods and discounts for a plan.\nCreates periods if they don't exist, updates existing ones.","operationId":"update_plan_periods_api_admin_plans__plan_id__periods_put","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionPeriodBulkUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SubscriptionPeriodResponse"},"title":"Response Update Plan Periods Api Admin Plans  Plan Id  Periods Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin"],"summary":"Create Plan Period","description":"Create a single subscription period for a plan","operationId":"create_plan_period_api_admin_plans__plan_id__periods_post","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionPeriodUpdate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionPeriodResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vms/{vm_id}/snapshots":{"get":{"tags":["Snapshots"],"summary":"List Snapshots","description":"List all snapshots for a VM","operationId":"list_snapshots_api_vms__vm_id__snapshots_get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SnapshotResponse"},"title":"Response List Snapshots Api Vms  Vm Id  Snapshots Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Snapshots"],"summary":"Create Snapshot","description":"Create a new snapshot (max 2 per VM) - runs in background","operationId":"create_snapshot_api_vms__vm_id__snapshots_post","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnapshotCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnapshotResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vms/{vm_id}/snapshots/{snapshot_id}/restore":{"post":{"tags":["Snapshots"],"summary":"Restore Snapshot","description":"Restore VM to a snapshot - runs in background","operationId":"restore_snapshot_api_vms__vm_id__snapshots__snapshot_id__restore_post","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}},{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","title":"Snapshot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/vms/{vm_id}/snapshots/{snapshot_id}":{"delete":{"tags":["Snapshots"],"summary":"Delete Snapshot","description":"Delete a snapshot - runs in background","operationId":"delete_snapshot_api_vms__vm_id__snapshots__snapshot_id__delete","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}},{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","title":"Snapshot Id"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/plans/{plan_id}/periods":{"get":{"tags":["Billing"],"summary":"Get Plan Periods","description":"Get a plan with its available subscription periods and discounts.\nThis is used during VM creation to show pricing options.","operationId":"get_plan_periods_api_billing_plans__plan_id__periods_get","parameters":[{"name":"plan_id","in":"path","required":true,"schema":{"type":"string","title":"Plan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlanWithPeriodsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/checkout":{"post":{"tags":["Billing"],"summary":"Create Checkout","description":"Create a Stripe checkout session for VM subscription payment.\nReturns a URL to redirect the user to Stripe Checkout.","operationId":"create_checkout_api_billing_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/billing/subscriptions":{"get":{"tags":["Billing"],"summary":"List Subscriptions","description":"List all subscriptions for the current user","operationId":"list_subscriptions_api_billing_subscriptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionListResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/billing/subscriptions/{subscription_id}":{"get":{"tags":["Billing"],"summary":"Get Subscription","description":"Get subscription details","operationId":"get_subscription_api_billing_subscriptions__subscription_id__get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/subscriptions/{subscription_id}/cancel":{"post":{"tags":["Billing"],"summary":"Cancel Subscription","description":"Cancel a subscription","operationId":"cancel_subscription_api_billing_subscriptions__subscription_id__cancel_post","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelSubscriptionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/subscriptions/{subscription_id}/retry-payment":{"post":{"tags":["Billing"],"summary":"Get Retry Payment Link","description":"Get a payment link to retry payment for a past-due subscription","operationId":"get_retry_payment_link_api_billing_subscriptions__subscription_id__retry_payment_post","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","title":"Subscription Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/invoices":{"get":{"tags":["Billing"],"summary":"List Invoices","description":"List all invoices for the current user","operationId":"list_invoices_api_billing_invoices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceListResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/billing/invoices/{invoice_id}":{"get":{"tags":["Billing"],"summary":"Get Invoice","description":"Get invoice details","operationId":"get_invoice_api_billing_invoices__invoice_id__get","security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvoiceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/webhooks/stripe":{"post":{"tags":["Billing"],"summary":"Handle Stripe Webhook","description":"Handle incoming Stripe webhook events.\nThis endpoint is called by Stripe when events occur (payments, subscription changes, etc.)","operationId":"handle_stripe_webhook_api_billing_webhooks_stripe_post","parameters":[{"name":"Stripe-Signature","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/status":{"get":{"tags":["Billing"],"summary":"Get Billing Status","description":"Check if billing/payments are configured","operationId":"get_billing_status_api_billing_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/auth/2fa/status":{"get":{"tags":["Two-Factor Authentication"],"summary":"Get 2Fa Status","description":"Get current 2FA status for user","operationId":"get_2fa_status_api_auth_2fa_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFAStatusResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/auth/2fa/totp/setup":{"post":{"tags":["Two-Factor Authentication"],"summary":"Setup Totp","description":"Start TOTP setup - generates secret and QR code.\nUser must verify with a code before TOTP is enabled.","operationId":"setup_totp_api_auth_2fa_totp_setup_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TOTPSetupResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/auth/2fa/totp/verify":{"post":{"tags":["Two-Factor Authentication"],"summary":"Verify Totp Setup","description":"Verify TOTP code and enable 2FA.\nMust be called after setup to activate TOTP.","operationId":"verify_totp_setup_api_auth_2fa_totp_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TOTPVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/auth/2fa/totp/disable":{"post":{"tags":["Two-Factor Authentication"],"summary":"Disable Totp","description":"Disable TOTP - requires password and current TOTP code","operationId":"disable_totp_api_auth_2fa_totp_disable_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TOTPDisableRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/auth/2fa/webauthn/register/start":{"post":{"tags":["Two-Factor Authentication"],"summary":"Webauthn Register Start","description":"Start WebAuthn registration - returns options for browser","operationId":"webauthn_register_start_api_auth_2fa_webauthn_register_start_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebAuthnRegisterStartResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/auth/2fa/webauthn/register/finish":{"post":{"tags":["Two-Factor Authentication"],"summary":"Webauthn Register Finish","description":"Finish WebAuthn registration - verify and store credential","operationId":"webauthn_register_finish_api_auth_2fa_webauthn_register_finish_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebAuthnRegisterFinishRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/auth/2fa/webauthn/login/start":{"post":{"tags":["Two-Factor Authentication"],"summary":"Webauthn Login Start","description":"Start WebAuthn authentication for login","operationId":"webauthn_login_start_api_auth_2fa_webauthn_login_start_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebAuthnLoginStartRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/2fa/webauthn/login/finish":{"post":{"tags":["Two-Factor Authentication"],"summary":"Webauthn Login Finish","description":"Finish WebAuthn authentication and return access token","operationId":"webauthn_login_finish_api_auth_2fa_webauthn_login_finish_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebAuthnLoginFinishRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/2fa/webauthn/credentials":{"get":{"tags":["Two-Factor Authentication"],"summary":"List Webauthn Credentials","description":"List all registered WebAuthn credentials","operationId":"list_webauthn_credentials_api_auth_2fa_webauthn_credentials_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WebAuthnCredentialResponse"},"type":"array","title":"Response List Webauthn Credentials Api Auth 2Fa Webauthn Credentials Get"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/auth/2fa/webauthn/remove":{"post":{"tags":["Two-Factor Authentication"],"summary":"Remove Webauthn Credential","description":"Remove a WebAuthn credential","operationId":"remove_webauthn_credential_api_auth_2fa_webauthn_remove_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebAuthnRemoveRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/api/auth/2fa/recovery-codes/regenerate":{"post":{"tags":["Two-Factor Authentication"],"summary":"Regenerate Recovery Codes","description":"Regenerate recovery codes (invalidates old ones)","operationId":"regenerate_recovery_codes_api_auth_2fa_recovery_codes_regenerate_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecoveryCodesResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]},{"APIKeyHeader":[]}]}},"/health":{"get":{"summary":"Health Check","description":"Health check endpoint","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api":{"get":{"summary":"Api Info","description":"API information","operationId":"api_info_api_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/":{"get":{"summary":"Index","description":"Main dashboard page","operationId":"index__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/login":{"get":{"summary":"Login Page","description":"Login page","operationId":"login_page_login_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}},"post":{"summary":"Login Form","description":"Handle form-based login from external sites (e.g., new.vps.cz)","operationId":"login_form_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_login_form_login_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/forgot-password":{"get":{"summary":"Forgot Password Page","description":"Forgot password page","operationId":"forgot_password_page_forgot_password_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/reset-password":{"get":{"summary":"Reset Password Page","description":"Reset password page","operationId":"reset_password_page_reset_password_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/logout":{"get":{"summary":"Logout","description":"Logout - clear the access_token cookie and redirect to login","operationId":"logout_logout_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/vms":{"get":{"summary":"Vms Page","description":"VMs management page","operationId":"vms_page_vms_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/vms/{vm_id}":{"get":{"summary":"Vm Detail Page","description":"VM detail page","operationId":"vm_detail_page_vms__vm_id__get","parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/console/{vm_id}":{"get":{"summary":"Console Page","description":"VNC console page","operationId":"console_page_console__vm_id__get","parameters":[{"name":"vm_id","in":"path","required":true,"schema":{"type":"string","title":"Vm Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/nodes":{"get":{"summary":"Nodes Page","description":"Nodes management page (admin)","operationId":"nodes_page_admin_nodes_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/users":{"get":{"summary":"Users Page","description":"Users management page (admin)","operationId":"users_page_admin_users_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/plans":{"get":{"summary":"Plans Page","description":"Plans management page (admin)","operationId":"plans_page_admin_plans_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/images":{"get":{"summary":"Images Page","description":"OS Images management page (admin)","operationId":"images_page_admin_images_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/admin/ssh-keys":{"get":{"summary":"Ssh Keys Page","description":"SSH Keys management page (admin)","operationId":"ssh_keys_page_admin_ssh_keys_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/account":{"get":{"summary":"Account Page","description":"User account settings page","operationId":"account_page_account_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"Body_login_api_auth_login_post":{"properties":{"grant_type":{"anyOf":[{"type":"string","pattern":"^password$"},{"type":"null"}],"title":"Grant Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","format":"password","title":"Password"},"scope":{"type":"string","title":"Scope","default":""},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"format":"password","title":"Client Secret"}},"type":"object","required":["username","password"],"title":"Body_login_api_auth_login_post"},"Body_login_form_login_post":{"properties":{"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"}},"type":"object","required":["username","password"],"title":"Body_login_form_login_post"},"CancelSubscriptionRequest":{"properties":{"immediate":{"type":"boolean","title":"Immediate","default":false}},"type":"object","title":"CancelSubscriptionRequest","description":"Request to cancel subscription"},"CheckoutRequest":{"properties":{"vm_id":{"type":"string","title":"Vm Id"},"period_months":{"type":"integer","maximum":12.0,"minimum":1.0,"title":"Period Months","description":"Subscription period in months (1, 3, 6, or 12)"}},"type":"object","required":["vm_id","period_months"],"title":"CheckoutRequest","description":"Request to create a checkout session"},"CheckoutResponse":{"properties":{"checkout_session_id":{"type":"string","title":"Checkout Session Id"},"checkout_url":{"type":"string","title":"Checkout Url"},"amount":{"type":"number","title":"Amount"},"currency":{"type":"string","title":"Currency"},"period_months":{"type":"integer","title":"Period Months"},"discount_percent":{"type":"number","title":"Discount Percent"}},"type":"object","required":["checkout_session_id","checkout_url","amount","currency","period_months","discount_percent"],"title":"CheckoutResponse","description":"Checkout session response"},"ComputeNodeResponse":{"properties":{"id":{"type":"string","title":"Id"},"hostname":{"type":"string","title":"Hostname"},"ip_address":{"type":"string","title":"Ip Address"},"total_cpu_cores":{"type":"integer","title":"Total Cpu Cores"},"total_ram_mb":{"type":"integer","title":"Total Ram Mb"},"allocated_cpu_cores":{"type":"integer","title":"Allocated Cpu Cores"},"allocated_ram_mb":{"type":"integer","title":"Allocated Ram Mb"},"is_active":{"type":"boolean","title":"Is Active"},"is_maintenance":{"type":"boolean","title":"Is Maintenance"},"last_heartbeat":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Heartbeat"},"vm_count":{"type":"integer","title":"Vm Count","default":0}},"type":"object","required":["id","hostname","ip_address","total_cpu_cores","total_ram_mb","allocated_cpu_cores","allocated_ram_mb","is_active","is_maintenance","last_heartbeat"],"title":"ComputeNodeResponse"},"ComputeNodeUpdate":{"properties":{"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_maintenance":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Maintenance"}},"type":"object","title":"ComputeNodeUpdate"},"DashboardStats":{"properties":{"total_vms":{"type":"integer","title":"Total Vms"},"running_vms":{"type":"integer","title":"Running Vms"},"stopped_vms":{"type":"integer","title":"Stopped Vms"},"total_vcpus_allocated":{"type":"integer","title":"Total Vcpus Allocated"},"total_ram_allocated_mb":{"type":"integer","title":"Total Ram Allocated Mb"},"total_storage_allocated_gb":{"type":"integer","title":"Total Storage Allocated Gb"},"available_ips":{"type":"integer","title":"Available Ips"},"nodes_online":{"type":"integer","title":"Nodes Online"},"nodes_total":{"type":"integer","title":"Nodes Total"}},"type":"object","required":["total_vms","running_vms","stopped_vms","total_vcpus_allocated","total_ram_allocated_mb","total_storage_allocated_gb","available_ips","nodes_online","nodes_total"],"title":"DashboardStats"},"Disable2FARequest":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},"type":"object","title":"Disable2FARequest"},"ForgotPasswordRequest":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IPAddressResponse":{"properties":{"id":{"type":"string","title":"Id"},"ip_address":{"type":"string","title":"Ip Address"},"subnet_mask":{"type":"string","title":"Subnet Mask"},"gateway":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gateway"},"status":{"type":"string","title":"Status"},"virtual_machine_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Virtual Machine Id"}},"type":"object","required":["id","ip_address","subnet_mask","gateway","status","virtual_machine_id"],"title":"IPAddressResponse"},"InvoiceListResponse":{"properties":{"invoices":{"items":{"$ref":"#/components/schemas/InvoiceResponse"},"type":"array","title":"Invoices"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["invoices","total"],"title":"InvoiceListResponse","description":"List of invoices"},"InvoiceResponse":{"properties":{"id":{"type":"string","title":"Id"},"invoice_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Number"},"subscription_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Id"},"amount_due":{"type":"number","title":"Amount Due"},"amount_paid":{"type":"number","title":"Amount Paid"},"currency":{"type":"string","title":"Currency"},"vat_rate":{"type":"number","title":"Vat Rate"},"vat_amount":{"type":"number","title":"Vat Amount"},"reverse_charge":{"type":"boolean","title":"Reverse Charge"},"status":{"type":"string","title":"Status"},"invoice_date":{"type":"string","format":"date-time","title":"Invoice Date"},"due_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Due Date"},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paid At"},"period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period Start"},"period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Period End"},"invoice_pdf_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Pdf Url"},"hosted_invoice_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hosted Invoice Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["id","amount_due","amount_paid","currency","vat_rate","vat_amount","reverse_charge","status","invoice_date"],"title":"InvoiceResponse","description":"Invoice details"},"NodeStatsResponse":{"properties":{"cpu_usage_percent":{"type":"number","title":"Cpu Usage Percent"},"ram_usage_percent":{"type":"number","title":"Ram Usage Percent"},"network_rx_bytes":{"type":"integer","title":"Network Rx Bytes"},"network_tx_bytes":{"type":"integer","title":"Network Tx Bytes"},"vm_count":{"type":"integer","title":"Vm Count"},"running_vms":{"type":"integer","title":"Running Vms"}},"type":"object","required":["cpu_usage_percent","ram_usage_percent","network_rx_bytes","network_tx_bytes","vm_count","running_vms"],"title":"NodeStatsResponse"},"OSImageCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"image_type":{"type":"string","pattern":"^(iso|qcow2|raw|rbd)$","title":"Image Type"},"storage_path":{"type":"string","title":"Storage Path"},"os_family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Family"},"os_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Name"},"os_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Version"},"arch":{"type":"string","title":"Arch","default":"x86_64"},"cloud_init_supported":{"type":"boolean","title":"Cloud Init Supported","default":false},"is_public":{"type":"boolean","title":"Is Public","default":true}},"type":"object","required":["name","image_type","storage_path"],"title":"OSImageCreate"},"OSImageResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"image_type":{"type":"string","title":"Image Type"},"storage_path":{"type":"string","title":"Storage Path"},"size_bytes":{"type":"integer","title":"Size Bytes","default":0},"os_family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Family"},"os_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Name"},"os_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Version"},"arch":{"type":"string","title":"Arch","default":"x86_64"},"cloud_init_supported":{"type":"boolean","title":"Cloud Init Supported","default":false},"is_public":{"type":"boolean","title":"Is Public","default":true},"is_active":{"type":"boolean","title":"Is Active","default":true},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","name","description","image_type","storage_path","os_family","os_name","os_version"],"title":"OSImageResponse"},"OSImageUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"storage_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Storage Path"},"os_family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Family"},"os_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Name"},"os_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Version"},"cloud_init_supported":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Cloud Init Supported"},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"OSImageUpdate"},"PasswordChangeRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","minLength":8,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"PasswordChangeRequest"},"PaymentLinkResponse":{"properties":{"payment_url":{"type":"string","title":"Payment Url"},"amount":{"type":"number","title":"Amount"},"currency":{"type":"string","title":"Currency"}},"type":"object","required":["payment_url","amount","currency"],"title":"PaymentLinkResponse","description":"Payment link for retry payment"},"PlanCreate":{"properties":{"name":{"type":"string","maxLength":64,"minLength":2,"pattern":"^[a-z0-9-]+$","title":"Name"},"display_name":{"type":"string","maxLength":128,"minLength":2,"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"vcpu_count":{"type":"integer","maximum":64.0,"minimum":1.0,"title":"Vcpu Count"},"ram_mb":{"type":"integer","maximum":262144.0,"minimum":512.0,"title":"Ram Mb"},"disk_gb":{"type":"integer","maximum":4096.0,"minimum":10.0,"title":"Disk Gb"},"bandwidth_tb":{"type":"integer","minimum":0.0,"title":"Bandwidth Tb","default":0},"price_monthly":{"type":"number","minimum":0.0,"title":"Price Monthly"},"price_currency":{"type":"string","maxLength":3,"title":"Price Currency","default":"CZK"},"sort_order":{"type":"integer","title":"Sort Order","default":0}},"type":"object","required":["name","display_name","vcpu_count","ram_mb","disk_gb","price_monthly"],"title":"PlanCreate"},"PlanResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"vcpu_count":{"type":"integer","title":"Vcpu Count"},"ram_mb":{"type":"integer","title":"Ram Mb"},"disk_gb":{"type":"integer","title":"Disk Gb"},"bandwidth_tb":{"type":"integer","title":"Bandwidth Tb"},"price_monthly":{"type":"number","title":"Price Monthly"},"price_currency":{"type":"string","title":"Price Currency"},"is_active":{"type":"boolean","title":"Is Active"},"sort_order":{"type":"integer","title":"Sort Order"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","display_name","description","vcpu_count","ram_mb","disk_gb","bandwidth_tb","price_monthly","price_currency","is_active","sort_order","created_at"],"title":"PlanResponse"},"PlanUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"vcpu_count":{"anyOf":[{"type":"integer","maximum":64.0,"minimum":1.0},{"type":"null"}],"title":"Vcpu Count"},"ram_mb":{"anyOf":[{"type":"integer","maximum":262144.0,"minimum":512.0},{"type":"null"}],"title":"Ram Mb"},"disk_gb":{"anyOf":[{"type":"integer","maximum":4096.0,"minimum":10.0},{"type":"null"}],"title":"Disk Gb"},"bandwidth_tb":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Bandwidth Tb"},"price_monthly":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Price Monthly"},"price_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Price Currency"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"PlanUpdate"},"PlanWithPeriodsResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"display_name":{"type":"string","title":"Display Name"},"vcpu_count":{"type":"integer","title":"Vcpu Count"},"ram_mb":{"type":"integer","title":"Ram Mb"},"disk_gb":{"type":"integer","title":"Disk Gb"},"price_monthly":{"type":"number","title":"Price Monthly"},"price_currency":{"type":"string","title":"Price Currency"},"periods":{"items":{"$ref":"#/components/schemas/SubscriptionPeriodResponse"},"type":"array","title":"Periods"}},"type":"object","required":["id","name","display_name","vcpu_count","ram_mb","disk_gb","price_monthly","price_currency","periods"],"title":"PlanWithPeriodsResponse","description":"Plan details with available subscription periods"},"ProfileUpdateRequest":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"ico":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ico"},"dic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dic"},"vat_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vat Number"},"billing_street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Street"},"billing_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing City"},"billing_postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Postal Code"},"billing_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Country"}},"type":"object","title":"ProfileUpdateRequest"},"RecoveryCodesResponse":{"properties":{"codes":{"items":{"type":"string"},"type":"array","title":"Codes"}},"type":"object","required":["codes"],"title":"RecoveryCodesResponse"},"ResetPasswordRequest":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","minLength":8,"title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetPasswordRequest"},"SSHKeyCreate":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"public_key":{"type":"string","minLength":20,"title":"Public Key"},"is_global":{"type":"boolean","title":"Is Global","default":false}},"type":"object","required":["name","public_key"],"title":"SSHKeyCreate"},"SSHKeyResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"public_key":{"type":"string","title":"Public Key"},"fingerprint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Fingerprint"},"key_type":{"type":"string","title":"Key Type"},"user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"},"is_global":{"type":"boolean","title":"Is Global"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","name","public_key","fingerprint","key_type","user_id","is_global","is_active","created_at","updated_at"],"title":"SSHKeyResponse"},"SSHKeyUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"is_global":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Global"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"SSHKeyUpdate"},"SnapshotCreate":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["name"],"title":"SnapshotCreate"},"SnapshotResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"snapshot_type":{"type":"string","title":"Snapshot Type","default":"disk"},"status":{"type":"string","title":"Status","default":"ready"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"size_bytes":{"type":"integer","title":"Size Bytes","default":0},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"virtual_machine_id":{"type":"string","title":"Virtual Machine Id"}},"type":"object","required":["id","name","description","virtual_machine_id"],"title":"SnapshotResponse"},"SubscriptionListResponse":{"properties":{"subscriptions":{"items":{"$ref":"#/components/schemas/SubscriptionResponse"},"type":"array","title":"Subscriptions"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["subscriptions","total"],"title":"SubscriptionListResponse","description":"List of subscriptions"},"SubscriptionPeriodBulkUpdate":{"properties":{"periods":{"items":{"$ref":"#/components/schemas/SubscriptionPeriodUpdate"},"type":"array","title":"Periods"}},"type":"object","required":["periods"],"title":"SubscriptionPeriodBulkUpdate","description":"Bulk update subscription periods for a plan"},"SubscriptionPeriodResponse":{"properties":{"months":{"type":"integer","title":"Months"},"discount_percent":{"type":"number","title":"Discount Percent"},"effective_monthly_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Effective Monthly Price"},"total_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Price"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["months","discount_percent"],"title":"SubscriptionPeriodResponse","description":"Subscription period with discount info"},"SubscriptionPeriodUpdate":{"properties":{"months":{"type":"integer","maximum":12.0,"minimum":1.0,"title":"Months"},"discount_percent":{"type":"number","maximum":100.0,"minimum":0.0,"title":"Discount Percent"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["months","discount_percent"],"title":"SubscriptionPeriodUpdate","description":"Update subscription period discount"},"SubscriptionResponse":{"properties":{"id":{"type":"string","title":"Id"},"virtual_machine_id":{"type":"string","title":"Virtual Machine Id"},"vm_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vm Name"},"plan_id":{"type":"string","title":"Plan Id"},"plan_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Name"},"period_months":{"type":"integer","title":"Period Months"},"discount_percent":{"type":"number","title":"Discount Percent"},"base_price_monthly":{"type":"number","title":"Base Price Monthly"},"effective_price_monthly":{"type":"number","title":"Effective Price Monthly"},"currency":{"type":"string","title":"Currency"},"status":{"type":"string","title":"Status"},"current_period_start":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period Start"},"current_period_end":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Current Period End"},"days_until_expiry":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days Until Expiry"},"expiry_warning_sent":{"type":"boolean","title":"Expiry Warning Sent","default":false},"suspended_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Suspended At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","virtual_machine_id","plan_id","period_months","discount_percent","base_price_monthly","effective_price_monthly","currency","status","created_at"],"title":"SubscriptionResponse","description":"Subscription details"},"TOTPDisableRequest":{"properties":{"password":{"type":"string","title":"Password"},"code":{"type":"string","title":"Code"}},"type":"object","required":["password","code"],"title":"TOTPDisableRequest"},"TOTPSetupResponse":{"properties":{"secret":{"type":"string","title":"Secret"},"qr_code":{"type":"string","title":"Qr Code"},"uri":{"type":"string","title":"Uri"}},"type":"object","required":["secret","qr_code","uri"],"title":"TOTPSetupResponse"},"TOTPVerifyRequest":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"TOTPVerifyRequest"},"TagCreate":{"properties":{"name":{"type":"string","maxLength":64,"minLength":1,"title":"Name"},"color":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$","title":"Color","default":"#3b82f6"}},"type":"object","required":["name"],"title":"TagCreate"},"TagResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"color":{"type":"string","title":"Color"},"user_id":{"type":"string","title":"User Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","color","user_id","created_at"],"title":"TagResponse"},"TagUpdate":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Name"},"color":{"anyOf":[{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"},{"type":"null"}],"title":"Color"}},"type":"object","title":"TagUpdate"},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"expires_in":{"type":"integer","title":"Expires In"},"user":{"$ref":"#/components/schemas/UserResponse"}},"type":"object","required":["access_token","expires_in","user"],"title":"TokenResponse"},"TwoFAStatusResponse":{"properties":{"totp_enabled":{"type":"boolean","title":"Totp Enabled"},"webauthn_enabled":{"type":"boolean","title":"Webauthn Enabled"},"webauthn_credentials_count":{"type":"integer","title":"Webauthn Credentials Count"},"has_recovery_codes":{"type":"boolean","title":"Has Recovery Codes"}},"type":"object","required":["totp_enabled","webauthn_enabled","webauthn_credentials_count","has_recovery_codes"],"title":"TwoFAStatusResponse"},"TwoFAVerifyRequest":{"properties":{"temp_token":{"type":"string","title":"Temp Token"},"code":{"type":"string","title":"Code"}},"type":"object","required":["temp_token","code"],"title":"TwoFAVerifyRequest"},"UserCreate":{"properties":{"username":{"type":"string","maxLength":64,"minLength":3,"title":"Username"},"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","minLength":8,"title":"Password"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"is_admin":{"type":"boolean","title":"Is Admin","default":false},"account_type":{"type":"string","pattern":"^(personal|company)$","title":"Account Type","default":"personal"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"ico":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ico"},"dic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dic"},"vat_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vat Number"},"billing_street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Street"},"billing_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing City"},"billing_postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Postal Code"},"billing_country":{"type":"string","maxLength":2,"minLength":2,"title":"Billing Country","default":"CZ"}},"type":"object","required":["username","email","password"],"title":"UserCreate"},"UserResponse":{"properties":{"id":{"type":"string","title":"Id"},"username":{"type":"string","title":"Username"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"is_admin":{"type":"boolean","title":"Is Admin"},"is_active":{"type":"boolean","title":"Is Active"},"max_vms":{"type":"integer","title":"Max Vms"},"max_vcpus":{"type":"integer","title":"Max Vcpus"},"max_ram_mb":{"type":"integer","title":"Max Ram Mb"},"max_storage_bytes":{"type":"integer","title":"Max Storage Bytes"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"last_login":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Login"},"totp_enabled":{"type":"boolean","title":"Totp Enabled","default":false},"webauthn_enabled":{"type":"boolean","title":"Webauthn Enabled","default":false},"account_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Type","default":"personal"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"ico":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ico"},"dic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dic"},"vat_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vat Number"},"vies_valid":{"type":"boolean","title":"Vies Valid","default":false},"reverse_charge":{"type":"boolean","title":"Reverse Charge","default":false},"billing_street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Street"},"billing_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing City"},"billing_postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Postal Code"},"billing_country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Country","default":"CZ"}},"type":"object","required":["id","username","email","full_name","is_admin","is_active","max_vms","max_vcpus","max_ram_mb","max_storage_bytes","created_at","last_login"],"title":"UserResponse"},"UserUpdate":{"properties":{"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"password":{"anyOf":[{"type":"string","minLength":8},{"type":"null"}],"title":"Password"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_admin":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Admin"},"max_vms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Vms"},"max_vcpus":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Vcpus"},"max_ram_mb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Ram Mb"},"max_storage_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Storage Bytes"},"account_type":{"anyOf":[{"type":"string","pattern":"^(personal|company)$"},{"type":"null"}],"title":"Account Type"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"ico":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ico"},"dic":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dic"},"vat_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vat Number"},"billing_street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Street"},"billing_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing City"},"billing_postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Postal Code"},"billing_country":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"title":"Billing Country"},"reverse_charge":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Reverse Charge"},"vies_valid":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Vies Valid"}},"type":"object","title":"UserUpdate"},"VIESValidationRequest":{"properties":{"vat_number":{"type":"string","title":"Vat Number"}},"type":"object","required":["vat_number"],"title":"VIESValidationRequest"},"VIESValidationResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"country_code":{"type":"string","title":"Country Code"},"vat_number":{"type":"string","title":"Vat Number"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Street"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["valid","country_code","vat_number"],"title":"VIESValidationResponse"},"VMActionRequest":{"properties":{"action":{"type":"string","pattern":"^(start|stop|reboot|force_stop|suspend|resume)$","title":"Action"}},"type":"object","required":["action"],"title":"VMActionRequest"},"VMCreate":{"properties":{"name":{"type":"string","maxLength":64,"minLength":3,"pattern":"^[a-zA-Z0-9._-]+$","title":"Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"vcpus":{"type":"integer","maximum":32.0,"minimum":1.0,"title":"Vcpus","default":1},"ram_mb":{"type":"integer","maximum":131072.0,"minimum":512.0,"title":"Ram Mb","default":1024},"disk_gb":{"type":"integer","maximum":2048.0,"minimum":10.0,"title":"Disk Gb","default":20},"os_image_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Os Image Id"},"ip_address_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address Id"},"ssh_keys":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ssh Keys"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"user_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Data"},"plan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Id"},"subscription_period":{"anyOf":[{"type":"integer","maximum":12.0,"minimum":1.0},{"type":"null"}],"title":"Subscription Period","default":1}},"type":"object","required":["name"],"title":"VMCreate"},"VMListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/VMResponse"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"}},"type":"object","required":["items","total","page","per_page"],"title":"VMListResponse"},"VMMigrateRequest":{"properties":{"destination_node_id":{"type":"string","title":"Destination Node Id"},"live":{"type":"boolean","title":"Live","default":true}},"type":"object","required":["destination_node_id"],"title":"VMMigrateRequest"},"VMReinstallRequest":{"properties":{"os_image_id":{"type":"string","title":"Os Image Id"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"ssh_keys":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Ssh Keys"}},"type":"object","required":["os_image_id"],"title":"VMReinstallRequest"},"VMResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"vcpu_count":{"type":"integer","title":"Vcpu Count"},"ram_mb":{"type":"integer","title":"Ram Mb"},"status":{"type":"string","title":"Status"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"},"vnc_port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Vnc Port"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"owner_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Id"},"owner_username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Username"},"owner_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Email"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"compute_node":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compute Node"},"primary_disk_gb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Primary Disk Gb"},"root_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Root Password"},"rescue_mode":{"type":"boolean","title":"Rescue Mode","default":false},"rescue_password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rescue Password"},"plan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Id"},"plan_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Name"},"plan_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Plan Price"},"plan_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Currency"},"subscription_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subscription Status"},"subscription_expires":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Subscription Expires"},"subscription_days_left":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Subscription Days Left"},"requires_payment":{"type":"boolean","title":"Requires Payment","default":false},"tags":{"items":{"$ref":"#/components/schemas/TagResponse"},"type":"array","title":"Tags","default":[]}},"type":"object","required":["id","name","display_name","vcpu_count","ram_mb","status","status_message","vnc_port","created_at","updated_at"],"title":"VMResponse"},"VMStatsResponse":{"properties":{"cpu_usage_percent":{"type":"number","title":"Cpu Usage Percent"},"memory_used_mb":{"type":"integer","title":"Memory Used Mb"},"memory_total_mb":{"type":"integer","title":"Memory Total Mb"},"disk_read_bytes":{"type":"integer","title":"Disk Read Bytes"},"disk_write_bytes":{"type":"integer","title":"Disk Write Bytes"},"network_rx_bytes":{"type":"integer","title":"Network Rx Bytes"},"network_tx_bytes":{"type":"integer","title":"Network Tx Bytes"},"uptime_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Uptime Seconds"}},"type":"object","required":["cpu_usage_percent","memory_used_mb","memory_total_mb","disk_read_bytes","disk_write_bytes","network_rx_bytes","network_tx_bytes"],"title":"VMStatsResponse"},"VMUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"vcpus":{"anyOf":[{"type":"integer","maximum":32.0,"minimum":1.0},{"type":"null"}],"title":"Vcpus"},"ram_mb":{"anyOf":[{"type":"integer","maximum":131072.0,"minimum":512.0},{"type":"null"}],"title":"Ram Mb"}},"type":"object","title":"VMUpdate"},"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"},"WebAuthnCredentialResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","name","created_at"],"title":"WebAuthnCredentialResponse"},"WebAuthnLoginFinishRequest":{"properties":{"temp_token":{"type":"string","title":"Temp Token"},"credential":{"additionalProperties":true,"type":"object","title":"Credential"}},"type":"object","required":["temp_token","credential"],"title":"WebAuthnLoginFinishRequest"},"WebAuthnLoginStartRequest":{"properties":{"temp_token":{"type":"string","title":"Temp Token"}},"type":"object","required":["temp_token"],"title":"WebAuthnLoginStartRequest"},"WebAuthnRegisterFinishRequest":{"properties":{"credential":{"additionalProperties":true,"type":"object","title":"Credential"}},"type":"object","required":["credential"],"title":"WebAuthnRegisterFinishRequest"},"WebAuthnRegisterStartResponse":{"properties":{"options":{"additionalProperties":true,"type":"object","title":"Options"}},"type":"object","required":["options"],"title":"WebAuthnRegisterStartResponse"},"WebAuthnRemoveRequest":{"properties":{"credential_id":{"type":"string","title":"Credential Id"},"password":{"type":"string","title":"Password"}},"type":"object","required":["credential_id","password"],"title":"WebAuthnRemoveRequest"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/api/auth/login"}}},"APIKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"}}}}