openapi: 3.0.3 info: title: Minecraft Platform API description: API for Minecraft Server Platform handling auth, skins, modpacks, and servers. version: 1.0.0 servers: - url: http://localhost:8080 description: Local development server components: securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT security: - bearerAuth: [] paths: # --- Public Auth & User Registration --- /api/register: post: summary: Register a new user tags: [Auth] security: [] requestBody: required: true content: application/json: schema: type: object required: [username, email, password] properties: username: type: string email: type: string format: email password: type: string format: password responses: 201: description: User registered successfully 400: description: Validation error /api/login: post: summary: Login user tags: [Auth] security: [] requestBody: required: true content: application/json: schema: type: object required: [email, password] properties: email: type: string format: email password: type: string format: password responses: 200: description: Login successful content: application/json: schema: type: object properties: token: type: string user: $ref: '#/components/schemas/User' 401: description: Invalid credentials # --- Auth Server (Launcher Integration) --- /authserver/authenticate: post: summary: Authenticate (Launcher flow) tags: [Auth] security: [] requestBody: required: true content: application/json: schema: type: object properties: username: type: string password: type: string responses: 200: description: Authenticated content: application/json: schema: type: object properties: accessToken: type: string clientToken: type: string selectedProfile: $ref: '#/components/schemas/GameProfile' # --- Session Server --- /sessionserver/session/minecraft/join: post: summary: Join server (Client-side) tags: [Auth] security: [] requestBody: required: true content: application/json: schema: type: object properties: accessToken: type: string selectedProfile: type: string serverId: type: string responses: 204: description: Joined successfully /sessionserver/session/minecraft/profile/{uuid}: get: summary: Get user profile (Server-side check) tags: [User] security: [] parameters: - in: path name: uuid schema: type: string required: true responses: 200: description: Profile data content: application/json: schema: $ref: '#/components/schemas/GameProfile' # --- User Endpoints --- /api/user/me: get: summary: Get current user info tags: [User] responses: 200: description: Current user content: application/json: schema: $ref: '#/components/schemas/User' /api/user/skin: post: summary: Upload skin tags: [User] requestBody: content: multipart/form-data: schema: type: object properties: file: type: string format: binary responses: 200: description: Skin uploaded # --- Servers --- /api/servers: get: summary: Get game servers list tags: [Servers] security: [] responses: 200: description: List of servers content: application/json: schema: type: array items: $ref: '#/components/schemas/GameServer' # --- Launcher --- /api/launcher/modpacks/summary: get: summary: Get modpacks summary (for launcher) tags: [Launcher] security: [] responses: 200: description: List of modpacks content: application/json: schema: type: array items: type: object properties: name: type: string updated_at: type: string format: date-time /api/launcher/modpacks/{name}/manifest: get: summary: Get modpack manifest tags: [Launcher] security: [] parameters: - in: path name: name required: true schema: type: string responses: 200: description: Modpack manifest content: application/json: schema: type: array items: type: object properties: path: type: string hash: type: string size: type: integer # --- Admin / Modpacks --- /api/admin/modpacks: get: summary: Get all modpacks (Admin) tags: [Admin] responses: 200: description: List of full modpack details content: application/json: schema: type: array items: $ref: '#/components/schemas/Modpack' /api/admin/modpacks/import: post: summary: Import new modpack tags: [Admin] requestBody: content: multipart/form-data: schema: type: object properties: name: type: string displayName: type: string mcVersion: type: string importerType: type: string enum: [simple, curseforge, modrinth] importMethod: type: string enum: [file, url] sourceUrl: type: string file: type: string format: binary responses: 202: description: Job started content: application/json: schema: type: object properties: job_id: type: integer message: type: string /api/admin/modpacks/update: post: summary: Update existing modpack tags: [Admin] requestBody: content: multipart/form-data: schema: type: object properties: modpackName: type: string mcVersion: type: string importerType: type: string importMethod: type: string sourceUrl: type: string file: type: string format: binary responses: 202: description: Job started /api/admin/modpacks/versions: get: summary: Get modpack versions (CurseForge) tags: [Admin] parameters: - in: query name: url required: true schema: type: string responses: 200: description: List of versions content: application/json: schema: type: array items: type: object properties: file_id: type: integer display_name: type: string game_versions: type: array items: type: string # --- Admin / Users --- /api/admin/users: get: summary: Get all users tags: [Admin] responses: 200: description: List of users content: application/json: schema: type: array items: $ref: '#/components/schemas/User' /api/admin/users/{id}/role: patch: summary: Update user role tags: [Admin] parameters: - in: path name: id required: true schema: type: integer requestBody: content: application/json: schema: type: object properties: role: type: string enum: [user, admin] responses: 200: description: Role updated components: schemas: User: type: object properties: id: type: integer username: type: string email: type: string role: type: string created_at: type: string format: date-time GameProfile: type: object properties: id: type: string name: type: string properties: type: array items: type: object properties: name: type: string value: type: string signature: type: string GameServer: type: object properties: id: type: integer name: type: string address: type: string is_enabled: type: boolean motd: type: string player_count: type: integer max_players: type: integer version_name: type: string ping_proxy_server: type: integer bluemap_url: type: string Modpack: type: object properties: id: type: integer name: type: string display_name: type: string minecraft_version: type: string is_active: type: boolean created_at: type: string format: date-time updated_at: type: string format: date-time