{
    "schemes": [
        "http",
        "https"
    ],
    "swagger": "2.0",
    "info": {
        "description": "A chaotic, self-hosted Discord-like platform API",
        "title": "Dumpster API",
        "contact": {},
        "version": "1.0"
    },
    "host": "localhost:8080",
    "basePath": "/api/v1",
    "paths": {
        "/auth/login/password": {
            "post": {
                "description": "Authenticate with email and password",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "auth"
                ],
                "summary": "Login with email and password",
                "parameters": [
                    {
                        "description": "Login credentials",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/auth.loginRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/auth/logout": {
            "post": {
                "description": "End the current session",
                "tags": [
                    "auth"
                ],
                "summary": "Logout",
                "responses": {
                    "204": {
                        "description": "No Content"
                    }
                }
            }
        },
        "/auth/me": {
            "get": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Get the authenticated user's profile",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "auth"
                ],
                "summary": "Get current user profile",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/auth.UserProfile"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "patch": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Update the authenticated user's profile",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "auth"
                ],
                "summary": "Update current user profile",
                "parameters": [
                    {
                        "description": "Profile update data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/auth.updateProfileRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/auth.UserProfile"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/auth/register": {
            "post": {
                "description": "Create a new user account",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "auth"
                ],
                "summary": "Register a new user",
                "parameters": [
                    {
                        "description": "Registration data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/auth.registerRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "Conflict",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/auth/webauthn/login/begin": {
            "post": {
                "description": "Start passkey authentication",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "webauthn"
                ],
                "summary": "Begin passkey login",
                "responses": {
                    "200": {
                        "description": "WebAuthn login options",
                        "schema": {
                            "type": "object"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/auth/webauthn/login/finish": {
            "post": {
                "description": "Complete passkey authentication",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "webauthn"
                ],
                "summary": "Finish passkey login",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/auth/webauthn/register/begin": {
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Start passkey registration for an authenticated user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "webauthn"
                ],
                "summary": "Begin passkey registration",
                "responses": {
                    "200": {
                        "description": "WebAuthn registration options",
                        "schema": {
                            "type": "object"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/auth/webauthn/register/finish": {
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Complete passkey registration",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "webauthn"
                ],
                "summary": "Finish passkey registration",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/bots": {
            "get": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "List all bots owned by the current user",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "bots"
                ],
                "summary": "List bots",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/bot.botResponse"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Create a new bot",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "bots"
                ],
                "summary": "Create a bot",
                "parameters": [
                    {
                        "description": "Bot data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/bot.createBotRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/bot.botWithToken"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/bots/servers/{serverID}/commands": {
            "get": {
                "description": "List all slash commands registered in a server (public)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "bot commands"
                ],
                "summary": "List server commands",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Server ID",
                        "name": "serverID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/bot.slashCommandResponse"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/bots/{botID}": {
            "get": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Get a bot by ID (owner only)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "bots"
                ],
                "summary": "Get a bot",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Bot ID",
                        "name": "botID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/bot.botResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Delete a bot (owner only)",
                "tags": [
                    "bots"
                ],
                "summary": "Delete a bot",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Bot ID",
                        "name": "botID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "patch": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Update a bot's name, description, or avatar (owner only)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "bots"
                ],
                "summary": "Update a bot",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Bot ID",
                        "name": "botID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Bot update data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/bot.updateBotRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/bot.botResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/bots/{botID}/commands": {
            "get": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "List all slash commands for a bot",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "bot commands"
                ],
                "summary": "List bot commands",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Bot ID",
                        "name": "botID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/bot.slashCommandResponse"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Create a new slash command for a bot",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "bot commands"
                ],
                "summary": "Create a slash command",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Bot ID",
                        "name": "botID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Command data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/bot.createCommandRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/bot.slashCommandResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "Conflict",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/bots/{botID}/commands/{cmdID}": {
            "delete": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Delete a slash command",
                "tags": [
                    "bot commands"
                ],
                "summary": "Delete a slash command",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Bot ID",
                        "name": "botID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Command ID",
                        "name": "cmdID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/bots/{botID}/regenerate-token": {
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Regenerate a bot's API token (owner only)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "bots"
                ],
                "summary": "Regenerate bot token",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Bot ID",
                        "name": "botID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/bot.botWithToken"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/bots/{botID}/servers": {
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Add a bot to a server",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "bots"
                ],
                "summary": "Add bot to server",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Bot ID",
                        "name": "botID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Server data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/bot.addToServerRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/bots/{botID}/servers/{serverID}": {
            "delete": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Remove a bot from a server",
                "tags": [
                    "bots"
                ],
                "summary": "Remove bot from server",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Bot ID",
                        "name": "botID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Server ID",
                        "name": "serverID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/channels/{channelID}/messages": {
            "get": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "List messages in a channel with pagination",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "messages"
                ],
                "summary": "List messages",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Channel ID",
                        "name": "channelID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "Max messages to return (1-100, default 50)",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Message ID to fetch messages before",
                        "name": "before",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/message.messageResponse"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Send a message to a channel",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "messages"
                ],
                "summary": "Create a message",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Channel ID",
                        "name": "channelID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Message data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/message.createMessageRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/message.messageResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/channels/{channelID}/messages/{messageID}": {
            "delete": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Delete a message (author only)",
                "tags": [
                    "messages"
                ],
                "summary": "Delete a message",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Channel ID",
                        "name": "channelID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Message ID",
                        "name": "messageID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "patch": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Edit a message (author only)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "messages"
                ],
                "summary": "Update a message",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Channel ID",
                        "name": "channelID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Message ID",
                        "name": "messageID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Message update data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/message.updateMessageRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/message.messageResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/channels/{channelID}/webhooks": {
            "get": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "List webhooks for a channel",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "webhooks"
                ],
                "summary": "List webhooks",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Channel ID",
                        "name": "channelID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/webhook.webhookResponse"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Create a new webhook for a channel",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "webhooks"
                ],
                "summary": "Create a webhook",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Channel ID",
                        "name": "channelID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Webhook data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/webhook.createWebhookRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/webhook.webhookWithToken"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/invites/{code}": {
            "get": {
                "description": "Get information about an invite by code",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "invites"
                ],
                "summary": "Get invite info",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Invite code",
                        "name": "code",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/invite.inviteResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/invites/{code}/join": {
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Join a server using an invite code",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "invites"
                ],
                "summary": "Join server via invite",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Invite code",
                        "name": "code",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "409": {
                        "description": "Conflict",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/messages/{messageID}/reactions": {
            "get": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "List reactions on a message grouped by emoji",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "reactions"
                ],
                "summary": "List reactions",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Message ID",
                        "name": "messageID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/reaction.emojiGroup"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Add a reaction to a message",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "reactions"
                ],
                "summary": "Add a reaction",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Message ID",
                        "name": "messageID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Reaction data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/reaction.addReactionRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/reaction.reactionResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/messages/{messageID}/reactions/{emoji}": {
            "delete": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Remove a reaction from a message",
                "tags": [
                    "reactions"
                ],
                "summary": "Remove a reaction",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Message ID",
                        "name": "messageID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Emoji to remove",
                        "name": "emoji",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/push/subscribe": {
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Subscribe to push notifications",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "push"
                ],
                "summary": "Subscribe to push notifications",
                "parameters": [
                    {
                        "description": "Push subscription with endpoint, p256dh, and auth",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/push/unsubscribe": {
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Unsubscribe from push notifications",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "push"
                ],
                "summary": "Unsubscribe from push notifications",
                "parameters": [
                    {
                        "description": "Endpoint to unsubscribe",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/push/vapid-public-key": {
            "get": {
                "description": "Get the VAPID public key for push notification subscriptions",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "push"
                ],
                "summary": "Get VAPID public key",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/servers": {
            "get": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "List all servers the current user is a member of",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "servers"
                ],
                "summary": "List servers",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/server.serverResponse"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Create a new server",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "servers"
                ],
                "summary": "Create a server",
                "parameters": [
                    {
                        "description": "Server data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/server.createServerRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/server.serverResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/servers/{serverID}": {
            "get": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Get a server by ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "servers"
                ],
                "summary": "Get a server",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Server ID",
                        "name": "serverID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/server.serverResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Delete a server (owner only)",
                "tags": [
                    "servers"
                ],
                "summary": "Delete a server",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Server ID",
                        "name": "serverID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "patch": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Update a server's name or icon (owner only)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "servers"
                ],
                "summary": "Update a server",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Server ID",
                        "name": "serverID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Server update data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/server.updateServerRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/server.serverResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/servers/{serverID}/channels": {
            "get": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "List channels in a server",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "channels"
                ],
                "summary": "List channels",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Server ID",
                        "name": "server_id",
                        "in": "query",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/channel.channelResponse"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Create a new channel in a server",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "channels"
                ],
                "summary": "Create a channel",
                "parameters": [
                    {
                        "description": "Channel data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/channel.createChannelRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/channel.channelResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/servers/{serverID}/channels/{channelID}": {
            "get": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Get a channel by ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "channels"
                ],
                "summary": "Get a channel",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Channel ID",
                        "name": "channelID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/channel.channelResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Delete a channel (server owner only)",
                "tags": [
                    "channels"
                ],
                "summary": "Delete a channel",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Channel ID",
                        "name": "channelID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            },
            "patch": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Update a channel's properties",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "channels"
                ],
                "summary": "Update a channel",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Channel ID",
                        "name": "channelID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Channel update data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/channel.updateChannelRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/channel.channelResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/servers/{serverID}/invites": {
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Create an invite code for a server",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "invites"
                ],
                "summary": "Create an invite",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Server ID",
                        "name": "serverID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Invite options",
                        "name": "body",
                        "in": "body",
                        "schema": {
                            "$ref": "#/definitions/invite.createInviteRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/invite.inviteResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/voice/rooms/{roomID}/participants": {
            "get": {
                "description": "Get participants in a voice room",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "voice"
                ],
                "summary": "Get voice room participants",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Room ID",
                        "name": "roomID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "object"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/voice/token": {
            "post": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Get a LiveKit access token for a voice room",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "voice"
                ],
                "summary": "Get voice token",
                "parameters": [
                    {
                        "description": "Room data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/voice.tokenRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/voice.tokenResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/webhooks/{webhookID}": {
            "delete": {
                "security": [
                    {
                        "SessionAuth": []
                    }
                ],
                "description": "Delete a webhook",
                "tags": [
                    "webhooks"
                ],
                "summary": "Delete a webhook",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Webhook ID",
                        "name": "webhookID",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        },
        "/webhooks/{webhookID}/{token}": {
            "post": {
                "description": "Execute a webhook to send a message (no auth required)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "webhooks"
                ],
                "summary": "Execute a webhook",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Webhook ID",
                        "name": "webhookID",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "string",
                        "description": "Webhook token",
                        "name": "token",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Message data",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/webhook.executeWebhookRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "type": "object",
                            "additionalProperties": true
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    }
                }
            }
        }
    },
    "definitions": {
        "auth.UserProfile": {
            "type": "object",
            "properties": {
                "accent_color": {
                    "type": "string"
                },
                "avatar": {
                    "type": "string"
                },
                "bio": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "display_name": {
                    "type": "string"
                },
                "email": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "status_text": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "auth.loginRequest": {
            "type": "object",
            "properties": {
                "email": {
                    "type": "string"
                },
                "password": {
                    "type": "string"
                }
            }
        },
        "auth.registerRequest": {
            "type": "object",
            "properties": {
                "display_name": {
                    "type": "string"
                },
                "email": {
                    "type": "string"
                },
                "password": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "auth.updateProfileRequest": {
            "type": "object",
            "properties": {
                "accent_color": {
                    "type": "string"
                },
                "bio": {
                    "type": "string"
                },
                "display_name": {
                    "type": "string"
                },
                "status_text": {
                    "type": "string"
                }
            }
        },
        "bot.addToServerRequest": {
            "type": "object",
            "properties": {
                "server_id": {
                    "type": "string"
                }
            }
        },
        "bot.botResponse": {
            "type": "object",
            "properties": {
                "avatar": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "owner_id": {
                    "type": "string"
                }
            }
        },
        "bot.botWithToken": {
            "type": "object",
            "properties": {
                "avatar": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "owner_id": {
                    "type": "string"
                },
                "token": {
                    "type": "string"
                }
            }
        },
        "bot.createBotRequest": {
            "type": "object",
            "properties": {
                "description": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "bot.createCommandRequest": {
            "type": "object",
            "properties": {
                "description": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "options": {},
                "server_id": {
                    "type": "string"
                }
            }
        },
        "bot.slashCommandResponse": {
            "type": "object",
            "properties": {
                "bot_id": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "options": {},
                "server_id": {
                    "type": "string"
                }
            }
        },
        "bot.updateBotRequest": {
            "type": "object",
            "properties": {
                "avatar": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "channel.channelResponse": {
            "type": "object",
            "properties": {
                "category": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "position": {
                    "type": "integer"
                },
                "server_id": {
                    "type": "string"
                },
                "type": {
                    "type": "string"
                }
            }
        },
        "channel.createChannelRequest": {
            "type": "object",
            "properties": {
                "category": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "position": {
                    "type": "integer"
                },
                "server_id": {
                    "type": "string"
                },
                "type": {
                    "type": "string"
                }
            }
        },
        "channel.updateChannelRequest": {
            "type": "object",
            "properties": {
                "category": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "position": {
                    "type": "integer"
                },
                "type": {
                    "type": "string"
                }
            }
        },
        "invite.createInviteRequest": {
            "type": "object",
            "properties": {
                "expires_hours": {
                    "type": "integer"
                },
                "max_uses": {
                    "type": "integer"
                }
            }
        },
        "invite.inviteResponse": {
            "type": "object",
            "properties": {
                "code": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "creator_id": {
                    "type": "string"
                },
                "expires_at": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "max_uses": {
                    "type": "integer"
                },
                "server_id": {
                    "type": "string"
                },
                "server_name": {
                    "type": "string"
                },
                "use_count": {
                    "type": "integer"
                }
            }
        },
        "message.createMessageRequest": {
            "type": "object",
            "properties": {
                "content": {
                    "type": "string"
                },
                "reply_to": {
                    "type": "string"
                }
            }
        },
        "message.messageResponse": {
            "type": "object",
            "properties": {
                "author_display_name": {
                    "type": "string"
                },
                "author_id": {
                    "type": "string"
                },
                "author_username": {
                    "type": "string"
                },
                "channel_id": {
                    "type": "string"
                },
                "content": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "edited_at": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                }
            }
        },
        "message.updateMessageRequest": {
            "type": "object",
            "properties": {
                "content": {
                    "type": "string"
                }
            }
        },
        "reaction.addReactionRequest": {
            "type": "object",
            "properties": {
                "emoji": {
                    "type": "string"
                }
            }
        },
        "reaction.emojiGroup": {
            "type": "object",
            "properties": {
                "count": {
                    "type": "integer"
                },
                "details": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/reaction.reactionResponse"
                    }
                },
                "emoji": {
                    "type": "string"
                },
                "users": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "reaction.reactionResponse": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "emoji": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "message_id": {
                    "type": "string"
                },
                "user_id": {
                    "type": "string"
                }
            }
        },
        "server.createServerRequest": {
            "type": "object",
            "properties": {
                "icon": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "server.serverResponse": {
            "type": "object",
            "properties": {
                "icon": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "owner_id": {
                    "type": "string"
                }
            }
        },
        "server.updateServerRequest": {
            "type": "object",
            "properties": {
                "icon": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "voice.tokenRequest": {
            "type": "object",
            "properties": {
                "room_name": {
                    "type": "string"
                }
            }
        },
        "voice.tokenResponse": {
            "type": "object",
            "properties": {
                "livekit_url": {
                    "type": "string"
                },
                "token": {
                    "type": "string"
                }
            }
        },
        "webhook.createWebhookRequest": {
            "type": "object",
            "properties": {
                "avatar": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "webhook.executeWebhookRequest": {
            "type": "object",
            "properties": {
                "avatar": {
                    "type": "string"
                },
                "content": {
                    "type": "string"
                },
                "username": {
                    "type": "string"
                }
            }
        },
        "webhook.webhookResponse": {
            "type": "object",
            "properties": {
                "avatar": {
                    "type": "string"
                },
                "channel_id": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "webhook.webhookWithToken": {
            "type": "object",
            "properties": {
                "avatar": {
                    "type": "string"
                },
                "channel_id": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "created_by": {
                    "type": "string"
                },
                "id": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "token": {
                    "type": "string"
                }
            }
        }
    },
    "securityDefinitions": {
        "SessionAuth": {
            "type": "apiKey",
            "name": "dumpster_session",
            "in": "cookie"
        }
    }
}