{ "openapi": "3.1.0", "info": { "title": "arsa-backend", "description": "", "license": { "name": "" }, "version": "2.0.0" }, "paths": { "/api/api/v2/server/{id}/profile/{path}": { "get": { "tags": ["server"], "operationId": "get_profile_file", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" }, { "name": "path", "in": "path", "description": "Relative path inside the profile directory", "required": true, "schema": { "type": "string" }, "example": "some.file" } ], "responses": { "200": { "description": "Profile file content", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileContentResponse" } } } }, "400": { "description": "Invalid profile file path", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "File or server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "put": { "tags": ["server"], "operationId": "put_profile_file", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" }, { "name": "path", "in": "path", "description": "Relative path inside the profile directory", "required": true, "schema": { "type": "string" }, "example": "settings.lua" } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EditProfileFileRequest" } } }, "required": true }, "responses": { "200": { "description": "Profile file was written", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "400": { "description": "Invalid profile file path", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2": { "get": { "tags": ["server"], "operationId": "get_servers", "responses": { "200": { "description": "List of all servers", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Server" } } } } } } } }, "/api/v2/api/v2/server/{id}/profile/{path}": { "get": { "tags": ["server"], "operationId": "get_profile_file", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" }, { "name": "path", "in": "path", "description": "Relative path inside the profile directory", "required": true, "schema": { "type": "string" }, "example": "some.file" } ], "responses": { "200": { "description": "Profile file content", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileContentResponse" } } } }, "400": { "description": "Invalid profile file path", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "File or server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "put": { "tags": ["server"], "operationId": "put_profile_file", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" }, { "name": "path", "in": "path", "description": "Relative path inside the profile directory", "required": true, "schema": { "type": "string" }, "example": "settings.lua" } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EditProfileFileRequest" } } }, "required": true }, "responses": { "200": { "description": "Profile file was written", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "400": { "description": "Invalid profile file path", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/auth/api/v2/server/{id}/profile/{path}": { "get": { "tags": ["server"], "operationId": "get_profile_file", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" }, { "name": "path", "in": "path", "description": "Relative path inside the profile directory", "required": true, "schema": { "type": "string" }, "example": "some.file" } ], "responses": { "200": { "description": "Profile file content", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileContentResponse" } } } }, "400": { "description": "Invalid profile file path", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "File or server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "put": { "tags": ["server"], "operationId": "put_profile_file", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" }, { "name": "path", "in": "path", "description": "Relative path inside the profile directory", "required": true, "schema": { "type": "string" }, "example": "settings.lua" } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EditProfileFileRequest" } } }, "required": true }, "responses": { "200": { "description": "Profile file was written", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "400": { "description": "Invalid profile file path", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/auth/callback": { "get": { "tags": ["auth"], "operationId": "callback", "responses": { "303": { "description": "Redirect back to the app after completing the OpenID flow" } } } }, "/api/v2/auth/login": { "get": { "tags": ["auth"], "operationId": "login", "responses": { "303": { "description": "Redirect to the configured OpenID provider" } } } }, "/api/v2/auth/logout": { "get": { "tags": ["auth"], "operationId": "logout", "responses": { "303": { "description": "Redirect to frontend?" } } } }, "/api/v2/auth/userclaims": { "get": { "tags": ["auth"], "operationId": "user_claims", "responses": { "200": { "description": "User Claims", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Claims" } } } } } } }, "/api/v2/defaults": { "get": { "tags": ["defaults"], "operationId": "get_defaults", "responses": { "200": { "description": "Global server defaults used to prefill new servers", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServerDefaults" } } } } } }, "put": { "tags": ["defaults"], "operationId": "put_defaults", "requestBody": { "description": "Global server defaults to save", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/StartupParameterWrapper" }, { "type": "object", "required": [ "name", "branch", "config" ], "properties": { "branch": { "oneOf": [ { "$ref": "#/components/schemas/Branch" } ], "default": "Branch::Stable" }, "config": { "$ref": "#/components/schemas/ServerConfig" }, "name": { "type": "string" } } } ] } } }, "required": true }, "responses": { "200": { "description": "Defaults were saved", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServerDefaults" } } } } } } }, "/api/v2/image-version/{branch}": { "get": { "tags": ["image"], "operationId": "get_image_version", "parameters": [ { "name": "branch", "in": "path", "description": "Branch to pull", "required": true, "schema": { "$ref": "#/components/schemas/Branch" }, "example": "stable" } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ImageVersionResponse" } } } } } } }, "/api/v2/logs": { "get": { "tags": ["log"], "operationId": "get_global_logs", "parameters": [ { "name": "page", "in": "query", "description": "Page number (default: 1)", "required": false, "schema": { "type": ["integer", "null"], "format": "int64", "minimum": 0 } }, { "name": "limit", "in": "query", "description": "Items per page (default: 50)", "required": false, "schema": { "type": ["integer", "null"], "format": "int64", "minimum": 0 } } ], "responses": { "200": { "description": "Logs returned successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PaginatedResponse_GlobalLog" } } } }, "500": { "description": "Failed to get logs", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/public-ip": { "get": { "tags": ["server"], "operationId": "get_public_ip", "responses": { "200": { "description": "The public IPv4 for this server", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/IPv4Response" } } } } } } }, "/api/v2/pull/image/{branch}": { "get": { "tags": ["image"], "operationId": "get_pull_image", "parameters": [ { "name": "branch", "in": "path", "description": "Branch to pull", "required": true, "schema": { "$ref": "#/components/schemas/Branch" }, "example": "stable" } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } } } } }, "/api/v2/pull/logs": { "get": { "tags": ["image"], "operationId": "get_pull_logs", "responses": { "200": { "description": "Pull logs", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PullLog" } } } } } } } }, "/api/v2/scenarios/{branch}": { "get": { "tags": ["image"], "operationId": "get_scenarios_from_branch", "parameters": [ { "name": "branch", "in": "path", "description": "Branch to pull", "required": true, "schema": { "$ref": "#/components/schemas/Branch" }, "example": "stable" } ], "responses": { "200": { "description": "Scenarios list returned successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListScenariosResponse" } } } }, "500": { "description": "Failed to get scenarios", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "put": { "tags": ["image"], "operationId": "update_scenarios_from_branch", "parameters": [ { "name": "branch", "in": "path", "description": "Branch to pull", "required": true, "schema": { "$ref": "#/components/schemas/Branch" }, "example": "stable" } ], "responses": { "200": { "description": "Scenarios list updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "404": { "description": "Image not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Failed to start image or parse scenarios", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/server": { "put": { "tags": ["server"], "operationId": "put_server", "requestBody": { "description": "Server configuration to create a new server", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/StartupParameterWrapper" }, { "type": "object", "required": [ "name", "isRunning", "branch", "playerCount", "config" ], "properties": { "branch": { "oneOf": [ { "$ref": "#/components/schemas/Branch" } ], "default": "Branch::Stable" }, "config": { "$ref": "#/components/schemas/ServerConfig" }, "isRunning": { "type": "boolean" }, "name": { "type": "string" }, "playerCount": { "type": "integer", "format": "int32", "minimum": 0 }, "uuid": { "type": "string", "format": "uuid" } } } ] }, "example": { "branch": "stable", "config": { "a2s": { "address": "0.0.0.0", "port": 2303 }, "bindAddress": "0.0.0.0", "bindPort": 2302, "game": { "admins": ["admin1", "admin2"], "crossPlatform": true, "gameProperties": { "VONCanTransmitCrossFaction": false, "VONDisableDirectSpeechUI": false, "VONDisableUI": false, "battlEye": true, "disableThirdPerson": false, "fastValidation": true, "missionHeader": {}, "networkViewDistance": 2000, "serverMaxViewDistance": 10000, "serverMinGrassDistance": 50 }, "maxPlayers": 64, "mods": [ { "modId": "mod1", "name": "CBA_A3", "required": true, "version": "3.15.0" } ], "modsRequiredByDefault": false, "name": "Test Server", "password": "password", "passwordAdmin": "adminPassword", "scenarioId": "veh_rc_enoch", "supportedPlatforms": ["PLATFORM_PC"], "visible": true }, "operating": { "aiLimit": 5000, "disableAI": false, "disableCrashReporter": false, "disableNavmeshStreaming": [], "disableServerShutdown": false, "joinQueue": { "maxSize": 10 }, "lobbyPlayerSynchronise": true, "playerSaveTime": 180, "slotReservationTimeout": 60 }, "publicAddress": "1.2.3.4", "publicPort": 2302, "rcon": { "address": "0.0.0.0", "blacklist": [], "maxClients": 5, "password": "admin123", "permission": "admin", "port": 2305, "whitelist": [] } }, "isRunning": false, "name": "My Arma Server", "startupParameters": [ { "enabled": true, "parameter": "port", "tooltip": "Server port", "type": "number", "value": 2302 } ] } } }, "required": true }, "responses": { "200": { "description": "Server was created successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "400": { "description": "Invalid server configuration", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "post": { "tags": ["server"], "operationId": "post_server", "requestBody": { "description": "Server configuration to create a new server", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/StartupParameterWrapper" }, { "type": "object", "required": [ "name", "isRunning", "branch", "playerCount", "config" ], "properties": { "branch": { "oneOf": [ { "$ref": "#/components/schemas/Branch" } ], "default": "Branch::Stable" }, "config": { "$ref": "#/components/schemas/ServerConfig" }, "isRunning": { "type": "boolean" }, "name": { "type": "string" }, "playerCount": { "type": "integer", "format": "int32", "minimum": 0 }, "uuid": { "type": "string", "format": "uuid" } } } ] }, "example": { "branch": "stable", "config": { "a2s": { "address": "0.0.0.0", "port": 2303 }, "bindAddress": "0.0.0.0", "bindPort": 2302, "game": { "admins": ["admin1", "admin2"], "crossPlatform": true, "gameProperties": { "VONCanTransmitCrossFaction": false, "VONDisableDirectSpeechUI": false, "VONDisableUI": false, "battlEye": true, "disableThirdPerson": false, "fastValidation": true, "missionHeader": {}, "networkViewDistance": 2000, "serverMaxViewDistance": 10000, "serverMinGrassDistance": 50 }, "maxPlayers": 64, "mods": [ { "modId": "mod1", "name": "CBA_A3", "required": true, "version": "3.15.0" } ], "modsRequiredByDefault": false, "name": "Test Server", "password": "password", "passwordAdmin": "adminPassword", "scenarioId": "veh_rc_enoch", "supportedPlatforms": ["PLATFORM_PC"], "visible": true }, "operating": { "aiLimit": 5000, "disableAI": false, "disableCrashReporter": false, "disableNavmeshStreaming": [], "disableServerShutdown": false, "joinQueue": { "maxSize": 10 }, "lobbyPlayerSynchronise": true, "playerSaveTime": 180, "slotReservationTimeout": 60 }, "publicAddress": "1.2.3.4", "publicPort": 2302, "rcon": { "address": "0.0.0.0", "blacklist": [], "maxClients": 5, "password": "admin123", "permission": "admin", "port": 2305, "whitelist": [] } }, "isRunning": false, "name": "My Arma Server", "startupParameters": [ { "enabled": true, "parameter": "port", "tooltip": "Server port", "type": "number", "value": 2302 } ] } } }, "required": true }, "responses": { "200": { "description": "Server was created successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UuidResponse" } } } }, "400": { "description": "Invalid server configuration", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/server/api/v2/server/{id}/profile/{path}": { "get": { "tags": ["server"], "operationId": "get_profile_file", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" }, { "name": "path", "in": "path", "description": "Relative path inside the profile directory", "required": true, "schema": { "type": "string" }, "example": "some.file" } ], "responses": { "200": { "description": "Profile file content", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileContentResponse" } } } }, "400": { "description": "Invalid profile file path", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "File or server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "put": { "tags": ["server"], "operationId": "put_profile_file", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" }, { "name": "path", "in": "path", "description": "Relative path inside the profile directory", "required": true, "schema": { "type": "string" }, "example": "settings.lua" } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EditProfileFileRequest" } } }, "required": true }, "responses": { "200": { "description": "Profile file was written", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "400": { "description": "Invalid profile file path", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/server/known-players": { "get": { "tags": ["server"], "operationId": "get_player_log", "responses": { "200": { "description": "List of known players", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/PlayerIdentityId" } } } } }, "404": { "description": "Server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/server/{id}": { "get": { "tags": ["server"], "operationId": "get_server", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" } ], "responses": { "200": { "description": "The server model", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Server" } } } }, "404": { "description": "Server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": ["server"], "operationId": "delete_server", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" } ], "responses": { "200": { "description": "Server was deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "404": { "description": "Server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/server/{id}/crash-reports-log": { "get": { "tags": ["server"], "operationId": "get_crash_log", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" } ], "responses": { "200": { "description": "Crash reports log content", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileContentResponse" } } } }, "404": { "description": "Server or log was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/server/{id}/is-running": { "get": { "tags": ["server"], "operationId": "is_server_running", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" } ], "responses": { "200": { "description": "Server running status", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "404": { "description": "Server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/server/{id}/logs": { "get": { "tags": ["server"], "operationId": "get_logs", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" } ], "responses": { "200": { "description": "List of logs", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResultLogs" } } } }, "404": { "description": "Server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/server/{id}/logs/{log}": { "delete": { "tags": ["server"], "operationId": "delete_log", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" }, { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "log", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "The log was deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "400": { "description": "Invalid log directory name", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Server or log was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/server/{id}/logs/{log}/{log_type}": { "get": { "tags": ["server"], "operationId": "get_log_file", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" }, { "name": "log", "in": "path", "description": "Log folder name", "required": true, "schema": { "type": "string" }, "example": "profileDir" }, { "name": "log_type", "in": "path", "description": "Log file type", "required": true, "schema": { "$ref": "#/components/schemas/LogType" }, "example": "console.log" }, { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "log", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "log_type", "in": "path", "required": true, "schema": { "$ref": "#/components/schemas/LogType" } } ], "responses": { "200": { "description": "Log file content", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileContentResponse" } } } }, "400": { "description": "Invalid log directory name", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Server or log was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/server/{id}/profile": { "get": { "tags": ["server"], "operationId": "get_profile_files", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" } ], "responses": { "200": { "description": "List files in the profile directory", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ProfileFileListResponse" } } } }, "404": { "description": "Server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/server/{id}/profile/{path}": { "get": { "tags": ["server"], "operationId": "get_profile_file", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" }, { "name": "path", "in": "path", "description": "Relative path inside the profile directory", "required": true, "schema": { "type": "string" }, "example": "some.file" } ], "responses": { "200": { "description": "Profile file content", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FileContentResponse" } } } }, "400": { "description": "Invalid profile file path", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "File or server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "put": { "tags": ["server"], "operationId": "put_profile_file", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" }, { "name": "path", "in": "path", "description": "Relative path inside the profile directory", "required": true, "schema": { "type": "string" }, "example": "settings.lua" } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EditProfileFileRequest" } } }, "required": true }, "responses": { "200": { "description": "Profile file was written", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "400": { "description": "Invalid profile file path", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/server/{id}/size": { "get": { "tags": ["server"], "operationId": "get_size_method", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" } ], "responses": { "200": { "description": "Server directory sizes", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResultSize" } } } } } } }, "/api/v2/server/{id}/start": { "get": { "tags": ["server"], "operationId": "start_server", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" } ], "responses": { "200": { "description": "Server was started and/or is running", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "404": { "description": "Server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/server/{id}/stats": { "get": { "tags": ["server"], "operationId": "get_stats", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" } ], "responses": { "200": { "description": "Server statistics", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DockerStats" } } } }, "404": { "description": "Server was not found or stats unavailable", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/server/{id}/stop": { "get": { "tags": ["server"], "operationId": "stop_server", "parameters": [ { "name": "id", "in": "path", "description": "Id of the server", "required": true, "schema": { "type": "string", "format": "uuid" }, "example": "f30b8424-28d6-4b0a-9348-9f05327fa886" } ], "responses": { "200": { "description": "Server was stopped", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SuccessResponse" } } } }, "404": { "description": "Server was not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/status": { "get": { "tags": ["image"], "operationId": "get_status", "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ArsStatus" } } } } } } }, "/api/v2/workshop": { "get": { "tags": ["workshop"], "summary": "Search the Arma Reforger Workshop", "description": "Proxies requests to the upstream Arma Platform workshop API with optional\nfiltering by search term, tags, sort order, and page.", "operationId": "get_workshop", "parameters": [ { "name": "search", "in": "query", "description": "Free-text search string", "required": false, "schema": { "type": ["string", "null"] }, "example": "My Mod" }, { "name": "tags", "in": "query", "description": "One or more tags to filter by (repeat the parameter for multiple tags,\ne.g. `?tags=VEHICLES&tags=COMPOSITIONS`)", "required": false, "schema": { "type": "array", "items": { "type": "string" } } }, { "name": "sort", "in": "query", "required": false, "schema": { "type": "string", "default": "newest", "enum": [ "newest", "popularity", "subscribers", "version_size" ] } }, { "name": "page", "in": "query", "description": "Page number (1-based, default: 1)", "required": false, "schema": { "type": "integer", "format": "int32", "minimum": 0 } } ], "responses": { "200": { "description": "Workshop assets returned successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/WorkshopResponse" } } } }, "400": { "description": "Upstream request failed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/workshop/{id}": { "get": { "tags": ["workshop"], "summary": "Get full details for a single workshop asset, including its changelog", "description": "The `id` path parameter is the asset ID (e.g. `5965550F24A0C152`).\nThe upstream slug format `{id}-{name}` is constructed automatically — just\npass the bare hex ID.", "operationId": "get_workshop_detail", "parameters": [ { "name": "id", "in": "path", "description": "Asset ID (hex), e.g. 5965550F24A0C152", "required": true, "schema": { "type": "string" }, "example": "5965550F24A0C152" } ], "responses": { "200": { "description": "Asset detail returned successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AssetDetailResponse" } } } }, "404": { "description": "Asset not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Upstream request failed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/api/v2/workshop/{id}/scenarios": { "get": { "tags": ["workshop"], "summary": "List scenarios and dependencies for a workshop asset", "description": "Maps to the upstream `/workshop/{id}/scenarios.json` endpoint.\nReturns the scenarios bundled with the asset's current version, plus the\nfull resolved dependency list.", "operationId": "get_workshop_scenarios", "parameters": [ { "name": "id", "in": "path", "description": "Asset ID (hex), e.g. CAFEBEEFF0CACC1A", "required": true, "schema": { "type": "string" }, "example": "CAFEBEEFF0CACC1A" } ], "responses": { "200": { "description": "Scenarios returned successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AssetScenariosResponse" } } } }, "404": { "description": "Asset not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Upstream request failed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } } }, "components": { "schemas": { "A2S": { "type": "object", "required": ["address", "port"], "properties": { "address": { "type": "string" }, "port": { "type": "integer", "format": "int32", "minimum": 0 } } }, "ArsStatus": { "type": "string", "enum": [ "Unknown", "Available", "Recreating", "RecreatingFailure", "Unavailable" ], "example": "Available" }, "Asset": { "type": "object", "required": [ "id", "name", "type", "summary", "unlisted", "private", "blocked", "averageRating", "ratingCount", "subscriberCount", "currentVersionNumber", "currentVersionSize", "previews", "tags", "author", "createdAt", "updatedAt" ], "properties": { "author": { "$ref": "#/components/schemas/Author" }, "averageRating": { "type": "number", "format": "double" }, "blocked": { "type": "boolean" }, "createdAt": { "type": "string" }, "currentVersionNumber": { "type": "string" }, "currentVersionSize": { "type": "integer", "format": "int64", "minimum": 0 }, "id": { "type": "string" }, "name": { "type": "string" }, "previews": { "type": "array", "items": { "$ref": "#/components/schemas/Preview" } }, "private": { "type": "boolean" }, "ratingCount": { "type": "integer", "format": "int32", "minimum": 0 }, "subscriberCount": { "type": "integer", "format": "int32", "minimum": 0 }, "summary": { "type": "string" }, "tags": { "type": "array", "items": { "$ref": "#/components/schemas/AssetTag" } }, "type": { "type": "string" }, "unlisted": { "type": "boolean" }, "updatedAt": { "type": "string" } } }, "AssetDetail": { "type": "object", "description": "Full asset detail including all versions, ratings, changelog, and download count", "required": [ "id", "name", "type", "summary", "unlisted", "private", "blocked", "averageRating", "ratingCount", "subscriberCount", "currentVersionNumber", "currentVersionSize", "previews", "screenshots", "tags", "author", "createdAt", "updatedAt", "gameVersion", "obsolete", "versions", "ratings" ], "properties": { "author": { "$ref": "#/components/schemas/Author" }, "averageRating": { "type": "number", "format": "double" }, "blocked": { "type": "boolean" }, "createdAt": { "type": "string" }, "currentVersionNumber": { "type": "string" }, "currentVersionSize": { "type": "integer", "format": "int64", "minimum": 0 }, "description": { "type": ["string", "null"] }, "gameVersion": { "type": "string" }, "id": { "type": "string" }, "license": { "type": ["string", "null"] }, "name": { "type": "string" }, "obsolete": { "type": "boolean" }, "previews": { "type": "array", "items": { "$ref": "#/components/schemas/Preview" } }, "private": { "type": "boolean" }, "ratingCount": { "type": "integer", "format": "int32", "minimum": 0 }, "ratings": { "$ref": "#/components/schemas/Ratings" }, "screenshots": { "type": "array", "items": { "$ref": "#/components/schemas/Screenshot" } }, "subscriberCount": { "type": "integer", "format": "int32", "minimum": 0 }, "summary": { "type": "string" }, "tags": { "type": "array", "items": { "$ref": "#/components/schemas/AssetTag" } }, "type": { "type": "string" }, "unlisted": { "type": "boolean" }, "updatedAt": { "type": "string" }, "versions": { "type": "array", "items": { "$ref": "#/components/schemas/AssetVersion" } } } }, "AssetDetailResponse": { "type": "object", "description": "Response for the asset detail endpoint", "required": ["asset", "version_detail", "download_total"], "properties": { "asset": { "$ref": "#/components/schemas/AssetDetail" }, "download_total": { "type": "integer", "format": "int64", "description": "All-time download count", "minimum": 0 }, "version_detail": { "$ref": "#/components/schemas/AssetVersionDetail", "description": "Changelog and dependency info for the current version" } } }, "AssetScenariosResponse": { "type": "object", "description": "Response for the scenarios endpoint", "required": ["asset_id", "scenarios", "dependencies"], "properties": { "asset_id": { "type": "string" }, "dependencies": { "type": "array", "items": { "$ref": "#/components/schemas/Dependency" } }, "scenarios": { "type": "array", "items": { "$ref": "#/components/schemas/Scenario" } } } }, "AssetTag": { "type": "object", "required": ["name"], "properties": { "category": { "type": ["string", "null"] }, "name": { "type": "string" } } }, "AssetVersion": { "type": "object", "required": [ "version", "approved", "published", "gameVersion", "totalFileSize", "milestone", "createdAt", "updatedAt", "assetId", "scenariosCount", "dependenciesCount" ], "properties": { "approved": { "type": "boolean" }, "assetId": { "type": "string" }, "createdAt": { "type": "string" }, "dependenciesCount": { "type": "integer", "format": "int32", "minimum": 0 }, "gameVersion": { "type": "string" }, "milestone": { "type": "boolean" }, "published": { "type": "boolean" }, "scenariosCount": { "type": "integer", "format": "int32", "minimum": 0 }, "totalFileSize": { "type": "integer", "format": "int64", "minimum": 0 }, "updatedAt": { "type": "string" }, "version": { "type": "string" } } }, "AssetVersionDetail": { "type": "object", "required": ["scenarios", "dependencies"], "properties": { "changelog": { "type": ["string", "null"], "description": "Changelog text for the current version" }, "dependencies": { "type": "array", "items": { "$ref": "#/components/schemas/Dependency" } }, "scenarios": { "type": "array", "items": { "$ref": "#/components/schemas/Scenario" } } } }, "AssetsPage": { "type": "object", "required": ["count", "rows"], "properties": { "count": { "type": "integer", "format": "int32", "minimum": 0 }, "rows": { "type": "array", "items": { "$ref": "#/components/schemas/Asset" } } } }, "Author": { "type": "object", "required": ["id", "username"], "properties": { "id": { "type": "string" }, "username": { "type": "string" } } }, "Branch": { "type": "string", "enum": ["stable", "experimental"] }, "Claims": { "type": "object", "required": ["sub", "exp"], "properties": { "exp": { "type": "integer", "minimum": 0 }, "picture": { "type": ["string", "null"] }, "preferred_username": { "type": ["string", "null"] }, "realm_access": { "oneOf": [ { "type": "null" }, { "$ref": "#/components/schemas/RealmAccess" } ] }, "sub": { "type": "string" } } }, "Dependency": { "type": "object", "properties": { "asset": { "$ref": "#/components/schemas/DependencyAssetStub" }, "blocked": { "type": "boolean" }, "dependencies": { "type": "array", "items": { "$ref": "#/components/schemas/Dependency" } }, "private": { "type": "boolean" }, "published": { "type": "boolean" }, "totalFileSize": { "type": "integer", "format": "int64", "minimum": 0 }, "version": { "type": "string" } } }, "DependencyAssetStub": { "type": "object", "description": "Stub asset info embedded inside a dependency entry", "required": ["id", "name"], "properties": { "id": { "type": "string" }, "name": { "type": "string" } } }, "DockerStats": { "type": "object", "required": [ "timestamp", "blockIoRead", "blockIoWrite", "cpuPercentage", "name", "id", "memUsage", "memLimit", "networkRxBytes", "networkTxBytes", "pidCount" ], "properties": { "blockIoRead": { "type": "integer", "format": "int64", "minimum": 0 }, "blockIoWrite": { "type": "integer", "format": "int64", "minimum": 0 }, "cpuPercentage": { "type": "number", "format": "double" }, "id": { "type": "string" }, "memLimit": { "type": "integer", "format": "int64", "minimum": 0 }, "memUsage": { "type": "integer", "format": "int64", "minimum": 0 }, "name": { "type": "string" }, "networkRxBytes": { "type": "integer", "format": "int64", "minimum": 0 }, "networkTxBytes": { "type": "integer", "format": "int64", "minimum": 0 }, "pidCount": { "type": "integer", "format": "int64", "minimum": 0 }, "timestamp": { "type": "string", "format": "date-time" } } }, "EditProfileFileRequest": { "type": "object", "required": ["fileContent"], "properties": { "fileContent": { "type": "string", "description": "File contents to write to the profile file" } } }, "ErrorResponse": { "type": "object", "required": ["message"], "properties": { "message": { "type": "string" } } }, "FileContentResponse": { "type": "object", "required": ["file_content"], "properties": { "file_content": { "type": "string" } } }, "Game": { "type": "object", "required": [ "name", "password", "passwordAdmin", "admins", "scenarioId", "maxPlayers", "visible", "crossPlatform", "supportedPlatforms", "gameProperties", "modsRequiredByDefault", "mods" ], "properties": { "admins": { "type": "array", "items": { "type": "string" } }, "crossPlatform": { "type": "boolean" }, "gameProperties": { "$ref": "#/components/schemas/GameProperties" }, "maxPlayers": { "type": "integer", "format": "int32", "minimum": 0 }, "mods": { "type": "array", "items": { "$ref": "#/components/schemas/Mod" } }, "modsRequiredByDefault": { "type": "boolean" }, "name": { "type": "string" }, "password": { "type": "string" }, "passwordAdmin": { "type": "string" }, "scenarioId": { "type": "string" }, "supportedPlatforms": { "type": "array", "items": { "$ref": "#/components/schemas/Platform" } }, "visible": { "type": "boolean" } } }, "GameProperties": { "type": "object", "required": [ "serverMaxViewDistance", "serverMinGrassDistance", "fastValidation", "networkViewDistance", "battlEye", "disableThirdPerson", "VONDisableUI", "VONDisableDirectSpeechUI", "VONCanTransmitCrossFaction", "missionHeader" ], "properties": { "VONCanTransmitCrossFaction": { "type": "boolean" }, "VONDisableDirectSpeechUI": { "type": "boolean" }, "VONDisableUI": { "type": "boolean" }, "battlEye": { "type": "boolean" }, "disableThirdPerson": { "type": "boolean" }, "fastValidation": { "type": "boolean" }, "missionHeader": {}, "networkViewDistance": { "type": "integer", "format": "int32", "minimum": 0 }, "serverMaxViewDistance": { "type": "integer", "format": "int32", "minimum": 0 }, "serverMinGrassDistance": { "type": "integer", "format": "int32", "minimum": 0 } } }, "GlobalLog": { "type": "object", "required": ["id", "action", "actor_id", "actor", "timestamp"], "properties": { "action": { "$ref": "#/components/schemas/LogAction" }, "actor": { "type": "string" }, "actor_id": { "type": "string" }, "id": { "type": "string", "format": "uuid" }, "target": { "type": ["string", "null"], "format": "uuid" }, "timestamp": { "type": "string", "format": "date-time" } } }, "IPv4Response": { "type": "object", "required": ["ipv4"], "properties": { "ipv4": { "type": "string" } } }, "ImageVersionResponse": { "type": "object", "required": ["version"], "properties": { "version": { "type": "string" } } }, "JoinQueue": { "type": "object", "required": ["maxSize"], "properties": { "maxSize": { "type": "integer", "format": "int32", "minimum": 0 } } }, "ListScenariosResponse": { "type": "object", "required": ["branch", "scenarios"], "properties": { "branch": { "$ref": "#/components/schemas/Branch" }, "scenarios": { "type": "array", "items": { "$ref": "#/components/schemas/ScenarioEntry" } } } }, "Log": { "type": "object", "required": [ "dir", "containsConsoleLog", "containsScriptLog", "containsErrorLog", "containsCrashLog" ], "properties": { "containsConsoleLog": { "type": "boolean" }, "containsCrashLog": { "type": "boolean" }, "containsErrorLog": { "type": "boolean" }, "containsScriptLog": { "type": "boolean" }, "dir": { "type": "string" } } }, "LogAction": { "type": "string", "enum": [ "ServerAdded", "ServerDeleted", "ServerStarted", "ServerUpdated", "ServerStopped", "ServerLogDeleted", "ImagePullStarted" ] }, "LogType": { "type": "string", "enum": ["console.log", "error.log", "script.log", "crash.log"] }, "Mod": { "type": "object", "required": ["modId", "name"], "properties": { "modId": { "type": "string" }, "name": { "type": "string" }, "required": { "type": ["boolean", "null"] }, "version": { "type": ["string", "null"] } } }, "Operating": { "type": "object", "required": [ "lobbyPlayerSynchronise", "disableCrashReporter", "disableServerShutdown", "disableAI", "playerSaveTime", "aiLimit", "slotReservationTimeout", "joinQueue" ], "properties": { "aiLimit": { "type": "integer", "format": "int32" }, "disableAI": { "type": "boolean" }, "disableCrashReporter": { "type": "boolean" }, "disableNavmeshStreaming": { "type": "array", "items": { "type": "string" } }, "disableServerShutdown": { "type": "boolean" }, "joinQueue": { "$ref": "#/components/schemas/JoinQueue" }, "lobbyPlayerSynchronise": { "type": "boolean" }, "playerSaveTime": { "type": "integer", "format": "int32", "minimum": 0 }, "slotReservationTimeout": { "type": "integer", "format": "int32", "minimum": 0 } } }, "PaginatedResponse_GlobalLog": { "type": "object", "required": ["data", "page", "limit", "total", "total_pages"], "properties": { "data": { "type": "array", "items": { "type": "object", "required": [ "id", "action", "actor_id", "actor", "timestamp" ], "properties": { "action": { "$ref": "#/components/schemas/LogAction" }, "actor": { "type": "string" }, "actor_id": { "type": "string" }, "id": { "type": "string", "format": "uuid" }, "target": { "type": ["string", "null"], "format": "uuid" }, "timestamp": { "type": "string", "format": "date-time" } } }, "description": "Data" }, "limit": { "type": "integer", "format": "int64", "description": "Limit", "minimum": 0 }, "page": { "type": "integer", "format": "int64", "description": "Page number", "minimum": 0 }, "total": { "type": "integer", "format": "int64", "description": "Total", "minimum": 0 }, "total_pages": { "type": "integer", "format": "int64", "description": "Total pages", "minimum": 0 } } }, "Platform": { "type": "string", "enum": ["PLATFORM_PC", "PLATFORM_XBL", "PLATFORM_PSN"] }, "PlayerIdentityId": { "type": "object", "required": ["name", "identityId"], "properties": { "identityId": { "type": "string" }, "name": { "type": "string" } } }, "Preview": { "type": "object", "required": ["url", "width", "height", "contentType"], "properties": { "contentType": { "type": "string" }, "height": { "type": "integer", "format": "int32", "minimum": 0 }, "url": { "type": "string" }, "width": { "type": "integer", "format": "int32", "minimum": 0 } } }, "ProfileFileListResponse": { "type": "object", "required": ["files"], "properties": { "files": { "type": "array", "items": { "type": "string" } } } }, "PullLog": { "type": "object", "required": [ "id", "errorDetailCode", "errorDetailMessage", "status", "progressDetailCurrent", "progressDetailTotal" ], "properties": { "errorDetailCode": { "type": "integer", "format": "int64" }, "errorDetailMessage": { "type": "string" }, "id": { "type": "string" }, "progressDetailCurrent": { "type": "integer", "format": "int64" }, "progressDetailTotal": { "type": "integer", "format": "int64" }, "pullId": { "type": "string", "format": "uuid" }, "status": { "type": "string" } } }, "Ratings": { "type": "object", "required": ["likes", "dislikes", "rating"], "properties": { "dislikes": { "type": "integer", "format": "int32", "minimum": 0 }, "likes": { "type": "integer", "format": "int32", "minimum": 0 }, "rating": { "type": "number", "format": "double" } } }, "Rcon": { "type": "object", "required": [ "address", "port", "password", "maxClients", "permission", "blacklist", "whitelist" ], "properties": { "address": { "type": "string" }, "blacklist": { "type": "array", "items": { "type": "string" } }, "maxClients": { "type": "integer", "format": "int32", "minimum": 0 }, "password": { "type": "string" }, "permission": { "type": "string" }, "port": { "type": "integer", "format": "int32", "minimum": 0 }, "whitelist": { "type": "array", "items": { "type": "string" } } } }, "RealmAccess": { "type": "object", "properties": { "roles": { "type": "array", "items": { "type": "string" } } } }, "ResultLogs": { "type": "object", "required": ["success", "containsCrashReportLog", "logs"], "properties": { "containsCrashReportLog": { "type": "boolean" }, "logs": { "type": "array", "items": { "$ref": "#/components/schemas/Log" } }, "success": { "type": "boolean" } } }, "ResultSize": { "type": "object", "required": [ "addonsSize", "logsSize", "profileSize", "mods", "logs" ], "properties": { "addonsSize": { "type": "integer", "format": "int64", "minimum": 0 }, "logs": { "type": "array", "items": { "type": "string" } }, "logsSize": { "type": "integer", "format": "int64", "minimum": 0 }, "mods": { "type": "array", "items": { "type": "string" } }, "profileSize": { "type": "integer", "format": "int64", "minimum": 0 } } }, "Scenario": { "type": "object", "description": "A playable scenario bundled with an asset", "required": ["name", "gameId", "playerCount"], "properties": { "authorName": { "type": ["string", "null"], "description": "Upstream omits this for some scenarios — not guaranteed present." }, "description": { "type": ["string", "null"], "description": "Upstream omits this for some scenarios — not guaranteed present." }, "gameId": { "type": "string", "description": "Enfusion game ID string, e.g. `{E2EC49F1…}Missions/…/Arland.conf`" }, "gameMode": { "type": ["string", "null"], "description": "Upstream omits this for some scenarios — not guaranteed present." }, "image": { "oneOf": [ { "type": "null" }, { "$ref": "#/components/schemas/ScenarioImage" } ] }, "name": { "type": "string" }, "playerCount": { "type": "integer", "format": "int32", "minimum": 0 } } }, "ScenarioEntry": { "type": "object", "required": ["path", "name"], "properties": { "name": { "type": "string" }, "path": { "type": "string" } } }, "ScenarioImage": { "type": "object", "description": "Image with pre-generated thumbnail URLs", "required": ["url", "width", "height", "contentType"], "properties": { "contentType": { "type": "string" }, "height": { "type": "integer", "format": "int32", "minimum": 0 }, "url": { "type": "string" }, "width": { "type": "integer", "format": "int32", "minimum": 0 } } }, "Screenshot": { "type": "object", "required": ["url", "width", "height", "contentType"], "properties": { "contentType": { "type": "string" }, "height": { "type": "integer", "format": "int32", "minimum": 0 }, "url": { "type": "string" }, "width": { "type": "integer", "format": "int32", "minimum": 0 } } }, "Server": { "allOf": [ { "$ref": "#/components/schemas/StartupParameterWrapper" }, { "type": "object", "required": [ "name", "isRunning", "branch", "playerCount", "config" ], "properties": { "branch": { "oneOf": [ { "$ref": "#/components/schemas/Branch" } ], "default": "Branch::Stable" }, "config": { "$ref": "#/components/schemas/ServerConfig" }, "isRunning": { "type": "boolean" }, "name": { "type": "string" }, "playerCount": { "type": "integer", "format": "int32", "minimum": 0 }, "uuid": { "type": "string", "format": "uuid" } } } ] }, "ServerConfig": { "type": "object", "required": [ "bindAddress", "bindPort", "publicAddress", "publicPort", "a2s", "rcon", "game", "operating" ], "properties": { "a2s": { "$ref": "#/components/schemas/A2S" }, "bindAddress": { "type": "string" }, "bindPort": { "type": "integer", "format": "int32", "minimum": 0 }, "game": { "$ref": "#/components/schemas/Game" }, "operating": { "$ref": "#/components/schemas/Operating" }, "publicAddress": { "type": "string" }, "publicPort": { "type": "integer", "format": "int32", "minimum": 0 }, "rcon": { "$ref": "#/components/schemas/Rcon" } } }, "ServerDefaults": { "allOf": [ { "$ref": "#/components/schemas/StartupParameterWrapper" }, { "type": "object", "required": ["name", "branch", "config"], "properties": { "branch": { "oneOf": [ { "$ref": "#/components/schemas/Branch" } ], "default": "Branch::Stable" }, "config": { "$ref": "#/components/schemas/ServerConfig" }, "name": { "type": "string" } } } ] }, "StartupParameter": { "type": "object", "required": ["parameter", "tooltip", "enabled", "type"], "properties": { "enabled": { "type": "boolean" }, "maxVal": { "type": ["integer", "null"], "format": "int32" }, "minVal": { "type": ["integer", "null"], "format": "int32" }, "parameter": { "type": "string" }, "tooltip": { "type": "string" }, "type": { "type": "string" }, "value": {}, "valueList": { "type": ["array", "null"], "items": { "type": "string" } } } }, "StartupParameterWrapper": { "type": "object", "required": ["startupParameters"], "properties": { "startupParameters": { "type": "array", "items": { "$ref": "#/components/schemas/StartupParameter" } } } }, "SuccessResponse": { "type": "object", "required": ["success"], "properties": { "success": { "type": "boolean" } } }, "UuidResponse": { "type": "object", "required": ["uuid"], "properties": { "uuid": { "type": "string", "format": "uuid" } } }, "WorkshopResponse": { "type": "object", "description": "Top-level response returned by this proxy", "required": ["assets"], "properties": { "assets": { "$ref": "#/components/schemas/AssetsPage" } } } } }, "tags": [ { "name": "server", "description": "Server api endpoints" }, { "name": "workshop", "description": "Workshop api" }, { "name": "image", "description": "Docker image endpoints" }, { "name": "log", "description": "Global log endpoints" }, { "name": "defaults", "description": "Global server defaults endpoints" }, { "name": "auth", "description": "Authentication endpoints" } ] }