{
    "components": {"schemas":{"metrics.DataPoint":{"properties":{"timestamp":{"type":"string"},"value":{"type":"number"}},"type":"object"},"metrics.InstantResult":{"properties":{"samples":{"items":{"$ref":"#/components/schemas/metrics.Sample"},"type":"array","uniqueItems":false}},"type":"object"},"metrics.Sample":{"properties":{"labels":{"additionalProperties":{"type":"string"},"type":"object"},"metric":{"type":"string"},"timestamp":{"type":"string"},"value":{"type":"number"}},"type":"object"},"metrics.Series":{"properties":{"labels":{"additionalProperties":{"type":"string"},"type":"object"},"metric":{"type":"string"},"points":{"items":{"$ref":"#/components/schemas/metrics.DataPoint"},"type":"array","uniqueItems":false}},"type":"object"},"metrics.TimeSeriesResult":{"properties":{"series":{"items":{"$ref":"#/components/schemas/metrics.Series"},"type":"array","uniqueItems":false}},"type":"object"},"models.BlueprintInfo":{"description":"Blueprint information","properties":{"configurator":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"minecraft_version":{"type":"string"},"name":{"type":"string"},"runtime_config":{"additionalProperties":{},"type":"object"},"server_software":{"type":"string"},"server_url":{"type":"string"},"software_version":{"type":"string"},"updated_at":{"type":"string"},"workflow_steps":{"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"models.BlueprintSummary":{"description":"Summary of a blueprint for listing","properties":{"blueprint_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"configurator":{"example":"example-configurator","type":"string"},"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"minecraft_version":{"example":"1.20.1","type":"string"},"name":{"example":"example-blueprint","type":"string"},"runtime_config":{"$ref":"#/components/schemas/models.RuntimeConfig"},"server_software":{"example":"paper","type":"string"},"server_url":{"example":"https://example.com/server","type":"string"},"software_version":{"example":"1.20.1","type":"string"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"workflow_steps":{"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"models.BulkCreatePluginAssignmentsRequest":{"properties":{"persistent_server_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false},"plugins":{"items":{"$ref":"#/components/schemas/models.PluginReferenceInput"},"type":"array","uniqueItems":false},"server_group_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"models.BulkCreatePluginAssignmentsResponse":{"properties":{"created_plugin_assignments":{"type":"integer"},"message":{"type":"string"},"skipped_plugin_assignments":{"type":"integer"},"target_count":{"type":"integer"}},"type":"object"},"models.BulkCreatePluginCollectionAssignmentsRequest":{"properties":{"persistent_server_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false},"plugin_collection_id":{"type":"string"},"server_group_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"models.BulkCreatePluginCollectionAssignmentsResponse":{"properties":{"created_collection_assignments":{"type":"integer"},"created_plugin_assignments":{"type":"integer"},"message":{"type":"string"},"plugin_collection_id":{"type":"string"},"skipped_collection_assignments":{"type":"integer"},"skipped_plugin_assignments":{"type":"integer"},"target_count":{"type":"integer"}},"type":"object"},"models.BulkDeletePluginAssignmentsRequest":{"properties":{"assignment_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"models.BulkDeletePluginAssignmentsResponse":{"properties":{"deleted_count":{"type":"integer"},"message":{"type":"string"}},"type":"object"},"models.CancelRollingRestartResponse":{"properties":{"group_id":{"type":"string"},"message":{"type":"string"},"status":{"type":"string"}},"type":"object"},"models.ClearServerGroupStartQueueResponse":{"description":"Response for clearing queued starts for a server group","properties":{"message":{"example":"Server start queue cleared successfully","type":"string"},"server_group_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"server_group_name":{"example":"lobby","type":"string"}},"type":"object"},"models.CloudStats":{"properties":{"health":{"$ref":"#/components/schemas/models.HealthStatus"},"persistent_servers":{"$ref":"#/components/schemas/models.PersistentStats"},"players":{"$ref":"#/components/schemas/models.PlayerStats"},"resources":{"$ref":"#/components/schemas/models.ResourceStats"},"server_groups":{"$ref":"#/components/schemas/models.GroupStats"},"serverhosts":{"$ref":"#/components/schemas/models.ServerhostStats"},"servers":{"$ref":"#/components/schemas/models.ServerStats"}},"type":"object"},"models.ConnectPlayerRequest":{"description":"Request to connect a player to a server","properties":{"persistent_server_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"selection_mode":{"example":"RANDOM","type":"string"},"server_group_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"server_id":{"example":"lobby-1","type":"string"}},"type":"object"},"models.ConnectPlayerResponse":{"description":"Response for connecting a player","properties":{"message":{"example":"Connect request sent","type":"string"},"player_id":{"example":"069a79f4-44e9-4726-a5be-fca90e38aaf5","type":"string"},"server_name":{"example":"lobby-1","type":"string"},"success":{"example":true,"type":"boolean"}},"type":"object"},"models.CreateBlueprintRequest":{"description":"Request to create a new blueprint","properties":{"configurator":{"example":"example-configurator","type":"string"},"minecraft_version":{"example":"1.20.1","type":"string"},"name":{"example":"example-blueprint","type":"string"},"runtime_config":{"$ref":"#/components/schemas/models.RuntimeConfig"},"server_software":{"example":"paper","type":"string"},"server_url":{"example":"https://example.com/server","type":"string"},"software_version":{"example":"1.20.1","type":"string"},"workflow_steps":{"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"models.CreateBlueprintResponse":{"description":"Response for creating a new blueprint","properties":{"blueprint_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"configurator":{"example":"example-configurator","type":"string"},"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"minecraft_version":{"example":"1.20.1","type":"string"},"name":{"example":"example-blueprint","type":"string"},"runtime_config":{"$ref":"#/components/schemas/models.RuntimeConfig"},"server_software":{"example":"paper","type":"string"},"server_url":{"example":"https://example.com/server","type":"string"},"software_version":{"example":"1.20.1","type":"string"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"workflow_steps":{"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"models.CreateEncryptedSecretResponse":{"description":"Response for creating a client-encrypted network secret","properties":{"key":{"example":"DATABASE_PASSWORD","type":"string"},"message":{"example":"Secret created successfully","type":"string"},"secret_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.CreateEnvironmentVariableResponse":{"description":"Response for creating an environment variable","properties":{"environment_variable_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"key":{"example":"JAVA_TOOL_OPTIONS","type":"string"},"message":{"example":"Environment variable created successfully","type":"string"},"value":{"example":"-Xmx2G","type":"string"}},"type":"object"},"models.CreateNetworkPasswordRequest":{"description":"Request for creating a network password","properties":{"name":{"example":"api-key-1","type":"string"}},"type":"object"},"models.CreateNetworkPasswordResponse":{"description":"Response for creating a network password","properties":{"name":{"example":"api-key-1","type":"string"},"password":{"example":"secretpassword","type":"string"},"password_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"secret":{"description":"Deprecated: use password.","example":"secretpassword","type":"string"},"secret_id":{"description":"Deprecated: use password_id.","example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.CreatePersistentServerRequest":{"description":"Request to create a new persistent server","properties":{"active":{"example":true,"type":"boolean"},"max_memory":{"example":2048,"type":"integer"},"max_players":{"example":50,"type":"integer"},"min_memory":{"example":1024,"type":"integer"},"name":{"example":"my-persistent-server","type":"string"},"plugin_collection_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false},"plugins":{"items":{"$ref":"#/components/schemas/models.PluginReferenceInput"},"type":"array","uniqueItems":false},"priority":{"example":10,"type":"integer"},"properties":{"additionalProperties":{},"type":"object"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"source":{"$ref":"#/components/schemas/models.SourceConfig"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"enum":["SERVER","PROXY"],"example":"SERVER","type":"string"},"workflows":{"$ref":"#/components/schemas/models.WorkflowsConfig"}},"type":"object"},"models.CreatePersistentServerResponse":{"description":"Response for creating a new persistent server","properties":{"active":{"example":true,"type":"boolean"},"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"max_memory":{"example":2048,"type":"integer"},"max_players":{"example":50,"type":"integer"},"min_memory":{"example":1024,"type":"integer"},"name":{"example":"my-persistent-server","type":"string"},"persistent_server_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"player_count":{"example":0,"type":"integer"},"priority":{"example":10,"type":"integer"},"properties":{"additionalProperties":{},"type":"object"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"source":{"$ref":"#/components/schemas/models.SourceConfig"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"example":"SERVER","type":"string"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"workflows":{"$ref":"#/components/schemas/models.WorkflowsConfig"}},"type":"object"},"models.CreatePluginAssignmentRequest":{"properties":{"persistent_server_id":{"type":"string"},"plugin_id":{"type":"string"},"plugin_name":{"type":"string"},"required":{"type":"boolean"},"server_group_id":{"type":"string"},"source_type":{"type":"string"},"source_value":{"type":"string"},"version":{"type":"string"}},"type":"object"},"models.CreatePluginCollectionAssignmentRequest":{"properties":{"persistent_server_id":{"type":"string"},"plugin_collection_id":{"type":"string"},"server_group_id":{"type":"string"}},"type":"object"},"models.CreatePluginCollectionAssignmentResponse":{"properties":{"created_at":{"type":"string"},"created_plugin_assignments":{"type":"integer"},"id":{"type":"string"},"mc_network_id":{"type":"string"},"persistent_server_id":{"type":"string"},"plugin_collection_id":{"type":"string"},"plugin_collection_name":{"type":"string"},"server_group_id":{"type":"string"},"skipped_plugin_assignments":{"type":"integer"},"updated_at":{"type":"string"}},"type":"object"},"models.CreatePluginCollectionPluginRequest":{"properties":{"plugin_collection_id":{"type":"string"},"plugin_id":{"type":"string"},"plugin_name":{"type":"string"},"required":{"type":"boolean"},"source_type":{"type":"string"},"source_value":{"type":"string"},"version":{"type":"string"}},"type":"object"},"models.CreatePluginCollectionRequest":{"properties":{"name":{"type":"string"}},"type":"object"},"models.CreatePluginRequest":{"properties":{"name":{"type":"string"},"source_type":{"type":"string"},"source_value":{"type":"string"}},"required":["name","source_type","source_value"],"type":"object"},"models.CreateServerGroupRequest":{"description":"Request to create a new server group","properties":{"active":{"example":true,"type":"boolean"},"deployment":{"$ref":"#/components/schemas/models.DeploymentConfig"},"max_memory":{"example":2048,"type":"integer"},"max_players":{"example":50,"type":"integer"},"min_memory":{"example":1024,"type":"integer"},"name":{"example":"lobby","type":"string"},"plugin_collection_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false},"plugins":{"items":{"$ref":"#/components/schemas/models.PluginReferenceInput"},"type":"array","uniqueItems":false},"priority":{"example":10,"type":"integer"},"properties":{"additionalProperties":{},"type":"object"},"scaling":{"$ref":"#/components/schemas/models.ScalingConfig"},"source":{"$ref":"#/components/schemas/models.SourceConfig"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"enum":["SERVER","PROXY"],"example":"SERVER","type":"string"},"workflows":{"$ref":"#/components/schemas/models.WorkflowsConfig"}},"type":"object"},"models.CreateServerGroupResponse":{"description":"Response for creating a new server group","properties":{"active":{"example":true,"type":"boolean"},"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"deployment":{"$ref":"#/components/schemas/models.DeploymentConfig"},"max_memory":{"example":2048,"type":"integer"},"max_players":{"example":50,"type":"integer"},"min_memory":{"example":1024,"type":"integer"},"name":{"example":"lobby","type":"string"},"priority":{"example":10,"type":"integer"},"properties":{"additionalProperties":{},"type":"object"},"scaling":{"$ref":"#/components/schemas/models.ScalingConfig"},"server_group_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"source":{"$ref":"#/components/schemas/models.SourceConfig"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"example":"SERVER","type":"string"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"workflows":{"$ref":"#/components/schemas/models.WorkflowsConfig"}},"type":"object"},"models.CurrentSessionResponse":{"description":"Current session with client settings","properties":{"session":{"$ref":"#/components/schemas/models.PlayerSessionResponse"},"settings":{"$ref":"#/components/schemas/models.PlayerClientSettingsResponse"}},"type":"object"},"models.DeactivateServerhostRequest":{"description":"Request to deactivate or reactivate a serverhost","properties":{"deactivated":{"example":true,"type":"boolean"}},"type":"object"},"models.DeactivateServerhostResponse":{"description":"Response for serverhost deactivation operation","properties":{"deactivated":{"example":true,"type":"boolean"},"deactivated_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"host_name":{"example":"ServerHost-1","type":"string"},"message":{"example":"Serverhost deactivated successfully","type":"string"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.DeleteBlueprintResponse":{"description":"Response for deleting a blueprint","properties":{"blueprint_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"message":{"example":"Blueprint deleted successfully","type":"string"},"name":{"example":"example-blueprint","type":"string"}},"type":"object"},"models.DeleteEnvironmentVariableResponse":{"description":"Response for deleting an environment variable","properties":{"key":{"example":"JAVA_TOOL_OPTIONS","type":"string"},"message":{"example":"Environment variable deleted successfully","type":"string"}},"type":"object"},"models.DeleteNetworkPasswordResponse":{"description":"Response for deleting a network password","properties":{"message":{"example":"Password deleted successfully","type":"string"},"password_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"secret_id":{"description":"Deprecated: use password_id.","example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.DeleteNetworkResponse":{"description":"Response for deleting a network and all its resources","properties":{"message":{"example":"Network deleted successfully","type":"string"},"network_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.DeletePersistentServerResponse":{"description":"Response for deleting a persistent server","properties":{"message":{"example":"Persistent server deleted successfully","type":"string"},"name":{"example":"my-persistent-server","type":"string"},"persistent_server_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.DeletePlayerPropertiesRequest":{"description":"Request to delete player property keys","properties":{"keys":{"example":["key1","key2"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"models.DeletePlayerPropertiesResponse":{"description":"Response for deleting player properties","properties":{"message":{"example":"Properties deleted successfully","type":"string"},"player_id":{"example":"069a79f4-44e9-4726-a5be-fca90e38aaf5","type":"string"}},"type":"object"},"models.DeletePluginAssignmentResponse":{"properties":{"assignment_id":{"type":"string"},"message":{"type":"string"}},"type":"object"},"models.DeletePluginCollectionAssignmentResponse":{"properties":{"assignment_id":{"type":"string"},"message":{"type":"string"}},"type":"object"},"models.DeletePluginCollectionPluginResponse":{"properties":{"message":{"type":"string"},"plugin_collection_plugin_id":{"type":"string"}},"type":"object"},"models.DeletePluginCollectionResponse":{"properties":{"message":{"type":"string"},"name":{"type":"string"},"plugin_collection_id":{"type":"string"}},"type":"object"},"models.DeletePluginResponse":{"properties":{"message":{"type":"string"},"name":{"type":"string"},"plugin_id":{"type":"string"}},"type":"object"},"models.DeletePropertiesRequest":{"description":"Request to delete specific property keys","properties":{"keys":{"example":["key1","key2"],"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"models.DeletePropertiesResponse":{"description":"Response for deleting properties","properties":{"deleted_keys":{"example":["key1","key2"],"items":{"type":"string"},"type":"array","uniqueItems":false},"message":{"example":"Properties deleted successfully","type":"string"},"properties":{"additionalProperties":{},"type":"object"}},"type":"object"},"models.DeleteSecretResponse":{"description":"Response for deleting a stored network secret","properties":{"key":{"example":"DATABASE_PASSWORD","type":"string"},"message":{"example":"Secret deleted successfully","type":"string"}},"type":"object"},"models.DeleteServerGroupResponse":{"description":"Response for deleting a server group","properties":{"message":{"example":"Server group deleted successfully","type":"string"},"name":{"example":"lobby","type":"string"},"server_group_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.DeleteServerResponse":{"description":"Response for deleting a server row from the database","properties":{"message":{"example":"Server row deleted successfully","type":"string"},"server_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.DeleteServerhostResponse":{"description":"Response for deleting a serverhost","properties":{"host_name":{"example":"ServerHost-1","type":"string"},"message":{"example":"Serverhost deleted successfully","type":"string"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.DeploymentConfig":{"description":"Deployment configuration for a server group","properties":{"hosts":{"items":{"$ref":"#/components/schemas/models.DeploymentHost"},"type":"array","uniqueItems":false},"strategy":{"example":"whitelist","type":"string"}},"type":"object"},"models.DeploymentHost":{"description":"Host configuration for deployment","properties":{"name":{"example":"main-host-1","type":"string"},"priority":{"example":1,"type":"integer"}},"type":"object"},"models.EncryptedSecret":{"description":"Stored network secret with its encrypted value","properties":{"encrypted_value":{"example":"AYd2K1zr...","type":"string"},"key":{"example":"DATABASE_PASSWORD","type":"string"}},"type":"object"},"models.EncryptionKeyResponse":{"description":"Network shared public key","properties":{"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"generated_by_serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"key_fingerprint":{"example":"3f5a...","type":"string"},"public_key_pem":{"example":"-----BEGIN PUBLIC KEY-----...","type":"string"}},"type":"object"},"models.EnvironmentVariable":{"description":"Network environment variable decrypted by the controller","properties":{"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"environment_variable_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"key":{"example":"JAVA_TOOL_OPTIONS","type":"string"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"value":{"example":"-Xmx2G","type":"string"}},"type":"object"},"models.ErrorResponse":{"description":"Generic error response","properties":{"error":{"type":"string"}},"type":"object"},"models.ExecuteManualWorkflowFailure":{"description":"Failed workflow execution details for one server.","properties":{"error_message":{"example":"workflow execution was rejected by serverhost","type":"string"},"server_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.ExecuteManualWorkflowRequest":{"description":"Request to execute a manual workflow.","properties":{"workflow_id":{"example":"internal.cleanup","type":"string"}},"type":"object"},"models.ExecutePersistentServerWorkflowResponse":{"description":"Response for executing a manual workflow on all eligible servers of a persistent server.","properties":{"failed_servers":{"items":{"$ref":"#/components/schemas/models.ExecuteManualWorkflowFailure"},"type":"array","uniqueItems":false},"message":{"example":"Manual workflow execution completed","type":"string"},"persistent_server_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"skipped_server_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false},"succeeded_server_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false},"total_servers":{"example":1,"type":"integer"},"workflow_id":{"example":"internal.cleanup","type":"string"}},"type":"object"},"models.ExecuteServerGroupWorkflowResponse":{"description":"Response for executing a manual workflow on all eligible servers in a server group.","properties":{"failed_servers":{"items":{"$ref":"#/components/schemas/models.ExecuteManualWorkflowFailure"},"type":"array","uniqueItems":false},"message":{"example":"Manual workflow execution completed","type":"string"},"server_group_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"skipped_server_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false},"succeeded_server_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false},"total_servers":{"example":3,"type":"integer"},"workflow_id":{"example":"internal.cleanup","type":"string"}},"type":"object"},"models.ExecuteServerWorkflowResponse":{"description":"Response for executing a manual workflow on a single server.","properties":{"error_message":{"example":"workflow execution was rejected by serverhost","type":"string"},"message":{"example":"Manual workflow execution completed","type":"string"},"server_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"success":{"example":true,"type":"boolean"},"workflow_id":{"example":"internal.cleanup","type":"string"}},"type":"object"},"models.GroupStats":{"properties":{"active":{"type":"integer"},"total":{"type":"integer"}},"type":"object"},"models.HealthStatus":{"properties":{"healthy_server_percent":{"type":"number"},"status":{"type":"string"}},"type":"object"},"models.KickPlayerRequest":{"description":"Request to kick a player","properties":{"reason":{"example":"You have been kicked!","type":"string"}},"type":"object"},"models.KickPlayerResponse":{"description":"Response for kicking a player","properties":{"message":{"example":"Kick request sent","type":"string"},"player_id":{"example":"069a79f4-44e9-4726-a5be-fca90e38aaf5","type":"string"},"success":{"example":true,"type":"boolean"}},"type":"object"},"models.ListBlueprintsResponse":{"description":"Response for listing blueprints","properties":{"blueprints":{"items":{"$ref":"#/components/schemas/models.BlueprintSummary"},"type":"array","uniqueItems":false},"count":{"example":5,"type":"integer"}},"type":"object"},"models.ListEncryptedSecretsResponse":{"description":"Response for listing encrypted network secrets","properties":{"count":{"example":3,"type":"integer"},"key_fingerprint":{"example":"3f5a...","type":"string"},"secrets":{"items":{"$ref":"#/components/schemas/models.EncryptedSecret"},"type":"array","uniqueItems":false}},"type":"object"},"models.ListEnvironmentVariablesResponse":{"description":"Response for listing environment variables","properties":{"count":{"example":3,"type":"integer"},"environment_variables":{"items":{"$ref":"#/components/schemas/models.EnvironmentVariable"},"type":"array","uniqueItems":false}},"type":"object"},"models.ListNetworkPasswordsResponse":{"description":"Response for listing network passwords","properties":{"count":{"example":5,"type":"integer"},"passwords":{"items":{"$ref":"#/components/schemas/models.NetworkPasswordSummary"},"type":"array","uniqueItems":false},"secrets":{"description":"Deprecated: use passwords.","items":{"$ref":"#/components/schemas/models.NetworkPasswordSummary"},"type":"array","uniqueItems":false}},"type":"object"},"models.ListNetworksResponse":{"description":"Response for listing all networks","properties":{"count":{"example":5,"type":"integer"},"networks":{"items":{"$ref":"#/components/schemas/models.NetworkSummary"},"type":"array","uniqueItems":false}},"type":"object"},"models.ListPersistentServersResponse":{"description":"Response for listing persistent servers","properties":{"count":{"example":5,"type":"integer"},"persistent_servers":{"items":{"$ref":"#/components/schemas/models.PersistentServerSummary"},"type":"array","uniqueItems":false}},"type":"object"},"models.ListPlayerProfilesResponse":{"description":"Response for listing player profile history","properties":{"count":{"example":5,"type":"integer"},"profiles":{"items":{"$ref":"#/components/schemas/models.PlayerProfileResponse"},"type":"array","uniqueItems":false},"total":{"example":10,"type":"integer"}},"type":"object"},"models.ListPlayerSessionsResponse":{"description":"Response for listing player sessions","properties":{"count":{"example":5,"type":"integer"},"sessions":{"items":{"$ref":"#/components/schemas/models.PlayerSessionResponse"},"type":"array","uniqueItems":false},"total":{"example":100,"type":"integer"}},"type":"object"},"models.ListPlayersResponse":{"description":"Response for listing players","properties":{"count":{"example":25,"type":"integer"},"players":{"items":{"$ref":"#/components/schemas/models.PlayerResponse"},"type":"array","uniqueItems":false},"total":{"example":1000,"type":"integer"}},"type":"object"},"models.ListPluginAssignmentsResponse":{"properties":{"count":{"type":"integer"},"plugin_assignments":{"items":{"$ref":"#/components/schemas/models.PluginAssignmentResponse"},"type":"array","uniqueItems":false}},"type":"object"},"models.ListPluginCollectionAssignmentsResponse":{"properties":{"count":{"type":"integer"},"plugin_collection_assignments":{"items":{"$ref":"#/components/schemas/models.PluginCollectionAssignmentResponse"},"type":"array","uniqueItems":false}},"type":"object"},"models.ListPluginCollectionPluginsResponse":{"properties":{"count":{"type":"integer"},"plugin_collection_plugins":{"items":{"$ref":"#/components/schemas/models.PluginCollectionPluginResponse"},"type":"array","uniqueItems":false}},"type":"object"},"models.ListPluginCollectionsResponse":{"properties":{"count":{"type":"integer"},"plugin_collections":{"items":{"$ref":"#/components/schemas/models.PluginCollectionResponse"},"type":"array","uniqueItems":false}},"type":"object"},"models.ListPluginsResponse":{"properties":{"count":{"type":"integer"},"plugins":{"items":{"$ref":"#/components/schemas/models.PluginResponse"},"type":"array","uniqueItems":false}},"type":"object"},"models.ListSecretsResponse":{"description":"Response for listing stored network secrets","properties":{"count":{"example":3,"type":"integer"},"secrets":{"items":{"$ref":"#/components/schemas/models.SecretSummary"},"type":"array","uniqueItems":false}},"type":"object"},"models.ListServerGroupStartQueueResponse":{"description":"Response for listing queued server group starts","properties":{"count":{"example":2,"type":"integer"},"failed_starts":{"example":1,"type":"integer"},"items":{"items":{"$ref":"#/components/schemas/models.ServerGroupStartQueueEntry"},"type":"array","uniqueItems":false},"queued_starts":{"example":2,"type":"integer"},"total_starts":{"example":3,"type":"integer"}},"type":"object"},"models.ListServerGroupsResponse":{"description":"Response for listing server groups","properties":{"count":{"example":5,"type":"integer"},"server_groups":{"items":{"$ref":"#/components/schemas/models.ServerGroupSummary"},"type":"array","uniqueItems":false}},"type":"object"},"models.ListServerhostsResponse":{"description":"Response for listing serverhosts","properties":{"count":{"example":5,"type":"integer"},"serverhosts":{"items":{"$ref":"#/components/schemas/models.ServerhostSummary"},"type":"array","uniqueItems":false}},"type":"object"},"models.ListServersResponse":{"description":"Response for listing servers","properties":{"count":{"example":5,"type":"integer"},"servers":{"items":{"$ref":"#/components/schemas/models.ServerSummary"},"type":"array","uniqueItems":false}},"type":"object"},"models.LogEntry":{"properties":{"message":{"type":"string"},"numerical_id":{"type":"integer"},"persistent_server_id":{"type":"string"},"persistent_server_name":{"type":"string"},"sequence":{"type":"integer"},"server_group_id":{"type":"string"},"server_group_name":{"type":"string"},"server_id":{"type":"string"},"server_name":{"type":"string"},"server_type":{"type":"string"},"serverhost_id":{"type":"string"},"serverhost_name":{"type":"string"},"severity":{"type":"string"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"timestamp":{"type":"string"},"trace_id":{"type":"string"}},"type":"object"},"models.LogQueryRequest":{"properties":{"cursor":{"type":"string"},"from":{"type":"string"},"limit":{"type":"integer"},"order":{"type":"string"},"persistent_server_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false},"search":{"type":"string"},"server_group_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false},"server_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false},"serverhost_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false},"severities":{"items":{"type":"string"},"type":"array","uniqueItems":false},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"to":{"type":"string"}},"type":"object"},"models.LogsResponse":{"properties":{"cursor":{"type":"string"},"has_more":{"type":"boolean"},"logs":{"items":{"$ref":"#/components/schemas/models.LogEntry"},"type":"array","uniqueItems":false}},"type":"object"},"models.ManualServerStartQueueItem":{"description":"Detailed information for one persisted manual server start entry","properties":{"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"failure_reason":{"example":"no capacity: group is at maximum servers","type":"string"},"id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"status":{"enum":["pending","failed"],"example":"pending","type":"string"}},"type":"object"},"models.NetworkPasswordSummary":{"description":"Summary of a network password","properties":{"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"name":{"example":"api-key-1","type":"string"},"password_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"secret_id":{"description":"Deprecated: use password_id.","example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.NetworkSummary":{"description":"Summary of a network","properties":{"assigned_controller_id":{"example":"controller-1","type":"string"},"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"name":{"example":"example-network","type":"string"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"}},"type":"object"},"models.OnlinePlayerCountResponse":{"description":"Online player count","properties":{"count":{"example":100,"type":"integer"}},"type":"object"},"models.OnlinePlayerResponse":{"description":"Online player information","properties":{"connected_proxy_name":{"example":"proxy-1","type":"string"},"connected_server_name":{"example":"lobby-1","type":"string"},"display_name":{"example":"Steve","type":"string"},"first_seen":{"example":"2023-01-01T12:00:00Z","type":"string"},"id":{"description":"Minecraft UUID","example":"069a79f4-44e9-4726-a5be-fca90e38aaf5","type":"string"},"last_seen":{"example":"2023-06-15T18:30:00Z","type":"string"},"name":{"example":"Steve","type":"string"},"online":{"example":true,"type":"boolean"},"online_time_seconds":{"example":36000,"type":"integer"},"playtime_seconds":{"example":36000,"type":"integer"},"properties":{"additionalProperties":{"type":"string"},"type":"object"},"session_id":{"example":"sess_abc123","type":"string"}},"type":"object"},"models.OnlinePlayersResponse":{"description":"Response for listing online players","properties":{"count":{"example":100,"type":"integer"},"players":{"items":{"$ref":"#/components/schemas/models.OnlinePlayerResponse"},"type":"array","uniqueItems":false}},"type":"object"},"models.PatchBlueprintRequest":{"description":"Request to partially update an existing blueprint","properties":{"configurator":{"example":"example-configurator","type":"string"},"minecraft_version":{"example":"1.20.1","type":"string"},"name":{"example":"example-blueprint","type":"string"},"runtime_config":{"$ref":"#/components/schemas/models.RuntimeConfig"},"server_software":{"example":"paper","type":"string"},"server_url":{"example":"https://example.com/server","type":"string"},"software_version":{"example":"1.20.1","type":"string"},"workflow_steps":{"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"models.PatchPersistentServerRequest":{"description":"Request to partially update an existing persistent server","properties":{"active":{"example":true,"type":"boolean"},"max_memory":{"example":2048,"type":"integer"},"max_players":{"example":50,"type":"integer"},"min_memory":{"example":1024,"type":"integer"},"name":{"example":"my-persistent-server","type":"string"},"priority":{"example":10,"type":"integer"},"properties":{"additionalProperties":{},"type":"object"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"source":{"$ref":"#/components/schemas/models.SourceConfig"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"enum":["SERVER","PROXY"],"example":"SERVER","type":"string"},"workflows":{"$ref":"#/components/schemas/models.WorkflowsConfig"}},"type":"object"},"models.PatchPlayerRequest":{"description":"Request to partially update admin-managed player fields","properties":{"online_time_seconds":{"example":36000,"type":"integer"},"reset_first_seen":{"example":true,"type":"boolean"},"reset_last_seen":{"example":true,"type":"boolean"}},"type":"object"},"models.PatchPropertiesRequest":{"description":"Request to merge/update specific property keys (deep merge)","properties":{"properties":{"additionalProperties":{},"type":"object"}},"type":"object"},"models.PatchPropertiesResponse":{"description":"Response for patching properties","properties":{"message":{"example":"Properties patched successfully","type":"string"},"properties":{"additionalProperties":{},"type":"object"}},"type":"object"},"models.PatchServerGroupRequest":{"description":"Request to partially update an existing server group","properties":{"active":{"example":true,"type":"boolean"},"deployment":{"$ref":"#/components/schemas/models.DeploymentConfig"},"max_memory":{"example":2048,"type":"integer"},"max_players":{"example":50,"type":"integer"},"min_memory":{"example":1024,"type":"integer"},"name":{"example":"lobby","type":"string"},"priority":{"example":10,"type":"integer"},"properties":{"additionalProperties":{},"type":"object"},"scaling":{"$ref":"#/components/schemas/models.ScalingConfig"},"source":{"$ref":"#/components/schemas/models.SourceConfig"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"enum":["SERVER","PROXY"],"example":"SERVER","type":"string"},"workflows":{"$ref":"#/components/schemas/models.WorkflowsConfig"}},"type":"object"},"models.PatchServerRequest":{"description":"Request to partially update an existing server","properties":{"max_memory":{"example":2048,"type":"integer"},"max_players":{"example":50,"type":"integer"},"min_memory":{"example":1024,"type":"integer"},"properties":{"additionalProperties":{},"type":"object"},"state":{"enum":["QUEUED","PREPARING","STARTING","AVAILABLE","INGAME","STOPPING","CLEANUP","STOPPED"],"example":"AVAILABLE","type":"string"}},"type":"object"},"models.PatchServerResponse":{"description":"Response for patching a server","properties":{"server":{"$ref":"#/components/schemas/models.ServerSummary"}},"type":"object"},"models.PersistentServerInfo":{"description":"Persistent server information","properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"id":{"type":"string"},"max_memory":{"type":"integer"},"max_players":{"type":"integer"},"min_memory":{"type":"integer"},"name":{"type":"string"},"properties":{"additionalProperties":{},"type":"object"},"serverhost_id":{"type":"string"},"source":{"$ref":"#/components/schemas/models.SourceConfig"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"type":"string"},"updated_at":{"type":"string"},"workflows":{"$ref":"#/components/schemas/models.WorkflowsConfig"}},"type":"object"},"models.PersistentServerSummary":{"description":"Summary of a persistent server for listing","properties":{"active":{"example":true,"type":"boolean"},"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"max_memory":{"example":2048,"type":"integer"},"max_players":{"example":50,"type":"integer"},"min_memory":{"example":1024,"type":"integer"},"name":{"example":"my-persistent-server","type":"string"},"persistent_server_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"player_count":{"example":0,"type":"integer"},"priority":{"example":10,"type":"integer"},"properties":{"additionalProperties":{},"type":"object"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"source":{"$ref":"#/components/schemas/models.SourceConfig"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"example":"SERVER","type":"string"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"workflows":{"$ref":"#/components/schemas/models.WorkflowsConfig"}},"type":"object"},"models.PersistentStats":{"properties":{"active":{"type":"integer"},"total":{"type":"integer"}},"type":"object"},"models.PlayerClientSettingsResponse":{"description":"Player client settings","properties":{"chat_colors":{"example":true,"type":"boolean"},"chat_mode":{"example":"ENABLED","type":"string"},"client_listing_allowed":{"example":true,"type":"boolean"},"locale":{"example":"en_US","type":"string"},"main_hand":{"example":"RIGHT","type":"string"},"skin_parts":{"example":["CAPE","JACKET","LEFT_SLEEVE"],"items":{"type":"string"},"type":"array","uniqueItems":false},"view_distance":{"example":12,"type":"integer"}},"type":"object"},"models.PlayerOnlineTimeResponse":{"description":"Player online time information","properties":{"formatted_time":{"example":"10h 0m","type":"string"},"online_time_seconds":{"example":36000,"type":"integer"},"player_id":{"example":"069a79f4-44e9-4726-a5be-fca90e38aaf5","type":"string"}},"type":"object"},"models.PlayerProfileResponse":{"description":"Player profile with name and skin data","properties":{"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"name":{"example":"Steve","type":"string"},"player_id":{"example":"069a79f4-44e9-4726-a5be-fca90e38aaf5","type":"string"},"texture":{"example":"base64-encoded-texture","type":"string"}},"type":"object"},"models.PlayerPropertiesResponse":{"description":"Response for getting player properties","properties":{"player_id":{"example":"069a79f4-44e9-4726-a5be-fca90e38aaf5","type":"string"},"properties":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"models.PlayerResponse":{"description":"Player information","properties":{"connected_proxy_name":{"example":"proxy-1","type":"string"},"connected_server_name":{"example":"lobby-1","type":"string"},"display_name":{"example":"Steve","type":"string"},"first_seen":{"example":"2023-01-01T12:00:00Z","type":"string"},"id":{"description":"Minecraft UUID","example":"069a79f4-44e9-4726-a5be-fca90e38aaf5","type":"string"},"last_seen":{"example":"2023-06-15T18:30:00Z","type":"string"},"name":{"example":"Steve","type":"string"},"online":{"example":true,"type":"boolean"},"online_time_seconds":{"example":36000,"type":"integer"},"playtime_seconds":{"example":36000,"type":"integer"},"properties":{"additionalProperties":{"type":"string"},"type":"object"},"session_id":{"example":"sess_abc123","type":"string"}},"type":"object"},"models.PlayerSessionResponse":{"description":"Player session information","properties":{"address_hash":{"example":"abc123hash","type":"string"},"client_version":{"example":765,"type":"integer"},"duration_seconds":{"example":7200,"type":"integer"},"id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"login_time":{"example":"2023-01-01T12:00:00Z","type":"string"},"logout_time":{"example":"2023-01-01T14:00:00Z","type":"string"},"network_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"online_mode":{"example":true,"type":"boolean"},"player_id":{"example":"069a79f4-44e9-4726-a5be-fca90e38aaf5","type":"string"}},"type":"object"},"models.PlayerStats":{"properties":{"capacity":{"type":"integer"},"online":{"type":"integer"},"utilization_percent":{"type":"number"}},"type":"object"},"models.PluginAssignmentResponse":{"properties":{"created_at":{"type":"string"},"id":{"type":"string"},"mc_network_id":{"type":"string"},"persistent_server_id":{"type":"string"},"plugin_id":{"type":"string"},"plugin_name":{"type":"string"},"required":{"type":"boolean"},"server_group_id":{"type":"string"},"source_type":{"type":"string"},"source_value":{"type":"string"},"updated_at":{"type":"string"},"version":{"type":"string"}},"type":"object"},"models.PluginCollectionAssignmentResponse":{"properties":{"created_at":{"type":"string"},"id":{"type":"string"},"mc_network_id":{"type":"string"},"persistent_server_id":{"type":"string"},"plugin_collection_id":{"type":"string"},"plugin_collection_name":{"type":"string"},"server_group_id":{"type":"string"},"updated_at":{"type":"string"}},"type":"object"},"models.PluginCollectionPluginResponse":{"properties":{"created_at":{"type":"string"},"id":{"type":"string"},"mc_network_id":{"type":"string"},"plugin_collection_id":{"type":"string"},"plugin_id":{"type":"string"},"plugin_name":{"type":"string"},"required":{"type":"boolean"},"source_type":{"type":"string"},"source_value":{"type":"string"},"updated_at":{"type":"string"},"version":{"type":"string"}},"type":"object"},"models.PluginCollectionResponse":{"properties":{"created_at":{"type":"string"},"id":{"type":"string"},"mc_network_id":{"type":"string"},"name":{"type":"string"},"updated_at":{"type":"string"}},"type":"object"},"models.PluginReferenceInput":{"properties":{"plugin_id":{"type":"string"},"plugin_name":{"type":"string"},"required":{"type":"boolean"},"source_type":{"type":"string"},"source_value":{"type":"string"},"version":{"type":"string"}},"type":"object"},"models.PluginResponse":{"properties":{"created_at":{"type":"string"},"id":{"type":"string"},"mc_network_id":{"type":"string"},"name":{"type":"string"},"source_type":{"type":"string"},"source_value":{"type":"string"},"updated_at":{"type":"string"}},"type":"object"},"models.QueueServerGroupStartRequest":{"description":"Request to enqueue one server start for a server group","properties":{"server_group_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"server_group_name":{"example":"lobby","type":"string"}},"type":"object"},"models.QueueServerGroupStartResponse":{"description":"Response for enqueueing a server group start","properties":{"message":{"example":"Server start queued successfully","type":"string"},"queued_starts":{"example":3,"type":"integer"},"server_group_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"server_group_name":{"example":"lobby","type":"string"}},"type":"object"},"models.ReapplyPluginCollectionAssignmentsRequest":{"properties":{"persistent_server_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false},"plugin_collection_id":{"type":"string"},"server_group_ids":{"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"models.ReapplyPluginCollectionAssignmentsResponse":{"properties":{"created_plugin_assignments":{"type":"integer"},"message":{"type":"string"},"reapplied_collection_assignments":{"type":"integer"},"skipped_plugin_assignments":{"type":"integer"}},"type":"object"},"models.RegisterEncryptionKeyRequest":{"description":"Request for registering the network shared public key","properties":{"public_key_pem":{"example":"-----BEGIN PUBLIC KEY-----...","type":"string"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.RegisterEncryptionKeyResponse":{"description":"Response for registering the network shared public key","properties":{"accepted":{"example":true,"type":"boolean"},"key_fingerprint":{"example":"3f5a...","type":"string"},"message":{"example":"Encryption key registered successfully","type":"string"},"public_key_pem":{"example":"-----BEGIN PUBLIC KEY-----...","type":"string"}},"type":"object"},"models.RegisterNetworkRequest":{"description":"Request for network registration","properties":{"name":{"example":"Acme Network","type":"string"}},"type":"object"},"models.RegisterNetworkResponse":{"description":"Response for network registration","properties":{"network_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"network_name":{"example":"example-network","type":"string"},"network_password":{"example":"secretpassword","type":"string"},"network_secret":{"description":"Deprecated: use network_password.","example":"secretpassword","type":"string"}},"type":"object"},"models.RegisterServerhostRequest":{"description":"Request for serverhost registration","properties":{"host_name":{"example":"ServerHost-1","type":"string"},"maximum_memory":{"example":8192,"type":"integer"}},"type":"object"},"models.RegisterServerhostResponse":{"description":"Response for serverhost registration","properties":{"host_name":{"example":"ServerHost-1","type":"string"},"last_keep_alive":{"example":"2023-01-01T12:00:00Z","type":"string"},"maximum_memory":{"example":8192,"type":"integer"},"message":{"example":"Serverhost registered successfully","type":"string"},"network_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.ResolveServerhostGatewayRequest":{"properties":{"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"slug":{"example":"9f1f7f2c9a224bb29f9e0f7e5b2a070a","type":"string"}},"type":"object"},"models.ResolveServerhostGatewayResponse":{"properties":{"host_name":{"example":"ServerHost-1","type":"string"},"network_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"slug":{"example":"9f1f7f2c9a224bb29f9e0f7e5b2a070a","type":"string"}},"type":"object"},"models.ResourceStats":{"properties":{"average_cpu_percent":{"type":"number"},"memory_allocated_mb":{"type":"integer"},"memory_used_mb":{"type":"number"}},"type":"object"},"models.RollingRestartRequest":{"properties":{"server_group_id":{"type":"string"}},"type":"object"},"models.RollingRestartResponse":{"properties":{"group_id":{"type":"string"},"message":{"type":"string"},"status":{"type":"string"}},"type":"object"},"models.RollingRestartStatusResponse":{"properties":{"active":{"type":"boolean"},"group_id":{"type":"string"},"timestamp":{"type":"string"}},"type":"object"},"models.RuntimeConfig":{"description":"Configuration for the runtime environment","properties":{"type":{"example":"java","type":"string"},"with":{"additionalProperties":{},"type":"object"}},"type":"object"},"models.ScaleDownConfig":{"description":"Scale down configuration","properties":{"idle_time":{"example":"3m","type":"string"},"ignore_players":{"example":true,"type":"boolean"}},"type":"object"},"models.ScalingConfig":{"description":"Scaling configuration for server groups","properties":{"available_slots":{"example":10,"type":"integer"},"max_servers":{"example":3,"type":"integer"},"min_servers":{"example":0,"type":"integer"},"player_threshold":{"example":0.8,"type":"number"},"scale_down":{"$ref":"#/components/schemas/models.ScaleDownConfig"},"scaling_mode":{"$ref":"#/components/schemas/models.ScalingMode"}},"type":"object"},"models.ScalingMode":{"description":"Scaling mode for server groups","example":"SERVERS","type":"string","x-enum-varnames":["ScalingModeSlots","ScalingModeServers"]},"models.SecretSummary":{"description":"Summary of a stored network secret","properties":{"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"key":{"example":"DATABASE_PASSWORD","type":"string"},"secret_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"}},"type":"object"},"models.SendCommandRequest":{"description":"Request to send a command to a server","properties":{"command":{"example":"say Hello World","type":"string"}},"type":"object"},"models.SendCommandResponse":{"description":"Response for sending a command to a server","properties":{"command":{"example":"say Hello World","type":"string"},"message":{"example":"Command sent successfully","type":"string"},"server_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.ServerGroupInfo":{"description":"Server group information","properties":{"created_at":{"type":"string"},"deployment_config":{"additionalProperties":{},"type":"object"},"deployment_strategy":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"properties":{"additionalProperties":{},"type":"object"},"scaling_config":{"additionalProperties":{},"type":"object"},"source":{"$ref":"#/components/schemas/models.SourceInfo"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"type":"string"},"updated_at":{"type":"string"},"workflows_config":{"additionalProperties":{},"type":"object"}},"type":"object"},"models.ServerGroupStartQueueEntry":{"description":"Detailed queued start state for one server group","properties":{"failed_starts":{"example":1,"type":"integer"},"queued_starts":{"example":2,"type":"integer"},"server_group_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"server_group_name":{"example":"lobby","type":"string"},"starts":{"items":{"$ref":"#/components/schemas/models.ManualServerStartQueueItem"},"type":"array","uniqueItems":false},"total_starts":{"example":3,"type":"integer"}},"type":"object"},"models.ServerGroupStats":{"description":"Runtime statistics for a server group","properties":{"online_players":{"example":42,"type":"integer"},"servers_by_state":{"additionalProperties":{"type":"integer"},"type":"object"},"total_servers":{"example":5,"type":"integer"}},"type":"object"},"models.ServerGroupSummary":{"description":"Summary of a server group for listing","properties":{"active":{"example":true,"type":"boolean"},"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"deployment":{"$ref":"#/components/schemas/models.DeploymentConfig"},"max_memory":{"example":2048,"type":"integer"},"max_players":{"example":50,"type":"integer"},"min_memory":{"example":1024,"type":"integer"},"name":{"example":"lobby","type":"string"},"priority":{"example":10,"type":"integer"},"properties":{"additionalProperties":{},"type":"object"},"scaling":{"$ref":"#/components/schemas/models.ScalingConfig"},"server_group_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"source":{"$ref":"#/components/schemas/models.SourceConfig"},"stats":{"$ref":"#/components/schemas/models.ServerGroupStats"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"example":"SERVER","type":"string"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"workflows":{"$ref":"#/components/schemas/models.WorkflowsConfig"}},"type":"object"},"models.ServerStats":{"properties":{"active":{"type":"integer"},"by_state":{"$ref":"#/components/schemas/models.ServersByState"},"total":{"type":"integer"}},"type":"object"},"models.ServerSummary":{"description":"Summary of a server for listing","properties":{"cpu_usage":{"example":25.5,"type":"number"},"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"ip":{"example":"127.0.0.1","type":"string"},"last_activity":{"example":"2023-01-01T12:00:00Z","type":"string"},"max_memory":{"example":2048,"type":"integer"},"max_players":{"example":20,"type":"integer"},"memory_usage":{"example":512,"type":"number"},"min_memory":{"example":1024,"type":"integer"},"network_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"numerical_id":{"example":1,"type":"integer"},"persistent_server":{"$ref":"#/components/schemas/models.PersistentServerInfo"},"persistent_server_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"player_count":{"example":5,"type":"integer"},"port":{"example":25565,"type":"integer"},"properties":{"additionalProperties":{},"type":"object"},"server_group":{"$ref":"#/components/schemas/models.ServerGroupInfo"},"server_group_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"server_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"state":{"enum":["QUEUED","PREPARING","STARTING","AVAILABLE","INGAME","STOPPING","CLEANUP","STOPPED"],"example":"AVAILABLE","type":"string"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"}},"type":"object"},"models.ServerhostStats":{"properties":{"active":{"type":"integer"},"total":{"type":"integer"},"total_memory_capacity_mb":{"type":"integer"}},"type":"object"},"models.ServerhostSummary":{"description":"Summary of a serverhost","properties":{"architecture":{"example":"amd64","type":"string"},"auto_update_targeted_version":{"example":true,"type":"boolean"},"available_disk_space_bytes":{"example":750153664512,"type":"integer"},"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"deactivated":{"example":false,"type":"boolean"},"deactivated_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"host_name":{"example":"ServerHost-1","type":"string"},"installed_java_versions":{"example":[8,17,21],"items":{"type":"integer"},"type":"array","uniqueItems":false},"last_keep_alive":{"example":"2023-01-01T12:00:00Z","type":"string"},"maximum_memory":{"example":8192,"type":"integer"},"network_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"operating_system":{"example":"Linux","type":"string"},"operating_system_version":{"example":"6.8.0-40-generic","type":"string"},"serverhost_access_mode":{"example":"MANAGED_GATEWAY","type":"string"},"serverhost_custom_url":{"example":"https://files.example.com","type":"string"},"serverhost_gateway_last_connected_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"serverhost_gateway_slug":{"example":"9f1f7f2c9a224bb29f9e0f7e5b2a070a","type":"string"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"started_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"targeted_version":{"example":"1.2.3","type":"string"},"total_disk_space_bytes":{"example":1000204886016,"type":"integer"},"total_memory_bytes":{"example":34359738368,"type":"integer"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"version":{"example":"1.0.0","type":"string"}},"type":"object"},"models.ServersByState":{"properties":{"available":{"type":"integer"},"ingame":{"type":"integer"},"preparing":{"type":"integer"},"queued":{"type":"integer"},"starting":{"type":"integer"},"stopped":{"type":"integer"},"stopping":{"type":"integer"}},"type":"object"},"models.SourceConfig":{"description":"Source configuration for server groups","properties":{"blueprint":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"image":{"example":"ghcr.io/user/custom-image:latest","type":"string"},"type":{"enum":["blueprint","image"],"example":"blueprint","type":"string"}},"type":"object"},"models.SourceInfo":{"description":"Source configuration information","properties":{"blueprint":{"$ref":"#/components/schemas/models.BlueprintInfo"},"image":{"type":"string"},"type":{"type":"string"}},"type":"object"},"models.StopAllServersResponse":{"description":"Response for stopping all servers in a server group","properties":{"message":{"example":"Stop command sent to all servers","type":"string"},"server_group_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"servers_stopped":{"example":5,"type":"integer"}},"type":"object"},"models.StopServerResponse":{"description":"Response for stopping a server","properties":{"message":{"example":"Server stop request sent successfully","type":"string"},"server_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"state":{"example":"STOPPING","type":"string"}},"type":"object"},"models.UpdateBlueprintRequest":{"description":"Request to update an existing blueprint","properties":{"configurator":{"example":"example-configurator","type":"string"},"minecraft_version":{"example":"1.20.1","type":"string"},"name":{"example":"example-blueprint","type":"string"},"runtime_config":{"$ref":"#/components/schemas/models.RuntimeConfig"},"server_software":{"example":"paper","type":"string"},"server_url":{"example":"https://example.com/server","type":"string"},"software_version":{"example":"1.20.1","type":"string"},"workflow_steps":{"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"models.UpdateBlueprintResponse":{"description":"Response for updating a blueprint","properties":{"blueprint_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"configurator":{"example":"example-configurator","type":"string"},"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"minecraft_version":{"example":"1.20.1","type":"string"},"name":{"example":"example-blueprint","type":"string"},"runtime_config":{"$ref":"#/components/schemas/models.RuntimeConfig"},"server_software":{"example":"paper","type":"string"},"server_url":{"example":"https://example.com/server","type":"string"},"software_version":{"example":"1.20.1","type":"string"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"workflow_steps":{"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"models.UpdateClientSettingsRequest":{"description":"Request to update player client settings","properties":{"chat_colors":{"example":true,"type":"boolean"},"chat_mode":{"example":"ENABLED","type":"string"},"client_listing_allowed":{"example":true,"type":"boolean"},"locale":{"example":"en_US","type":"string"},"main_hand":{"example":"RIGHT","type":"string"},"skin_parts":{"example":["CAPE","JACKET"],"items":{"type":"string"},"type":"array","uniqueItems":false},"view_distance":{"example":12,"type":"integer"}},"type":"object"},"models.UpdateClientSettingsResponse":{"description":"Response for updating client settings","properties":{"message":{"example":"Settings updated successfully","type":"string"},"settings":{"$ref":"#/components/schemas/models.PlayerClientSettingsResponse"},"success":{"example":true,"type":"boolean"}},"type":"object"},"models.UpdateEncryptedSecretResponse":{"description":"Response for updating a client-encrypted network secret","properties":{"key":{"example":"DATABASE_PASSWORD","type":"string"},"message":{"example":"Secret updated successfully","type":"string"},"secret_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.UpdateEnvironmentVariableResponse":{"description":"Response for updating an environment variable","properties":{"environment_variable_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"key":{"example":"JAVA_TOOL_OPTIONS","type":"string"},"message":{"example":"Environment variable updated successfully","type":"string"},"value":{"example":"-Xmx2G","type":"string"}},"type":"object"},"models.UpdateNetworkRequest":{"description":"Request for updating a network","properties":{"name":{"example":"Acme Network","type":"string"}},"type":"object"},"models.UpdateNetworkResponse":{"description":"Response for updating a network","properties":{"message":{"example":"Network updated successfully","type":"string"},"network_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"network_name":{"example":"Acme Network","type":"string"}},"type":"object"},"models.UpdatePersistentServerRequest":{"description":"Request to update an existing persistent server","properties":{"active":{"example":true,"type":"boolean"},"max_memory":{"example":2048,"type":"integer"},"max_players":{"example":50,"type":"integer"},"min_memory":{"example":1024,"type":"integer"},"name":{"example":"my-persistent-server","type":"string"},"priority":{"example":10,"type":"integer"},"properties":{"additionalProperties":{},"type":"object"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"source":{"$ref":"#/components/schemas/models.SourceConfig"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"enum":["SERVER","PROXY"],"example":"SERVER","type":"string"},"workflows":{"$ref":"#/components/schemas/models.WorkflowsConfig"}},"type":"object"},"models.UpdatePersistentServerResponse":{"description":"Response for updating a persistent server","properties":{"active":{"example":true,"type":"boolean"},"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"max_memory":{"example":2048,"type":"integer"},"max_players":{"example":50,"type":"integer"},"min_memory":{"example":1024,"type":"integer"},"name":{"example":"my-persistent-server","type":"string"},"persistent_server_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"player_count":{"example":0,"type":"integer"},"priority":{"example":10,"type":"integer"},"properties":{"additionalProperties":{},"type":"object"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"source":{"$ref":"#/components/schemas/models.SourceConfig"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"example":"SERVER","type":"string"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"workflows":{"$ref":"#/components/schemas/models.WorkflowsConfig"}},"type":"object"},"models.UpdatePlayerPropertiesRequest":{"description":"Request to update player properties","properties":{"properties":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"models.UpdatePlayerPropertiesResponse":{"description":"Response for updating player properties","properties":{"message":{"example":"Properties updated successfully","type":"string"},"player_id":{"example":"069a79f4-44e9-4726-a5be-fca90e38aaf5","type":"string"},"properties":{"additionalProperties":{"type":"string"},"type":"object"}},"type":"object"},"models.UpdatePluginAssignmentRequest":{"properties":{"plugin_id":{"type":"string"},"plugin_name":{"type":"string"},"required":{"type":"boolean"},"source_type":{"type":"string"},"source_value":{"type":"string"},"version":{"type":"string"}},"type":"object"},"models.UpdatePluginCollectionRequest":{"properties":{"name":{"type":"string"}},"type":"object"},"models.UpdatePluginRequest":{"properties":{"name":{"type":"string"},"source_type":{"type":"string"},"source_value":{"type":"string"}},"required":["name","source_type","source_value"],"type":"object"},"models.UpdatePropertiesRequest":{"description":"Request to replace entire properties object","properties":{"properties":{"additionalProperties":{},"type":"object"}},"type":"object"},"models.UpdatePropertiesResponse":{"description":"Response for updating properties","properties":{"message":{"example":"Properties updated successfully","type":"string"},"properties":{"additionalProperties":{},"type":"object"}},"type":"object"},"models.UpdateServerGroupRequest":{"description":"Request to update an existing server group","properties":{"active":{"example":true,"type":"boolean"},"deployment":{"$ref":"#/components/schemas/models.DeploymentConfig"},"max_memory":{"example":2048,"type":"integer"},"max_players":{"example":50,"type":"integer"},"min_memory":{"example":1024,"type":"integer"},"name":{"example":"lobby","type":"string"},"priority":{"example":10,"type":"integer"},"properties":{"additionalProperties":{},"type":"object"},"scaling":{"$ref":"#/components/schemas/models.ScalingConfig"},"source":{"$ref":"#/components/schemas/models.SourceConfig"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"enum":["SERVER","PROXY"],"example":"SERVER","type":"string"},"workflows":{"$ref":"#/components/schemas/models.WorkflowsConfig"}},"type":"object"},"models.UpdateServerGroupResponse":{"description":"Response for updating a server group","properties":{"active":{"example":true,"type":"boolean"},"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"deployment":{"$ref":"#/components/schemas/models.DeploymentConfig"},"max_memory":{"example":2048,"type":"integer"},"max_players":{"example":50,"type":"integer"},"min_memory":{"example":1024,"type":"integer"},"name":{"example":"lobby","type":"string"},"priority":{"example":10,"type":"integer"},"properties":{"additionalProperties":{},"type":"object"},"scaling":{"$ref":"#/components/schemas/models.ScalingConfig"},"server_group_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"source":{"$ref":"#/components/schemas/models.SourceConfig"},"tags":{"items":{"type":"string"},"type":"array","uniqueItems":false},"type":{"example":"SERVER","type":"string"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"workflows":{"$ref":"#/components/schemas/models.WorkflowsConfig"}},"type":"object"},"models.UpdateServerhostRequest":{"description":"Request to update a serverhost","properties":{"host_name":{"example":"ServerHost-1","type":"string"},"maximum_memory":{"example":8192,"type":"integer"},"serverhost_access_mode":{"example":"MANAGED_GATEWAY","type":"string"},"serverhost_custom_url":{"example":"https://files.example.com","type":"string"}},"type":"object"},"models.UpdateServerhostResponse":{"description":"Response for updating a serverhost","properties":{"architecture":{"example":"amd64","type":"string"},"auto_update_targeted_version":{"example":true,"type":"boolean"},"available_disk_space_bytes":{"example":750153664512,"type":"integer"},"created_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"deactivated":{"example":false,"type":"boolean"},"deactivated_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"host_name":{"example":"ServerHost-1","type":"string"},"installed_java_versions":{"example":[8,17,21],"items":{"type":"integer"},"type":"array","uniqueItems":false},"last_keep_alive":{"example":"2023-01-01T12:00:00Z","type":"string"},"maximum_memory":{"example":8192,"type":"integer"},"message":{"example":"Serverhost updated successfully","type":"string"},"network_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"operating_system":{"example":"Linux","type":"string"},"operating_system_version":{"example":"6.8.0-40-generic","type":"string"},"serverhost_access_mode":{"example":"MANAGED_GATEWAY","type":"string"},"serverhost_custom_url":{"example":"https://files.example.com","type":"string"},"serverhost_gateway_last_connected_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"serverhost_gateway_slug":{"example":"9f1f7f2c9a224bb29f9e0f7e5b2a070a","type":"string"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"started_at":{"example":"2023-01-01T12:00:00Z","type":"string"},"targeted_version":{"example":"1.2.3","type":"string"},"total_disk_space_bytes":{"example":1000204886016,"type":"integer"},"total_memory_bytes":{"example":34359738368,"type":"integer"},"updated_at":{"example":"2023-01-01T12:00:00Z","type":"string"}},"type":"object"},"models.VerifyNetworkRequest":{"description":"Request for network verification","properties":{"network_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"network_password":{"example":"secretpassword","type":"string"},"network_secret":{"description":"Deprecated: use network_password.","example":"secretpassword","type":"string"}},"type":"object"},"models.VerifyNetworkResponse":{"description":"Response for network verification","properties":{"message":{"example":"Network verified successfully","type":"string"},"valid":{"example":true,"type":"boolean"}},"type":"object"},"models.VerifyServerhostRequest":{"description":"Request for serverhost verification","properties":{"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"}},"type":"object"},"models.VerifyServerhostResponse":{"description":"Response for serverhost verification","properties":{"host_name":{"example":"ServerHost-1","type":"string"},"last_keep_alive":{"example":"2023-01-01T12:00:00Z","type":"string"},"maximum_memory":{"example":8192,"type":"integer"},"message":{"example":"Serverhost verified successfully","type":"string"},"network_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"serverhost_id":{"example":"123e4567-e89b-12d3-a456-426614174000","type":"string"},"valid":{"example":true,"type":"boolean"}},"type":"object"},"models.WorkflowWhen":{"description":"When workflows should be executed","properties":{"start":{"items":{"type":"string"},"type":"array","uniqueItems":false},"stop":{"items":{"type":"string"},"type":"array","uniqueItems":false}},"type":"object"},"models.WorkflowsConfig":{"description":"Workflows configuration for server groups","properties":{"manual":{"items":{"type":"string"},"type":"array","uniqueItems":false},"when":{"$ref":"#/components/schemas/models.WorkflowWhen"}},"type":"object"},"models.WriteEncryptedSecretRequest":{"description":"Request for creating or updating a client-encrypted network secret","properties":{"encrypted_value":{"example":"AYd2K1zr...","type":"string"},"key":{"example":"DATABASE_PASSWORD","type":"string"},"key_fingerprint":{"example":"3f5a...","type":"string"}},"required":["encrypted_value","key","key_fingerprint"],"type":"object"},"models.WriteEnvironmentVariableRequest":{"description":"Request for creating or updating an environment variable","properties":{"key":{"example":"JAVA_TOOL_OPTIONS","type":"string"},"value":{"example":"-Xmx2G","type":"string"}},"required":["key","value"],"type":"object"}},"securitySchemes":{"NetworkCredential":{"description":"Network password or signed JWT. Password authentication also requires X-Network-ID and grants full access to that network. JWT permissions still apply.","in":"header","name":"X-Network-Credential","type":"apiKey"},"NetworkJWT":{"description":"Signed JWT with admin claims. Network passwords cannot authorize admin operations.","in":"header","name":"X-Network-Credential","type":"apiKey"},"bearerauth":{"bearerFormat":"JWT","scheme":"bearer","type":"http"}}},
    "info": {"contact":{"name":"SimpleCloud support","url":"https://discord.simplecloud.app"},"description":"JWT sent in Authorization: Bearer \u003ctoken\u003e. Access depends on the token's network membership and permissions. The admin endpoint requires admin claims.","title":"SimpleCloud Controller API","version":"1.0"},
    "externalDocs": {"description":"","url":""},
    "paths": {"/v0/admin/networks":{"get":{"description":"List all networks. Requires admin access.","operationId":"list_all_networks","responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListNetworksResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkJWT":[]}],"summary":"List all networks (admin only)","tags":["admin"]}},"/v0/blueprints":{"delete":{"description":"Delete an existing blueprint","operationId":"delete_blueprint","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Blueprint ID","in":"query","name":"blueprint_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeleteBlueprintResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete a blueprint","tags":["blueprints"]},"get":{"description":"Get a list of blueprints for a network","operationId":"list_blueprints","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListBlueprintsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List blueprints","tags":["blueprints"]},"patch":{"description":"Partially update an existing blueprint","operationId":"patch_blueprint","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Blueprint ID","in":"query","name":"blueprint_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PatchBlueprintRequest"}}},"description":"Blueprint fields to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdateBlueprintResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Partially update a blueprint","tags":["blueprints"]},"post":{"description":"Create a new blueprint for a network","operationId":"create_blueprint","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreateBlueprintRequest"}}},"description":"Blueprint details","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreateBlueprintResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Create a new blueprint","tags":["blueprints"]},"put":{"description":"Update an existing blueprint","operationId":"update_blueprint","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Blueprint ID","in":"query","name":"blueprint_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdateBlueprintRequest"}}},"description":"Blueprint details","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdateBlueprintResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Update a blueprint","tags":["blueprints"]}},"/v0/environment-variables":{"delete":{"description":"Deletes a network environment variable by its key.","operationId":"delete_environment_variable","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Environment variable key","in":"query","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeleteEnvironmentVariableResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete an environment variable","tags":["environment-variables"]},"get":{"description":"Lists network environment variables with readable values. Values are decrypted by the controller after loading encrypted database rows.","operationId":"list_environment_variables","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListEnvironmentVariablesResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List environment variables","tags":["environment-variables"]},"post":{"description":"Creates a readable network environment variable. Its value is encrypted by the controller before it is stored.","operationId":"create_environment_variable","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.WriteEnvironmentVariableRequest"}}},"description":"Environment variable key and plaintext value","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreateEnvironmentVariableResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Create an environment variable","tags":["environment-variables"]},"put":{"description":"Replaces a readable network environment variable. Its value is encrypted by the controller before it is stored.","operationId":"update_environment_variable","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.WriteEnvironmentVariableRequest"}}},"description":"Environment variable key and plaintext value","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdateEnvironmentVariableResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Update an environment variable","tags":["environment-variables"]}},"/v0/metrics/logs/query":{"post":{"description":"Query logs using POST body with array-based filters for maximum flexibility","operationId":"query_logs","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.LogQueryRequest"}}},"description":"Query filters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.LogsResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Query logs with flexible filters","tags":["metrics"]}},"/v0/metrics/logs/stream":{"get":{"description":"Server-Sent Events endpoint for real-time log streaming with filters","operationId":"stream_logs","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Comma-separated server IDs","in":"query","name":"server_ids","schema":{"type":"string"}},{"description":"Comma-separated server group IDs","in":"query","name":"server_group_ids","schema":{"type":"string"}},{"description":"Comma-separated persistent server IDs","in":"query","name":"persistent_server_ids","schema":{"type":"string"}},{"description":"Comma-separated serverhost IDs","in":"query","name":"serverhost_ids","schema":{"type":"string"}},{"description":"Comma-separated severities (ERROR, WARN, INFO, DEBUG)","in":"query","name":"severities","schema":{"type":"string"}},{"description":"Comma-separated tags","in":"query","name":"tags","schema":{"type":"string"}},{"description":"Full-text search in messages","in":"query","name":"search","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"string"}},"text/event-stream":{"schema":{"type":"string"}}},"description":"SSE stream"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Stream logs in real-time via SSE","tags":["metrics"]}},"/v0/metrics/query":{"get":{"description":"Get the latest values for a metric, optionally grouped by a label","operationId":"query_metrics","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Metric name (e.g., server.player_count, server.cpu_usage_percent)","in":"query","name":"metric","required":true,"schema":{"type":"string"}},{"description":"Label to group by (e.g., server_group_name, persistent_server_name)","in":"query","name":"group_by","schema":{"type":"string"}},{"description":"Comma-separated server IDs to filter","in":"query","name":"server_ids","schema":{"type":"string"}},{"description":"Comma-separated server group IDs to filter","in":"query","name":"server_group_ids","schema":{"type":"string"}},{"description":"Comma-separated persistent server IDs to filter","in":"query","name":"persistent_server_ids","schema":{"type":"string"}},{"description":"Comma-separated server group types to filter (e.g., SERVER, PROXY)","in":"query","name":"server_type","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/metrics.InstantResult"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Query current metric values","tags":["metrics"]}},"/v0/metrics/query_range":{"get":{"description":"Get time-bucketed metric values for charts, optionally grouped by a label","operationId":"query_metrics_range","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Comma-separated metric names (e.g., server.cpu_usage_percent,server.memory_usage_mb)","in":"query","name":"metrics","required":true,"schema":{"type":"string"}},{"description":"Start timestamp in RFC3339 format (e.g., 2025-12-24T00:00:00Z)","in":"query","name":"from","required":true,"schema":{"type":"string"}},{"description":"End timestamp in RFC3339 format (e.g., 2025-12-24T12:00:00Z)","in":"query","name":"to","required":true,"schema":{"type":"string"}},{"description":"Aggregation interval (e.g., 5m, 1h). Auto-calculated if omitted","in":"query","name":"step","schema":{"type":"string"}},{"description":"Label to group by (e.g., server_group_name, persistent_server_name)","in":"query","name":"group_by","schema":{"type":"string"}},{"description":"Aggregation function: avg (default), sum, max, min","in":"query","name":"aggregation","schema":{"type":"string"}},{"description":"Comma-separated server IDs to filter","in":"query","name":"server_ids","schema":{"type":"string"}},{"description":"Comma-separated server group IDs to filter","in":"query","name":"server_group_ids","schema":{"type":"string"}},{"description":"Comma-separated persistent server IDs to filter","in":"query","name":"persistent_server_ids","schema":{"type":"string"}},{"description":"Comma-separated server group types to filter (e.g., SERVER, PROXY)","in":"query","name":"server_type","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/metrics.TimeSeriesResult"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Query metric time series","tags":["metrics"]}},"/v0/networks":{"delete":{"description":"Delete a network and cascade delete all associated resources (servers, groups, blueprints, etc.)","operationId":"delete_network","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeleteNetworkResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete a network and all its resources","tags":["networks"]},"patch":{"description":"Update the authenticated network","operationId":"update_network","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdateNetworkRequest"}}},"description":"Updated network details","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdateNetworkResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Update a network","tags":["networks"]}},"/v0/networks/passwords":{"delete":{"description":"Delete a network password from the authenticated network","operationId":"delete_network_password","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Password ID","in":"query","name":"password_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeleteNetworkPasswordResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete network password","tags":["networks"]},"get":{"description":"List all network passwords for the authenticated network","operationId":"list_network_passwords","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListNetworkPasswordsResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List network passwords","tags":["networks"]},"post":{"description":"Create a new network password for the authenticated network","operationId":"create_network_password","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreateNetworkPasswordRequest"}}},"description":"Network password details","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreateNetworkPasswordResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Create network password","tags":["networks"]}},"/v0/networks/register":{"post":{"description":"Register a new network and generate credentials","operationId":"register_network","parameters":[{"description":"Existing network ID, required when authenticating with a network password; not required for JWT authentication","in":"header","name":"X-Network-ID","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.RegisterNetworkRequest"}}},"description":"Optional network details"},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.RegisterNetworkResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Register a new network","tags":["networks"]}},"/v0/networks/verify":{"post":{"description":"Verify the network ID and password supplied in the JSON body. No authentication headers are required.","operationId":"verify_network","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.VerifyNetworkRequest"}}},"description":"Network credentials","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.VerifyNetworkResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.VerifyNetworkResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.VerifyNetworkResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.VerifyNetworkResponse"}}},"description":"Internal Server Error"}},"summary":"Verify network credentials","tags":["networks"]}},"/v0/persistent-servers":{"delete":{"description":"Delete an existing persistent server","operationId":"delete_persistent_server","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Persistent Server ID","in":"query","name":"persistent_server_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeletePersistentServerResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete a persistent server","tags":["persistent-servers"]},"get":{"description":"Get a list of persistent servers for a network","operationId":"list_persistent_servers","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Filter by persistent server ID(s), comma-separated","in":"query","name":"persistent_server_id","schema":{"type":"string"}},{"description":"Filter by exact name(s), comma-separated","in":"query","name":"name","schema":{"type":"string"}},{"description":"Filter by type(s), comma-separated (SERVER, PROXY)","in":"query","name":"type","schema":{"type":"string"}},{"description":"Filter by tag(s), comma-separated; matches any tag","in":"query","name":"tags","schema":{"type":"string"}},{"description":"Filter by active status (true/false)","in":"query","name":"active","schema":{"type":"boolean"}},{"description":"Filter by source type(s), comma-separated (blueprint, image)","in":"query","name":"source_type","schema":{"type":"string"}},{"description":"Filter by blueprint ID(s), comma-separated","in":"query","name":"blueprint_id","schema":{"type":"string"}},{"description":"Filter by serverhost ID(s), comma-separated","in":"query","name":"serverhost_id","schema":{"type":"string"}},{"description":"Maximum number of results (1-500)","in":"query","name":"limit","schema":{"type":"integer"}},{"description":"Number of results to skip; requires limit","in":"query","name":"offset","schema":{"default":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListPersistentServersResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List persistent servers","tags":["persistent-servers"]},"patch":{"description":"Partially update an existing persistent server","operationId":"patch_persistent_server","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Persistent Server ID","in":"query","name":"persistent_server_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PatchPersistentServerRequest"}}},"description":"Persistent server fields to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePersistentServerResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Partially update a persistent server","tags":["persistent-servers"]},"post":{"description":"Create a new persistent server for a network","operationId":"create_persistent_server","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreatePersistentServerRequest"}}},"description":"Persistent server details","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreatePersistentServerResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Create a new persistent server","tags":["persistent-servers"]},"put":{"description":"Update an existing persistent server","operationId":"update_persistent_server","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Persistent Server ID","in":"query","name":"persistent_server_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePersistentServerRequest"}}},"description":"Persistent server details","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePersistentServerResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Update a persistent server","tags":["persistent-servers"]}},"/v0/persistent-servers/properties":{"delete":{"description":"Delete specific property keys from a persistent server","operationId":"delete_persistent_server_properties","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Persistent Server ID","in":"query","name":"persistent_server_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeletePropertiesRequest"}}},"description":"Keys to delete","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeletePropertiesResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete persistent server property keys","tags":["persistent-servers"]},"patch":{"description":"Merge/update specific property keys for a persistent server (deep merge)","operationId":"patch_persistent_server_properties","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Persistent Server ID","in":"query","name":"persistent_server_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PatchPropertiesRequest"}}},"description":"Properties to merge","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PatchPropertiesResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Merge persistent server properties","tags":["persistent-servers"]},"put":{"description":"Replace entire properties object for a persistent server","operationId":"update_persistent_server_properties","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Persistent Server ID","in":"query","name":"persistent_server_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePropertiesRequest"}}},"description":"Properties to set","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePropertiesResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Replace persistent server properties","tags":["persistent-servers"]}},"/v0/persistent-servers/workflows/manual":{"post":{"description":"Execute a configured manual workflow for all eligible running servers of a persistent server","operationId":"execute_persistent_server_workflow","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Persistent Server ID","in":"query","name":"persistent_server_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ExecuteManualWorkflowRequest"}}},"description":"Manual workflow execution request","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ExecutePersistentServerWorkflowResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Execute a manual workflow for all running servers of a persistent server","tags":["persistent-servers"]}},"/v0/players":{"get":{"description":"Get a list of players for a network with optional filtering","operationId":"list_players","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Filter by online status","in":"query","name":"online","schema":{"type":"boolean"}},{"description":"Filter by exact connected server name; implies online=true","in":"query","name":"server","schema":{"type":"string"}},{"description":"Filter by exact connected proxy name; implies online=true","in":"query","name":"proxy","schema":{"type":"string"}},{"description":"Filter by player UUID; repeat the parameter or use comma-separated values","in":"query","name":"player_id","schema":{"items":{"type":"string"},"type":"array"}},{"description":"Include players first seen at or after this RFC3339 timestamp","in":"query","name":"first_seen_from","schema":{"format":"date-time","type":"string"}},{"description":"Include players first seen at or before this RFC3339 timestamp","in":"query","name":"first_seen_to","schema":{"format":"date-time","type":"string"}},{"description":"Include players last seen at or after this RFC3339 timestamp","in":"query","name":"last_seen_from","schema":{"format":"date-time","type":"string"}},{"description":"Include players last seen at or before this RFC3339 timestamp","in":"query","name":"last_seen_to","schema":{"format":"date-time","type":"string"}},{"description":"Minimum accumulated online time in seconds","in":"query","name":"online_time_seconds_min","schema":{"minimum":0,"type":"integer"}},{"description":"Maximum accumulated online time in seconds","in":"query","name":"online_time_seconds_max","schema":{"minimum":0,"type":"integer"}},{"description":"Case-insensitive literal substring search against the current name","in":"query","name":"search","schema":{"type":"string"}},{"description":"Sort field","in":"query","name":"sort_by","schema":{"default":"last_seen","enum":["name","last_seen","last_login","online_time_seconds","online_time","first_seen","first_login"],"type":"string"}},{"description":"Sort order","in":"query","name":"sort_order","schema":{"default":"desc","enum":["asc","desc"],"type":"string"}},{"description":"Limit results (default 50, maximum 1000)","in":"query","name":"limit","schema":{"type":"integer"}},{"description":"Offset for pagination","in":"query","name":"offset","schema":{"default":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListPlayersResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List players","tags":["players"]},"patch":{"description":"Partially update admin-managed player fields like online time and optionally reset first/last seen timestamps to now","operationId":"patch_player","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID","in":"query","name":"player_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PatchPlayerRequest"}}},"description":"Player fields to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PlayerResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Partially update a player","tags":["players"]}},"/v0/players/connect":{"post":{"description":"Connect a player to a specific server, server group, or persistent server","operationId":"connect_player","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID","in":"query","name":"player_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ConnectPlayerRequest"}}},"description":"Connection target","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ConnectPlayerResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Connect player to server","tags":["players"]}},"/v0/players/id":{"get":{"description":"Get a player by their Minecraft UUID","operationId":"get_player","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID","in":"query","name":"player_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PlayerResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Get player by UUID","tags":["players"]}},"/v0/players/kick":{"post":{"description":"Kick a player from the network","operationId":"kick_player","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID","in":"query","name":"player_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.KickPlayerRequest"}}},"description":"Kick reason","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.KickPlayerResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Kick a player","tags":["players"]}},"/v0/players/name":{"get":{"description":"Get a player by their name","operationId":"get_player_by_name","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player name","in":"query","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PlayerResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Get player by name","tags":["players"]}},"/v0/players/online":{"get":{"description":"Get a list of online players","operationId":"list_online_players","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Filter by connected server","in":"query","name":"server","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.OnlinePlayersResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List online players","tags":["players"]}},"/v0/players/online-time":{"get":{"description":"Get total online time for a player on this network","operationId":"get_player_online_time","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID (Minecraft UUID)","in":"query","name":"player_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PlayerOnlineTimeResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Get player online time","tags":["players"]}},"/v0/players/online/count":{"get":{"description":"Get the count of online players","operationId":"get_online_player_count","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.OnlinePlayerCountResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Get online player count","tags":["players"]}},"/v0/players/profiles":{"get":{"description":"Get a player's profile history (name/skin changes)","operationId":"list_player_profiles","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID (Minecraft UUID)","in":"query","name":"player_id","required":true,"schema":{"type":"string"}},{"description":"Limit results (default 50)","in":"query","name":"limit","schema":{"type":"integer"}},{"description":"Offset for pagination","in":"query","name":"offset","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListPlayerProfilesResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List player profiles","tags":["players"]}},"/v0/players/profiles/latest":{"get":{"description":"Get the most recent profile (name/skin) for a player","operationId":"get_latest_player_profile","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID (Minecraft UUID)","in":"query","name":"player_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PlayerProfileResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Get latest player profile","tags":["players"]}},"/v0/players/properties":{"delete":{"description":"Delete specific property keys","operationId":"delete_player_properties","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID","in":"query","name":"player_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeletePlayerPropertiesRequest"}}},"description":"Keys to delete","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeletePlayerPropertiesResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete player properties","tags":["players"]},"get":{"description":"Get custom properties for a player","operationId":"get_player_properties","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID","in":"query","name":"player_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PlayerPropertiesResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Get player properties","tags":["players"]},"patch":{"description":"Merge properties with existing ones","operationId":"patch_player_properties","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID","in":"query","name":"player_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePlayerPropertiesRequest"}}},"description":"Properties to merge","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePlayerPropertiesResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Patch player properties","tags":["players"]},"put":{"description":"Replace all player properties","operationId":"update_player_properties","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID","in":"query","name":"player_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePlayerPropertiesRequest"}}},"description":"Properties","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePlayerPropertiesResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Update player properties","tags":["players"]}},"/v0/players/sessions":{"get":{"description":"Get session history for a player on this network","operationId":"list_player_sessions","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID (Minecraft UUID)","in":"query","name":"player_id","required":true,"schema":{"type":"string"}},{"description":"Limit results (default 50)","in":"query","name":"limit","schema":{"type":"integer"}},{"description":"Offset for pagination","in":"query","name":"offset","schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListPlayerSessionsResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List player sessions","tags":["players"]}},"/v0/players/sessions/current":{"get":{"description":"Get the current active session for an online player","operationId":"get_current_session","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID (Minecraft UUID)","in":"query","name":"player_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CurrentSessionResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Get current session","tags":["players"]}},"/v0/players/sessions/settings":{"get":{"description":"Get client settings for an online player's current session","operationId":"get_client_settings","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID (Minecraft UUID)","in":"query","name":"player_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PlayerClientSettingsResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Get client settings","tags":["players"]},"put":{"description":"Update client settings for an online player's current session","operationId":"update_client_settings","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Player UUID (Minecraft UUID)","in":"query","name":"player_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdateClientSettingsRequest"}}},"description":"Settings to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdateClientSettingsResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Update client settings","tags":["players"]}},"/v0/plugin-assignments":{"delete":{"description":"Delete an existing plugin assignment","operationId":"delete_plugin_assignment","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Plugin Assignment ID","in":"query","name":"assignment_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeletePluginAssignmentResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete a plugin assignment","tags":["plugin-assignments"]},"get":{"description":"Get a list of plugin assignments for a network, optionally filtered by server group or persistent server","operationId":"list_plugin_assignments","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Filter by Server Group ID","in":"query","name":"server_group_id","schema":{"type":"string"}},{"description":"Filter by Persistent Server ID","in":"query","name":"persistent_server_id","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListPluginAssignmentsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List plugin assignments","tags":["plugin-assignments"]},"post":{"description":"Assign a plugin to a server group or persistent server. You can either provide a plugin_id to use an existing plugin, or provide plugin_name, source_type, and source_value to find or create the plugin automatically.","operationId":"create_plugin_assignment","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreatePluginAssignmentRequest"}}},"description":"Plugin assignment details. Either plugin_id OR (plugin_name + source_type + source_value) must be provided.","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PluginAssignmentResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Create a new plugin assignment","tags":["plugin-assignments"]},"put":{"description":"Update the plugin metadata for an existing assignment without deleting it first","operationId":"update_plugin_assignment","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Plugin Assignment ID","in":"query","name":"assignment_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePluginAssignmentRequest"}}},"description":"Plugin assignment update details","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PluginAssignmentResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Update a plugin assignment","tags":["plugin-assignments"]}},"/v0/plugin-assignments/bulk-create":{"post":{"description":"Assign one or more plugins to multiple server groups and persistent servers atomically","operationId":"bulk_create_plugin_assignments","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.BulkCreatePluginAssignmentsRequest"}}},"description":"Plugin assignment details","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.BulkCreatePluginAssignmentsResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Bulk create plugin assignments","tags":["plugin-assignments"]}},"/v0/plugin-assignments/bulk-delete":{"post":{"description":"Delete multiple plugin assignments in one request","operationId":"bulk_delete_plugin_assignments","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.BulkDeletePluginAssignmentsRequest"}}},"description":"Plugin assignment IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.BulkDeletePluginAssignmentsResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Bulk delete plugin assignments","tags":["plugin-assignments"]}},"/v0/plugin-collection-assignments":{"delete":{"description":"Delete a plugin collection installation without deleting the normal plugin assignments created from it","operationId":"delete_plugin_collection_assignment","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Plugin Collection Assignment ID","in":"query","name":"assignment_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeletePluginCollectionAssignmentResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete a plugin collection installation","tags":["plugin-collection-assignments"]},"get":{"description":"Get plugin collection installations for a network, optionally filtered by target","operationId":"list_plugin_collection_assignments","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Filter by Server Group ID","in":"query","name":"server_group_id","schema":{"type":"string"}},{"description":"Filter by Persistent Server ID","in":"query","name":"persistent_server_id","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListPluginCollectionAssignmentsResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List plugin collection installations","tags":["plugin-collection-assignments"]},"post":{"description":"Install a plugin collection on a server group or persistent server and materialize normal plugin assignments","operationId":"create_plugin_collection_assignment","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreatePluginCollectionAssignmentRequest"}}},"description":"Plugin collection assignment details","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreatePluginCollectionAssignmentResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Install a plugin collection on a target","tags":["plugin-collection-assignments"]}},"/v0/plugin-collection-assignments/bulk-create":{"post":{"description":"Install a plugin collection on multiple server groups and persistent servers atomically","operationId":"bulk_create_plugin_collection_assignments","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.BulkCreatePluginCollectionAssignmentsRequest"}}},"description":"Plugin collection assignment details","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.BulkCreatePluginCollectionAssignmentsResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Bulk install a plugin collection on targets","tags":["plugin-collection-assignments"]}},"/v0/plugin-collection-assignments/reapply":{"post":{"description":"Materialize missing plugin assignments from existing plugin collection assignments","operationId":"reapply_plugin_collection_assignments","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ReapplyPluginCollectionAssignmentsRequest"}}},"description":"Plugin collection reapply filters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ReapplyPluginCollectionAssignmentsResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Reapply plugin collection assignments","tags":["plugin-collection-assignments"]}},"/v0/plugin-collection-plugins":{"delete":{"description":"Delete a plugin from a plugin collection without deleting existing assignments created from it","operationId":"delete_plugin_collection_plugin","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Plugin Collection Plugin ID","in":"query","name":"plugin_collection_plugin_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeletePluginCollectionPluginResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete a plugin from a plugin collection","tags":["plugin-collection-plugins"]},"get":{"description":"Get the plugins configured for a plugin collection","operationId":"list_plugin_collection_plugins","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Plugin Collection ID","in":"query","name":"plugin_collection_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListPluginCollectionPluginsResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List plugins in a plugin collection","tags":["plugin-collection-plugins"]},"post":{"description":"Add a plugin reference to a plugin collection without modifying existing assignments","operationId":"create_plugin_collection_plugin","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreatePluginCollectionPluginRequest"}}},"description":"Plugin collection plugin details","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PluginCollectionPluginResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Add a plugin to a plugin collection","tags":["plugin-collection-plugins"]}},"/v0/plugin-collections":{"delete":{"description":"Delete a plugin collection without deleting existing plugin assignments created from it","operationId":"delete_plugin_collection","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Plugin Collection ID","in":"query","name":"plugin_collection_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeletePluginCollectionResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete a plugin collection","tags":["plugin-collections"]},"get":{"description":"Get a list of plugin collections for a network","operationId":"list_plugin_collections","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListPluginCollectionsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List plugin collections","tags":["plugin-collections"]},"post":{"description":"Create a new plugin collection for a network","operationId":"create_plugin_collection","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreatePluginCollectionRequest"}}},"description":"Plugin collection details","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PluginCollectionResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Create a plugin collection","tags":["plugin-collections"]},"put":{"description":"Update an existing plugin collection","operationId":"update_plugin_collection","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Plugin Collection ID","in":"query","name":"plugin_collection_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePluginCollectionRequest"}}},"description":"Plugin collection details","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PluginCollectionResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Update a plugin collection","tags":["plugin-collections"]}},"/v0/plugins":{"delete":{"description":"Delete an existing plugin","operationId":"delete_plugin","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Plugin ID","in":"query","name":"plugin_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeletePluginResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete a plugin","tags":["plugins"]},"get":{"description":"Get a list of plugins for a network","operationId":"list_plugins","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListPluginsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List plugins","tags":["plugins"]},"post":{"description":"Create a new plugin for a network","operationId":"create_plugin","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreatePluginRequest"}}},"description":"Plugin details","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PluginResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Create a new plugin","tags":["plugins"]},"put":{"description":"Update an existing plugin","operationId":"update_plugin","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Plugin ID","in":"query","name":"plugin_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePluginRequest"}}},"description":"Plugin details","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PluginResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Update a plugin","tags":["plugins"]}},"/v0/secrets":{"delete":{"description":"Delete a stored network secret by its key","operationId":"delete_secret","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Secret key","in":"query","name":"key","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeleteSecretResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete a stored network secret","tags":["secrets"]},"get":{"description":"List the keys of all stored network secrets. Secret values are never returned.","operationId":"list_secrets","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListSecretsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List stored network secrets","tags":["secrets"]}},"/v0/secrets/encrypted":{"get":{"description":"List all stored network secrets including their encrypted values. Intended for serverhosts, which decrypt the values with the shared private key. Values are ciphertext; the controller cannot decrypt them.","operationId":"list_encrypted_secrets","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListEncryptedSecretsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List stored network secrets with encrypted values","tags":["secrets"]},"post":{"description":"Creates a secret from a v1 envelope encrypted by the client with the network's current public key. The controller validates the envelope structure and key fingerprint but cannot decrypt or authenticate the ciphertext.","operationId":"create_encrypted_secret","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.WriteEncryptedSecretRequest"}}},"description":"Secret key, encrypted value, and encryption-key fingerprint","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreateEncryptedSecretResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Create a client-encrypted network secret","tags":["secrets"]},"put":{"description":"Replaces an existing secret with a v1 envelope encrypted by the client with the network's current public key. The controller validates the envelope structure and key fingerprint but cannot decrypt or authenticate the ciphertext.","operationId":"update_encrypted_secret","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.WriteEncryptedSecretRequest"}}},"description":"Secret key, encrypted value, and encryption-key fingerprint","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdateEncryptedSecretResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Update a client-encrypted network secret","tags":["secrets"]}},"/v0/secrets/encryption-key":{"get":{"description":"Get the public half of the network's shared encryption key, registered by the first serverhost of the network","operationId":"get_encryption_key","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.EncryptionKeyResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Get the network shared public key","tags":["secrets"]},"post":{"description":"Register a shared public key for this network. The first registration wins atomically; if a key already exists, accepted is false and the canonical key is returned so the serverhost can sync the matching private key from its peers instead.","operationId":"register_encryption_key","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.RegisterEncryptionKeyRequest"}}},"description":"PEM encoded RSA public key","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.RegisterEncryptionKeyResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Register the network shared public key","tags":["secrets"]}},"/v0/server-groups":{"delete":{"description":"Delete an existing server group","operationId":"delete_server_group","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server Group ID","in":"query","name":"server_group_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeleteServerGroupResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete a server group","tags":["server-groups"]},"get":{"description":"Get a list of server groups for a network","operationId":"list_server_groups","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Filter by server group ID(s), comma-separated","in":"query","name":"server_group_id","schema":{"type":"string"}},{"description":"Filter by exact name(s), comma-separated","in":"query","name":"name","schema":{"type":"string"}},{"description":"Filter by type(s), comma-separated (SERVER, PROXY)","in":"query","name":"type","schema":{"type":"string"}},{"description":"Filter by tag(s), comma-separated; matches any tag","in":"query","name":"tags","schema":{"type":"string"}},{"description":"Filter by active status (true/false)","in":"query","name":"active","schema":{"type":"boolean"}},{"description":"Filter by source type(s), comma-separated (blueprint, image)","in":"query","name":"source_type","schema":{"type":"string"}},{"description":"Filter by blueprint ID(s), comma-separated","in":"query","name":"blueprint_id","schema":{"type":"string"}},{"description":"Maximum number of results (1-500)","in":"query","name":"limit","schema":{"type":"integer"}},{"description":"Number of results to skip; requires limit","in":"query","name":"offset","schema":{"default":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListServerGroupsResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List server groups","tags":["server-groups"]},"patch":{"description":"Partially update an existing server group","operationId":"patch_server_group","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server Group ID","in":"query","name":"server_group_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PatchServerGroupRequest"}}},"description":"Server group fields to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdateServerGroupResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Partially update a server group","tags":["server-groups"]},"post":{"description":"Create a new server group for a network","operationId":"create_server_group","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreateServerGroupRequest"}}},"description":"Server group details","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CreateServerGroupResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Create a new server group","tags":["server-groups"]},"put":{"description":"Update an existing server group","operationId":"update_server_group","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server Group ID","in":"query","name":"server_group_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdateServerGroupRequest"}}},"description":"Server group details","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdateServerGroupResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Update a server group","tags":["server-groups"]}},"/v0/server-groups/properties":{"delete":{"description":"Delete specific property keys from a server group","operationId":"delete_server_group_properties","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server Group ID","in":"query","name":"server_group_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeletePropertiesRequest"}}},"description":"Keys to delete","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeletePropertiesResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete server group property keys","tags":["server-groups"]},"patch":{"description":"Merge/update specific property keys for a server group (deep merge)","operationId":"patch_server_group_properties","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server Group ID","in":"query","name":"server_group_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PatchPropertiesRequest"}}},"description":"Properties to merge","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PatchPropertiesResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Merge server group properties","tags":["server-groups"]},"put":{"description":"Replace entire properties object for a server group","operationId":"update_server_group_properties","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server Group ID","in":"query","name":"server_group_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePropertiesRequest"}}},"description":"Properties to set","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePropertiesResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Replace server group properties","tags":["server-groups"]}},"/v0/server-groups/rolling-restart":{"delete":{"description":"Cancel an in-progress rolling restart for a server group","operationId":"cancel_rolling_restart","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server Group ID","in":"query","name":"group_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CancelRollingRestartResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Cancel a rolling restart","tags":["server-groups"]},"get":{"description":"Get the status of a rolling restart for a server group","operationId":"get_rolling_restart_status","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server Group ID","in":"query","name":"group_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.RollingRestartStatusResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Get rolling restart status","tags":["server-groups"]},"post":{"description":"Start a durable rolling restart for a server group using SLOTS scaling mode. Other scaling modes return 400. Restarts servers one by one while ensuring availability.","operationId":"start_rolling_restart","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.RollingRestartRequest"}}},"description":"Rolling restart configuration","required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.RollingRestartResponse"}}},"description":"Accepted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Start a rolling restart","tags":["server-groups"]}},"/v0/server-groups/start-queue":{"delete":{"description":"Clear all queued server starts for one server group","operationId":"clear_server_group_start_queue","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server Group ID","in":"query","name":"server_group_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ClearServerGroupStartQueueResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Clear queued server group starts","tags":["server-groups"]},"get":{"description":"List queued server starts aggregated by server group","operationId":"list_server_group_start_queue","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListServerGroupStartQueueResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List queued server group starts","tags":["server-groups"]},"post":{"description":"Persist one queued server start for a server group that will be executed by the reconciler on the next tick","operationId":"queue_server_group_start","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.QueueServerGroupStartRequest"}}},"description":"Server group start queue request","required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.QueueServerGroupStartResponse"}}},"description":"Accepted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Queue a server group start","tags":["server-groups"]}},"/v0/server-groups/stop-all":{"post":{"description":"Send stop commands to all running servers in a server group","operationId":"stop_all_servers","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server Group ID","in":"query","name":"server_group_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.StopAllServersResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Stop all servers in a server group","tags":["server-groups"]}},"/v0/server-groups/workflows/manual":{"post":{"description":"Execute a configured manual workflow for all eligible servers in a server group","operationId":"execute_server_group_workflow","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server Group ID","in":"query","name":"server_group_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ExecuteManualWorkflowRequest"}}},"description":"Manual workflow execution request","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ExecuteServerGroupWorkflowResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Execute a manual workflow for all running servers in a server group","tags":["server-groups"]}},"/v0/serverhost-gateway/resolve":{"post":{"description":"Resolve and mark a serverhost gateway connection for a network","operationId":"resolve_serverhost_gateway","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ResolveServerhostGatewayRequest"}}},"description":"Serverhost gateway target","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ResolveServerhostGatewayResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Resolve a serverhost gateway target","tags":["serverhosts"]}},"/v0/serverhosts":{"delete":{"description":"Delete an existing serverhost","operationId":"delete_serverhost","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Serverhost ID","in":"query","name":"serverhost_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeleteServerhostResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Conflict"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete a serverhost","tags":["serverhosts"]},"get":{"description":"Get a list of serverhosts for a network","operationId":"list_serverhosts","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Filter by active status (true = only active, false = only deactivated)","in":"query","name":"active","schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListServerhostsResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List serverhosts","tags":["serverhosts"]},"put":{"description":"Update an existing serverhost","operationId":"update_serverhost","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Serverhost ID","in":"query","name":"serverhost_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdateServerhostRequest"}}},"description":"Serverhost details","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdateServerhostResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Update a serverhost","tags":["serverhosts"]}},"/v0/serverhosts/deactivate":{"patch":{"description":"Deactivate or reactivate a serverhost to prevent/allow new server allocations","operationId":"deactivate_serverhost","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Serverhost ID","in":"query","name":"serverhost_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeactivateServerhostRequest"}}},"description":"Deactivation status","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeactivateServerhostResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Deactivate or reactivate a serverhost","tags":["serverhosts"]}},"/v0/serverhosts/register":{"post":{"description":"Register a new serverhost for a network","operationId":"register_serverhost","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.RegisterServerhostRequest"}}},"description":"Serverhost details","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.RegisterServerhostResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Register a new serverhost","tags":["serverhosts"]}},"/v0/serverhosts/verify":{"post":{"description":"Verify if a serverhost exists and belongs to the specified network","operationId":"verify_serverhost","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.VerifyServerhostRequest"}}},"description":"Serverhost ID","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.VerifyServerhostResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Verify a serverhost","tags":["serverhosts"]}},"/v0/servers":{"delete":{"description":"Stop an existing server","operationId":"stop_server","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server ID","in":"query","name":"server_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.StopServerResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Stop a server","tags":["servers"]},"get":{"description":"Get a list of servers for a network with optional filters. Returns comprehensive server information including server group or persistent server details, blueprint information, and workflow configurations. Filters for type, name, and tags work with both server groups and persistent servers.","operationId":"list_servers","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Filter by server ID(s), comma-separated","in":"query","name":"server_id","schema":{"type":"string"}},{"description":"Filter by server group ID(s), comma-separated","in":"query","name":"server_group_id","schema":{"type":"string"}},{"description":"Filter by state(s), comma-separated (e.g., AVAILABLE,STARTING)","in":"query","name":"state","schema":{"type":"string"}},{"description":"Filter by serverhost ID(s), comma-separated","in":"query","name":"serverhost_id","schema":{"type":"string"}},{"description":"Filter by persistent server ID(s), comma-separated","in":"query","name":"persistent_server_id","schema":{"type":"string"}},{"description":"Filter by type(s), comma-separated (matches server group type OR persistent server type)","in":"query","name":"type","schema":{"type":"string"}},{"description":"Filter by name(s), comma-separated (matches server group name OR persistent server name)","in":"query","name":"name","schema":{"type":"string"}},{"description":"Filter by tag(s), comma-separated (matches if any tag matches in server group OR persistent server)","in":"query","name":"tags","schema":{"type":"string"}},{"description":"Filter by numerical ID(s), comma-separated (e.g., 1,5,10)","in":"query","name":"numerical_id","schema":{"type":"string"}},{"description":"Sort field: created_at, updated_at, numerical_id, state","in":"query","name":"sort_by","schema":{"type":"string"}},{"description":"Sort order: asc, desc","in":"query","name":"sort_order","schema":{"default":"asc","enum":["asc","desc"],"type":"string"}},{"description":"Maximum number of results (1-500)","in":"query","name":"limit","schema":{"type":"integer"}},{"description":"Number of results to skip; requires limit","in":"query","name":"offset","schema":{"default":0,"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ListServersResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"List servers","tags":["servers"]},"patch":{"description":"Partially update an existing server's configuration. Runtime observation fields such as player_count are read-only.","operationId":"patch_server","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server ID","in":"query","name":"server_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PatchServerRequest"}}},"description":"Server fields to update","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PatchServerResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Partially update a server","tags":["servers"]}},"/v0/servers/command":{"post":{"description":"Send a command to a running server via NATS","operationId":"send_command","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server ID","in":"query","name":"server_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.SendCommandRequest"}}},"description":"Command to send","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.SendCommandResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Send command to server","tags":["servers"]}},"/v0/servers/database":{"delete":{"description":"Delete a server row from the database without stopping the server or publishing events","operationId":"delete_server","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server ID","in":"query","name":"server_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeleteServerResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete a server row from the database","tags":["servers"]}},"/v0/servers/properties":{"delete":{"description":"Delete specific property keys from a server","operationId":"delete_server_properties","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server ID","in":"query","name":"server_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeletePropertiesRequest"}}},"description":"Keys to delete","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.DeletePropertiesResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Delete server property keys","tags":["servers"]},"patch":{"description":"Merge/update specific property keys for a server (deep merge)","operationId":"patch_server_properties","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server ID","in":"query","name":"server_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PatchPropertiesRequest"}}},"description":"Properties to merge","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.PatchPropertiesResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Merge server properties","tags":["servers"]},"put":{"description":"Replace entire properties object for a server","operationId":"update_server_properties","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server ID","in":"query","name":"server_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePropertiesRequest"}}},"description":"Properties to set","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.UpdatePropertiesResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Replace server properties","tags":["servers"]}},"/v0/servers/workflows/manual":{"post":{"description":"Execute a configured manual workflow for a running server","operationId":"execute_server_workflow","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}},{"description":"Server ID","in":"query","name":"server_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ExecuteManualWorkflowRequest"}}},"description":"Manual workflow execution request","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ExecuteServerWorkflowResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Execute a manual workflow for a server","tags":["servers"]}},"/v0/stats":{"get":{"description":"Get aggregated statistics for the network including server counts, player stats, resource utilization, and health status","operationId":"get_stats","parameters":[{"description":"Network ID","in":"header","name":"X-Network-ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.CloudStats"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/models.ErrorResponse"}}},"description":"Internal Server Error"}},"security":[{"BearerAuth":[]},{"NetworkCredential":[]}],"summary":"Get cloud statistics","tags":["stats"]}}},
    "openapi": "3.1.0",
    "servers": [
        {"url":"https://controller.simplecloud.app/"}
    ]
}